diff --git a/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc b/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc index 41404b2a7db1..77b22a4ba7b3 100644 --- a/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc +++ b/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc @@ -220,12 +220,7 @@ SkPath RoundedRectToSkiaPath( const math::RectF& rect, const render_tree::RoundedCorners& rounded_corners) { SkPath path; -#ifdef USE_SKIA_NEXT path.addRRect(RoundedRectToSkia(rect, rounded_corners), SkPathDirection::kCW); -#else - path.addRRect(RoundedRectToSkia(rect, rounded_corners), - SkPath::kCW_Direction); -#endif return path; } diff --git a/cobalt/renderer/rasterizer/skia/skia/skia_sources.gni b/cobalt/renderer/rasterizer/skia/skia/skia_sources.gni index 23b52894ff93..52357771326b 100644 --- a/cobalt/renderer/rasterizer/skia/skia/skia_sources.gni +++ b/cobalt/renderer/rasterizer/skia/skia/skia_sources.gni @@ -51,13 +51,6 @@ shared_sources = [ "//third_party/$skia_subdir/src/sfnt/SkOTUtils.cpp", ] -if (!use_skia_next) { - shared_sources += [ - "//third_party/$skia_subdir/src/codec/SkGifCodec.cpp", - "//third_party/$skia_subdir/third_party/gif/SkGifImageReader.cpp", - ] -} - # from "core.gni" combined_sources += shared_sources combined_sources += skia_core_sources @@ -67,8 +60,8 @@ combined_sources += skia_effects_imagefilter_sources # from "gpu.gni" combined_sources += skia_gpu_sources +combined_sources += skia_gl_gpu_sources if (use_skia_next) { - combined_sources += skia_gl_gpu_sources combined_sources += skia_shared_gpu_sources } @@ -118,12 +111,6 @@ combined_sources -= [ # Exclude unused skia files which only exist in m79. if (!use_skia_next) { combined_sources -= [ - # core - "//third_party/$skia_subdir/src/core/SkMultiPictureDraw.cpp", - - # gpu - "//third_party/$skia_subdir/src/gpu/gl/GrGLMakeNativeInterface_none.cpp", - # utils bitmap "//third_party/$skia_subdir/src/utils/SkFrontBufferedStream.cpp", "//third_party/$skia_subdir/src/utils/SkInterpolator.cpp", diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes-expected.png.sha1 b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes-expected.png.sha1 index 96e3c20cf29c..171dd321f1be 100644 --- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes-expected.png.sha1 +++ b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-3d-2planes-expected.png.sha1 @@ -1 +1 @@ -de01c5b4870be2df6d53b46b8d92a749057eb5c8 +52e5ca2342411570fb3233a943b4a61c9137fc96 diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode-expected.png.sha1 b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode-expected.png.sha1 index a0a65d50cb2f..e7f2ec11a91e 100644 --- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode-expected.png.sha1 +++ b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-matte-blendmode-expected.png.sha1 @@ -1 +1 @@ -8fc055a06bdf06b4b815914f74d7bec7fd20cbc8 +376fcdde4e7b512310b55715c551381a720e9dfc diff --git a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect-expected.png.sha1 b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect-expected.png.sha1 index 1818a97491e6..c8d2c65da7ca 100644 --- a/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect-expected.png.sha1 +++ b/cobalt/renderer/rasterizer/testdata/lottie_coverage/skottie-shift-channels-effect-expected.png.sha1 @@ -1 +1 @@ -e328a8d479ff37f6e26d1c5e8e0037fe064d2eae +ccb0f7046c64660be06ac4148bc0d4476becc3f5 diff --git a/third_party/skia/AUTHORS b/third_party/skia/AUTHORS old mode 100644 new mode 100755 index 80776a6afc69..c7641d236938 --- a/third_party/skia/AUTHORS +++ b/third_party/skia/AUTHORS @@ -16,7 +16,9 @@ ACCESS CO., LTD. <*@access-company.com> Amazon, Inc <*@amazon.com> Anthony Catel ARM <*@arm.com> +Bharat Ahuja Dawson Coleman +Deepak Mohan Ehsan Akhgari Facebook, Inc. <*fb.com> George Wright diff --git a/third_party/skia/BUILD.gn b/third_party/skia/BUILD.gn index 845489636887..6974d00e9745 100644 --- a/third_party/skia/BUILD.gn +++ b/third_party/skia/BUILD.gn @@ -6,9 +6,13 @@ import("gn/flutter_defines.gni") import("gn/fuchsia_defines.gni") import("gn/shared_sources.gni") - import("gn/skia.gni") +if (is_fuchsia) { + import("//build/fuchsia/sdk.gni") + import("build/fuchsia/fuchsia_download_sdk.gni") +} + if (skia_use_dawn) { import("third_party/externals/dawn/scripts/dawn_features.gni") } @@ -205,6 +209,9 @@ template("optional") { if (defined(invoker.public_configs)) { configs = invoker.public_configs } + if (defined(invoker.public_include_dirs)) { + include_dirs = invoker.public_include_dirs + } } source_set(target_name) { forward_variables_from(invoker, @@ -314,9 +321,11 @@ optional("fontmgr_fuchsia") { deps = [] if (is_fuchsia && using_fuchsia_sdk) { - deps += [ "$fuchsia_sdk_root/fidl:fuchsia.fonts" ] + deps += [ "//build/fuchsia/fidl:fuchsia.fonts" ] } else { - deps += [ "//sdk/fidl/fuchsia.fonts" ] + deps = [ + "//sdk/fidl/fuchsia.fonts", + ] } sources = [ "src/ports/SkFontMgr_fuchsia.cpp", @@ -497,7 +506,7 @@ optional("gpu") { if (skia_generate_workarounds) { deps += [ ":workaround_list" ] } - public_defines = [ "SK_GL" ] + public_defines = [] public_configs = [] public_deps = [] @@ -512,9 +521,6 @@ optional("gpu") { sources += [ "src/gpu/GrPathRendering_none.cpp" ] } - # These paths need to be absolute to match the ones produced by shared_sources.gni. - sources -= get_path_info([ "src/gpu/gl/GrGLMakeNativeInterface_none.cpp" ], - "abspath") libs = [] if (is_android) { sources += [ "src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp" ] @@ -542,6 +548,10 @@ optional("gpu") { sources += [ "src/gpu/gl/GrGLMakeNativeInterface_none.cpp" ] } + if (skia_use_gl) { + public_defines += [ "SK_GL" ] + sources += skia_gl_gpu_sources + } if (skia_use_vulkan) { public_defines += [ "SK_VULKAN" ] deps += [ "third_party/vulkanmemoryallocator" ] @@ -561,10 +571,10 @@ optional("gpu") { if (skia_use_dawn) { public_defines += [ "SK_DAWN" ] sources += skia_dawn_sources - public_deps += [ - "//third_party/dawn:dawn_headers", + public_deps += [ "//third_party/dawn:dawn_headers" ] + deps += [ "//third_party/dawn:dawncpp", - "//third_party/dawn:libdawn_native_sources", + "//third_party/dawn:libdawn_native", "//third_party/dawn:libdawn_proc", ] if (dawn_enable_d3d12) { @@ -583,6 +593,7 @@ optional("gpu") { public_defines += [ "SK_METAL" ] sources += skia_metal_sources libs += [ "Metal.framework" ] + libs += [ "MetalKit.framework" ] libs += [ "Foundation.framework" ] cflags_objcc += [ "-fobjc-arc" ] } @@ -597,11 +608,23 @@ optional("gpu") { } optional("gif") { - enabled = !skia_use_wuffs - sources = [ - "src/codec/SkGifCodec.cpp", - "third_party/gif/SkGifImageReader.cpp", - ] + enabled = !skia_use_wuffs && skia_use_libgifcodec + _libgifcodec_gni_path = "third_party/externals/libgifcodec/libgifcodec.gni" + if ("True" == + exec_script("gn/checkpath.py", + [ rebase_path(_libgifcodec_gni_path, root_build_dir) ], + "trim string")) { + public_defines = [ "SK_USE_LIBGIFCODEC" ] + public_include_dirs = [ + ".", + skia_libgifcodec_path, + ] + include_dirs = public_include_dirs + import(_libgifcodec_gni_path) + sources = rebase_path(libgifcodec_sources + libgifcodec_public, + ".", + skia_libgifcodec_path) + } } optional("heif") { @@ -763,9 +786,18 @@ optional("sksl_interpreter") { public_defines = [ "SK_ENABLE_SKSL_INTERPRETER" ] } +config("vtune_includes") { + include_dirs = [ "$skia_vtune_path/include" ] +} optional("skvm_jit") { enabled = skia_enable_skvm_jit public_defines = [ "SKVM_JIT" ] + + if (skia_vtune_path != "") { + public_defines += [ "SKVM_JIT_VTUNE" ] + public_configs = [ ":vtune_includes" ] + libs = [ "$skia_vtune_path/lib64/libjitprofiling.a" ] + } } if (skia_enable_gpu && skia_generate_workarounds) { @@ -889,7 +921,6 @@ component("skia") { "src/ports/SkOSFile_stdio.cpp", "src/sfnt/SkOTTable_name.cpp", "src/sfnt/SkOTUtils.cpp", - "src/utils/mac/SkStream_mac.cpp", ] defines = [] @@ -1045,6 +1076,7 @@ static_library("pathkit") { "src/core/SkEdgeClipper.cpp", "src/core/SkGeometry.cpp", "src/core/SkLineClipper.cpp", + "src/core/SkMalloc.cpp", "src/core/SkMallocPixelRef.cpp", "src/core/SkMath.cpp", "src/core/SkMatrix.cpp", @@ -1160,8 +1192,6 @@ if (skia_enable_tools) { } config("our_vulkan_headers") { - # We add this directory to simulate the client already have - # vulkan/vulkan_core.h on their path. include_dirs = [ "include/third_party/vulkan" ] } @@ -1283,13 +1313,20 @@ if (skia_enable_tools) { "tools/gpu/MemoryCache.h", "tools/gpu/ProxyUtils.cpp", "tools/gpu/TestContext.cpp", + "tools/gpu/TestOps.cpp", + "tools/gpu/TestOps.h", "tools/gpu/YUVUtils.cpp", "tools/gpu/YUVUtils.h", - "tools/gpu/atlastext/GLTestAtlasTextRenderer.cpp", - "tools/gpu/gl/GLTestContext.cpp", - "tools/gpu/gl/command_buffer/GLTestContext_command_buffer.cpp", "tools/gpu/mock/MockTestContext.cpp", ] + if (skia_use_gl) { + sources += [ + "tools/gpu/atlastext/GLTestAtlasTextRenderer.cpp", + "tools/gpu/gl/GLTestContext.cpp", + "tools/gpu/gl/command_buffer/GLTestContext_command_buffer.cpp", + ] + } + libs = [] if (is_android || skia_use_egl) { @@ -1311,6 +1348,9 @@ if (skia_enable_tools) { if (target_cpu != "arm64") { libs += [ "OpenGL32.lib" ] } + } else if (is_fuchsia && using_fuchsia_sdk) { + libs += + [ "${fuchsia_sdk_path}/arch/${target_cpu}/sysroot/lib/libzircon.so" ] } cflags_objcc = [ "-fobjc-arc" ] @@ -1331,7 +1371,7 @@ if (skia_enable_tools) { public_deps += [ "//third_party/dawn:dawn_headers" ] sources += [ "tools/gpu/dawn/DawnTestContext.cpp" ] } - } + } # test_lib("gpu_tool_utils") test_lib("flags") { sources = [ @@ -1479,6 +1519,9 @@ if (skia_enable_tools) { import("gn/gm.gni") test_lib("gm") { sources = gm_sources + if (skia_use_gl) { + sources += gl_gm_sources + } deps = [ ":etc1", ":flags", @@ -1515,6 +1558,10 @@ if (skia_enable_tools) { sources = tests_sources + pathops_tests_sources if (skia_use_metal) { sources += metal_tests_sources + cflags_objcc = [ "-fobjc-arc" ] + } + if (skia_use_gl) { + sources += gl_tests_sources } if (!skia_enable_fontmgr_android) { sources -= [ "//tests/FontMgrAndroidParserTest.cpp" ] @@ -1702,6 +1749,7 @@ if (skia_enable_tools) { } test_app("fm") { sources = [ + "dm/DMGpuTestProcs.cpp", # blech "tools/fm/fm.cpp", ] deps = [ @@ -1713,6 +1761,7 @@ if (skia_enable_tools) { ":gpu_tool_utils", ":hash_and_encode", ":skia", + ":tests", ":tool_utils", ":trace", "modules/skottie", @@ -1758,6 +1807,17 @@ if (skia_enable_tools) { } } + if (!is_win) { + test_app("blob_cache_sim") { + sources = [ + "tools/blob_cache_sim.cpp", + ] + deps = [ + ":skia", + ] + } + } + test_app("nanobench") { sources = [ "bench/nanobench.cpp", @@ -1913,6 +1973,7 @@ if (skia_enable_tools) { "fuzz/FuzzPathop.cpp", "fuzz/FuzzPolyUtils.cpp", "fuzz/FuzzRegionOp.cpp", + "fuzz/FuzzSkDescriptor.cpp", "fuzz/oss_fuzz/FuzzAndroidCodec.cpp", "fuzz/oss_fuzz/FuzzAnimatedImage.cpp", "fuzz/oss_fuzz/FuzzImage.cpp", @@ -1926,6 +1987,7 @@ if (skia_enable_tools) { "fuzz/oss_fuzz/FuzzSKSL2Metal.cpp", "fuzz/oss_fuzz/FuzzSKSL2Pipeline.cpp", "fuzz/oss_fuzz/FuzzSKSL2SPIRV.cpp", + "fuzz/oss_fuzz/FuzzSkDescriptorDeserialize.cpp", "fuzz/oss_fuzz/FuzzTextBlobDeserialize.cpp", "tools/UrlDataManager.cpp", "tools/debugger/DebugCanvas.cpp", @@ -1988,7 +2050,13 @@ if (skia_enable_tools) { } if (!is_win) { - test_lib("skqp_lib") { + source_set("skqp_lib") { + check_includes = false + testonly = true + if (!is_official_build) { + configs -= [ "//gn:warnings" ] + } + public_configs = [ ":skia_private" ] defines = [ "SK_SKQP_GLOBAL_ERROR_TOLERANCE=$skia_skqp_global_error_tolerance" ] sources = [ @@ -1998,7 +2066,6 @@ if (skia_enable_tools) { ] deps = [ ":gm", - ":gpu_tool_utils", ":skia", ":tests", ":tool_utils", @@ -2008,10 +2075,10 @@ if (skia_enable_tools) { sources = [ "tools/skqp/src/skqp_main.cpp", ] + include_dirs = [ "//" ] + lib_dirs = [] deps = [ - ":skia", ":skqp_lib", - ":tool_utils", ] } test_app("jitter_gms") { @@ -2025,9 +2092,22 @@ if (skia_enable_tools) { ] } } + if (is_fuchsia) { + # Build a package repository for skqp on Fuchsia. + group("skqp_repo") { + testonly = true + deps = [ + "//build/fuchsia/skqp:skqp_repo", + ] + } + } if (is_android) { - test_app("skqp_app") { - is_shared_library = true + shared_library("libskqp_app") { + configs += [ ":skia_private" ] + if (!is_official_build) { + configs -= [ "//gn:warnings" ] + } + testonly = true sources = [ "tools/skqp/src/jni_skqp.cpp", ] @@ -2275,7 +2355,8 @@ if (skia_enable_tools) { } } - if (is_linux || is_mac || is_ios) { + if ((is_linux || is_mac || is_ios) && target_cpu != "mips64el" && + target_cpu != "loongson3a") { test_app("SkiaSDLExample") { sources = [ "example/SkiaSDLExample.cpp", diff --git a/third_party/skia/DEPS b/third_party/skia/DEPS index 49e02b003cf3..06b712f132ec 100644 --- a/third_party/skia/DEPS +++ b/third_party/skia/DEPS @@ -7,15 +7,16 @@ 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@ed6e230ec65e7fe4acff17a00eb85bc3c8459bb5", - "third_party/externals/dawn" : "https://dawn.googlesource.com/dawn.git@fd90d767ba58faedc1fa74363ebcb2eb99159ba1", + "third_party/externals/angle2" : "https://chromium.googlesource.com/angle/angle.git@5f857839b9ece789d3e3881395f898b4a5625b54", + "third_party/externals/dawn" : "https://dawn.googlesource.com/dawn.git@3c086a0c2e1dc3e2e14aaa3d78c052c7e07274b4", "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://android.googlesource.com/platform/external/expat.git@e5aa0a2cb0a5f759ef31c0819dc67d9b14246a4a", - "third_party/externals/freetype" : "https://skia.googlesource.com/third_party/freetype2.git@05439f5cc69eaa3deaf3db52a7999af09a2c293a", + "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@1bada656a86e9cb27d4a6b9fcc50748f0bd9c1d9", "third_party/externals/icu" : "https://chromium.googlesource.com/chromium/deps/icu.git@407b39301e71006b68bd38e770f35d32398a7b14", "third_party/externals/imgui" : "https://skia.googlesource.com/external/github.com/ocornut/imgui.git@d38d7c6628bebd02692cfdd6fa76b4d992a35b75", + "third_party/externals/libgifcodec" : "https://skia.googlesource.com/libgifcodec@ed218be1ba3de964c186ceac8e1e344853530edf", "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", "third_party/externals/libwebp" : "https://chromium.googlesource.com/webm/libwebp.git@0fe1a89dbf1930fc2554dbe76adad5d962054ead", @@ -30,13 +31,13 @@ deps = { "third_party/externals/spirv-cross" : "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross@53ab2144b90abede33be5161aec5dfc94ddc3caf", "third_party/externals/spirv-headers" : "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers.git@29c11140baaf9f7fdaa39a583672c556bf1795a1", "third_party/externals/spirv-tools" : "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git@0c4feb643b89d1792b02f7cbef315e9d95633bd7", - "third_party/externals/swiftshader" : "https://swiftshader.googlesource.com/SwiftShader@6652f0b6428777b5a4a3d191cc30d8b31366b999", + "third_party/externals/swiftshader" : "https://swiftshader.googlesource.com/SwiftShader@dee5b5f3cf3f891122e725a79cc321c400d35a67", #"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", "../src": { - "url": "https://chromium.googlesource.com/chromium/src.git@e27799abf3f02ad676fda1300eb287a63a131c58", + "url": "https://chromium.googlesource.com/chromium/src.git@a25cc4cdcd475cf2a3f9fbb43ab4ffe7abc02955", "condition": "checkout_chromium", }, } diff --git a/third_party/skia/LICENSE b/third_party/skia/LICENSE index fc53e3ec952a..e32636d5668d 100644 --- a/third_party/skia/LICENSE +++ b/third_party/skia/LICENSE @@ -1,29 +1,29 @@ -// Copyright (c) 2011 Google Inc. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright (c) 2011 Google Inc. All rights reserved. --------------------------------------------------------------------------------- +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/third_party/skia/METADATA b/third_party/skia/METADATA index a2e052b8f053..aa791c593286 100644 --- a/third_party/skia/METADATA +++ b/third_party/skia/METADATA @@ -11,7 +11,8 @@ third_party { type: GIT value: "https://chromium.googlesource.com/skia" } - version: "2542bdfcd686c7bfa9f687d80627f8ef468b2838" + version: "a91f9f612e5eeb93cf40a3c0ce7d7c6ddf838feb" + # from https://chromium.googlesource.com/chromium/src/+/80.0.3987.162/DEPS#176 last_upgrade_date { year: 2019 month: 10 diff --git a/third_party/skia/PRESUBMIT.py b/third_party/skia/PRESUBMIT.py index 681c0e1b87ea..305065d79081 100644 --- a/third_party/skia/PRESUBMIT.py +++ b/third_party/skia/PRESUBMIT.py @@ -21,11 +21,8 @@ REVERT_CL_SUBJECT_PREFIX = 'Revert ' -SKIA_TREE_STATUS_URL = 'http://skia-tree-status.appspot.com' - # Please add the complete email address here (and not just 'xyz@' or 'xyz'). PUBLIC_API_OWNERS = ( - 'mtklein@chromium.org', 'mtklein@google.com', 'reed@chromium.org', 'reed@google.com', @@ -40,7 +37,7 @@ AUTHORS_FILE_NAME = 'AUTHORS' RELEASE_NOTES_FILE_NAME = 'RELEASE_NOTES.txt' -DOCS_PREVIEW_URL = 'https://skia.org/?cl=' +DOCS_PREVIEW_URL = 'https://skia.org/?cl={issue}' GOLD_TRYBOT_URL = 'https://gold.skia.org/search?issue=' SERVICE_ACCOUNT_SUFFIX = [ @@ -50,11 +47,11 @@ def _CheckChangeHasEol(input_api, output_api, source_file_filter=None): - """Checks that files end with atleast one \n (LF).""" + """Checks that files end with at least one \n (LF).""" eof_files = [] for f in input_api.AffectedSourceFiles(source_file_filter): contents = input_api.ReadFile(f, 'rb') - # Check that the file ends in atleast one newline character. + # Check that the file ends in at least one newline character. if len(contents) > 1 and contents[-1:] != '\n': eof_files.append(f.LocalPath()) @@ -147,17 +144,6 @@ def _CopyrightChecks(input_api, output_api, source_file_filter=None): return results -def _ToolFlags(input_api, output_api): - """Make sure `{dm,nanobench}_flags.py test` passes if modified.""" - results = [] - sources = lambda x: ('dm_flags.py' in x.LocalPath() or - 'nanobench_flags.py' in x.LocalPath()) - for f in input_api.AffectedSourceFiles(sources): - if 0 != subprocess.call(['python', f.LocalPath(), 'test']): - results.append(output_api.PresubmitError('`python %s test` failed' % f)) - return results - - def _InfraTests(input_api, output_api): """Run the infra tests.""" results = [] @@ -176,18 +162,30 @@ def _InfraTests(input_api, output_api): def _CheckGNFormatted(input_api, output_api): """Make sure any .gn files we're changing have been formatted.""" - results = [] + files = [] for f in input_api.AffectedFiles(): - if (not f.LocalPath().endswith('.gn') and - not f.LocalPath().endswith('.gni')): - continue + if (f.LocalPath().endswith('.gn') or + f.LocalPath().endswith('.gni')): + files.append(f) + if not files: + return [] + + cmd = ['python', os.path.join('bin', 'fetch-gn')] + try: + subprocess.check_output(cmd) + except subprocess.CalledProcessError as e: + return [output_api.PresubmitError( + '`%s` failed:\n%s' % (' '.join(cmd), e.output))] - gn = 'gn.bat' if 'win32' in sys.platform else 'gn' + results = [] + for f in files: + gn = 'gn.exe' if 'win32' in sys.platform else 'gn' + gn = os.path.join(input_api.PresubmitLocalPath(), 'bin', gn) cmd = [gn, 'format', '--dry-run', f.LocalPath()] try: subprocess.check_output(cmd) except subprocess.CalledProcessError: - fix = 'gn format ' + f.LocalPath() + fix = 'bin/gn format ' + f.LocalPath() results.append(output_api.PresubmitError( '`%s` failed, try\n\t%s' % (' '.join(cmd), fix))) return results @@ -280,7 +278,6 @@ def _CommonChecks(input_api, output_api): results.extend(_IfDefChecks(input_api, output_api)) results.extend(_CopyrightChecks(input_api, output_api, source_file_filter=sources)) - results.extend(_ToolFlags(input_api, output_api)) results.extend(_CheckCompileIsolate(input_api, output_api)) results.extend(_CheckDEPSValid(input_api, output_api)) results.extend(_CheckIncludesFormatted(input_api, output_api)) @@ -288,11 +285,7 @@ def _CommonChecks(input_api, output_api): def CheckChangeOnUpload(input_api, output_api): - """Presubmit checks for the change on upload. - - The following are the presubmit checks: - * Check change has one and only one EOL. - """ + """Presubmit checks for the change on upload.""" results = [] results.extend(_CommonChecks(input_api, output_api)) # Run on upload, not commit, since the presubmit bot apparently doesn't have @@ -304,44 +297,6 @@ def CheckChangeOnUpload(input_api, output_api): return results -def _CheckTreeStatus(input_api, output_api, json_url): - """Check whether to allow commit. - - Args: - input_api: input related apis. - output_api: output related apis. - json_url: url to download json style status. - """ - tree_status_results = input_api.canned_checks.CheckTreeIsOpen( - input_api, output_api, json_url=json_url) - if not tree_status_results: - # Check for caution state only if tree is not closed. - connection = input_api.urllib2.urlopen(json_url) - status = input_api.json.loads(connection.read()) - connection.close() - if ('caution' in status['message'].lower() and - os.isatty(sys.stdout.fileno())): - # Display a prompt only if we are in an interactive shell. Without this - # check the commit queue behaves incorrectly because it considers - # prompts to be failures. - short_text = 'Tree state is: ' + status['general_state'] - long_text = status['message'] + '\n' + json_url - tree_status_results.append( - output_api.PresubmitPromptWarning( - message=short_text, long_text=long_text)) - else: - # Tree status is closed. Put in message about contacting sheriff. - connection = input_api.urllib2.urlopen( - SKIA_TREE_STATUS_URL + '/current-sheriff') - sheriff_details = input_api.json.loads(connection.read()) - if sheriff_details: - tree_status_results[0]._message += ( - '\n\nPlease contact the current Skia sheriff (%s) if you are trying ' - 'to submit a build fix\nand do not know how to submit because the ' - 'tree is closed') % sheriff_details['username'] - return tree_status_results - - class CodeReview(object): """Abstracts which codereview tool is used for the specified issue.""" @@ -358,10 +313,6 @@ def GetSubject(self): def GetDescription(self): return self._gerrit.GetChangeDescription(self._issue) - def IsDryRun(self): - return self._gerrit.GetChangeInfo( - self._issue)['labels']['Commit-Queue'].get('value', 0) == 1 - def GetReviewers(self): code_review_label = ( self._gerrit.GetChangeInfo(self._issue)['labels']['Code-Review']) @@ -468,11 +419,6 @@ def _CheckLGTMsForPublicAPI(input_api, output_api): # It is a revert CL, ignore the public api owners check. return results - if cr.IsDryRun(): - # Ignore public api owners check for dry run CLs since they are not - # going to be committed. - return results - if input_api.gerrit: for reviewer in cr.GetReviewers(): if reviewer in PUBLIC_API_OWNERS: @@ -512,91 +458,74 @@ def _CheckLGTMsForPublicAPI(input_api, output_api): return results -def _FooterExists(footers, key, value): - for k, v in footers: - if k == key and v == value: - return True - return False - - -def PostUploadHook(cl, change, output_api): +def PostUploadHook(gerrit, change, output_api): """git cl upload will call this hook after the issue is created/modified. This hook does the following: * Adds a link to preview docs changes if there are any docs changes in the CL. * Adds 'No-Try: true' if the CL contains only docs changes. """ + if not change.issue: + return [] + + # Skip PostUploadHooks for all auto-commit service account bots. New + # patchsets (caused due to PostUploadHooks) invalidates the CQ+2 vote from + # the "--use-commit-queue" flag to "git cl upload". + for suffix in SERVICE_ACCOUNT_SUFFIX: + if change.author_email.endswith(suffix): + return [] results = [] - atleast_one_docs_change = False + at_least_one_docs_change = False all_docs_changes = True for affected_file in change.AffectedFiles(): affected_file_path = affected_file.LocalPath() file_path, _ = os.path.splitext(affected_file_path) if 'site' == file_path.split(os.path.sep)[0]: - atleast_one_docs_change = True + at_least_one_docs_change = True else: all_docs_changes = False - if atleast_one_docs_change and not all_docs_changes: + if at_least_one_docs_change and not all_docs_changes: break - issue = cl.issue - if issue: - # Skip PostUploadHooks for all auto-commit service account bots. New - # patchsets (caused due to PostUploadHooks) invalidates the CQ+2 vote from - # the "--use-commit-queue" flag to "git cl upload". - for suffix in SERVICE_ACCOUNT_SUFFIX: - if cl.GetIssueOwner().endswith(suffix): - return results + footers = change.GitFootersFromDescription() + description_changed = False - original_description_lines, footers = cl.GetDescriptionFooters() - new_description_lines = list(original_description_lines) - - # If the change includes only doc changes then add No-Try: true in the - # CL's description if it does not exist yet. - if all_docs_changes and not _FooterExists(footers, 'No-Try', 'true'): - new_description_lines.append('No-Try: true') - results.append( - output_api.PresubmitNotifyResult( - 'This change has only doc changes. Automatically added ' - '\'No-Try: true\' to the CL\'s description')) - - # If there is atleast one docs change then add preview link in the CL's - # description if it does not already exist there. - docs_preview_link = '%s%s' % (DOCS_PREVIEW_URL, issue) - docs_preview_line = 'Docs-Preview: %s' % docs_preview_link - if (atleast_one_docs_change and - not _FooterExists(footers, 'Docs-Preview', docs_preview_link)): - # Automatically add a link to where the docs can be previewed. - new_description_lines.append(docs_preview_line) - results.append( - output_api.PresubmitNotifyResult( - 'Automatically added a link to preview the docs changes to the ' - 'CL\'s description')) - - # If the description has changed update it. - if new_description_lines != original_description_lines: - # Add a new line separating the new contents from the old contents. - new_description_lines.insert(len(original_description_lines), '') - cl.UpdateDescriptionFooters(new_description_lines, footers) + # If the change includes only doc changes then add No-Try: true in the + # CL's description if it does not exist yet. + if all_docs_changes and 'true' not in footers.get('No-Try', []): + description_changed = True + change.AddDescriptionFooter('No-Try', 'true') + results.append( + output_api.PresubmitNotifyResult( + 'This change has only doc changes. Automatically added ' + '\'No-Try: true\' to the CL\'s description')) + + # If there is at least one docs change then add preview link in the CL's + # description if it does not already exist there. + docs_preview_link = DOCS_PREVIEW_URL.format(issue=change.issue) + if (at_least_one_docs_change + and docs_preview_link not in footers.get('Docs-Preview', [])): + # Automatically add a link to where the docs can be previewed. + description_changed = True + change.AddDescriptionFooter('Docs-Preview', docs_preview_link) + results.append( + output_api.PresubmitNotifyResult( + 'Automatically added a link to preview the docs changes to the ' + 'CL\'s description')) - return results + # If the description has changed update it. + if description_changed: + gerrit.UpdateDescription( + change.FullDescriptionText(), change.issue) + + return results def CheckChangeOnCommit(input_api, output_api): - """Presubmit checks for the change on commit. - - The following are the presubmit checks: - * Check change has one and only one EOL. - * Ensures that the Skia tree is open in - http://skia-tree-status.appspot.com/. Shows a warning if it is in 'Caution' - state and an error if it is in 'Closed' state. - """ + """Presubmit checks for the change on commit.""" results = [] results.extend(_CommonChecks(input_api, output_api)) - results.extend( - _CheckTreeStatus(input_api, output_api, json_url=( - SKIA_TREE_STATUS_URL + '/banner-status?format=json'))) results.extend(_CheckLGTMsForPublicAPI(input_api, output_api)) results.extend(_CheckOwnerIsInAuthorsFile(input_api, output_api)) # Checks for the presence of 'DO NOT''SUBMIT' in CL description and in diff --git a/third_party/skia/RELEASE_NOTES.txt b/third_party/skia/RELEASE_NOTES.txt index b993745e0147..a1d443eb3701 100644 --- a/third_party/skia/RELEASE_NOTES.txt +++ b/third_party/skia/RELEASE_NOTES.txt @@ -4,9 +4,43 @@ This file includes a list of high level updates for each milestone release. * * * -Milestone 79 +Milestone 80 + + + * Removed SkSize& SkSize::operator=(const SkISize&) + https://review.skia.org/257880 + + * SkISize width() and height() now constexpr + https://review.skia.org/257680 + + * Added SkMatrix::MakeTrans(SkVector) and SkRect::makeOffset(SkVector). + https://review.skia.org/255782 + + * Added SkImageInfo::MakeA8(SkISize) and added optional color space parameter to + SkImageInfo::MakeN32Premul(SkISize). + + * Added dimensions() and getFrameCount() to SkAnimatedImage + https://review.skia.org/253542 + + * Removed SkMatrix44 version of toXYZD50 from SkColorSpace. Switched to skcms types in + transferFn, invTrasnferFn, and gamutTransformTo functions. + https://review.skia.org/252596 + + * Removed rotation and YUV support from SkColorMatrix + https://review.skia.org/252188 + + * Added kBT2020_SkYUVColorSpace. This is BT.2020's YCbCr conversion (non-constant-luminance). + https://review.skia.org/252160 + + * Remove old async read pixels APIs + https://review.skia.org/251198 - [Insert new notes here.] + * Expose SkBlendModeCoeff and SkBlendMode_AsCoeff for Porter-Duff blend modes. + https://review.skia.org/252600 + +* * * + +Milestone 79 * SkTextBlob::Iter to discover the glyph indices and typefaces in each run https://skia-review.googlesource.com/246296 @@ -72,9 +106,6 @@ Milestone 79 Milestone 78 - * Added RELEASE_NOTES.txt file - https://review.skia.org/229760 - * SkDrawLooper is no longer supported in SkPaint or SkCanvas. https://review.skia.org/230579 https://review.skia.org/231736 @@ -152,3 +183,6 @@ Milestone 78 https://review.skia.org/238856 * Use GL_QCOM_TILED_RENDERING to explicitly discard stencil + + * Added RELEASE_NOTES.txt file + https://review.skia.org/229760 diff --git a/third_party/skia/bench/AAClipBench.cpp b/third_party/skia/bench/AAClipBench.cpp index abd7ec597c58..57af3be262ee 100644 --- a/third_party/skia/bench/AAClipBench.cpp +++ b/third_party/skia/bench/AAClipBench.cpp @@ -219,7 +219,7 @@ class AAClipRegionBench : public Benchmark { path.addCircle(0, 0, SkIntToScalar(200)); path.addCircle(0, 0, SkIntToScalar(180)); // evenodd means we've constructed basically a stroked circle - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); SkIRect bounds; path.getBounds().roundOut(&bounds); diff --git a/third_party/skia/bench/BlurRectsBench.cpp b/third_party/skia/bench/BlurRectsBench.cpp index ed2b254e5687..df1775c5cdf1 100644 --- a/third_party/skia/bench/BlurRectsBench.cpp +++ b/third_party/skia/bench/BlurRectsBench.cpp @@ -34,8 +34,8 @@ class BlurRectsBench : public Benchmark { paint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, fRadius)); SkPath path; - path.addRect(fOuter, SkPath::kCW_Direction); - path.addRect(fInner, SkPath::kCW_Direction); + path.addRect(fOuter, SkPathDirection::kCW); + path.addRect(fInner, SkPathDirection::kCW); for (int i = 0; i < loops; i++) { canvas->drawPath(path, paint); diff --git a/third_party/skia/bench/BulkRectBench.cpp b/third_party/skia/bench/BulkRectBench.cpp new file mode 100644 index 000000000000..c4a401f16f8a --- /dev/null +++ b/third_party/skia/bench/BulkRectBench.cpp @@ -0,0 +1,271 @@ +/* + * 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 "bench/Benchmark.h" +#include "include/core/SkCanvas.h" +#include "include/core/SkImage.h" +#include "include/core/SkPaint.h" +#include "include/gpu/GrContext.h" +#include "include/utils/SkRandom.h" + +#include "src/gpu/GrClip.h" +#include "src/gpu/GrRenderTargetContext.h" +#include "src/gpu/SkGr.h" + +// Benchmarks that exercise the bulk image and solid color quad APIs, under a variety of patterns: +enum class ImageMode { + kShared, // 1. One shared image referenced by every rectangle + kUnique, // 2. Unique image for every rectangle + kNone // 3. No image, solid color shading per rectangle +}; +// X +enum class DrawMode { + kBatch, // Bulk API submission, one call to draw every rectangle + kRef, // One standard SkCanvas draw call per rectangle + kQuad // One experimental draw call per rectangle, only for solid color draws +}; +// X +enum class RectangleLayout { + kRandom, // Random overlapping rectangles + kGrid // Small, non-overlapping rectangles in a grid covering the output surface +}; + +// Benchmark runner that can be configured by template arguments. +template +class BulkRectBench : public Benchmark { +public: + static_assert(kImageMode == ImageMode::kNone || kDrawMode != DrawMode::kQuad, + "kQuad only supported for solid color draws"); + + static constexpr int kWidth = 1024; + static constexpr int kHeight = 1024; + + // There will either be 0 images, 1 image, or 1 image per rect + static constexpr int kImageCount = kImageMode == ImageMode::kShared ? + 1 : (kImageMode == ImageMode::kNone ? 0 : kRectCount); + + bool isSuitableFor(Backend backend) override { + if (kDrawMode == DrawMode::kBatch && kImageMode == ImageMode::kNone) { + // Currently the bulk color quad API is only available on GrRenderTargetContext + return backend == kGPU_Backend; + } else { + return this->INHERITED::isSuitableFor(backend); + } + } + +protected: + SkRect fRects[kRectCount]; + sk_sp fImages[kImageCount]; + SkColor4f fColors[kRectCount]; + SkString fName; + + void computeName() { + fName = "bulkrect"; + fName.appendf("_%d", kRectCount); + if (kLayout == RectangleLayout::kRandom) { + fName.append("_random"); + } else { + fName.append("_grid"); + } + if (kImageMode == ImageMode::kShared) { + fName.append("_sharedimage"); + } else if (kImageMode == ImageMode::kUnique) { + fName.append("_uniqueimages"); + } else { + fName.append("_solidcolor"); + } + if (kDrawMode == DrawMode::kBatch) { + fName.append("_batch"); + } else if (kDrawMode == DrawMode::kRef) { + fName.append("_ref"); + } else { + fName.append("_quad"); + } + } + + void drawImagesBatch(SkCanvas* canvas) const { + SkASSERT(kImageMode != ImageMode::kNone); + SkASSERT(kDrawMode == DrawMode::kBatch); + + SkCanvas::ImageSetEntry batch[kRectCount]; + for (int i = 0; i < kRectCount; ++i) { + int imageIndex = kImageMode == ImageMode::kShared ? 0 : i; + batch[i].fImage = fImages[imageIndex]; + batch[i].fSrcRect = SkRect::MakeIWH(fImages[imageIndex]->width(), + fImages[imageIndex]->height()); + batch[i].fDstRect = fRects[i]; + batch[i].fAAFlags = SkCanvas::kAll_QuadAAFlags; + } + + SkPaint paint; + paint.setAntiAlias(true); + paint.setFilterQuality(kLow_SkFilterQuality); + + canvas->experimental_DrawEdgeAAImageSet(batch, kRectCount, nullptr, nullptr, &paint, + SkCanvas::kFast_SrcRectConstraint); + } + + void drawImagesRef(SkCanvas* canvas) const { + SkASSERT(kImageMode != ImageMode::kNone); + SkASSERT(kDrawMode == DrawMode::kRef); + + SkPaint paint; + paint.setAntiAlias(true); + paint.setFilterQuality(kLow_SkFilterQuality); + + for (int i = 0; i < kRectCount; ++i) { + int imageIndex = kImageMode == ImageMode::kShared ? 0 : i; + SkIRect srcRect = SkIRect::MakeWH(fImages[imageIndex]->width(), + fImages[imageIndex]->height()); + canvas->drawImageRect(fImages[imageIndex].get(), srcRect, fRects[i], &paint, + SkCanvas::kFast_SrcRectConstraint); + } + } + + void drawSolidColorsBatch(SkCanvas* canvas) const { + SkASSERT(kImageMode == ImageMode::kNone); + SkASSERT(kDrawMode == DrawMode::kBatch); + + GrContext* context = canvas->getGrContext(); + SkASSERT(context); + + GrRenderTargetContext::QuadSetEntry batch[kRectCount]; + for (int i = 0; i < kRectCount; ++i) { + batch[i].fRect = fRects[i]; + batch[i].fColor = fColors[i].premul(); + batch[i].fLocalMatrix = SkMatrix::I(); + batch[i].fAAFlags = GrQuadAAFlags::kAll; + } + + SkPaint paint; + paint.setColor(SK_ColorWHITE); + paint.setAntiAlias(true); + + GrRenderTargetContext* rtc = canvas->internal_private_accessTopLayerRenderTargetContext(); + SkMatrix view = canvas->getTotalMatrix(); + GrPaint grPaint; + SkPaintToGrPaint(context, rtc->colorInfo(), paint, view, &grPaint); + rtc->drawQuadSet(GrNoClip(), std::move(grPaint), GrAA::kYes, view, batch, kRectCount); + } + + void drawSolidColorsRef(SkCanvas* canvas) const { + SkASSERT(kImageMode == ImageMode::kNone); + SkASSERT(kDrawMode == DrawMode::kRef || kDrawMode == DrawMode::kQuad); + + SkPaint paint; + paint.setAntiAlias(true); + for (int i = 0; i < kRectCount; ++i) { + if (kDrawMode == DrawMode::kRef) { + paint.setColor4f(fColors[i]); + canvas->drawRect(fRects[i], paint); + } else { + canvas->experimental_DrawEdgeAAQuad(fRects[i], nullptr, SkCanvas::kAll_QuadAAFlags, + fColors[i], SkBlendMode::kSrcOver); + } + } + } + + const char* onGetName() override { + if (fName.isEmpty()) { + this->computeName(); + } + return fName.c_str(); + } + + void onDelayedSetup() override { + static constexpr SkScalar kMinRectSize = 0.2f; + static constexpr SkScalar kMaxRectSize = 300.f; + + SkRandom rand; + for (int i = 0; i < kRectCount; i++) { + if (kLayout == RectangleLayout::kRandom) { + SkScalar w = rand.nextF() * (kMaxRectSize - kMinRectSize) + kMinRectSize; + SkScalar h = rand.nextF() * (kMaxRectSize - kMinRectSize) + kMinRectSize; + + SkScalar x = rand.nextF() * (kWidth - w); + SkScalar y = rand.nextF() * (kHeight - h); + + fRects[i].setXYWH(x, y, w, h); + } else { + int gridSize = SkScalarCeilToInt(SkScalarSqrt(kRectCount)); + SkASSERT(gridSize * gridSize >= kRectCount); + + SkScalar w = (kWidth - 1.f) / gridSize; + SkScalar h = (kHeight - 1.f) / gridSize; + + SkScalar x = (i % gridSize) * w + 0.5f; // Offset to ensure AA doesn't get disabled + SkScalar y = (i / gridSize) * h + 0.5f; + + fRects[i].setXYWH(x, y, w, h); + } + + // Make sure we don't extend outside the render target, don't want to include clipping + // in the benchmark. + SkASSERT(SkRect::MakeWH(kWidth, kHeight).contains(fRects[i])); + + fColors[i] = {rand.nextF(), rand.nextF(), rand.nextF(), 1.f}; + } + } + + void onPerCanvasPreDraw(SkCanvas* canvas) override { + // Push the skimages to the GPU when using the GPU backend so that the texture creation is + // not part of the bench measurements. Always remake the images since they are so simple, + // and since they are context-specific, this works when the bench runs multiple GPU backends + GrContext* context = canvas->getGrContext(); + for (int i = 0; i < kImageCount; ++i) { + SkBitmap bm; + bm.allocN32Pixels(256, 256); + bm.eraseColor(fColors[i].toSkColor()); + auto image = SkImage::MakeFromBitmap(bm); + + fImages[i] = context ? image->makeTextureImage(context) : std::move(image); + } + } + + void onDraw(int loops, SkCanvas* canvas) override { + for (int i = 0; i < loops; i++) { + if (kImageMode == ImageMode::kNone) { + if (kDrawMode == DrawMode::kBatch) { + this->drawSolidColorsBatch(canvas); + } else { + this->drawSolidColorsRef(canvas); + } + } else { + if (kDrawMode == DrawMode::kBatch) { + this->drawImagesBatch(canvas); + } else { + this->drawImagesRef(canvas); + } + } + } + } + + SkIPoint onGetSize() override { + return { kWidth, kHeight }; + } + + typedef Benchmark INHERITED; +}; + +// constructor call is wrapped in () so the macro doesn't break parsing the commas in the template +#define ADD_BENCH(n, layout, imageMode, drawMode) \ + DEF_BENCH( return (new BulkRectBench()); ) + +#define ADD_BENCH_FAMILY(n, layout) \ + ADD_BENCH(n, layout, ImageMode::kShared, DrawMode::kBatch) \ + ADD_BENCH(n, layout, ImageMode::kShared, DrawMode::kRef) \ + ADD_BENCH(n, layout, ImageMode::kUnique, DrawMode::kBatch) \ + ADD_BENCH(n, layout, ImageMode::kUnique, DrawMode::kRef) \ + ADD_BENCH(n, layout, ImageMode::kNone, DrawMode::kBatch) \ + ADD_BENCH(n, layout, ImageMode::kNone, DrawMode::kRef) \ + ADD_BENCH(n, layout, ImageMode::kNone, DrawMode::kQuad) + +ADD_BENCH_FAMILY(1000, RectangleLayout::kRandom) +ADD_BENCH_FAMILY(1000, RectangleLayout::kGrid) + +#undef ADD_BENCH_FAMILY +#undef ADD_BENCH diff --git a/third_party/skia/bench/ColorFilterBench.cpp b/third_party/skia/bench/ColorFilterBench.cpp index 86a9f6037219..8005cf58259b 100644 --- a/third_party/skia/bench/ColorFilterBench.cpp +++ b/third_party/skia/bench/ColorFilterBench.cpp @@ -8,7 +8,10 @@ #include "bench/Benchmark.h" #include "include/core/SkCanvas.h" #include "include/core/SkColorFilter.h" +#include "include/core/SkSurface.h" #include "include/effects/SkImageFilters.h" +#include "src/core/SkColorFilterPriv.h" +#include "tools/Resources.h" // Just need an interesting filter, nothing to special about colormatrix static sk_sp make_grayscale() { @@ -76,3 +79,136 @@ class FilteredRectBench : public Benchmark { DEF_BENCH( return new FilteredRectBench(FilteredRectBench::kNoFilter_Type); ) DEF_BENCH( return new FilteredRectBench(FilteredRectBench::kColorFilter_Type); ) DEF_BENCH( return new FilteredRectBench(FilteredRectBench::kImageFilter_Type); ) + +namespace { + +class ColorMatrixBench final : public Benchmark { +public: + using Factory = sk_sp(*)(); + + explicit ColorMatrixBench(const char* suffix, Factory f) + : fFactory(f) + , fName(SkStringPrintf("colorfilter_%s", suffix)) {} + +private: + const char* onGetName() override { + return fName.c_str(); + } + + SkIPoint onGetSize() override { + return { 256, 256 }; + } + + void onDelayedSetup() override { + // Pass the image though a premul canvas so that we "forget" it is opaque. + auto surface = SkSurface::MakeRasterN32Premul(256, 256); + surface->getCanvas()->drawImage(GetResourceAsImage("images/mandrill_256.png"), 0, 0); + + fImage = surface->makeImageSnapshot(); + fColorFilter = fFactory(); + } + + void onDraw(int loops, SkCanvas* canvas) override { + SkPaint p; + p.setColorFilter(fColorFilter); + + for (int i = 0; i < loops; ++i) { + canvas->drawImage(fImage, 0, 0, &p); + } + } + + const Factory fFactory; + const SkString fName; + + sk_sp fImage; + sk_sp fColorFilter; +}; + +void RuntimeNone_CPU(float[4], const void*) {} + +const char RuntimeNone_GPU_SRC[] = R"( + void main(inout half4 c) {} +)"; + +void RuntimeColorMatrix_CPU(float colors[4], const void* ctx) { + auto c = reinterpret_cast*>(colors)->unpremul(); + + const auto* m = static_cast(ctx); + const auto c0 = c[0]*m[ 0] + c[1]*m[ 1] + c[2]*m[ 2] + c[3]*m[ 3] + m[ 4], + c1 = c[0]*m[ 5] + c[1]*m[ 6] + c[2]*m[ 7] + c[3]*m[ 8] + m[ 9], + c2 = c[0]*m[10] + c[1]*m[11] + c[2]*m[12] + c[3]*m[13] + m[14], + c3 = c[0]*m[15] + c[1]*m[16] + c[2]*m[17] + c[3]*m[18] + m[19]; + c[0] = c0; + c[1] = c1; + c[2] = c2; + c[3] = c3; + + *reinterpret_cast*>(colors) = c.premul(); +} + +const char RuntimeColorMatrix_GPU_SRC[] = R"( + // WTB matrix/vector inputs. + layout(ctype=float) in uniform half m0 , m1 , m2 , m3 , m4 , + m5 , m6 , m7 , m8 , m9 , + m10, m11, m12, m13, m14, + m15, m16, m17, m18, m19; + void main(inout half4 c) { + half nonZeroAlpha = max(c.a, 0.0001); + c = half4(c.rgb / nonZeroAlpha, nonZeroAlpha); + + half4x4 m = half4x4(m0, m5, m10, m15, + m1, m6, m11, m16, + m2, m7, m12, m17, + m3, m8, m13, m18); + c = m * c + half4 (m4, m9, m14, m19); + + c = saturate(c); + c.rgb *= c.a; + } +)"; + +static constexpr float gColorMatrix[] = { + 0.3f, 0.3f, 0.0f, 0.0f, 0.3f, + 0.0f, 0.3f, 0.3f, 0.0f, 0.3f, + 0.0f, 0.0f, 0.3f, 0.3f, 0.3f, + 0.3f, 0.0f, 0.3f, 0.3f, 0.0f, +}; + +} // namespace + +DEF_BENCH( return new ColorMatrixBench("none", + []() { return sk_sp(nullptr); }); ) +DEF_BENCH( return new ColorMatrixBench("blend_src", + []() { return SkColorFilters::Blend(0x80808080, SkBlendMode::kSrc); }); ) +DEF_BENCH( return new ColorMatrixBench("blend_srcover", + []() { return SkColorFilters::Blend(0x80808080, SkBlendMode::kSrcOver); }); ) +DEF_BENCH( return new ColorMatrixBench("linear_to_srgb", + []() { return SkColorFilters::LinearToSRGBGamma(); }); ) +DEF_BENCH( return new ColorMatrixBench("srgb_to_linear", + []() { return SkColorFilters::SRGBToLinearGamma(); }); ) +DEF_BENCH( return new ColorMatrixBench("matrix_rgba", + []() { return SkColorFilters::Matrix(gColorMatrix); }); ) +DEF_BENCH( return new ColorMatrixBench("matrix_hsla", + []() { return SkColorFilters::HSLAMatrix(gColorMatrix); }); ) +DEF_BENCH( return new ColorMatrixBench("compose_src", + []() { return SkColorFilters::Compose(SkColorFilters::Blend(0x80808080, SkBlendMode::kSrc), + SkColorFilters::Blend(0x80808080, SkBlendMode::kSrc)); + }); ) +DEF_BENCH( return new ColorMatrixBench("lerp_src", + []() { return SkColorFilters::Lerp(0.3f, + SkColorFilters::Blend(0x80808080, SkBlendMode::kSrc), + SkColorFilters::Blend(0x80808080, SkBlendMode::kSrc)); + }); ) + +#ifdef SK_SUPPORT_GPU +DEF_BENCH( return new ColorMatrixBench("src_runtime", []() { + static SkRuntimeColorFilterFactory gRuntimeFact(SkString(RuntimeNone_GPU_SRC), + RuntimeNone_CPU); + return gRuntimeFact.make(SkData::MakeWithCopy(gColorMatrix, sizeof(gColorMatrix))); + });) +DEF_BENCH( return new ColorMatrixBench("matrix_runtime", []() { + static SkRuntimeColorFilterFactory gRuntimeFact(SkString(RuntimeColorMatrix_GPU_SRC), + RuntimeColorMatrix_CPU); + return gRuntimeFact.make(SkData::MakeWithCopy(gColorMatrix, sizeof(gColorMatrix))); + });) +#endif diff --git a/third_party/skia/bench/GeometryBench.cpp b/third_party/skia/bench/GeometryBench.cpp index 457151d155d8..abaf678a7665 100644 --- a/third_party/skia/bench/GeometryBench.cpp +++ b/third_party/skia/bench/GeometryBench.cpp @@ -271,7 +271,7 @@ class ConvexityBench : public Benchmark { void onDraw(int loops, SkCanvas* canvas) override { for (int i = 0; i < loops; ++i) { - fPath.setConvexity(SkPath::kUnknown_Convexity); + fPath.setConvexityType(SkPathConvexityType::kUnknown); (void)fPath.isConvex(); } } diff --git a/third_party/skia/bench/ImageCycleBench.cpp b/third_party/skia/bench/ImageCycleBench.cpp index 032e43b19621..1bb38d05ac07 100644 --- a/third_party/skia/bench/ImageCycleBench.cpp +++ b/third_party/skia/bench/ImageCycleBench.cpp @@ -73,7 +73,9 @@ class ImageCycle : public Benchmark { } } // Prevent any batching between "frames". - canvas->flush(); + if (auto surf = canvas->getSurface()) { + surf->flush(); + } } } diff --git a/third_party/skia/bench/PathBench.cpp b/third_party/skia/bench/PathBench.cpp index eb4d4a3fea98..c92e88dea60e 100644 --- a/third_party/skia/bench/PathBench.cpp +++ b/third_party/skia/bench/PathBench.cpp @@ -691,7 +691,7 @@ class CirclesBench : public Benchmark { // mimic how Chrome does circles temp.arcTo(r, 0, 0, false); - temp.addOval(r, SkPath::kCCW_Direction); + temp.addOval(r, SkPathDirection::kCCW); temp.arcTo(r, 360, 0, true); temp.close(); @@ -1206,7 +1206,7 @@ class CommonConvexBench : public Benchmark { fPath.addRRect(SkRRect::MakeRectXY(r, w/8.0f, h/8.0f)); if (forceConcave) { - fPath.setConvexity(SkPath::kConcave_Convexity); + fPath.setConvexityType(SkPathConvexityType::kConcave); SkASSERT(!fPath.isConvex()); } else { SkASSERT(fPath.isConvex()); diff --git a/third_party/skia/bench/ResultsWriter.h b/third_party/skia/bench/ResultsWriter.h index f525a5df5cbc..bb8ff3de9a66 100644 --- a/third_party/skia/bench/ResultsWriter.h +++ b/third_party/skia/bench/ResultsWriter.h @@ -12,6 +12,7 @@ #include "include/core/SkString.h" #include "include/core/SkTypes.h" +#include "src/core/SkOSFile.h" #include "src/utils/SkJSONWriter.h" /** @@ -54,4 +55,60 @@ class NanoJSONResultsWriter : public SkJSONWriter { } }; +/** + NanoFILEAppendAndCloseStream: re-open the file, append the data, then close on every write() call. + + The purpose of this class is to not keep the file handle open between JSON flushes. SkJSONWriter + uses a 32k in-memory cache already, so it only flushes occasionally and is well equipped for a + steam like this. + + See: https://b.corp.google.com/issues/143074513 +*/ +class NanoFILEAppendAndCloseStream : public SkWStream { +public: + NanoFILEAppendAndCloseStream(const char* filePath) : fFilePath(filePath) { + // Open the file as "write" to ensure it exists and clear any contents before we begin + // appending. + FILE* file = sk_fopen(fFilePath.c_str(), kWrite_SkFILE_Flag); + if (!file) { + SkDebugf("Failed to open file %s for write.\n", fFilePath.c_str()); + fFilePath.reset(); + return; + } + sk_fclose(file); + } + + size_t bytesWritten() const override { return fBytesWritten; } + + bool write(const void* buffer, size_t size) override { + if (fFilePath.isEmpty()) { + return false; + } + + FILE* file = sk_fopen(fFilePath.c_str(), kAppend_SkFILE_Flag); + if (!file) { + SkDebugf("Failed to open file %s for append.\n", fFilePath.c_str()); + return false; + } + + size_t bytesWritten = sk_fwrite(buffer, size, file); + fBytesWritten += bytesWritten; + sk_fclose(file); + + if (bytesWritten != size) { + SkDebugf("NanoFILEAppendAndCloseStream failed writing %d bytes (wrote %d instead)\n", + size, bytesWritten); + return false; + } + + return true; + } + + void flush() override {} + +private: + SkString fFilePath; + size_t fBytesWritten = 0; +}; + #endif diff --git a/third_party/skia/bench/SKPAnimationBench.cpp b/third_party/skia/bench/SKPAnimationBench.cpp index ee25f19195d1..8cb9d8d9454d 100644 --- a/third_party/skia/bench/SKPAnimationBench.cpp +++ b/third_party/skia/bench/SKPAnimationBench.cpp @@ -6,7 +6,6 @@ */ #include "bench/SKPAnimationBench.h" -#include "include/core/SkMultiPictureDraw.h" #include "include/core/SkSurface.h" #include "tools/flags/CommandLineFlags.h" diff --git a/third_party/skia/bench/SKPBench.cpp b/third_party/skia/bench/SKPBench.cpp index 854317434e39..9fe11f8ffb5d 100644 --- a/third_party/skia/bench/SKPBench.cpp +++ b/third_party/skia/bench/SKPBench.cpp @@ -6,7 +6,6 @@ */ #include "bench/SKPBench.h" -#include "include/core/SkMultiPictureDraw.h" #include "include/core/SkSurface.h" #include "tools/flags/CommandLineFlags.h" @@ -125,17 +124,7 @@ void SKPBench::onDraw(int loops, SkCanvas* canvas) { } void SKPBench::drawMPDPicture() { - SkMultiPictureDraw mpd; - - for (int j = 0; j < fTileRects.count(); ++j) { - SkMatrix trans; - trans.setTranslate(-fTileRects[j].fLeft/fScale, - -fTileRects[j].fTop/fScale); - mpd.add(fSurfaces[j]->getCanvas(), fPic.get(), &trans); - } - - // We flush after each picture to more closely model how Chrome rasterizes tiles. - mpd.draw(/*flush = */ true); + // TODO: remove me } void SKPBench::drawPicture() { diff --git a/third_party/skia/bench/SkGlyphCacheBench.cpp b/third_party/skia/bench/SkGlyphCacheBench.cpp index 794ff5fcce53..725cedc2396a 100644 --- a/third_party/skia/bench/SkGlyphCacheBench.cpp +++ b/third_party/skia/bench/SkGlyphCacheBench.cpp @@ -5,16 +5,18 @@ * found in the LICENSE file. */ - #include "src/core/SkStrike.h" #include "bench/Benchmark.h" #include "include/core/SkCanvas.h" #include "include/core/SkGraphics.h" #include "include/core/SkTypeface.h" +#include "src/core/SkRemoteGlyphCache.h" #include "src/core/SkStrikeCache.h" #include "src/core/SkStrikeSpec.h" #include "src/core/SkTaskGroup.h" +#include "src/core/SkTextBlobTrace.h" +#include "tools/Resources.h" #include "tools/ToolUtils.h" static void do_font_stuff(SkFont* font) { @@ -114,3 +116,140 @@ DEF_BENCH( return new SkGlyphCacheBasic(256 * 1024); ) DEF_BENCH( return new SkGlyphCacheBasic(32 * 1024 * 1024); ) DEF_BENCH( return new SkGlyphCacheStressTest(256 * 1024); ) DEF_BENCH( return new SkGlyphCacheStressTest(32 * 1024 * 1024); ) + +namespace { +class DiscardableManager : public SkStrikeServer::DiscardableHandleManager, + public SkStrikeClient::DiscardableHandleManager { +public: + DiscardableManager() { sk_bzero(&fCacheMissCount, sizeof(fCacheMissCount)); } + ~DiscardableManager() override = default; + + // Server implementation. + SkDiscardableHandleId createHandle() override { + SkAutoMutexExclusive l(fMutex); + + // Handles starts as locked. + fLockedHandles.add(++fNextHandleId); + return fNextHandleId; + } + bool lockHandle(SkDiscardableHandleId id) override { + SkAutoMutexExclusive l(fMutex); + + if (id <= fLastDeletedHandleId) return false; + fLockedHandles.add(id); + return true; + } + + // Client implementation. + bool deleteHandle(SkDiscardableHandleId id) override { + SkAutoMutexExclusive l(fMutex); + + return id <= fLastDeletedHandleId; + } + + void notifyCacheMiss(SkStrikeClient::CacheMissType type) override { + SkAutoMutexExclusive l(fMutex); + + fCacheMissCount[type]++; + } + bool isHandleDeleted(SkDiscardableHandleId id) override { + SkAutoMutexExclusive l(fMutex); + + return id <= fLastDeletedHandleId; + } + + void unlockAll() { + SkAutoMutexExclusive l(fMutex); + + fLockedHandles.reset(); + } + void unlockAndDeleteAll() { + SkAutoMutexExclusive l(fMutex); + + fLockedHandles.reset(); + fLastDeletedHandleId = fNextHandleId; + } + const SkTHashSet& lockedHandles() const { + SkAutoMutexExclusive l(fMutex); + + return fLockedHandles; + } + SkDiscardableHandleId handleCount() { + SkAutoMutexExclusive l(fMutex); + + return fNextHandleId; + } + int cacheMissCount(uint32_t type) { + SkAutoMutexExclusive l(fMutex); + + return fCacheMissCount[type]; + } + bool hasCacheMiss() const { + SkAutoMutexExclusive l(fMutex); + + for (uint32_t i = 0; i <= SkStrikeClient::CacheMissType::kLast; ++i) { + if (fCacheMissCount[i] > 0) return true; + } + return false; + } + void resetCacheMissCounts() { + SkAutoMutexExclusive l(fMutex); + sk_bzero(&fCacheMissCount, sizeof(fCacheMissCount)); + } + +private: + // The tests below run in parallel on multiple threads and use the same + // process global SkStrikeCache. So the implementation needs to be + // thread-safe. + mutable SkMutex fMutex; + + SkDiscardableHandleId fNextHandleId = 0u; + SkDiscardableHandleId fLastDeletedHandleId = 0u; + SkTHashSet fLockedHandles; + int fCacheMissCount[SkStrikeClient::CacheMissType::kLast + 1u]; +}; + +class DiffCanvasBench : public Benchmark { + SkString fBenchName; + std::function()> fDataProvider; + std::vector fTrace; + sk_sp fDiscardableManager; + SkTLazy fServer; + + const char* onGetName() override { return fBenchName.c_str(); } + + bool isSuitableFor(Backend b) override { return b == kNonRendering_Backend; } + + void onDraw(int loops, SkCanvas*) override { + const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); + SkTextBlobCacheDiffCanvas canvas{1024, 1024, props, fServer.get()}; + loops *= 100; + while (loops --> 0) { + for (const auto& record : fTrace) { + canvas.drawTextBlob( + record.blob.get(), record.offset.x(), record.offset.y(),record.paint); + } + } + } + + void onDelayedSetup() override { + auto stream = fDataProvider(); + fDiscardableManager = sk_make_sp(); + fServer.init(fDiscardableManager.get()); + fTrace = SkTextBlobTrace::CreateBlobTrace(stream.get()); + } + +public: + DiffCanvasBench(SkString n, std::function()> f) + : fBenchName(std::move(n)), fDataProvider(std::move(f)) {} +}; +} // namespace + +Benchmark* CreateDiffCanvasBench( + SkString name, std::function()> dataSrc) { + return new DiffCanvasBench(std::move(name), std::move(dataSrc)); +} + +DEF_BENCH( return CreateDiffCanvasBench( + SkString("SkDiffBench-lorem_ipsum"), + [](){ return GetResourceAsStream("diff_canvas_traces/lorem_ipsum.trace"); })); diff --git a/third_party/skia/bench/SkGlyphCacheBench.h b/third_party/skia/bench/SkGlyphCacheBench.h new file mode 100644 index 000000000000..623bdccafd98 --- /dev/null +++ b/third_party/skia/bench/SkGlyphCacheBench.h @@ -0,0 +1,16 @@ +// Copyright 2019 Google LLC. +// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. +#ifndef SkGlyphCacheBench_DEFINED +#define SkGlyphCacheBench_DEFINED + +#include "bench/Benchmark.h" +#include "include/core/SkStream.h" +#include "include/core/SkString.h" + +#include +#include + +Benchmark* CreateDiffCanvasBench(SkString name, + std::function()> dataSrc); + +#endif // SkGlyphCacheBench_DEFINED diff --git a/third_party/skia/bench/TypefaceBench.cpp b/third_party/skia/bench/TypefaceBench.cpp index 711bb6ac1c43..6d9579d5cf91 100644 --- a/third_party/skia/bench/TypefaceBench.cpp +++ b/third_party/skia/bench/TypefaceBench.cpp @@ -294,7 +294,7 @@ class UtfToGlyph : public Benchmark { std::vector> fLines; std::vector fGlyphIds; sk_sp fTypeface; - const char* (*fText); + const char** fText; int fLineCount; const char* fName; }; diff --git a/third_party/skia/bench/VertexColorSpaceBench.cpp b/third_party/skia/bench/VertexColorSpaceBench.cpp index 1dde32ec2413..ddafc3d57212 100644 --- a/third_party/skia/bench/VertexColorSpaceBench.cpp +++ b/third_party/skia/bench/VertexColorSpaceBench.cpp @@ -35,25 +35,11 @@ enum Mode { class GP : public GrGeometryProcessor { public: - GP(Mode mode, sk_sp colorSpaceXform) - : INHERITED(kVertexColorSpaceBenchGP_ClassID) - , fMode(mode) - , fColorSpaceXform(std::move(colorSpaceXform)) { - fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; - switch (fMode) { - case kBaseline_Mode: - case kShader_Mode: - fInColor = {"inColor", kUByte4_norm_GrVertexAttribType, kHalf4_GrSLType}; - break; - case kFloat_Mode: - fInColor = {"inColor", kFloat4_GrVertexAttribType, kHalf4_GrSLType}; - break; - case kHalf_Mode: - fInColor = {"inColor", kHalf4_GrVertexAttribType, kHalf4_GrSLType}; - break; - } - this->setVertexAttributes(&fInPosition, 2); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, Mode mode, + sk_sp colorSpaceXform) { + return arena->make(mode, std::move(colorSpaceXform)); } + const char* name() const override { return "VertexColorXformGP"; } GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override { @@ -93,7 +79,7 @@ class GP : public GrGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&&) override { + const CoordTransformRange&) override { const GP& gp = primProc.cast(); fColorSpaceHelper.setData(pdman, gp.fColorSpaceXform.get()); } @@ -109,6 +95,28 @@ class GP : public GrGeometryProcessor { } private: + friend class ::SkArenaAlloc; // for access to ctor + + GP(Mode mode, sk_sp colorSpaceXform) + : INHERITED(kVertexColorSpaceBenchGP_ClassID) + , fMode(mode) + , fColorSpaceXform(std::move(colorSpaceXform)) { + fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; + switch (fMode) { + case kBaseline_Mode: + case kShader_Mode: + fInColor = {"inColor", kUByte4_norm_GrVertexAttribType, kHalf4_GrSLType}; + break; + case kFloat_Mode: + fInColor = {"inColor", kFloat4_GrVertexAttribType, kHalf4_GrSLType}; + break; + case kHalf_Mode: + fInColor = {"inColor", kHalf4_GrVertexAttribType, kHalf4_GrSLType}; + break; + } + this->setVertexAttributes(&fInPosition, 2); + } + Mode fMode; sk_sp fColorSpaceXform; @@ -160,7 +168,7 @@ class Op : public GrMeshDrawOp { friend class ::GrOpMemoryPool; void onPrepareDraws(Target* target) override { - sk_sp gp(new GP(fMode, fColorSpaceXform)); + GrGeometryProcessor* gp = GP::Make(target->allocator(), fMode, fColorSpaceXform); size_t vertexStride = gp->vertexStride(); const int kVertexCount = 1024; @@ -223,7 +231,7 @@ class Op : public GrMeshDrawOp { GrMesh* mesh = target->allocMesh(GrPrimitiveType::kTriangleStrip); mesh->setNonIndexedNonInstanced(kVertexCount); mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(gp, mesh); + target->recordDraw(gp, mesh, 1, GrPrimitiveType::kTriangleStrip); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { diff --git a/third_party/skia/bench/nanobench.cpp b/third_party/skia/bench/nanobench.cpp index a790b31aa59c..db22c9de4c6e 100644 --- a/third_party/skia/bench/nanobench.cpp +++ b/third_party/skia/bench/nanobench.cpp @@ -19,6 +19,7 @@ #include "bench/ResultsWriter.h" #include "bench/SKPAnimationBench.h" #include "bench/SKPBench.h" +#include "bench/SkGlyphCacheBench.h" #include "include/android/SkBitmapRegionDecoder.h" #include "include/codec/SkAndroidCodec.h" #include "include/codec/SkCodec.h" @@ -157,6 +158,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(svgs, "", "Directory to read SVGs from, or a single SVG file."); +static DEFINE_string(texttraces, "", "Directory to read TextBlobTrace files from."); static DEFINE_int_2(threads, j, -1, "Run threadsafe tests on a threadpool with this many extra threads, " @@ -626,23 +628,10 @@ static void collect_files(const CommandLineFlags::StringArray& paths, class BenchmarkStream { public: BenchmarkStream() : fBenches(BenchRegistry::Head()) - , fGMs(skiagm::GMRegistry::Head()) - , fCurrentRecording(0) - , fCurrentDeserialPicture(0) - , fCurrentScale(0) - , fCurrentSKP(0) - , fCurrentSVG(0) - , fCurrentUseMPD(0) - , fCurrentCodec(0) - , fCurrentAndroidCodec(0) - , fCurrentBRDImage(0) - , fCurrentColorType(0) - , fCurrentAlphaType(0) - , fCurrentSubsetType(0) - , fCurrentSampleSize(0) - , fCurrentAnimSKP(0) { + , fGMs(skiagm::GMRegistry::Head()) { collect_files(FLAGS_skps, ".skp", &fSKPs); collect_files(FLAGS_svgs, ".svg", &fSVGs); + collect_files(FLAGS_texttraces, ".trace", &fTextBlobTraces); if (4 != sscanf(FLAGS_clip[0], "%d,%d,%d,%d", &fClip.fLeft, &fClip.fTop, &fClip.fRight, &fClip.fBottom)) { @@ -758,6 +747,20 @@ class BenchmarkStream { } } + while (fCurrentTextBlobTrace < fTextBlobTraces.count()) { + SkString path = fTextBlobTraces[fCurrentTextBlobTrace++]; + SkString basename = SkOSPath::Basename(path.c_str()); + static constexpr char kEnding[] = ".trace"; + if (basename.endsWith(kEnding)) { + basename.remove(basename.size() - strlen(kEnding), strlen(kEnding)); + } + fSourceType = "texttrace"; + fBenchType = "micro"; + return CreateDiffCanvasBench( + SkStringPrintf("SkDiffBench-%s", basename.c_str()), + [path](){ return SkStream::MakeFromFile(path.c_str()); }); + } + // First add all .skps as RecordingBenches. while (fCurrentRecording < fSKPs.count()) { const SkString& path = fSKPs[fCurrentRecording++]; @@ -1091,6 +1094,7 @@ class BenchmarkStream { SkTArray fScales; SkTArray fSKPs; SkTArray fSVGs; + SkTArray fTextBlobTraces; SkTArray fUseMPDs; SkTArray fImages; SkTArray fColorTypes; @@ -1101,20 +1105,21 @@ class BenchmarkStream { const char* fSourceType; // What we're benching: bench, GM, SKP, ... const char* fBenchType; // How we bench it: micro, recording, playback, ... - int fCurrentRecording; - int fCurrentDeserialPicture; - int fCurrentScale; - int fCurrentSKP; - int fCurrentSVG; - int fCurrentUseMPD; - int fCurrentCodec; - int fCurrentAndroidCodec; - int fCurrentBRDImage; - int fCurrentColorType; - int fCurrentAlphaType; - int fCurrentSubsetType; - int fCurrentSampleSize; - int fCurrentAnimSKP; + int fCurrentRecording = 0; + int fCurrentDeserialPicture = 0; + int fCurrentScale = 0; + int fCurrentSKP = 0; + int fCurrentSVG = 0; + int fCurrentTextBlobTrace = 0; + int fCurrentUseMPD = 0; + int fCurrentCodec = 0; + int fCurrentAndroidCodec = 0; + int fCurrentBRDImage = 0; + int fCurrentColorType = 0; + int fCurrentAlphaType = 0; + int fCurrentSubsetType = 0; + int fCurrentSampleSize = 0; + int fCurrentAnimSKP = 0; }; // Some runs (mostly, Valgrind) are so slow that the bot framework thinks we've hung. @@ -1164,7 +1169,9 @@ int main(int argc, char** argv) { std::unique_ptr logStream(new SkNullWStream); if (!FLAGS_outResultsFile.isEmpty()) { #if defined(SK_RELEASE) - logStream.reset(new SkFILEWStream(FLAGS_outResultsFile[0])); + // SkJSONWriter uses a 32k in-memory cache, so it only flushes occasionally and is well + // equipped for a stream that re-opens, appends, and closes the file on every write. + logStream.reset(new NanoFILEAppendAndCloseStream(FLAGS_outResultsFile[0])); #else SkDebugf("I'm ignoring --outResultsFile because this is a Debug build."); return 1; diff --git a/third_party/skia/bin/try.py b/third_party/skia/bin/try.py index f86f2cda75c9..3c72f24f8e28 100755 --- a/third_party/skia/bin/try.py +++ b/third_party/skia/bin/try.py @@ -18,8 +18,8 @@ import tempfile -BUCKET_SKIA_PRIMARY = 'skia.primary' -BUCKET_SKIA_INTERNAL = 'skia.internal' +BUCKET_SKIA_PRIMARY = 'skia/skia.primary' +BUCKET_SKIA_INTERNAL = 'skia-internal/skia.internal' CHECKOUT_ROOT = os.path.realpath(os.path.join( os.path.dirname(os.path.abspath(__file__)), os.pardir)) INFRA_BOTS = os.path.join(CHECKOUT_ROOT, 'infra', 'bots') @@ -29,7 +29,6 @@ sys.path.insert(0, INFRA_BOTS) -import update_meta_config import utils @@ -69,7 +68,6 @@ def main(): jobs.append((BUCKET_SKIA_PRIMARY, json.load(f))) if args.internal: jobs.append(get_jobs(REPO_INTERNAL)) - jobs.extend(update_meta_config.CQ_INCLUDE_CHROMIUM_TRYBOTS) if args.job: filtered_jobs = [] for bucket, job_list in jobs: diff --git a/third_party/skia/build/fuchsia/BUILD.gn b/third_party/skia/build/fuchsia/BUILD.gn new file mode 100644 index 000000000000..525dd70d63d3 --- /dev/null +++ b/third_party/skia/build/fuchsia/BUILD.gn @@ -0,0 +1,35 @@ +# Copyright 2019 Google LLC. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +assert(is_fuchsia) + +import("//build/fuchsia/sdk.gni") + +fuchsia_sdk_manifest_exists = false +if (is_fuchsia && using_fuchsia_sdk) { + manifest_exists = exec_script("//build/fuchsia/file_exists", + [ + "-file_name", + rebase_path(fuchsia_sdk_manifest_path), + ], + "list lines", + [ "//build/fuchsia/file_exists" ]) + if (manifest_exists == [ "true" ]) { + fuchsia_sdk_manifest_exists = true + } +} + +group("fuchsia") { + if (fuchsia_sdk_manifest_exists == true) { + deps = [ + "fidl", + "pkg", + "sysroot", + ] + } else { + assert(false, + "Fuchsia SDK not found. Set arg skia_update_fuchsia_sdk=True " + + "to initialize.") + } +} diff --git a/third_party/skia/build/fuchsia/fidl/BUILD.gn b/third_party/skia/build/fuchsia/fidl/BUILD.gn new file mode 100644 index 000000000000..db7239b48724 --- /dev/null +++ b/third_party/skia/build/fuchsia/fidl/BUILD.gn @@ -0,0 +1,14 @@ +# Copyright 2019 Google LLC. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +assert(is_fuchsia) +import("//build/fuchsia/sdk.gni") + +# +# Generate gn targets for fidl libraries in the Fuchsia SDK. +# +fuchsia_sdk("fidl") { + meta = fuchsia_sdk_manifest_path + enabled_parts = [ "fidl_library" ] +} diff --git a/third_party/skia/build/fuchsia/fidl_gen_cpp b/third_party/skia/build/fuchsia/fidl_gen_cpp new file mode 100755 index 000000000000..6d2c10de970b --- /dev/null +++ b/third_party/skia/build/fuchsia/fidl_gen_cpp @@ -0,0 +1,92 @@ +#!/usr/bin/env python + +# Copyright 2019 Google LLC. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" + Generate C/C++ headers and source files from the set of FIDL files + specified in the meta.json manifest. +""" + +import argparse +import collections +import json +import os +import subprocess +import sys + +def GetFIDLFilesRecursive(libraries, sdk_base, path): + with open(path) as json_file: + parsed = json.load(json_file) + result = [] + deps = parsed['deps'] + for dep in deps: + dep_meta_json = os.path.abspath('%s/fidl/%s/meta.json' % (sdk_base, dep)) + GetFIDLFilesRecursive(libraries, sdk_base, dep_meta_json) + libraries[parsed['name']] = result + parsed['sources'] + +def GetFIDLFilesByLibraryName(sdk_base, root): + libraries = collections.OrderedDict() + GetFIDLFilesRecursive(libraries, sdk_base, root) + return libraries + +def main(): + parser = argparse.ArgumentParser() + + parser.add_argument('--fidlc-bin', dest='fidlc_bin', action='store', required=True) + parser.add_argument('--fidlgen-bin', dest='fidlgen_bin', action='store', required=True) + + parser.add_argument('--sdk-base', dest='sdk_base', action='store', required=True) + parser.add_argument('--root', dest='root', action='store', required=True) + parser.add_argument('--json', dest='json', action='store', required=True) + parser.add_argument('--include-base', dest='include_base', action='store', required=True) + parser.add_argument('--output-base-cc', dest='output_base_cc', action='store', required=True) + parser.add_argument('--output-c-header', dest='output_header_c', action='store', required=True) + parser.add_argument('--output-c-tables', dest='output_c_tables', action='store', required=True) + + args = parser.parse_args() + + assert os.path.exists(args.fidlc_bin) + assert os.path.exists(args.fidlgen_bin) + + fidl_files_by_name = GetFIDLFilesByLibraryName(args.sdk_base, args.root) + + fidlc_command = [ + args.fidlc_bin, + '--c-header', + args.output_header_c, + '--tables', + args.output_c_tables, + '--json', + args.json + ] + + for _, fidl_files in fidl_files_by_name.iteritems(): + fidlc_command.append('--files') + for fidl_file in fidl_files: + fidl_abspath = os.path.abspath('%s/%s' % (args.sdk_base, fidl_file)) + fidlc_command.append(fidl_abspath) + + subprocess.check_call(fidlc_command) + + assert os.path.exists(args.json) + + fidlgen_command = [ + args.fidlgen_bin, + '-generators', + 'cpp', + '-include-base', + args.include_base, + '-json', + args.json, + '-output-base', + args.output_base_cc + ] + + subprocess.check_call(fidlgen_command) + + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/third_party/skia/build/fuchsia/file_exists b/third_party/skia/build/fuchsia/file_exists new file mode 100755 index 000000000000..0d487af4acda --- /dev/null +++ b/third_party/skia/build/fuchsia/file_exists @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +# Copyright 2019 Google LLC. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" + Prints "true" if the input |file_name| exists. +""" + +import argparse +import os + +parser = argparse.ArgumentParser() +parser.add_argument("-file_name", type=str, + help="File name for which to check existence for.") +args = parser.parse_args() +if os.path.exists(args.file_name): + print "true" diff --git a/third_party/skia/build/fuchsia/fuchsia_download_sdk.gni b/third_party/skia/build/fuchsia/fuchsia_download_sdk.gni new file mode 100644 index 000000000000..8e63f1ba66e3 --- /dev/null +++ b/third_party/skia/build/fuchsia/fuchsia_download_sdk.gni @@ -0,0 +1,18 @@ +# Copyright 2019 Google LLC. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import ("../../gn/skia.gni") +import ("//build/fuchsia/sdk.gni") + +if(is_fuchsia && skia_update_fuchsia_sdk && + current_toolchain == default_toolchain) { + cipd_dir = "${fuchsia_sdk_path}/../cipd" + update_sdk_out = exec_script("//build/fuchsia/update_fuchsia_sdk", + [ "-sdk_dir=" + rebase_path(fuchsia_sdk_path), + "-clang_dir=" + rebase_path(fuchsia_toolchain_path), + "-cipd_cache_dir=" + rebase_path(cipd_dir), + "-cipd_clang_version=git_revision:a6e1de4afc51560df18c95cb616dec51248ed660" ], + "list lines", + [ "//build/fuchsia/update_fuchsia_sdk" ]) +} diff --git a/third_party/skia/build/fuchsia/gen_package b/third_party/skia/build/fuchsia/gen_package new file mode 100755 index 000000000000..407ee7e40ed5 --- /dev/null +++ b/third_party/skia/build/fuchsia/gen_package @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +# Copyright 2019 Google LLC. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" + Builds a Fuchsia FAR archive. +""" + +import argparse +import os +import subprocess +import sys + +def main(): + parser = argparse.ArgumentParser() + + parser.add_argument('--pm-bin', dest='pm_bin', action='store', required=True) + parser.add_argument( + '--pkg-dir', dest='pkg_dir', action='store', required=True) + parser.add_argument( + '--pkg-name', dest='pkg_name', action='store', required=True) + parser.add_argument( + '--pkg-version', dest='pkg_version', action='store', required=True) + parser.add_argument( + '--pkg-manifest', dest='pkg_manifest', action='store', required=True) + + args = parser.parse_args() + + assert os.path.exists(args.pm_bin) + assert os.path.exists(args.pkg_dir) + + pkg_dir = args.pkg_dir + pkg_name = args.pkg_name + pkg_manifest = args.pkg_manifest + pkg_version = args.pkg_version + + pm_command_base = [ + args.pm_bin, + '-o', + pkg_dir, + ] + + # Create the package ID file. + subprocess.check_call(pm_command_base + ['-n'] + [pkg_name] + ['init']) + + # Build the package. + subprocess.check_call(pm_command_base + ['-m'] + [pkg_manifest] + ['build']) + + # Archive the package. + subprocess.check_call(pm_command_base + ['-m'] + [pkg_manifest] + ['-version'] + [pkg_version] + ['archive']) + + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/third_party/skia/build/fuchsia/gen_repo b/third_party/skia/build/fuchsia/gen_repo new file mode 100755 index 000000000000..ed69ff060730 --- /dev/null +++ b/third_party/skia/build/fuchsia/gen_repo @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +# Copyright 2019 Google LLC. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" + Generate a Fuchsia repo capable of serving Fuchsia archives over the + network. +""" + +import argparse +import os +import subprocess +import sys + +def main(): + parser = argparse.ArgumentParser() + + parser.add_argument('--pm-bin', dest='pm_bin', action='store', required=True) + parser.add_argument( + '--repo-dir', dest='repo_dir', action='store', required=True) + parser.add_argument( + '--archive', dest='archives', action='append', required=True) + + args = parser.parse_args() + + assert os.path.exists(args.pm_bin) + + if not os.path.exists(args.repo_dir): + pm_newrepo_command = [args.pm_bin, 'newrepo', '-repo', args.repo_dir] + subprocess.check_call(pm_newrepo_command) + + pm_publish_command = [ + args.pm_bin, + 'publish', + '-C', # Remove all previous registrations. + '-a', # Publish archives from an archive (mode). + '-repo', + args.repo_dir + ] + + for archive in args.archives: + pm_publish_command.append('-f') + pm_publish_command.append(archive) + + print "PM Publish: " + print pm_publish_command + subprocess.check_call(pm_publish_command) + + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/third_party/skia/build/fuchsia/pkg/BUILD.gn b/third_party/skia/build/fuchsia/pkg/BUILD.gn new file mode 100644 index 000000000000..5d6b19fcdfa7 --- /dev/null +++ b/third_party/skia/build/fuchsia/pkg/BUILD.gn @@ -0,0 +1,20 @@ +# Copyright 2019 Google LLC. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +assert(is_fuchsia) +import("//build/fuchsia/sdk.gni") + +# +# Generate ninja targets for cc_source_libraries and cc_prebuilt_libraries +# in the SDK. "pkg" is the parent directory within the SDK that contain +# the "meta.json" files for each library that defines their build +# dependencies. +# +fuchsia_sdk("pkg") { + meta = fuchsia_sdk_manifest_path + enabled_parts = [ + "cc_source_library", + "cc_prebuilt_library", + ] +} diff --git a/third_party/skia/build/fuchsia/sdk.gni b/third_party/skia/build/fuchsia/sdk.gni new file mode 100644 index 000000000000..0cefb8fb3334 --- /dev/null +++ b/third_party/skia/build/fuchsia/sdk.gni @@ -0,0 +1,406 @@ +# Copyright 2019 Google LLC. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# import("//gn/skia.gni") + +declare_args() { + using_fuchsia_sdk = true + + # Fuchsia SDK install dir. + fuchsia_sdk_path = "//fuchsia/sdk/$host_os" + + # Clang install dir. + fuchsia_toolchain_path = "//fuchsia/toolchain/$host_os" + + # Path to GN-generated GN targets derived from parsing json file at + # |fuchsia_sdk_manifest_path|. The parsing logic can be found in sdk.gni. + fuchsia_sdk_root = "//build/fuchsia" +} + +declare_args() { + fuchsia_sdk_manifest_path = "${fuchsia_sdk_path}/meta/manifest.json" +} + +template("_fuchsia_sysroot") { + assert(defined(invoker.meta), "The meta.json file path must be specified.") + assert(target_cpu == "x64" || target_cpu == "arm64", + "We currently only support 'x64' and 'arm64' targets for fuchsia.") + + meta_json = read_file(invoker.meta, "json") + + assert(meta_json.type == "sysroot") + + meta_json_versions = meta_json.versions + if (target_cpu == "x64") { + defs = meta_json_versions.x64 + } else { + defs = meta_json_versions.arm64 + } + + _libs = [] + _lib_dirs = [] + _include_dirs = [] + + foreach(link_lib, defs.link_libs) { + if (link_lib != "arch/${target_cpu}/sysroot/lib/Scrt1.o") { + _libs += [ rebase_path("$fuchsia_sdk_path/$link_lib") ] + } + } + + defs_include_dir = defs.include_dir + _include_dirs += [ rebase_path("$fuchsia_sdk_path/$defs_include_dir") ] + + config_name = "config_$target_name" + config(config_name) { + lib_dirs = _lib_dirs + libs = _libs + include_dirs = _include_dirs + } + + group(target_name) { + public_configs = [ ":$config_name" ] + } +} + +template("_fuchsia_fidl_library") { + assert(defined(invoker.meta), "The meta.json file path must be specified.") + assert(target_cpu == "x64" || target_cpu == "arm64", + "We currently only support 'x64' and 'arm64' targets for fuchsia.") + + meta_json = read_file(invoker.meta, "json") + + assert(meta_json.type == "fidl_library") + + _deps = [ "../pkg:fidl_cpp" ] + + library_name = string_replace(meta_json.name, "fuchsia.", "") + library_name_json = "$library_name.json" + + foreach(dep, meta_json.deps) { + _deps += [ ":$dep" ] + } + + config_name = "config_$target_name" + config(config_name) { + include_dirs = [ target_gen_dir ] + } + + fidl_gen_target_name = "fidlgen_$target_name" + action(fidl_gen_target_name) { + script = "//build/fuchsia/fidl_gen_cpp" + + library_name_slashes = string_replace(library_name, ".", "/") + + inputs = [ + invoker.meta, + ] + + outputs = [ + "$target_gen_dir/fuchsia/$library_name_slashes/c/fidl.h", + "$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl.h", + "$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl.cc", + "$target_gen_dir/fuchsia/$library_name_slashes/cpp/tables.cc", + ] + + args = [ + "--fidlc-bin", + rebase_path("$fuchsia_sdk_path/tools/fidlc"), + "--fidlgen-bin", + rebase_path("$fuchsia_sdk_path/tools/fidlgen"), + "--sdk-base", + rebase_path("$fuchsia_sdk_path"), + "--root", + rebase_path(invoker.meta), + "--json", + rebase_path("$target_gen_dir/$library_name_json"), + "--include-base", + rebase_path("$target_gen_dir"), + "--output-base-cc", + rebase_path("$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl"), + "--output-c-header", + rebase_path("$target_gen_dir/fuchsia/$library_name_slashes/c/fidl.h"), + "--output-c-tables", + rebase_path( + "$target_gen_dir/fuchsia/$library_name_slashes/cpp/tables.cc"), + ] + } + + source_set(target_name) { + public_configs = [ ":$config_name" ] + + sources = get_target_outputs(":$fidl_gen_target_name") + + deps = [ + ":$fidl_gen_target_name", + ] + + public_deps = _deps + } +} + +# +# Produce a cc source library from invoker's json file. +# Primary output is the source_set. +# +template("_fuchsia_cc_source_library") { + assert(defined(invoker.meta), "The meta.json file path must be specified.") + + meta_json = read_file(invoker.meta, "json") + + assert(meta_json.type == "cc_source_library") + + _output_name = meta_json.name + _include_dirs = [] + _public_headers = [] + _sources = [] + _deps = [] + + meta_json_include_dir = meta_json.include_dir + _include_dirs += [ rebase_path("$fuchsia_sdk_path/$meta_json_include_dir") ] + + foreach(header, meta_json.headers) { + rebased_header = [] + rebased_header = [ rebase_path("$fuchsia_sdk_path/$header") ] + _public_headers += rebased_header + _sources += rebased_header + } + + foreach(source, meta_json.sources) { + _sources += [ "$fuchsia_sdk_path/$source" ] + } + + config_name = "config_$target_name" + config(config_name) { + include_dirs = _include_dirs + } + + foreach(dep, meta_json.deps) { + _deps += [ "../pkg:$dep" ] + } + + foreach(dep, meta_json.fidl_deps) { + _deps += [ "../fidl:$dep" ] + } + + source_set(target_name) { + output_name = _output_name + public = _public_headers + sources = _sources + public_configs = [ ":$config_name" ] + public_deps = _deps + } +} + +template("_fuchsia_cc_prebuilt_library") { + assert(defined(invoker.meta), "The meta.json file path must be specified.") + meta_json = read_file(invoker.meta, "json") + + _include_dirs = [] + _deps = [] + _libs = [] + + meta_json_include_dir = meta_json.include_dir + _include_dirs += [ "$fuchsia_sdk_path/$meta_json_include_dir" ] + + foreach(dep, meta_json.deps) { + _deps += [ ":$dep" ] + } + + meta_json_binaries = meta_json.binaries + if (target_cpu == "x64") { + meta_json_binaries_arch = meta_json_binaries.x64 + } else { + meta_json_binaries_arch = meta_json_binaries.arm64 + } + prebuilt_lib = meta_json_binaries_arch.link + _libs = [ "$fuchsia_sdk_path/$prebuilt_lib" ] + + config_name = "config_$target_name" + config(config_name) { + include_dirs = _include_dirs + libs = _libs + } + + group(target_name) { + public_configs = [ ":$config_name" ] + public_deps = _deps + } +} + +# +# Read SDK manifest json file and produce gn build targets for all +# "enabled_parts" as specified by the template invoker. +# +# Fuchsia SDK manifest is primarily a "parts" array. +# +template("fuchsia_sdk") { + assert(defined(invoker.meta), "The meta.json file path must be specified.") + assert(defined(invoker.enabled_parts), + "A list containing the parts of the SDK to generate targets for.") + + meta_json = read_file(invoker.meta, "json") + + foreach(part, meta_json.parts) { + part_meta_json = { + } + + part_meta = part.meta + part_meta_rebased = "$fuchsia_sdk_path/$part_meta" + + part_meta_json = read_file(part_meta_rebased, "json") + subtarget_name = part_meta_json.name + + foreach(enabled_part, invoker.enabled_parts) { + if (part.type == "cc_source_library") { + if (part.type == enabled_part) { + _fuchsia_cc_source_library(subtarget_name) { + meta = part_meta_rebased + } + } + } else if (part.type == "sysroot") { + if (part.type == enabled_part) { + _fuchsia_sysroot(subtarget_name) { + meta = part_meta_rebased + } + } + } else if (part.type == "fidl_library") { + if (part.type == enabled_part) { + _fuchsia_fidl_library(subtarget_name) { + meta = part_meta_rebased + } + } + } else if (part.type == "cc_prebuilt_library") { + if (part.type == enabled_part) { + _fuchsia_cc_prebuilt_library(subtarget_name) { + meta = part_meta_rebased + } + } + } + } + } + + group(target_name) { + } +} + +# +# Create package in 'gen' directory. +# +template("fuchsia_package") { + assert(defined(invoker.name), "The name of the package must be specified.") + assert(defined(invoker.version), "The package version must be specified.") + + pkg_dir = target_gen_dir + pkg_name = invoker.name + pkg_version = invoker.version + pkg_manifest = invoker.pkg_manifest + + pkg_id_path = "${pkg_dir}/meta/package" + gen_far_target_name = "gen_far_${target_name}" + pkg_archive = "${pkg_dir}/${pkg_name}-${pkg_version}.far" + + action(gen_far_target_name) { + script = "//build/fuchsia/gen_package" + + pm_binary = rebase_path("$fuchsia_sdk_path/tools/pm") + + inputs = [ + pm_binary, + ] + + outputs = [ + pkg_id_path, + pkg_archive, + ] + + args = [ + "--pm-bin", + pm_binary, + "--pkg-dir", + rebase_path(pkg_dir), + "--pkg-name", + pkg_name, + "--pkg-version", + "$pkg_version", + "--pkg-manifest", + rebase_path(pkg_manifest), + ] + + if (defined(invoker.deps)) { + deps = invoker.deps + } + if (defined(invoker.testonly)) { + testonly = invoker.testonly + } + } + + copy(target_name) { + if (defined(invoker.testonly)) { + testonly = invoker.testonly + } + + sources = [ + pkg_archive, + ] + + output_name = "${root_out_dir}/far/${pkg_name}.far" + outputs = [ + output_name, + ] + + deps = [ + ":$gen_far_target_name", + ] + } +} + +# +# Places repo in output ('obj') directory. +# +template("fuchsia_repo") { + assert(defined(invoker.archives), + "The list of archives to publish must be specified.") + assert(defined(invoker.repo), "The location of the repo should be specified.") + + action(target_name) { + if (defined(invoker.testonly)) { + testonly = invoker.testonly + } + script = "//build/fuchsia/gen_repo" + + pm_binary = rebase_path("$fuchsia_sdk_path/tools/pm") + repo_directory = invoker.repo + + inputs = [ + pm_binary, + ] + + archive_flags = [] + + foreach(archive, invoker.archives) { + assert(get_path_info(archive, "extension") == "far", + "Archive '$archive' does not have the .far extension.") + inputs += [ archive ] + archive_flags += [ + "--archive", + rebase_path(archive), + ] + } + + outputs = [ + repo_directory, + ] + + args = [ + "--pm-bin", + pm_binary, + "--repo-dir", + rebase_path(repo_directory), + ] + archive_flags + + if (defined(invoker.deps)) { + deps = invoker.deps + } + } +} diff --git a/third_party/skia/build/fuchsia/skqp/BUILD.gn b/third_party/skia/build/fuchsia/skqp/BUILD.gn new file mode 100644 index 000000000000..dbcdf165f0fb --- /dev/null +++ b/third_party/skia/build/fuchsia/skqp/BUILD.gn @@ -0,0 +1,134 @@ +# Copyright 2019 Google LLC. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +assert(is_fuchsia) + +import("//build/fuchsia/sdk.gni") + +pkg_dir = target_gen_dir +pkg_name = "skqp_pkg" + +fuchsia_package(pkg_name) { + testonly = true + name = pkg_name + version = 0 + deps = [ + "//:skqp", + "//build/fuchsia", + ] + pkg_manifest = "${pkg_dir}/${target_name}.manifest" +} + +fuchsia_repo("skqp_repo") { + testonly = true + deps = [ + ":append_assets_to_manifest", + ":base_manifest", + ":skqp_pkg", + ] + + # Put repo directory in out dir (not gen dir). + repo = "$target_out_dir/skqp_repo" + archives = [ "$root_out_dir/far/skqp_pkg.far" ] +} + +# +# Base manifest entries (w/o assets) for SKQP. +# +# TODO(rosasco): Convert this group() to generated_file() when a +# sufficiently modern version of gn rolls in. +group("base_manifest") { + base_pkg_manifest = "${pkg_dir}/base_${pkg_name}.manifest" + + skqp_exec = rebase_path("${root_out_dir}/skqp") + skqp_path = rebase_path("${target_gen_dir}") + + sdk_dist_path = rebase_path("${fuchsia_sdk_path}/arch/${target_cpu}/dist") + sdk_sysroot_dist_path = + rebase_path("${fuchsia_sdk_path}/arch/${target_cpu}/sysroot/dist/lib") + + skqp_component_manifest = rebase_path("//build/fuchsia/skqp/skqp.cmx") + + if (target_cpu == "x64" || target_cpu == "x86_64") { + clang_path = + rebase_path("${fuchsia_toolchain_path}/lib/x86_64-unknown-fuchsia/c++") + } else if (target_cpu == "arm64") { + clang_path = + rebase_path("${fuchsia_toolchain_path}/lib/aarch64-unknown-fuchsia/c++") + } else { + assert(false, "Unknown target cpu for Fuchsia target.") + } + + manifest_entries = [ + # Binary + "bin/skqp=${skqp_exec}", + + # Meta Data + "meta/package=${skqp_path}/meta/package", + "meta/skqp.cmx=${skqp_component_manifest}", + + # Shared Libs (clang c++) + "lib/libc++.so.2=${clang_path}/libc++.so.2", + "lib/libc++abi.so.1=${clang_path}/libc++abi.so.1", + "lib/libunwind.so.1=${clang_path}/libunwind.so.1", + + # Shared Libs (sdk dist) + "lib/libvulkan.so=${sdk_dist_path}/libvulkan.so", + "lib/libasync-default.so=${sdk_dist_path}/libasync-default.so", + "lib/libfdio.so=${sdk_dist_path}/libfdio.so", + "lib/libtrace-engine.so=${sdk_dist_path}/libtrace-engine.so", + + # Loader + "lib/ld.so.1=${sdk_sysroot_dist_path}/ld.so.1", + + # Vulkan ICD / Validation / Loader + "lib/libvulkan.so=${sdk_dist_path}/libvulkan.so", + ] + + # TODO(rosasco): Add 2 lines when generated_file() switch is implemented + # and remove the 'write_file' below. + # contents = manifest_entries + # outputs = [ base_pkg_manifest ] + + write_file(base_pkg_manifest, manifest_entries) +} + +# +# Asset manifest entries for SKQP. +# +action("append_assets_to_manifest") { + script = "append_assets_to_manifest" + + base_pkg_manifest = "${pkg_dir}/base_${pkg_name}.manifest" + pkg_manifest = "${pkg_dir}/${pkg_name}.manifest" + assets_path = "//platform_tools/android/apps/skqp/src/main/assets" + + inputs = [ + assets_path, + ] + + outputs = [ + pkg_manifest, + ] + + manifest_deps = "$target_out_dir/skqp_manifest.d" + + args = [ + "--root_dir", + rebase_path(assets_path), + "--base_manifest", + rebase_path(base_pkg_manifest), + "--manifest", + rebase_path(pkg_manifest), + "--deps", + rebase_path(manifest_deps), + "--root_build_dir", + rebase_path(root_out_dir), + ] + + deps = [ + ":base_manifest", + ] + depfile = manifest_deps +} diff --git a/third_party/skia/build/fuchsia/skqp/README.md b/third_party/skia/build/fuchsia/skqp/README.md new file mode 100644 index 000000000000..bd641ad0e585 --- /dev/null +++ b/third_party/skia/build/fuchsia/skqp/README.md @@ -0,0 +1,35 @@ +# Building SKQP for Fuchsia +Using an arm64 device as an example, to build skqp for Fuchsia: +``` +gn gen out/fuchsia-arm64 --args="is_official_build=false is_debug=false skia_update_fuchsia_sdk=true target_cpu=\"arm64\" target_os=\"fuchsia\" using_fuchsia_sdk=true skia_tools_require_resources=true skia_skqp_global_error_tolerance=8" +``` + +The effect of `skia_update_fuchsia_sdk=true` is that it will download both the Fuchsia SDK and a compatible clang for building SKQP as part of the `gn gen ...` step above. + +Next step, compile skqp for Fuchsia: +``` +autoninja -C out/fuchsia-arm64 ":skqp_repo" +``` + +The effect of this build will be to produce a Fuchsia package repository named `skqp_repo` in the `out` directory of the build. `skqp_repo` can then be served to a Fuchsia device using `//fuchsia/sdk/tools/pm serve -repo skqp_repo` (where // is the skia build root). + +See [install fuchsia packages](https://fuchsia.dev/fuchsia-src/development/sdk/documentation/packages#install-package) for more on serving packages to Fuchsia devices. + +# Fuchsia CIPD Package Creation and Upload Procedure +These steps assume the creation of the arm64 CIPD package as an example. Because the package requires a path from the output directory of the build, the `gn gen` arguments must match the prescribed path declared in `cipd_arm64.yaml` in order for this CIPD package creation and upload to succeed. + +## Create CIPD Package +``` +cipd create -pkg-def=cipd_arm64.yaml +``` + +## Set CIPD Ref of `latest` +If applicable, set `latest` ref to new CIPD package. +``` +cipd set-ref skia/fuchsia/skqp/arch/arm64 -ref latest -version mdhS7sryb2zxQuXT803Dv_XZ0r7B5j8jSbZmIi0JvOcC +``` + +## Set the git-commit Tag +``` +cipd set-tag skia/fuchsia/skqp/arch/arm64 -tag=git-commit:9c2b7cfe9080c6c4692234667a671db216a2e229 -version mdhS7sryb2zxQuXT803Dv_XZ0r7B5j8jSbZmIi0JvOcC +``` diff --git a/third_party/skia/build/fuchsia/skqp/append_assets_to_manifest b/third_party/skia/build/fuchsia/skqp/append_assets_to_manifest new file mode 100755 index 000000000000..f1a0d892522b --- /dev/null +++ b/third_party/skia/build/fuchsia/skqp/append_assets_to_manifest @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +# Copyright 2019 Google LLC. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" + Opens |base_manifest| and copies the contents to |manifest| then traverses + |root_dir| and appends every file as a Fuchsia package manifest entry to + |manifest|. +""" + +import argparse +import os +import subprocess + +parser = argparse.ArgumentParser() +parser.add_argument('--root_dir', dest='root_dir', action='store', required=True) +parser.add_argument('--base_manifest', dest='base_manifest', action='store', required=True) +parser.add_argument('--manifest', dest='manifest', action='store', required=True) +parser.add_argument('--deps', dest='deps', action='store', required=True) +parser.add_argument('--root_build_dir', dest='root_build_dir', action='store', required=True) +args = parser.parse_args() + +root_dir = args.root_dir +if not os.path.exists(root_dir): + print "--root_dir path specified: " + root_dir + " doesn't exist.\n" + exit(1) + +base_manifest = args.base_manifest +if not os.path.exists(base_manifest): + print "--base_manifest specified: " + base_manifest + " doesn't exist.\n" + exit(1) + +manifest = args.manifest +root_build_dir = args.root_build_dir + +# Prepend |base_manifest| contents to |manifest|. +deps_file = open(args.deps, 'w') +relative_path = os.path.relpath(args.manifest, root_build_dir) +deps_file.write('%s: ' % relative_path) + +out_file = open(manifest, 'w') +with open(base_manifest, 'r') as in_file: + base_content = in_file.readlines() + +for base_line in base_content: + out_file.write(base_line) + base_line_list = base_line.split("=") + if len(base_line_list) != 2: + print "Error: Base manifest line format error. Expected \"lhs=rhs\" but got: " + base_line + exit(1) + base_line_rhs = base_line_list[1].strip() + relative_path = os.path.relpath(base_line_rhs, root_build_dir) + deps_file.write(relative_path + " ") + +# Append all files discovered under |root_dir| to |manifest|. +files = subprocess.check_output(["find", root_dir, "-type", "f"]) +file_lines = files.splitlines() + +for file in file_lines: + source = file + if not source.startswith(root_dir): + print "Error: source path " + source + " is not under |root_dir|\n" + exit(1) + dest = source[len(root_dir):] + out_file.write('data%s=' % dest) + out_file.write('%s\n' % source) + relative_path = os.path.relpath(source, root_build_dir) + deps_file.write(relative_path + " ") + +out_file.close() +deps_file.close() diff --git a/third_party/skia/build/fuchsia/skqp/cipd_arm64.yaml b/third_party/skia/build/fuchsia/skqp/cipd_arm64.yaml new file mode 100644 index 000000000000..e6a459df3988 --- /dev/null +++ b/third_party/skia/build/fuchsia/skqp/cipd_arm64.yaml @@ -0,0 +1,7 @@ +package: skia/fuchsia/skqp/arch/arm64 +description: ARM64 build of Skia's skqp test suite for Fuchsia +install_mode: copy +root: ../../.. +data: + - file: build/fuchsia/skqp/test_manifest.json + - file: out/fuchsia-arm64/far/skqp_pkg.far diff --git a/third_party/skia/build/fuchsia/skqp/skqp.cmx b/third_party/skia/build/fuchsia/skqp/skqp.cmx new file mode 100644 index 000000000000..00e2082fd157 --- /dev/null +++ b/third_party/skia/build/fuchsia/skqp/skqp.cmx @@ -0,0 +1,20 @@ +{ + "program": { + "binary": "bin/skqp", + "args" : [ "/pkg/data", "tmp/logs" ] + }, + "sandbox": { + "dev": [ + "class/display-controller" + ], + "features": [ + "vulkan", + "system-temp" + ], + "services": [ + "fuchsia.sysmem.Allocator", + "fuchsia.tracing.provider.Registry", + "fuchsia.vulkan.loader.Loader" + ] + } +} diff --git a/third_party/skia/build/fuchsia/skqp/test_manifest.json b/third_party/skia/build/fuchsia/skqp/test_manifest.json new file mode 100644 index 000000000000..4e67279fcbbb --- /dev/null +++ b/third_party/skia/build/fuchsia/skqp/test_manifest.json @@ -0,0 +1,6 @@ +[ + { + "package": "skqp_pkg", + "component_name": "skqp" + } +] diff --git a/third_party/skia/build/fuchsia/sysroot/BUILD.gn b/third_party/skia/build/fuchsia/sysroot/BUILD.gn new file mode 100644 index 000000000000..69d93cd5b4c3 --- /dev/null +++ b/third_party/skia/build/fuchsia/sysroot/BUILD.gn @@ -0,0 +1,11 @@ +# Copyright 2019 Google LLC. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +assert(is_fuchsia) +import("//build/fuchsia/sdk.gni") + +fuchsia_sdk("sdk_sysroot") { + meta = fuchsia_sdk_manifest_path + enabled_parts = [ "sysroot" ] +} diff --git a/third_party/skia/build/fuchsia/update_fuchsia_sdk b/third_party/skia/build/fuchsia/update_fuchsia_sdk new file mode 100755 index 000000000000..065c4b6fd676 --- /dev/null +++ b/third_party/skia/build/fuchsia/update_fuchsia_sdk @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +# Copyright 2019 Google LLC. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +update_fuchsia_sdk + + Downloads both the Fuchsia SDK and Fuchsia-compatible clang + zip archives from chrome infra (CIPD) and extracts them to + the arg-provide |sdk_dir| and |clang_dir| respectively. This + provides the complete toolchain required to build Fuchsia binaries + from the Fuchsia SDK. + +""" + +import argparse +import errno +import logging +import os +import platform +import shutil +import subprocess +import tempfile + +def MessageExit(message): + logging.error(message) + sys.exit(1) + +# Verify that "cipd" tool is readily available. +def CipdLives(): + err_msg = "Cipd not found, please install. See: " + \ + "https://commondatastorage.googleapis.com/chrome-infra-docs/flat" + \ + "/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up" + try: + subprocess.call(["cipd", "--version"]) + except OSError as e: + if e.errno == errno.ENOENT: + MessageExit(err_msg) + else: + MessageExit("cipd command execution failed.") + +# Download and unzip CIPD package archive. +def DownloadAndUnzip(pkg_name, version, cipd_cache_dir, output_dir): + pkg_suffix = pkg_name.replace('/', '-') + ".zip" + zip_file = tempfile.NamedTemporaryFile(suffix=pkg_suffix, delete=False) + cipd_cmd = "cipd pkg-fetch " + pkg_name + " -version \"" + version + "\" -out " + \ + zip_file.name + " -cache-dir " + cipd_cache_dir + unzip_cmd = "unzip -q " + zip_file.name + " -d " + output_dir + os.system(cipd_cmd) + os.system(unzip_cmd) + +def Main(): + CipdLives() + parser = argparse.ArgumentParser() + parser.add_argument("-sdk_dir", type=str, + help="Destination directory for the fuchsia SDK.") + parser.add_argument("-clang_dir", type=str, + help="Destination directory for the fuchsia toolchain.") + parser.add_argument("-overwrite_dirs", type=bool, default=False, + help="REMOVES existing sdk and clang dirs and makes new ones. When false " + + " the unzip command issue will require file overwrite confirmation.") + parser.add_argument("-cipd_cache_dir", type=str, default="/tmp", required=False, + help="Cache directory for CIPD downloads to prevent redundant downloads.") + parser.add_argument("-cipd_sdk_version", type=str, default="latest", required=False, + help="CIPD sdk version to download, e.g.: git_revision:fce11c6904c888e6d39f71e03806a540852dec41") + parser.add_argument("-cipd_clang_version", type=str, default="latest", required=False, + help="CIPD clang version to download, e.g.: git_revision:fce11c6904c888e6d39f71e03806a540852dec41") + args = parser.parse_args() + + sdk_dir = args.sdk_dir + clang_dir = args.clang_dir + cipd_sdk_version = args.cipd_sdk_version + cipd_clang_version = args.cipd_clang_version + + if args.overwrite_dirs: + dirs = [sdk_dir, clang_dir] + for curr_dir in dirs: + try: + if os.path.exists(curr_dir): + shutil.rmtree(curr_dir) + os.makedirs(curr_dir) + except OSError: + MessageExit("Creation of the directory %s failed" % curr_dir) + else: + # Make dirs for sdk and clang. + if not os.path.exists(sdk_dir): + os.makedirs(sdk_dir) + if not os.path.exists(clang_dir): + os.makedirs(clang_dir) + + # Verify that existing dirs are writable. + if (not os.access(sdk_dir, os.W_OK)) or (not os.path.isdir(sdk_dir)): + MessageExit("Can't write to sdk dir " + sdk_dir) + if (not os.access(clang_dir, os.W_OK)) or (not os.path.isdir(clang_dir)): + MessageExit("Can't write to clang dir " + clang_dir) + + ostype = platform.system() + if ostype == "Linux": + os_string = "linux-amd64" + elif ostype == "Darwin": + os_string = "mac-amd64" + else: + MessageExit("Unknown host " + ostype) + + # |sdk_pkg| and |clang_pkg| below are prescribed paths defined by chrome-infra. + sdk_pkg = "fuchsia/sdk/core/" + os_string + DownloadAndUnzip(sdk_pkg, cipd_sdk_version, args.cipd_cache_dir, sdk_dir) + clang_pkg = "fuchsia/clang/" + os_string + DownloadAndUnzip(clang_pkg, cipd_clang_version, args.cipd_cache_dir, clang_dir) + +if __name__ == "__main__": + import sys + Main() diff --git a/third_party/skia/codereview.settings b/third_party/skia/codereview.settings new file mode 100644 index 000000000000..76c4349315eb --- /dev/null +++ b/third_party/skia/codereview.settings @@ -0,0 +1,9 @@ +# This file is used by gcl to get repository specific information. +CODE_REVIEW_SERVER: codereview.chromium.org +VIEW_VC: https://skia.googlesource.com/skia/+/ +CC_LIST: reviews@skia.org +BUG_PREFIX: skia: +TRYSERVER_SVN_URL: https://skia-try.googlecode.com/svn +PROJECT: skia +GERRIT_HOST: True +RUN_POST_UPLOAD_HOOK: True diff --git a/third_party/skia/dm/DM.cpp b/third_party/skia/dm/DM.cpp index 5c0fcacb40db..6eb307d6a0cc 100644 --- a/third_party/skia/dm/DM.cpp +++ b/third_party/skia/dm/DM.cpp @@ -998,9 +998,6 @@ static Sink* create_via(const SkString& tag, Sink* wrapped) { #endif VIA("serialize", ViaSerialization, wrapped); VIA("pic", ViaPicture, wrapped); - VIA("tiles", ViaTiles, 256, 256, nullptr, wrapped); - VIA("tiles_rt", ViaTiles, 256, 256, new SkRTreeFactory, wrapped); - VIA("ddl", ViaDDL, 1, 3, wrapped); VIA("ddl2", ViaDDL, 2, 3, wrapped); @@ -1237,7 +1234,7 @@ struct Task { }; skcms_TransferFunction tf; - cs->transferFn(&tf.g); + cs->transferFn(&tf); switch (classify_transfer_fn(tf)) { case sRGBish_TF: if (tf.a == 1 && tf.b == 0 && tf.c == 0 && tf.d == 0 && tf.e == 0 && tf.f == 0) { diff --git a/third_party/skia/dm/DMGpuTestProcs.cpp b/third_party/skia/dm/DMGpuTestProcs.cpp index b03f25528b84..70c479957f4b 100644 --- a/third_party/skia/dm/DMGpuTestProcs.cpp +++ b/third_party/skia/dm/DMGpuTestProcs.cpp @@ -25,6 +25,10 @@ bool IsMetalContextType(sk_gpu_test::GrContextFactory::ContextType type) { bool IsRenderingGLContextType(sk_gpu_test::GrContextFactory::ContextType type) { return IsGLContextType(type) && GrContextFactory::IsRenderingContext(type); } +bool IsRenderingGLOrMetalContextType(sk_gpu_test::GrContextFactory::ContextType type) { + return (IsGLContextType(type) || IsMetalContextType(type)) && + GrContextFactory::IsRenderingContext(type); +} bool IsMockContextType(sk_gpu_test::GrContextFactory::ContextType type) { return type == GrContextFactory::kMock_ContextType; } diff --git a/third_party/skia/dm/DMSrcSink.cpp b/third_party/skia/dm/DMSrcSink.cpp index e730eb1a4108..15ff89730af6 100644 --- a/third_party/skia/dm/DMSrcSink.cpp +++ b/third_party/skia/dm/DMSrcSink.cpp @@ -15,7 +15,6 @@ #include "include/core/SkExecutor.h" #include "include/core/SkImageGenerator.h" #include "include/core/SkMallocPixelRef.h" -#include "include/core/SkMultiPictureDraw.h" #include "include/core/SkPictureRecorder.h" #include "include/core/SkStream.h" #include "include/core/SkSurface.h" @@ -60,7 +59,7 @@ #if defined(SK_ENABLE_SKOTTIE) #include "modules/skottie/include/Skottie.h" - #include "modules/skottie/utils/SkottieUtils.h" + #include "modules/skresources/include/SkResources.h" #endif #if defined(SK_XML) @@ -1117,7 +1116,10 @@ SkottieSrc::SkottieSrc(Path path) : fPath(std::move(path)) {} Error SkottieSrc::draw(SkCanvas* canvas) const { auto animation = skottie::Animation::Builder() .setResourceProvider( - skottie_utils::FileResourceProvider::Make(SkOSPath::Dirname(fPath.c_str()))) + skresources::DataURIResourceProviderProxy::Make( + skresources::FileResourceProvider::Make(SkOSPath::Dirname(fPath.c_str()), + /*predecode=*/true), + /*predecode=*/true)) .makeFromFile(fPath.c_str()); if (!animation) { return SkStringPrintf("Unable to parse file: %s", fPath.c_str()); @@ -1300,14 +1302,14 @@ static Error compare_bitmaps(const SkBitmap& reference, const SkBitmap& bitmap) if (0 != memcmp(reference.getPixels(), bitmap.getPixels(), reference.computeByteSize())) { SkString encoded; SkString errString("Pixels don't match reference"); - if (bitmap_to_base64_data_uri(reference, &encoded)) { + if (BipmapToBase64DataURI(reference, &encoded)) { errString.append("\nExpected: "); errString.append(encoded); } else { errString.append("\nExpected image failed to encode: "); errString.append(encoded); } - if (bitmap_to_base64_data_uri(bitmap, &encoded)) { + if (BipmapToBase64DataURI(bitmap, &encoded)) { errString.append("\nActual: "); errString.append(encoded); } else { @@ -1661,8 +1663,7 @@ Error XPSSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const SKPSink::SKPSink() {} Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const { - SkSize size; - size = src.size(); + auto size = SkSize::Make(src.size()); SkPictureRecorder recorder; Error err = src.draw(recorder.beginRecording(size.width(), size.height())); if (!err.isEmpty()) { @@ -1862,59 +1863,6 @@ Error ViaSerialization::draw( /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ -ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) - : Via(sink) - , fW(w) - , fH(h) - , fFactory(factory) {} - -Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { - auto size = src.size(); - SkPictureRecorder recorder; - Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), - SkIntToScalar(size.height()), - fFactory.get())); - if (!err.isEmpty()) { - return err; - } - sk_sp pic(recorder.finishRecordingAsPicture()); - - return draw_to_canvas(fSink.get(), bitmap, stream, log, src.size(), [&](SkCanvas* canvas) { - const int xTiles = (size.width() + fW - 1) / fW, - yTiles = (size.height() + fH - 1) / fH; - SkMultiPictureDraw mpd(xTiles*yTiles); - SkTArray> surfaces; -// surfaces.setReserve(xTiles*yTiles); - - SkImageInfo info = canvas->imageInfo().makeWH(fW, fH); - for (int j = 0; j < yTiles; j++) { - for (int i = 0; i < xTiles; i++) { - // This lets our ultimate Sink determine the best kind of surface. - // E.g., if it's a GpuSink, the surfaces and images are textures. - auto s = canvas->makeSurface(info); - if (!s) { - s = SkSurface::MakeRaster(info); // Some canvases can't create surfaces. - } - surfaces.push_back(s); - SkCanvas* c = s->getCanvas(); - c->translate(SkIntToScalar(-i * fW), - SkIntToScalar(-j * fH)); // Line up the canvas with this tile. - mpd.add(c, pic.get()); - } - } - mpd.draw(); - for (int j = 0; j < yTiles; j++) { - for (int i = 0; i < xTiles; i++) { - sk_sp image(surfaces[i+xTiles*j]->makeImageSnapshot()); - canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(j*fH)); - } - } - return ""; - }); -} - -/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ - ViaDDL::ViaDDL(int numReplays, int numDivisions, Sink* sink) : Via(sink), fNumReplays(numReplays), fNumDivisions(numDivisions) {} diff --git a/third_party/skia/dm/DMSrcSink.h b/third_party/skia/dm/DMSrcSink.h index 5b7338b44004..63b3f7f2e433 100644 --- a/third_party/skia/dm/DMSrcSink.h +++ b/third_party/skia/dm/DMSrcSink.h @@ -525,15 +525,6 @@ class ViaPicture : public Via { Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; }; -class ViaTiles : public Via { -public: - ViaTiles(int w, int h, SkBBHFactory*, Sink*); - Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; -private: - const int fW, fH; - std::unique_ptr fFactory; -}; - class ViaDDL : public Via { public: ViaDDL(int numReplays, int numDivisions, Sink* sink); diff --git a/third_party/skia/docs/examples/Arc.cpp b/third_party/skia/docs/examples/Arc.cpp index 7b6daafabddf..bb96907762e6 100644 --- a/third_party/skia/docs/examples/Arc.cpp +++ b/third_party/skia/docs/examples/Arc.cpp @@ -34,7 +34,7 @@ void draw(SkCanvas* canvas) { path.arcTo({56, 56}, {32, 56}, 24); break; case '5': - path.arcTo({24, 24}, 0, SkPath::kSmall_ArcSize, SkPath::kCW_Direction, {32, 56}); + path.arcTo({24, 24}, 0, SkPath::kSmall_ArcSize, SkPathDirection::kCW, {32, 56}); break; case '6': path.conicTo({56, 56}, {32, 56}, SK_ScalarRoot2Over2); diff --git a/third_party/skia/docs/examples/Canvas_clipPath.cpp b/third_party/skia/docs/examples/Canvas_clipPath.cpp index 3b6d43d87d6d..c87ccc12bc45 100644 --- a/third_party/skia/docs/examples/Canvas_clipPath.cpp +++ b/third_party/skia/docs/examples/Canvas_clipPath.cpp @@ -8,13 +8,13 @@ void draw(SkCanvas* canvas) { paint.setAntiAlias(true); SkPath path; path.addRect({20, 30, 100, 110}); - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); canvas->save(); canvas->clipPath(path, SkClipOp::kDifference, false); canvas->drawCircle(70, 100, 60, paint); canvas->restore(); canvas->translate(100, 100); - path.setFillType(SkPath::kWinding_FillType); + path.setFillType(SkPathFillType::kWinding); canvas->clipPath(path, SkClipOp::kIntersect, false); canvas->drawCircle(70, 100, 60, paint); } diff --git a/third_party/skia/docs/examples/Canvas_clipPath_2.cpp b/third_party/skia/docs/examples/Canvas_clipPath_2.cpp index 963c8d7a984e..1bea1e0ebb77 100644 --- a/third_party/skia/docs/examples/Canvas_clipPath_2.cpp +++ b/third_party/skia/docs/examples/Canvas_clipPath_2.cpp @@ -9,13 +9,13 @@ void draw(SkCanvas* canvas) { SkPath path; path.addRect({20, 15, 100, 95}); path.addRect({50, 65, 130, 135}); - path.setFillType(SkPath::kWinding_FillType); + path.setFillType(SkPathFillType::kWinding); canvas->save(); canvas->clipPath(path, SkClipOp::kIntersect); canvas->drawCircle(70, 85, 60, paint); canvas->restore(); canvas->translate(100, 100); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->clipPath(path, SkClipOp::kIntersect); canvas->drawCircle(70, 85, 60, paint); } diff --git a/third_party/skia/docs/examples/Canvas_clipPath_3.cpp b/third_party/skia/docs/examples/Canvas_clipPath_3.cpp index 9988a807f942..3a1c516f73ab 100644 --- a/third_party/skia/docs/examples/Canvas_clipPath_3.cpp +++ b/third_party/skia/docs/examples/Canvas_clipPath_3.cpp @@ -10,13 +10,13 @@ void draw(SkCanvas* canvas) { SkPoint poly[] = {{20, 20}, { 80, 20}, { 80, 80}, {40, 80}, {40, 40}, {100, 40}, {100, 100}, {20, 100}}; path.addPoly(poly, SK_ARRAY_COUNT(poly), true); - path.setFillType(SkPath::kWinding_FillType); + path.setFillType(SkPathFillType::kWinding); canvas->save(); canvas->clipPath(path, SkClipOp::kIntersect); canvas->drawCircle(50, 50, 45, paint); canvas->restore(); canvas->translate(100, 100); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->clipPath(path, SkClipOp::kIntersect); canvas->drawCircle(50, 50, 45, paint); } diff --git a/third_party/skia/docs/examples/Canvas_drawPath.cpp b/third_party/skia/docs/examples/Canvas_drawPath.cpp index d62374d0073d..2a5460bcd16d 100644 --- a/third_party/skia/docs/examples/Canvas_drawPath.cpp +++ b/third_party/skia/docs/examples/Canvas_drawPath.cpp @@ -24,9 +24,9 @@ void draw(SkCanvas* canvas) { canvas->translate(-240, 60); } paint.setStyle(SkPaint::kFill_Style); - for (auto fill : { SkPath::kWinding_FillType, - SkPath::kEvenOdd_FillType, - SkPath::kInverseWinding_FillType } ) { + for (auto fill : { SkPathFillType::kWinding, + SkPathFillType::kEvenOdd, + SkPathFillType::kInverseWinding } ) { path.setFillType(fill); canvas->save(); canvas->clipRect({0, 10, 80, 70}); diff --git a/third_party/skia/docs/examples/Path_ArcSize.cpp b/third_party/skia/docs/examples/Path_ArcSize.cpp index b99a2371cb6f..1c7b6839edb9 100644 --- a/third_party/skia/docs/examples/Path_ArcSize.cpp +++ b/third_party/skia/docs/examples/Path_ArcSize.cpp @@ -7,12 +7,12 @@ void draw(SkCanvas* canvas) { SkPaint paint; paint.setAntiAlias(true); paint.setStyle(SkPaint::kStroke_Style); - for (auto sweep: { SkPath::kCW_Direction, SkPath::kCCW_Direction } ) { + for (auto sweep: { SkPathDirection::kCW, SkPathDirection::kCCW } ) { for (auto arcSize : { SkPath::kSmall_ArcSize, SkPath::kLarge_ArcSize } ) { SkPath path; path.moveTo({120, 50}); path.arcTo(70, 40, 30, arcSize, sweep, 156, 100); - if (SkPath::kCCW_Direction == sweep && SkPath::kLarge_ArcSize == arcSize) { + if (SkPathDirection::kCCW == sweep && SkPath::kLarge_ArcSize == arcSize) { paint.setColor(SK_ColorBLUE); paint.setStrokeWidth(3); } diff --git a/third_party/skia/docs/examples/Path_ConvertToNonInverseFillType.cpp b/third_party/skia/docs/examples/Path_ConvertToNonInverseFillType.cpp index 12e2d1f2811a..d60857f76ad2 100644 --- a/third_party/skia/docs/examples/Path_ConvertToNonInverseFillType.cpp +++ b/third_party/skia/docs/examples/Path_ConvertToNonInverseFillType.cpp @@ -3,25 +3,25 @@ #include "tools/fiddle/examples.h" // HASH=319f6b124458dcc0f9ce4d7bbde65810 REG_FIDDLE(Path_ConvertToNonInverseFillType, 256, 256, true, 0) { -#define nameValue(fill) { SkPath::fill, #fill } +#define nameValue(fill) { SkPathFillType::fill, #fill } void draw(SkCanvas* canvas) { struct { - SkPath::FillType fill; + SkPathFillType fill; const char* name; } fills[] = { - nameValue(kWinding_FillType), - nameValue(kEvenOdd_FillType), - nameValue(kInverseWinding_FillType), - nameValue(kInverseEvenOdd_FillType), + nameValue(kWinding), + nameValue(kEvenOdd), + nameValue(kInverseWinding), + nameValue(kInverseEvenOdd), }; for (unsigned i = 0; i < SK_ARRAY_COUNT(fills); ++i) { - if (fills[i].fill != (SkPath::FillType) i) { + if (fills[i].fill != (SkPathFillType) i) { SkDebugf("fills array order does not match FillType enum order"); break; } SkDebugf("ConvertToNonInverseFillType(%s) == %s\n", fills[i].name, - fills[(int) SkPath::ConvertToNonInverseFillType(fills[i].fill)].name); + fills[(int) SkPathFillType_ConvertToNonInverse(fills[i].fill)].name); } } } // END FIDDLE diff --git a/third_party/skia/docs/examples/Path_Direction.cpp b/third_party/skia/docs/examples/Path_Direction.cpp index dab6ba913b5d..bbc74a2dd650 100644 --- a/third_party/skia/docs/examples/Path_Direction.cpp +++ b/third_party/skia/docs/examples/Path_Direction.cpp @@ -16,14 +16,14 @@ void draw(SkCanvas* canvas) { arrowPath.addPoly(arrow, SK_ARRAY_COUNT(arrow), true); arrowPaint.setPathEffect(SkPath1DPathEffect::Make(arrowPath, 320, 0, SkPath1DPathEffect::kRotate_Style)); - for (auto direction : { SkPath::kCW_Direction, SkPath::kCCW_Direction } ) { + for (auto direction : { SkPathDirection::kCW, SkPathDirection::kCCW } ) { canvas->drawRect(rect, rectPaint); for (unsigned start : { 0, 1, 2, 3 } ) { SkPath path; path.addRect(rect, direction, start); canvas->drawPath(path, arrowPaint); } - canvas->drawString(SkPath::kCW_Direction == direction ? "CW" : "CCW", rect.centerX(), + canvas->drawString(SkPathDirection::kCW == direction ? "CW" : "CCW", rect.centerX(), rect.centerY(), textPaint); canvas->translate(120, 0); } diff --git a/third_party/skia/docs/examples/Path_FillType_a.cpp b/third_party/skia/docs/examples/Path_FillType_a.cpp index 5931cabc4df6..d19c2c33366f 100644 --- a/third_party/skia/docs/examples/Path_FillType_a.cpp +++ b/third_party/skia/docs/examples/Path_FillType_a.cpp @@ -5,17 +5,17 @@ REG_FIDDLE(Path_FillType_a, 256, 100, false, 0) { void draw(SkCanvas* canvas) { SkPath path; - path.addRect({10, 10, 30, 30}, SkPath::kCW_Direction); - path.addRect({20, 20, 40, 40}, SkPath::kCW_Direction); - path.addRect({10, 60, 30, 80}, SkPath::kCW_Direction); - path.addRect({20, 70, 40, 90}, SkPath::kCCW_Direction); + path.addRect({10, 10, 30, 30}, SkPathDirection::kCW); + path.addRect({20, 20, 40, 40}, SkPathDirection::kCW); + path.addRect({10, 60, 30, 80}, SkPathDirection::kCW); + path.addRect({20, 70, 40, 90}, SkPathDirection::kCCW); SkPaint strokePaint; strokePaint.setStyle(SkPaint::kStroke_Style); SkRect clipRect = {0, 0, 51, 100}; canvas->drawPath(path, strokePaint); SkPaint fillPaint; - for (auto fillType : { SkPath::kWinding_FillType, SkPath::kEvenOdd_FillType, - SkPath::kInverseWinding_FillType, SkPath::kInverseEvenOdd_FillType } ) { + for (auto fillType : { SkPathFillType::kWinding, SkPathFillType::kEvenOdd, + SkPathFillType::kInverseWinding, SkPathFillType::kInverseEvenOdd } ) { canvas->translate(51, 0); canvas->save(); canvas->clipRect(clipRect); diff --git a/third_party/skia/docs/examples/Path_FillType_b.cpp b/third_party/skia/docs/examples/Path_FillType_b.cpp index 6064fe0d748e..4c1b83ced108 100644 --- a/third_party/skia/docs/examples/Path_FillType_b.cpp +++ b/third_party/skia/docs/examples/Path_FillType_b.cpp @@ -6,8 +6,8 @@ REG_FIDDLE(Path_FillType_b, 256, 230, false, 0) { void draw(SkCanvas* canvas) { SkPath path; - path.addRect({20, 10, 80, 70}, SkPath::kCW_Direction); - path.addRect({40, 30, 100, 90}, SkPath::kCW_Direction); + path.addRect({20, 10, 80, 70}, SkPathDirection::kCW); + path.addRect({40, 30, 100, 90}, SkPathDirection::kCW); SkPaint strokePaint; strokePaint.setStyle(SkPaint::kStroke_Style); SkRect clipRect = {0, 0, 128, 128}; @@ -22,8 +22,8 @@ void draw(SkCanvas* canvas) { canvas->scale(.5f, .5f); canvas->drawString("inverse", 384, 150, textPaint); SkPaint fillPaint; - for (auto fillType : { SkPath::kWinding_FillType, SkPath::kEvenOdd_FillType, - SkPath::kInverseWinding_FillType, SkPath::kInverseEvenOdd_FillType } ) { + for (auto fillType : { SkPathFillType::kWinding, SkPathFillType::kEvenOdd, + SkPathFillType::kInverseWinding, SkPathFillType::kInverseEvenOdd } ) { canvas->save(); canvas->clipRect(clipRect); path.setFillType(fillType); diff --git a/third_party/skia/docs/examples/Path_IsInverseFillType.cpp b/third_party/skia/docs/examples/Path_IsInverseFillType.cpp index 1b2cb10c7b83..3d2e5f0e7276 100644 --- a/third_party/skia/docs/examples/Path_IsInverseFillType.cpp +++ b/third_party/skia/docs/examples/Path_IsInverseFillType.cpp @@ -3,20 +3,20 @@ #include "tools/fiddle/examples.h" // HASH=1453856a9d0c73e8192bf298c4143563 REG_FIDDLE(Path_IsInverseFillType, 256, 256, true, 0) { -#define nameValue(fill) { SkPath::fill, #fill } +#define nameValue(fill) { SkPathFillType::fill, #fill } void draw(SkCanvas* canvas) { struct { - SkPath::FillType fill; + SkPathFillType fill; const char* name; } fills[] = { - nameValue(kWinding_FillType), - nameValue(kEvenOdd_FillType), - nameValue(kInverseWinding_FillType), - nameValue(kInverseEvenOdd_FillType), + nameValue(kWinding), + nameValue(kEvenOdd), + nameValue(kInverseWinding), + nameValue(kInverseEvenOdd), }; for (auto fill: fills ) { - SkDebugf("IsInverseFillType(%s) == %s\n", fill.name, SkPath::IsInverseFillType(fill.fill) ? + SkDebugf("IsInverseFillType(%s) == %s\n", fill.name, SkPathFillType_IsInverse(fill.fill) ? "true" : "false"); } } diff --git a/third_party/skia/docs/examples/Path_addCircle.cpp b/third_party/skia/docs/examples/Path_addCircle.cpp index dbea5b7676ce..73cca566f9f4 100644 --- a/third_party/skia/docs/examples/Path_addCircle.cpp +++ b/third_party/skia/docs/examples/Path_addCircle.cpp @@ -10,7 +10,7 @@ void draw(SkCanvas* canvas) { paint.setStrokeWidth(10); for (int size = 10; size < 300; size += 20) { SkPath path; - path.addCircle(128, 128, size, SkPath::kCW_Direction); + path.addCircle(128, 128, size, SkPathDirection::kCW); canvas->drawPath(path, paint); } } diff --git a/third_party/skia/docs/examples/Path_addOval_2.cpp b/third_party/skia/docs/examples/Path_addOval_2.cpp index ba07e545fd2c..1af997788c18 100644 --- a/third_party/skia/docs/examples/Path_addOval_2.cpp +++ b/third_party/skia/docs/examples/Path_addOval_2.cpp @@ -16,7 +16,7 @@ void draw(SkCanvas* canvas) { arrowPath.addPoly(arrow, SK_ARRAY_COUNT(arrow), true); arrowPaint.setPathEffect(SkPath1DPathEffect::Make(arrowPath, 176, 0, SkPath1DPathEffect::kRotate_Style)); - for (auto direction : { SkPath::kCW_Direction, SkPath::kCCW_Direction } ) { + for (auto direction : { SkPathDirection::kCW, SkPathDirection::kCCW } ) { for (unsigned start : { 0, 1, 2, 3 } ) { SkPath path; path.addOval(rect, direction, start); @@ -26,7 +26,7 @@ void draw(SkCanvas* canvas) { canvas->translate(64, 0); } canvas->translate(-256, 72); - canvas->drawString(SkPath::kCW_Direction == direction ? "clockwise" : "counterclockwise", + canvas->drawString(SkPathDirection::kCW == direction ? "clockwise" : "counterclockwise", 128, 0, textPaint); } } diff --git a/third_party/skia/docs/examples/Path_addPath_2.cpp b/third_party/skia/docs/examples/Path_addPath_2.cpp index e00ff7c41285..8d724046a37b 100644 --- a/third_party/skia/docs/examples/Path_addPath_2.cpp +++ b/third_party/skia/docs/examples/Path_addPath_2.cpp @@ -7,7 +7,7 @@ void draw(SkCanvas* canvas) { SkPaint paint; paint.setStyle(SkPaint::kStroke_Style); SkPath dest, path; - path.addOval({-80, 20, 0, 60}, SkPath::kCW_Direction, 1); + path.addOval({-80, 20, 0, 60}, SkPathDirection::kCW, 1); for (int i = 0; i < 2; i++) { dest.addPath(path, SkPath::kExtend_AddPathMode); dest.offset(100, 0); diff --git a/third_party/skia/docs/examples/Path_addPath_3.cpp b/third_party/skia/docs/examples/Path_addPath_3.cpp index 2fb476130b94..b865d2bb8829 100644 --- a/third_party/skia/docs/examples/Path_addPath_3.cpp +++ b/third_party/skia/docs/examples/Path_addPath_3.cpp @@ -7,7 +7,7 @@ void draw(SkCanvas* canvas) { SkPaint paint; paint.setStyle(SkPaint::kStroke_Style); SkPath dest, path; - path.addOval({20, 20, 200, 120}, SkPath::kCW_Direction, 1); + path.addOval({20, 20, 200, 120}, SkPathDirection::kCW, 1); for (int i = 0; i < 6; i++) { SkMatrix matrix; matrix.reset(); diff --git a/third_party/skia/docs/examples/Path_addRRect_2.cpp b/third_party/skia/docs/examples/Path_addRRect_2.cpp index 2f14659ea45f..43f7c8711d93 100644 --- a/third_party/skia/docs/examples/Path_addRRect_2.cpp +++ b/third_party/skia/docs/examples/Path_addRRect_2.cpp @@ -13,7 +13,7 @@ void draw(SkCanvas* canvas) { canvas->drawPath(path, paint); for (int start = 0; start < 8; ++start) { SkPath textPath; - textPath.addRRect(rrect, SkPath::kCW_Direction, start); + textPath.addRRect(rrect, SkPathDirection::kCW, start); SkPathMeasure pathMeasure(textPath, false); SkPoint position; SkVector tangent; diff --git a/third_party/skia/docs/examples/Path_addRect.cpp b/third_party/skia/docs/examples/Path_addRect.cpp index e51b8ef7ce5e..694e420d0742 100644 --- a/third_party/skia/docs/examples/Path_addRect.cpp +++ b/third_party/skia/docs/examples/Path_addRect.cpp @@ -11,10 +11,10 @@ void draw(SkCanvas* canvas) { paint.setStyle(SkPaint::kStroke_Style); paint.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 0)); SkPath path; - path.addRect({20, 20, 100, 100}, SkPath::kCW_Direction); + path.addRect({20, 20, 100, 100}, SkPathDirection::kCW); canvas->drawPath(path, paint); path.rewind(); - path.addRect({140, 20, 220, 100}, SkPath::kCCW_Direction); + path.addRect({140, 20, 220, 100}, SkPathDirection::kCCW); canvas->drawPath(path, paint); } } // END FIDDLE diff --git a/third_party/skia/docs/examples/Path_addRect_2.cpp b/third_party/skia/docs/examples/Path_addRect_2.cpp index 39d10448839c..798eaae6b542 100644 --- a/third_party/skia/docs/examples/Path_addRect_2.cpp +++ b/third_party/skia/docs/examples/Path_addRect_2.cpp @@ -14,7 +14,7 @@ void draw(SkCanvas* canvas) { arrowPath.addPoly(arrow, SK_ARRAY_COUNT(arrow), true); arrowPaint.setPathEffect(SkPath1DPathEffect::Make(arrowPath, 176, 0, SkPath1DPathEffect::kRotate_Style)); - for (auto direction : { SkPath::kCW_Direction, SkPath::kCCW_Direction } ) { + for (auto direction : { SkPathDirection::kCW, SkPathDirection::kCCW } ) { for (unsigned start : { 0, 1, 2, 3 } ) { SkPath path; path.addRect(rect, direction, start); diff --git a/third_party/skia/docs/examples/Path_addRect_3.cpp b/third_party/skia/docs/examples/Path_addRect_3.cpp index 102232859040..b5bb877a5df6 100644 --- a/third_party/skia/docs/examples/Path_addRect_3.cpp +++ b/third_party/skia/docs/examples/Path_addRect_3.cpp @@ -10,7 +10,7 @@ void draw(SkCanvas* canvas) { float intervals[] = { 5, 21.75f }; paint.setStyle(SkPaint::kStroke_Style); paint.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 0)); - for (auto direction : { SkPath::kCW_Direction, SkPath::kCCW_Direction } ) { + for (auto direction : { SkPathDirection::kCW, SkPathDirection::kCCW } ) { SkPath path; path.addRect(20, 20, 100, 100, direction); canvas->drawPath(path, paint); diff --git a/third_party/skia/docs/examples/Path_arcTo_4.cpp b/third_party/skia/docs/examples/Path_arcTo_4.cpp index 8de49278046d..37395d7cb62b 100644 --- a/third_party/skia/docs/examples/Path_arcTo_4.cpp +++ b/third_party/skia/docs/examples/Path_arcTo_4.cpp @@ -7,12 +7,12 @@ void draw(SkCanvas* canvas) { SkPaint paint; paint.setAntiAlias(true); paint.setStyle(SkPaint::kStroke_Style); - for (auto sweep: { SkPath::kCW_Direction, SkPath::kCCW_Direction } ) { + for (auto sweep: { SkPathDirection::kCW, SkPathDirection::kCCW } ) { for (auto arcSize : { SkPath::kSmall_ArcSize, SkPath::kLarge_ArcSize } ) { SkPath path; path.moveTo({120, 50}); path.arcTo(70, 40, 30, arcSize, sweep, 120.1f, 50); - if (SkPath::kCCW_Direction == sweep && SkPath::kLarge_ArcSize == arcSize) { + if (SkPathDirection::kCCW == sweep && SkPath::kLarge_ArcSize == arcSize) { paint.setColor(SK_ColorBLUE); paint.setStrokeWidth(3); } diff --git a/third_party/skia/docs/examples/Path_dumpHex.cpp b/third_party/skia/docs/examples/Path_dumpHex.cpp index 2578ab5c402e..25af4cdf4995 100644 --- a/third_party/skia/docs/examples/Path_dumpHex.cpp +++ b/third_party/skia/docs/examples/Path_dumpHex.cpp @@ -7,7 +7,7 @@ void draw(SkCanvas* canvas) { SkPath path, copy; path.lineTo(6.f / 7, 2.f / 3); path.dumpHex(); - copy.setFillType(SkPath::kWinding_FillType); + copy.setFillType(SkPathFillType::kWinding); copy.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0 copy.lineTo(SkBits2Float(0x3f5b6db7), SkBits2Float(0x3f2aaaab)); // 0.857143f, 0.666667f SkDebugf("path is " "%s" "equal to copy\n", path == copy ? "" : "not "); diff --git a/third_party/skia/docs/examples/Path_dump_2.cpp b/third_party/skia/docs/examples/Path_dump_2.cpp index 37defe25eb53..7220d0c78e3e 100644 --- a/third_party/skia/docs/examples/Path_dump_2.cpp +++ b/third_party/skia/docs/examples/Path_dump_2.cpp @@ -7,7 +7,7 @@ void draw(SkCanvas* canvas) { SkPath path, copy; path.lineTo(6.f / 7, 2.f / 3); path.dump(); - copy.setFillType(SkPath::kWinding_FillType); + copy.setFillType(SkPathFillType::kWinding); copy.moveTo(0, 0); copy.lineTo(0.857143f, 0.666667f); SkDebugf("path is " "%s" "equal to copy\n", path == copy ? "" : "not "); diff --git a/third_party/skia/docs/examples/Path_getConvexity.cpp b/third_party/skia/docs/examples/Path_getConvexity.cpp index ef0911670527..9f5987b95d62 100644 --- a/third_party/skia/docs/examples/Path_getConvexity.cpp +++ b/third_party/skia/docs/examples/Path_getConvexity.cpp @@ -6,8 +6,8 @@ REG_FIDDLE(Path_getConvexity, 256, 256, true, 0) { void draw(SkCanvas* canvas) { auto debugster = [](const char* prefix, const SkPath& path) -> void { SkDebugf("%s path convexity is %s\n", prefix, - SkPath::kUnknown_Convexity == path.getConvexity() ? "unknown" : - SkPath::kConvex_Convexity == path.getConvexity() ? "convex" : "concave"); }; + SkPathConvexityType::kUnknown == path.getConvexityType() ? "unknown" : + SkPathConvexityType::kConvex == path.getConvexityType() ? "convex" : "concave"); }; SkPath path; debugster("initial", path); path.lineTo(50, 0); diff --git a/third_party/skia/docs/examples/Path_getConvexityOrUnknown.cpp b/third_party/skia/docs/examples/Path_getConvexityOrUnknown.cpp index b03c8b4b1b62..4aca799eb87b 100644 --- a/third_party/skia/docs/examples/Path_getConvexityOrUnknown.cpp +++ b/third_party/skia/docs/examples/Path_getConvexityOrUnknown.cpp @@ -6,17 +6,17 @@ REG_FIDDLE(Path_getConvexityOrUnknown, 256, 256, true, 0) { void draw(SkCanvas* canvas) { auto debugster = [](const char* prefix, const SkPath& path) -> void { SkDebugf("%s path convexity is %s\n", prefix, - SkPath::kUnknown_Convexity == path.getConvexityOrUnknown() ? "unknown" : - SkPath::kConvex_Convexity == path.getConvexityOrUnknown() ? "convex" : "concave"); }; + SkPathConvexityType::kUnknown == path.getConvexityTypeOrUnknown() ? "unknown" : + SkPathConvexityType::kConvex == path.getConvexityTypeOrUnknown() ? "convex" : "concave"); }; SkPath path; debugster("initial", path); path.lineTo(50, 0); debugster("first line", path); - path.getConvexity(); + path.getConvexityType(); path.lineTo(50, 50); debugster("second line", path); path.lineTo(100, 50); - path.getConvexity(); + path.getConvexityType(); debugster("third line", path); } } // END FIDDLE diff --git a/third_party/skia/docs/examples/Path_getFillType.cpp b/third_party/skia/docs/examples/Path_getFillType.cpp index 6ac58d109c0e..f4e1cc7c228e 100644 --- a/third_party/skia/docs/examples/Path_getFillType.cpp +++ b/third_party/skia/docs/examples/Path_getFillType.cpp @@ -6,9 +6,9 @@ REG_FIDDLE(Path_getFillType, 256, 256, true, 0) { void draw(SkCanvas* canvas) { SkPath path; SkDebugf("default path fill type is %s\n", - path.getFillType() == SkPath::kWinding_FillType ? "kWinding_FillType" : - path.getFillType() == SkPath::kEvenOdd_FillType ? "kEvenOdd_FillType" : - path.getFillType() == SkPath::kInverseWinding_FillType ? "kInverseWinding_FillType" : - "kInverseEvenOdd_FillType"); + path.getNewFillType() == SkPathFillType::kWinding ? "kWinding" : + path.getNewFillType() == SkPathFillType::kEvenOdd ? "kEvenOdd" : + path.getNewFillType() == SkPathFillType::kInverseWinding ? "kInverseWinding" : + "kInverseEvenOdd"); } } // END FIDDLE diff --git a/third_party/skia/docs/examples/Path_isRect.cpp b/third_party/skia/docs/examples/Path_isRect.cpp index 9d9a6215cc2f..c099bb9739ce 100644 --- a/third_party/skia/docs/examples/Path_isRect.cpp +++ b/third_party/skia/docs/examples/Path_isRect.cpp @@ -6,12 +6,12 @@ REG_FIDDLE(Path_isRect, 256, 256, true, 0) { void draw(SkCanvas* canvas) { auto debugster = [](const char* prefix, const SkPath& path) -> void { SkRect rect; - SkPath::Direction direction; + SkPathDirection direction; bool isClosed; path.isRect(&rect, &isClosed, &direction) ? SkDebugf("%s is rect (%g, %g, %g, %g); is %s" "closed; direction %s\n", prefix, rect.fLeft, rect.fTop, rect.fRight, rect.fBottom, isClosed ? "" : "not ", - SkPath::kCW_Direction == direction ? "CW" : "CCW") : + SkPathDirection::kCW == direction ? "CW" : "CCW") : SkDebugf("%s is not rect\n", prefix); }; SkPath path; diff --git a/third_party/skia/docs/examples/Path_notequal_operator.cpp b/third_party/skia/docs/examples/Path_notequal_operator.cpp index dfba8c2242fc..dcd56ef32996 100644 --- a/third_party/skia/docs/examples/Path_notequal_operator.cpp +++ b/third_party/skia/docs/examples/Path_notequal_operator.cpp @@ -13,8 +13,8 @@ void draw(SkCanvas* canvas) { one.addRect({10, 20, 30, 40}); two.addRect({10, 20, 30, 40}); debugster("add rect", one, two); - one.setConvexity(SkPath::kConcave_Convexity); + one.setConvexityType(SkPathConvexityType::kConcave); debugster("setConvexity", one, two); - SkDebugf("convexity %c=\n", one.getConvexity() == two.getConvexity() ? '=' : '!'); + SkDebugf("convexity %c=\n", one.getConvexityType() == two.getConvexityType() ? '=' : '!'); } } // END FIDDLE diff --git a/third_party/skia/docs/examples/Path_rArcTo.cpp b/third_party/skia/docs/examples/Path_rArcTo.cpp index 8244674b34af..8eccb5b285a6 100644 --- a/third_party/skia/docs/examples/Path_rArcTo.cpp +++ b/third_party/skia/docs/examples/Path_rArcTo.cpp @@ -9,7 +9,7 @@ void draw(SkCanvas* canvas) { const SkPoint starts[] = {{20, 20}, {120, 20}, {70, 60}}; for (auto start : starts) { path.moveTo(start.fX, start.fY); - path.rArcTo(20, 20, 0, SkPath::kSmall_ArcSize, SkPath::kCCW_Direction, 60, 0); + path.rArcTo(20, 20, 0, SkPath::kSmall_ArcSize, SkPathDirection::kCCW, 60, 0); } canvas->drawPath(path, paint); } diff --git a/third_party/skia/docs/examples/Path_rMoveTo.cpp b/third_party/skia/docs/examples/Path_rMoveTo.cpp index fd4e06dc1c55..f59b579345a2 100644 --- a/third_party/skia/docs/examples/Path_rMoveTo.cpp +++ b/third_party/skia/docs/examples/Path_rMoveTo.cpp @@ -6,7 +6,7 @@ REG_FIDDLE(Path_rMoveTo, 256, 100, false, 0) { void draw(SkCanvas* canvas) { SkPath path; - path.addRect({20, 20, 80, 80}, SkPath::kCW_Direction, 2); + path.addRect({20, 20, 80, 80}, SkPathDirection::kCW, 2); path.rMoveTo(25, 2); SkVector arrow[] = {{0, -4}, {-20, 0}, {0, -3}, {-5, 5}, {5, 5}, {0, -3}, {20, 0}}; for (unsigned i = 0; i < SK_ARRAY_COUNT(arrow); ++i) { diff --git a/third_party/skia/docs/examples/Path_reset.cpp b/third_party/skia/docs/examples/Path_reset.cpp index 8448db13bea8..b720d3366cc5 100644 --- a/third_party/skia/docs/examples/Path_reset.cpp +++ b/third_party/skia/docs/examples/Path_reset.cpp @@ -5,7 +5,7 @@ REG_FIDDLE(Path_reset, 256, 256, true, 0) { void draw(SkCanvas* canvas) { SkPath path1, path2; - path1.setFillType(SkPath::kInverseWinding_FillType); + path1.setFillType(SkPathFillType::kInverseWinding); path1.addRect({10, 20, 30, 40}); SkDebugf("path1 %c= path2\n", path1 == path2 ? '=' : '!'); path1.reset(); diff --git a/third_party/skia/docs/examples/Path_rewind.cpp b/third_party/skia/docs/examples/Path_rewind.cpp index 6776191e054a..74a2683786ee 100644 --- a/third_party/skia/docs/examples/Path_rewind.cpp +++ b/third_party/skia/docs/examples/Path_rewind.cpp @@ -5,7 +5,7 @@ REG_FIDDLE(Path_rewind, 256, 256, true, 0) { void draw(SkCanvas* canvas) { SkPath path1, path2; - path1.setFillType(SkPath::kInverseWinding_FillType); + path1.setFillType(SkPathFillType::kInverseWinding); path1.addRect({10, 20, 30, 40}); SkDebugf("path1 %c= path2\n", path1 == path2 ? '=' : '!'); path1.rewind(); diff --git a/third_party/skia/docs/examples/Path_setConvexity.cpp b/third_party/skia/docs/examples/Path_setConvexity.cpp index 16e5c9f3082e..7fe5cee17262 100644 --- a/third_party/skia/docs/examples/Path_setConvexity.cpp +++ b/third_party/skia/docs/examples/Path_setConvexity.cpp @@ -6,15 +6,15 @@ REG_FIDDLE(Path_setConvexity, 256, 256, true, 0) { void draw(SkCanvas* canvas) { auto debugster = [](const char* prefix, const SkPath& path) -> void { SkDebugf("%s path convexity is %s\n", prefix, - SkPath::kUnknown_Convexity == path.getConvexity() ? "unknown" : - SkPath::kConvex_Convexity == path.getConvexity() ? "convex" : "concave"); }; + SkPathConvexityType::kUnknown == path.getConvexityTypeOrUnknown() ? "unknown" : + SkPathConvexityType::kConvex == path.getConvexityTypeOrUnknown() ? "convex" : "concave"); }; SkPoint quad[] = {{70, 70}, {20, 20}, {120, 20}, {120, 120}}; SkPath path; path.addPoly(quad, SK_ARRAY_COUNT(quad), true); debugster("initial", path); - path.setConvexity(SkPath::kConcave_Convexity); + path.setConvexityType(SkPathConvexityType::kConcave); debugster("after forcing concave", path); - path.setConvexity(SkPath::kUnknown_Convexity); + path.setConvexityType(SkPathConvexityType::kUnknown); debugster("after forcing unknown", path); } } // END FIDDLE diff --git a/third_party/skia/docs/examples/Path_setFillType.cpp b/third_party/skia/docs/examples/Path_setFillType.cpp index 0bed8a8af711..937fb69373a5 100644 --- a/third_party/skia/docs/examples/Path_setFillType.cpp +++ b/third_party/skia/docs/examples/Path_setFillType.cpp @@ -5,7 +5,7 @@ REG_FIDDLE(Path_setFillType, 256, 64, false, 0) { void draw(SkCanvas* canvas) { SkPath path; - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); SkPaint paint; paint.setColor(SK_ColorBLUE); canvas->drawPath(path, paint); diff --git a/third_party/skia/docs/examples/RRect_setRectRadii.cpp b/third_party/skia/docs/examples/RRect_setRectRadii.cpp index 2004e5f52f23..86f35c7bca77 100644 --- a/third_party/skia/docs/examples/RRect_setRectRadii.cpp +++ b/third_party/skia/docs/examples/RRect_setRectRadii.cpp @@ -15,10 +15,10 @@ void draw(SkCanvas* canvas) { SkRRect rrect; SkVector corners[] = {{15, 17}, {17, 19}, {19, 15}, {15, 15}}; rrect.setRectRadii({20, 20, 100, 100}, corners); - path.addRRect(rrect, SkPath::kCW_Direction); + path.addRRect(rrect, SkPathDirection::kCW); canvas->drawPath(path, paint); path.rewind(); - path.addRRect(rrect, SkPath::kCCW_Direction, 1); + path.addRRect(rrect, SkPathDirection::kCCW, 1); canvas->translate(120, 0); canvas->drawPath(path, paint); } diff --git a/third_party/skia/docs/examples/Region_op_6.cpp b/third_party/skia/docs/examples/Region_op_6.cpp index 13c9205140de..9fbf850749cd 100644 --- a/third_party/skia/docs/examples/Region_op_6.cpp +++ b/third_party/skia/docs/examples/Region_op_6.cpp @@ -9,9 +9,9 @@ void draw(SkCanvas* canvas) { paint.setTextSize(128); SkPath xPath, opPath; paint.getTextPath("X", 1, 20, 110, &xPath); - xPath.setFillType(SkPath::kInverseWinding_FillType); + xPath.setFillType(SkPathFillType::kInverseWinding); opPath.addCircle(64, 64, frame * 64); - opPath.setFillType(SkPath::kInverseWinding_FillType); + opPath.setFillType(SkPathFillType::kInverseWinding); SkRegion xRegion, opRegion, rectRegion; SkIRect drawBounds = {0, 0, 128, 128}; opRegion.setPath(opPath, SkRegion(drawBounds)); diff --git a/third_party/skia/example/SkiaSDLExample.cpp b/third_party/skia/example/SkiaSDLExample.cpp index 7aebbbcfaa27..6dcee9034db8 100644 --- a/third_party/skia/example/SkiaSDLExample.cpp +++ b/third_party/skia/example/SkiaSDLExample.cpp @@ -97,7 +97,7 @@ static SkPath create_star() { for (int i = 0; i < kNumPoints; ++i) { concavePath.lineTo(points[(2 * i) % kNumPoints]); } - concavePath.setFillType(SkPath::kEvenOdd_FillType); + concavePath.setFillType(SkPathFillType::kEvenOdd); SkASSERT(!concavePath.isConvex()); concavePath.close(); return concavePath; diff --git a/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.mm b/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.mm index a48a19713c80..53bb7d0bfd00 100644 --- a/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.mm +++ b/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.mm @@ -42,7 +42,7 @@ } sk_sp SkMetalDeviceToGrContext(id device, id queue, const GrContextOptions& opts) { - return GrContext::MakeMetal((void*)device, (void*)queue, opts); + return GrContext::MakeMetal((__bridge void*)device, (__bridge void*)queue, opts); } void SkMtkViewConfigForSkia(MTKView* mtkView) { diff --git a/third_party/skia/experimental/skottie_ios/SkottieMtkView.mm b/third_party/skia/experimental/skottie_ios/SkottieMtkView.mm index a0b619605246..dbecca70bac4 100644 --- a/third_party/skia/experimental/skottie_ios/SkottieMtkView.mm +++ b/third_party/skia/experimental/skottie_ios/SkottieMtkView.mm @@ -22,11 +22,6 @@ @implementation SkottieMtkView { bool fPaused; } --(void)dealloc { - fAnimation = nullptr; - [super dealloc]; -} - - (void)drawRect:(CGRect)rect { [super drawRect:rect]; // TODO(halcanary): Use the rect and the InvalidationController to speed up rendering. diff --git a/third_party/skia/experimental/skottie_ios/main.mm b/third_party/skia/experimental/skottie_ios/main.mm index ce8934b7b53c..01da331ecb3b 100644 --- a/third_party/skia/experimental/skottie_ios/main.mm +++ b/third_party/skia/experimental/skottie_ios/main.mm @@ -62,11 +62,6 @@ @implementation AppViewController { sk_sp fGrContext; } -- (void)dealloc { - fGrContext = nullptr; - [super dealloc]; -} - - (void)loadView { [self setView:[[UIView alloc] init]]; } diff --git a/third_party/skia/experimental/svg/model/SkSVGCircle.cpp b/third_party/skia/experimental/svg/model/SkSVGCircle.cpp index 66e7d2876cce..47da07479c96 100644 --- a/third_party/skia/experimental/svg/model/SkSVGCircle.cpp +++ b/third_party/skia/experimental/svg/model/SkSVGCircle.cpp @@ -54,7 +54,7 @@ std::tuple SkSVGCircle::resolve(const SkSVGLengthContext& lct return std::make_tuple(SkPoint::Make(cx, cy), r); } void SkSVGCircle::onDraw(SkCanvas* canvas, const SkSVGLengthContext& lctx, - const SkPaint& paint, SkPath::FillType) const { + const SkPaint& paint, SkPathFillType) const { SkPoint pos; SkScalar r; std::tie(pos, r) = this->resolve(lctx); diff --git a/third_party/skia/experimental/svg/model/SkSVGCircle.h b/third_party/skia/experimental/svg/model/SkSVGCircle.h index c53cf4ab2113..fc774a16bb88 100644 --- a/third_party/skia/experimental/svg/model/SkSVGCircle.h +++ b/third_party/skia/experimental/svg/model/SkSVGCircle.h @@ -26,7 +26,7 @@ class SkSVGCircle final : public SkSVGShape { void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override; void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&, - SkPath::FillType) const override; + SkPathFillType) const override; SkPath onAsPath(const SkSVGRenderContext&) const override; diff --git a/third_party/skia/experimental/svg/model/SkSVGEllipse.cpp b/third_party/skia/experimental/svg/model/SkSVGEllipse.cpp index b7d4faded539..60d30486a0fe 100644 --- a/third_party/skia/experimental/svg/model/SkSVGEllipse.cpp +++ b/third_party/skia/experimental/svg/model/SkSVGEllipse.cpp @@ -67,7 +67,7 @@ SkRect SkSVGEllipse::resolve(const SkSVGLengthContext& lctx) const { } void SkSVGEllipse::onDraw(SkCanvas* canvas, const SkSVGLengthContext& lctx, - const SkPaint& paint, SkPath::FillType) const { + const SkPaint& paint, SkPathFillType) const { canvas->drawOval(this->resolve(lctx), paint); } diff --git a/third_party/skia/experimental/svg/model/SkSVGEllipse.h b/third_party/skia/experimental/svg/model/SkSVGEllipse.h index c6bd2b3be1de..ec0a753caaeb 100644 --- a/third_party/skia/experimental/svg/model/SkSVGEllipse.h +++ b/third_party/skia/experimental/svg/model/SkSVGEllipse.h @@ -27,7 +27,7 @@ class SkSVGEllipse final : public SkSVGShape { void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override; void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&, - SkPath::FillType) const override; + SkPathFillType) const override; SkPath onAsPath(const SkSVGRenderContext&) const override; diff --git a/third_party/skia/experimental/svg/model/SkSVGLine.cpp b/third_party/skia/experimental/svg/model/SkSVGLine.cpp index 3d0efa117a62..05fc1f924f3a 100644 --- a/third_party/skia/experimental/svg/model/SkSVGLine.cpp +++ b/third_party/skia/experimental/svg/model/SkSVGLine.cpp @@ -64,7 +64,7 @@ std::tuple SkSVGLine::resolve(const SkSVGLengthContext& lctx) } void SkSVGLine::onDraw(SkCanvas* canvas, const SkSVGLengthContext& lctx, - const SkPaint& paint, SkPath::FillType) const { + const SkPaint& paint, SkPathFillType) const { SkPoint p0, p1; std::tie(p0, p1) = this->resolve(lctx); diff --git a/third_party/skia/experimental/svg/model/SkSVGLine.h b/third_party/skia/experimental/svg/model/SkSVGLine.h index 08e0fe6b3a07..c4de847c834b 100644 --- a/third_party/skia/experimental/svg/model/SkSVGLine.h +++ b/third_party/skia/experimental/svg/model/SkSVGLine.h @@ -27,7 +27,7 @@ class SkSVGLine final : public SkSVGShape { void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override; void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&, - SkPath::FillType) const override; + SkPathFillType) const override; SkPath onAsPath(const SkSVGRenderContext&) const override; diff --git a/third_party/skia/experimental/svg/model/SkSVGPath.cpp b/third_party/skia/experimental/svg/model/SkSVGPath.cpp index f3f45240996c..07fc348892e1 100644 --- a/third_party/skia/experimental/svg/model/SkSVGPath.cpp +++ b/third_party/skia/experimental/svg/model/SkSVGPath.cpp @@ -26,7 +26,7 @@ void SkSVGPath::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) { } void SkSVGPath::onDraw(SkCanvas* canvas, const SkSVGLengthContext&, const SkPaint& paint, - SkPath::FillType fillType) const { + SkPathFillType fillType) const { // the passed fillType follows inheritance rules and needs to be applied at draw time. fPath.setFillType(fillType); canvas->drawPath(fPath, paint); diff --git a/third_party/skia/experimental/svg/model/SkSVGPath.h b/third_party/skia/experimental/svg/model/SkSVGPath.h index 5b4163719200..1b7b17d6f97e 100644 --- a/third_party/skia/experimental/svg/model/SkSVGPath.h +++ b/third_party/skia/experimental/svg/model/SkSVGPath.h @@ -22,7 +22,7 @@ class SkSVGPath final : public SkSVGShape { void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override; void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&, - SkPath::FillType) const override; + SkPathFillType) const override; SkPath onAsPath(const SkSVGRenderContext&) const override; diff --git a/third_party/skia/experimental/svg/model/SkSVGPoly.cpp b/third_party/skia/experimental/svg/model/SkSVGPoly.cpp index 6bacb1aaabab..29af890cf176 100644 --- a/third_party/skia/experimental/svg/model/SkSVGPoly.cpp +++ b/third_party/skia/experimental/svg/model/SkSVGPoly.cpp @@ -33,7 +33,7 @@ void SkSVGPoly::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) { } void SkSVGPoly::onDraw(SkCanvas* canvas, const SkSVGLengthContext&, const SkPaint& paint, - SkPath::FillType fillType) const { + SkPathFillType fillType) const { // the passed fillType follows inheritance rules and needs to be applied at draw time. fPath.setFillType(fillType); canvas->drawPath(fPath, paint); diff --git a/third_party/skia/experimental/svg/model/SkSVGPoly.h b/third_party/skia/experimental/svg/model/SkSVGPoly.h index f47b7647e276..ef9c3a5c1971 100644 --- a/third_party/skia/experimental/svg/model/SkSVGPoly.h +++ b/third_party/skia/experimental/svg/model/SkSVGPoly.h @@ -30,7 +30,7 @@ class SkSVGPoly final : public SkSVGShape { void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override; void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&, - SkPath::FillType) const override; + SkPathFillType) const override; SkPath onAsPath(const SkSVGRenderContext&) const override; diff --git a/third_party/skia/experimental/svg/model/SkSVGRect.cpp b/third_party/skia/experimental/svg/model/SkSVGRect.cpp index 24267d07ecb6..5c518bd1fe1f 100644 --- a/third_party/skia/experimental/svg/model/SkSVGRect.cpp +++ b/third_party/skia/experimental/svg/model/SkSVGRect.cpp @@ -83,7 +83,7 @@ SkRRect SkSVGRect::resolve(const SkSVGLengthContext& lctx) const { } void SkSVGRect::onDraw(SkCanvas* canvas, const SkSVGLengthContext& lctx, - const SkPaint& paint, SkPath::FillType) const { + const SkPaint& paint, SkPathFillType) const { canvas->drawRRect(this->resolve(lctx), paint); } diff --git a/third_party/skia/experimental/svg/model/SkSVGRect.h b/third_party/skia/experimental/svg/model/SkSVGRect.h index 7d749b0f29ce..fca15e04738b 100644 --- a/third_party/skia/experimental/svg/model/SkSVGRect.h +++ b/third_party/skia/experimental/svg/model/SkSVGRect.h @@ -29,7 +29,7 @@ class SkSVGRect final : public SkSVGShape { void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override; void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&, - SkPath::FillType) const override; + SkPathFillType) const override; SkPath onAsPath(const SkSVGRenderContext&) const override; diff --git a/third_party/skia/experimental/svg/model/SkSVGShape.h b/third_party/skia/experimental/svg/model/SkSVGShape.h index bfbad0eb2450..ff57d5bfa5db 100644 --- a/third_party/skia/experimental/svg/model/SkSVGShape.h +++ b/third_party/skia/experimental/svg/model/SkSVGShape.h @@ -26,7 +26,7 @@ class SkSVGShape : public SkSVGTransformableNode { void onRender(const SkSVGRenderContext&) const final; virtual void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&, - SkPath::FillType) const = 0; + SkPathFillType) const = 0; private: typedef SkSVGTransformableNode INHERITED; diff --git a/third_party/skia/experimental/svg/model/SkSVGTypes.h b/third_party/skia/experimental/svg/model/SkSVGTypes.h index 9ac76540bcd8..00a09bfb3736 100644 --- a/third_party/skia/experimental/svg/model/SkSVGTypes.h +++ b/third_party/skia/experimental/svg/model/SkSVGTypes.h @@ -239,9 +239,9 @@ class SkSVGFillRule { Type type() const { return fType; } - SkPath::FillType asFillType() const { + SkPathFillType asFillType() const { SkASSERT(fType != Type::kInherit); // should never be called for unresolved values. - return fType == Type::kEvenOdd ? SkPath::kEvenOdd_FillType : SkPath::kWinding_FillType; + return fType == Type::kEvenOdd ? SkPathFillType::kEvenOdd : SkPathFillType::kWinding; } private: diff --git a/third_party/skia/fuzz/FuzzCommon.cpp b/third_party/skia/fuzz/FuzzCommon.cpp index 3a2108e9bf00..5478cc0887df 100644 --- a/third_party/skia/fuzz/FuzzCommon.cpp +++ b/third_party/skia/fuzz/FuzzCommon.cpp @@ -33,8 +33,8 @@ void FuzzNicePath(Fuzz* fuzz, SkPath* path, int maxOps) { return; } uint8_t fillType; - fuzz->nextRange(&fillType, 0, (uint8_t)SkPath::kInverseEvenOdd_FillType); - path->setFillType((SkPath::FillType)fillType); + fuzz->nextRange(&fillType, 0, (uint8_t)SkPathFillType::kInverseEvenOdd); + path->setFillType((SkPathFillType)fillType); uint8_t numOps; fuzz->nextRange(&numOps, 0, maxOps); for (uint8_t i = 0; i < numOps; ++i) { @@ -52,7 +52,7 @@ void FuzzNicePath(Fuzz* fuzz, SkPath* path, int maxOps) { SkMatrix m; SkRRect rr; SkRect r; - SkPath::Direction dir; + SkPathDirection dir; unsigned int ui; SkScalar a, b, c, d, e, f; switch (op) { @@ -112,32 +112,32 @@ void FuzzNicePath(Fuzz* fuzz, SkPath* path, int maxOps) { case 13: fuzz_nice_rect(fuzz, &r); fuzz->nextRange(&ui, 0, 1); - dir = static_cast(ui); + dir = static_cast(ui); path->addRect(r, dir); break; case 14: fuzz->nextRange(&ui, 0, 1); - dir = static_cast(ui); + dir = static_cast(ui); fuzz_nice_rect(fuzz, &r); fuzz->next(&ui); path->addRect(r, dir, ui); break; case 15: fuzz->nextRange(&ui, 0, 1); - dir = static_cast(ui); + dir = static_cast(ui); fuzz_nice_rect(fuzz, &r); path->addOval(r, dir); break; case 16: fuzz->nextRange(&ui, 0, 1); - dir = static_cast(ui); + dir = static_cast(ui); fuzz_nice_rect(fuzz, &r); fuzz->next(&ui); path->addOval(r, dir, ui); break; case 17: fuzz->nextRange(&ui, 0, 1); - dir = static_cast(ui); + dir = static_cast(ui); fuzz_nice_float(fuzz, &a, &b, &c); path->addCircle(a, b, c, dir); break; @@ -150,18 +150,18 @@ void FuzzNicePath(Fuzz* fuzz, SkPath* path, int maxOps) { fuzz_nice_float(fuzz, &a, &b); fuzz_nice_rect(fuzz, &r); fuzz->nextRange(&ui, 0, 1); - dir = static_cast(ui); + dir = static_cast(ui); path->addRoundRect(r, a, b, dir); break; case 20: FuzzNiceRRect(fuzz, &rr); fuzz->nextRange(&ui, 0, 1); - dir = static_cast(ui); + dir = static_cast(ui); path->addRRect(rr, dir); break; case 21: fuzz->nextRange(&ui, 0, 1); - dir = static_cast(ui); + dir = static_cast(ui); FuzzNiceRRect(fuzz, &rr); path->addRRect(rr, dir, ui); break; diff --git a/third_party/skia/fuzz/FuzzMain.cpp b/third_party/skia/fuzz/FuzzMain.cpp index 923524b07d6b..456736642de5 100644 --- a/third_party/skia/fuzz/FuzzMain.cpp +++ b/third_party/skia/fuzz/FuzzMain.cpp @@ -55,6 +55,7 @@ static constexpr char g_type_message[] = "How to interpret --bytes, one of:\n" "path_deserialize\n" "region_deserialize\n" "region_set_path\n" + "skdescriptor_deserialize\n" "skp\n" "sksl2glsl\n" "sksl2metal\n" @@ -83,11 +84,12 @@ static void fuzz_json(sk_sp); static void fuzz_path_deserialize(sk_sp); static void fuzz_region_deserialize(sk_sp); static void fuzz_region_set_path(sk_sp); +static void fuzz_skdescriptor_deserialize(sk_sp); static void fuzz_skp(sk_sp); static void fuzz_sksl2glsl(sk_sp); static void fuzz_sksl2metal(sk_sp); -static void fuzz_sksl2spirv(sk_sp); static void fuzz_sksl2pipeline(sk_sp); +static void fuzz_sksl2spirv(sk_sp); static void fuzz_textblob_deserialize(sk_sp); static void print_api_names(); @@ -199,6 +201,10 @@ static int fuzz_file(SkString path, SkString type) { SkDebugf("I would prefer not to.\n"); return 0; } + if (type.equals("skdescriptor_deserialize")) { + fuzz_skdescriptor_deserialize(bytes); + return 0; + } #if defined(SK_ENABLE_SKOTTIE) if (type.equals("skottie_json")) { fuzz_skottie_json(bytes); @@ -244,6 +250,7 @@ static std::map cf_api_map = { {"api_pathop", "Pathop"}, {"api_polyutils", "PolyUtils"}, {"api_raster_n32_canvas", "RasterN32Canvas"}, + {"api_skdescriptor", "SkDescriptor"}, {"jpeg_encoder", "JPEGEncoder"}, {"png_encoder", "PNGEncoder"}, {"skia_pathop_fuzzer", "LegacyChromiumPathop"}, @@ -261,6 +268,7 @@ static std::map cf_map = { {"path_deserialize", "path_deserialize"}, {"region_deserialize", "region_deserialize"}, {"region_set_path", "region_set_path"}, + {"skdescriptor_deserialize", "skdescriptor_deserialize"}, {"skjson", "json"}, {"sksl2glsl", "sksl2glsl"}, {"sksl2metal", "sksl2metal"}, @@ -761,3 +769,11 @@ static void fuzz_sksl2pipeline(sk_sp bytes) { SkDebugf("[terminated] Could not compile input to pipeline stage.\n"); } } + +void FuzzSkDescriptorDeserialize(sk_sp bytes); + +static void fuzz_skdescriptor_deserialize(sk_sp bytes) { + FuzzSkDescriptorDeserialize(bytes); + SkDebugf("[terminated] Did not crash while deserializing an SkDescriptor.\n"); +} + diff --git a/third_party/skia/fuzz/FuzzPathop.cpp b/third_party/skia/fuzz/FuzzPathop.cpp index 63862a986b9e..30dc2a944e32 100644 --- a/third_party/skia/fuzz/FuzzPathop.cpp +++ b/third_party/skia/fuzz/FuzzPathop.cpp @@ -25,8 +25,8 @@ DEF_FUZZ(Pathop, fuzz) { for (uint8_t i = 0; i < ops && !fuzz->exhausted(); i++) { SkPath path; FuzzEvilPath(fuzz, &path, SkPath::Verb::kDone_Verb); - SkPath::FillType ft; - fuzz->nextRange(&ft, 0, SkPath::kInverseEvenOdd_FillType); + SkPathFillType ft; + fuzz->nextRange(&ft, 0, (int)SkPathFillType::kInverseEvenOdd); path.setFillType(ft); SkPathOp op; @@ -41,8 +41,8 @@ DEF_FUZZ(Pathop, fuzz) { case 1: { SkPath path; FuzzEvilPath(fuzz, &path, SkPath::Verb::kDone_Verb); - SkPath::FillType ft; - fuzz->nextRange(&ft, 0, SkPath::kInverseEvenOdd_FillType); + SkPathFillType ft; + fuzz->nextRange(&ft, 0, (int)SkPathFillType::kInverseEvenOdd); path.setFillType(ft); SkPath result; @@ -57,13 +57,13 @@ DEF_FUZZ(Pathop, fuzz) { case 2: { SkPath path; FuzzEvilPath(fuzz, &path, SkPath::Verb::kDone_Verb); - SkPath::FillType ft; - fuzz->nextRange(&ft, 0, SkPath::kInverseEvenOdd_FillType); + SkPathFillType ft; + fuzz->nextRange(&ft, 0, SkPathFillType::kInverseEvenOdd); path.setFillType(ft); SkPath path2; FuzzEvilPath(fuzz, &path2, SkPath::Verb::kDone_Verb); - fuzz->nextRange(&ft, 0, SkPath::kInverseEvenOdd_FillType); + fuzz->nextRange(&ft, 0, SkPathFillType::kInverseEvenOdd); path.setFillType(ft); SkPathOp op; @@ -83,8 +83,8 @@ DEF_FUZZ(Pathop, fuzz) { case 3: { SkPath path; FuzzEvilPath(fuzz, &path, SkPath::Verb::kDone_Verb); - SkPath::FillType ft; - fuzz->nextRange(&ft, 0, SkPath::kInverseEvenOdd_FillType); + SkPathFillType ft; + fuzz->nextRange(&ft, 0, SkPathFillType::kInverseEvenOdd); path.setFillType(ft); SkPath result; @@ -99,8 +99,8 @@ DEF_FUZZ(Pathop, fuzz) { case 4: { SkPath path; FuzzEvilPath(fuzz, &path, SkPath::Verb::kDone_Verb); - SkPath::FillType ft; - fuzz->nextRange(&ft, 0, SkPath::kInverseEvenOdd_FillType); + SkPathFillType ft; + fuzz->nextRange(&ft, 0, SkPathFillType::kInverseEvenOdd); path.setFillType(ft); SkRect result; diff --git a/third_party/skia/fuzz/FuzzSkDescriptor.cpp b/third_party/skia/fuzz/FuzzSkDescriptor.cpp new file mode 100644 index 000000000000..f72f53a01253 --- /dev/null +++ b/third_party/skia/fuzz/FuzzSkDescriptor.cpp @@ -0,0 +1,77 @@ +/* + * 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 "fuzz/Fuzz.h" +#include "src/core/SkDescriptor.h" +#include "src/core/SkScalerContext.h" + +DEF_FUZZ(SkDescriptor, fuzz) { + int32_t numEntries; + fuzz->next(&numEntries); + + // Limit this to keep the fuzz operations fast. + if (numEntries < 0 || numEntries > 300) { + return; + } + + size_t len = SkDescriptor::ComputeOverhead(numEntries); + auto desc = SkDescriptor::Alloc(len); + for (int32_t i = 0; iexhausted(); i++) { + uint32_t tag; + fuzz->next(&tag); + // Valid use of the API requires that tag is truthy and that + // the length is aligned to 4. If the fuzzed data doesn't conform, + // return to signal that this is "boring" data. + if (!tag) { + return; + } + size_t length; + fuzz->next(&length); + if (SkAlign4(length) != length) { + return; + } + + uint8_t choice; + fuzz->nextRange(&choice, 0, 2); + switch(choice) { + case 0: { // use nullptr + desc->addEntry(tag, length, nullptr); + break; + } + case 1: { // use SkScalerContextRec + SkScalerContextRec rec; + fuzz->next(&rec); + desc->addEntry(tag, sizeof(rec), &rec); + break; + } + case 2: { // use arbitrary data + if (fuzz->remaining() < length) { + // Can't initialize all that we requested, so bail out. + return; + } + uint8_t* bytes = new uint8_t[length]; + fuzz->nextN(bytes, length); + desc->addEntry(tag, length, bytes); + break; + } + default: { + SK_ABORT("Did you update the range in FuzzSkDescriptor?"); + } + } + } + + // Exercise the API to make sure we don't step out of bounds, etc. + + desc->computeChecksum(); + desc->isValid(); + + uint32_t tagToFind; + fuzz->next(&tagToFind); + + uint32_t ignore; + desc->findEntry(tagToFind, &ignore); +} diff --git a/third_party/skia/fuzz/oss_fuzz/FuzzAPISkDescriptor.cpp b/third_party/skia/fuzz/oss_fuzz/FuzzAPISkDescriptor.cpp new file mode 100644 index 000000000000..e1e76411ceca --- /dev/null +++ b/third_party/skia/fuzz/oss_fuzz/FuzzAPISkDescriptor.cpp @@ -0,0 +1,18 @@ +/* + * 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 "fuzz/Fuzz.h" + +void fuzz_SkDescriptor(Fuzz* f); + +#if defined(IS_FUZZING_WITH_LIBFUZZER) +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + auto fuzz = Fuzz(SkData::MakeWithoutCopy(data, size)); + fuzz_SkDescriptor(&fuzz); + return 0; +} +#endif diff --git a/third_party/skia/fuzz/oss_fuzz/FuzzSkDescriptorDeserialize.cpp b/third_party/skia/fuzz/oss_fuzz/FuzzSkDescriptorDeserialize.cpp new file mode 100644 index 000000000000..9505eb715798 --- /dev/null +++ b/third_party/skia/fuzz/oss_fuzz/FuzzSkDescriptorDeserialize.cpp @@ -0,0 +1,36 @@ +/* + * 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/core/SkDescriptor.h" +#include "src/core/SkRemoteGlyphCache.h" + +void FuzzSkDescriptorDeserialize(sk_sp bytes) { + SkAutoDescriptor aDesc; + bool ok = SkFuzzDeserializeSkDescriptor(bytes, &aDesc); + if (!ok) { + return; + } + + auto desc = aDesc.getDesc(); + + desc->computeChecksum(); + desc->isValid(); + + // An arbitrary number + uint32_t tagToFind = 117; + + uint32_t ignore; + desc->findEntry(tagToFind, &ignore); +} + +#if defined(IS_FUZZING_WITH_LIBFUZZER) +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + auto bytes = SkData::MakeWithoutCopy(data, size); + FuzzSkDescriptorDeserialize(bytes); + return 0; +} +#endif diff --git a/third_party/skia/gm/aaa.cpp b/third_party/skia/gm/aaa.cpp index d056b0b53a75..00f4474f3b96 100644 --- a/third_party/skia/gm/aaa.cpp +++ b/third_party/skia/gm/aaa.cpp @@ -64,7 +64,7 @@ DEF_SIMPLE_GM(analytic_antialias_convex, canvas, W, H) { SkBits2Float(0x4344f079), SkBits2Float(0x4397e900), SkBits2Float(0x3f3504f3)); path.close(); // Manually setting convexity is required. Otherwise, this path will be considered concave. - path.setConvexity(SkPath::kConvex_Convexity); + path.setConvexityType(SkPathConvexityType::kConvex); canvas->drawPath(path, p); // skbug.com/7573 @@ -143,7 +143,7 @@ DEF_SIMPLE_GM(analytic_antialias_inverse, canvas, W, H) { SkPath path; path.addCircle(100, 100, 30); - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); canvas->drawPath(path, p); canvas->restore(); } diff --git a/third_party/skia/gm/arcto.cpp b/third_party/skia/gm/arcto.cpp index f28d86cbeef0..03942fe1cd2d 100644 --- a/third_party/skia/gm/arcto.cpp +++ b/third_party/skia/gm/arcto.cpp @@ -79,13 +79,13 @@ DEF_SIMPLE_GM(arcto, canvas, 500, 600) { SkScalar ovalHeight = oval.height() / oHeight; svgArc.moveTo(oval.fLeft, oval.fTop); svgArc.arcTo(oval.width() / 2, ovalHeight, SkIntToScalar(angle), SkPath::kSmall_ArcSize, - SkPath::kCW_Direction, oval.right(), oval.bottom()); + SkPathDirection::kCW, oval.right(), oval.bottom()); canvas->drawPath(svgArc, paint); svgArc.reset(); svgArc.moveTo(oval.fLeft + 100, oval.fTop + 100); svgArc.arcTo(oval.width() / 2, ovalHeight, SkIntToScalar(angle), SkPath::kLarge_ArcSize, - SkPath::kCCW_Direction, oval.right(), oval.bottom() + 100); + SkPathDirection::kCCW, oval.right(), oval.bottom() + 100); canvas->drawPath(svgArc, paint); oval.offset(50, 0); svgArc.reset(); @@ -114,12 +114,12 @@ DEF_SIMPLE_GM(arcto, canvas, 500, 600) { paint.setStrokeCap(SkPaint::kRound_Cap); SkPath path; path.moveTo(100, 100); - path.arcTo(0, 0, 0, SkPath::kLarge_ArcSize, SkPath::kCW_Direction, 200, 200); + path.arcTo(0, 0, 0, SkPath::kLarge_ArcSize, SkPathDirection::kCW, 200, 200); canvas->drawPath(path, paint); path.reset(); path.moveTo(200, 100); - path.arcTo(80, 80, 0, SkPath::kLarge_ArcSize, SkPath::kCW_Direction, 200, 100); + path.arcTo(80, 80, 0, SkPath::kLarge_ArcSize, SkPathDirection::kCW, 200, 100); canvas->drawPath(path, paint); } diff --git a/third_party/skia/gm/beziereffects.cpp b/third_party/skia/gm/beziereffects.cpp index 70bcf77f9ee0..d9442196be65 100644 --- a/third_party/skia/gm/beziereffects.cpp +++ b/third_party/skia/gm/beziereffects.cpp @@ -71,12 +71,11 @@ class BezierTestOp : public GrMeshDrawOp { } protected: - BezierTestOp(sk_sp gp, const SkRect& rect, const SkPMColor4f& color, - int32_t classID) + BezierTestOp(GrClipEdgeType et, const SkRect& rect, const SkPMColor4f& color, int32_t classID) : INHERITED(classID) , fRect(rect) , fColor(color) - , fGeometryProcessor(std::move(gp)) + , fEdgeType(et) , fProcessorSet(SkBlendMode::kSrc) { this->setBounds(rect, HasAABloat::kYes, IsHairline::kNo); } @@ -86,7 +85,7 @@ class BezierTestOp : public GrMeshDrawOp { this, chainBounds, std::move(fProcessorSet)); } - sk_sp gp() const { return fGeometryProcessor; } + GrClipEdgeType edgeType() const { return fEdgeType; } const SkRect& rect() const { return fRect; } const SkPMColor4f& color() const { return fColor; } @@ -94,7 +93,7 @@ class BezierTestOp : public GrMeshDrawOp { private: SkRect fRect; SkPMColor4f fColor; - sk_sp fGeometryProcessor; + GrClipEdgeType fEdgeType; GrProcessorSet fProcessorSet; typedef GrMeshDrawOp INHERITED; @@ -103,7 +102,6 @@ class BezierTestOp : public GrMeshDrawOp { /** * This GM directly exercises effects that draw Bezier curves in the GPU backend. */ - class BezierConicTestOp : public BezierTestOp { public: DEFINE_OP_CLASS_ID @@ -111,21 +109,21 @@ class BezierConicTestOp : public BezierTestOp { const char* name() const override { return "BezierConicTestOp"; } static std::unique_ptr Make(GrRecordingContext* context, - sk_sp gp, + GrClipEdgeType et, const SkRect& rect, const SkPMColor4f& color, const SkMatrix& klm) { GrOpMemoryPool* pool = context->priv().opMemoryPool(); - return pool->allocate(std::move(gp), rect, color, klm); + return pool->allocate(et, rect, color, klm); } private: friend class ::GrOpMemoryPool; // for ctor - BezierConicTestOp(sk_sp gp, const SkRect& rect, + BezierConicTestOp(GrClipEdgeType et, const SkRect& rect, const SkPMColor4f& color, const SkMatrix& klm) - : INHERITED(std::move(gp), rect, color, ClassID()), fKLM(klm) {} + : INHERITED(et, rect, color, ClassID()), fKLM(klm) {} struct Vertex { SkPoint fPosition; @@ -133,7 +131,14 @@ class BezierConicTestOp : public BezierTestOp { }; void onPrepareDraws(Target* target) override { - SkASSERT(this->gp()->vertexStride() == sizeof(Vertex)); + GrGeometryProcessor* gp = GrConicEffect::Make(target->allocator(), this->color(), + SkMatrix::I(), this->edgeType(), + target->caps(), SkMatrix::I(), false); + if (!gp) { + return; + } + + SkASSERT(gp->vertexStride() == sizeof(Vertex)); QuadHelper helper(target, sizeof(Vertex), 1); Vertex* verts = reinterpret_cast(helper.vertices()); if (!verts) { @@ -147,7 +152,7 @@ class BezierConicTestOp : public BezierTestOp { fKLM.mapHomogeneousPoints((SkPoint3* ) verts[v].fKLM, &pt3, 1); } - helper.recordDraw(target, this->gp()); + helper.recordDraw(target, gp); } SkMatrix fKLM; @@ -169,76 +174,78 @@ class BezierConicEffects : public GpuGM { } protected: + static const int kNumConics = 10; + static const int kCellWidth = 128; + static const int kCellHeight = 128; + SkString onShortName() override { return SkString("bezier_conic_effects"); } SkISize onISize() override { - return SkISize::Make(800, 800); + return SkISize::Make(kGrClipEdgeTypeCnt*kCellWidth, kNumConics*kCellHeight); } - void onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas) override { - struct Vertex { - SkPoint fPosition; - float fKLM[4]; // The last value is ignored. The effect expects a vec4f. + + const SkScalar w = kCellWidth, h = kCellHeight; + const SkPMColor4f kOpaqueBlack = SkPMColor4f::FromBytes_RGBA(0xff000000); + + const SkPoint baseControlPts[kNumConics][3] = { + { { 0.31f * w, 0.01f * h}, { 0.48f * w, 0.74f * h }, { 0.19f * w, 0.33f * h } }, + { { 0.00f * w, 0.07f * h}, { 0.30f * w, 0.70f * h }, { 0.47f * w, 0.37f * h } }, + { { 0.15f * w, 0.23f * h}, { 0.49f * w, 0.87f * h }, { 0.85f * w, 0.66f * h } }, + { { 0.09f * w, 0.15f * h}, { 0.42f * w, 0.33f * h }, { 0.17f * w, 0.38f * h } }, + { { 0.98f * w, 0.54f * h}, { 0.83f * w, 0.91f * h }, { 0.62f * w, 0.40f * h } }, + { { 0.96f * w, 0.65f * h}, { 0.03f * w, 0.79f * h }, { 0.24f * w, 0.56f * h } }, + { { 0.57f * w, 0.12f * h}, { 0.33f * w, 0.67f * h }, { 0.59f * w, 0.33f * h } }, + { { 0.12f * w, 0.72f * h}, { 0.69f * w, 0.85f * h }, { 0.46f * w, 0.32f * h } }, + { { 0.27f * w, 0.49f * h}, { 0.41f * w, 0.02f * h }, { 0.11f * w, 0.42f * h } }, + { { 0.40f * w, 0.13f * h}, { 0.83f * w, 0.30f * h }, { 0.31f * w, 0.68f * h } }, }; + const SkScalar weights[kNumConics] = { 0.62f, 0.01f, 0.95f, 1.48f, 0.37f, + 0.66f, 0.15f, 0.14f, 0.61f, 1.4f }; - constexpr int kNumConics = 10; - SkRandom rand; - - // Mult by 3 for each edge effect type - int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumConics*3))); - int numRows = SkScalarCeilToInt(SkIntToScalar(kNumConics*3) / numCols); - SkScalar w = SkIntToScalar(renderTargetContext->width()) / numCols; - SkScalar h = SkIntToScalar(renderTargetContext->height()) / numRows; - int row = 0; - int col = 0; - SkPMColor4f color = SkPMColor4f::FromBytes_RGBA(0xff000000); - - for (int i = 0; i < kNumConics; ++i) { - SkPoint baseControlPts[] = { - {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, - {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, - {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} - }; - SkScalar weight = rand.nextRangeF(0.f, 2.f); - for(int edgeType = 0; edgeType < kGrClipEdgeTypeCnt; ++edgeType) { - sk_sp gp; - GrClipEdgeType et = (GrClipEdgeType)edgeType; - gp = GrConicEffect::Make(color, SkMatrix::I(), et, *context->priv().caps(), - SkMatrix::I(), false); - if (!gp) { - continue; - } + SkPaint ctrlPtPaint; + ctrlPtPaint.setColor(SK_ColorRED); + + SkPaint choppedPtPaint; + choppedPtPaint.setColor(~ctrlPtPaint.getColor() | 0xFF000000); + + SkPaint polyPaint; + polyPaint.setColor(0xffA0A0A0); + polyPaint.setStrokeWidth(0); + polyPaint.setStyle(SkPaint::kStroke_Style); + + SkPaint boundsPaint; + boundsPaint.setColor(0xff808080); + boundsPaint.setStrokeWidth(0); + boundsPaint.setStyle(SkPaint::kStroke_Style); + + + for (int row = 0; row < kNumConics; ++row) { + for(int col = 0; col < kGrClipEdgeTypeCnt; ++col) { + GrClipEdgeType et = (GrClipEdgeType) col; SkScalar x = col * w; SkScalar y = row * h; SkPoint controlPts[] = { - {x + baseControlPts[0].fX, y + baseControlPts[0].fY}, - {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, - {x + baseControlPts[2].fX, y + baseControlPts[2].fY} + {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} }; - SkConic dst[4]; - SkMatrix klm; - int cnt = chop_conic(controlPts, dst, weight); - GrPathUtils::getConicKLM(controlPts, weight, &klm); - SkPaint ctrlPtPaint; - ctrlPtPaint.setColor(rand.nextU() | 0xFF000000); for (int i = 0; i < 3; ++i) { canvas->drawCircle(controlPts[i], 6.f, ctrlPtPaint); } - SkPaint polyPaint; - polyPaint.setColor(0xffA0A0A0); - polyPaint.setStrokeWidth(0); - polyPaint.setStyle(SkPaint::kStroke_Style); canvas->drawPoints(SkCanvas::kPolygon_PointMode, 3, controlPts, polyPaint); - SkPaint choppedPtPaint; - choppedPtPaint.setColor(~ctrlPtPaint.getColor() | 0xFF000000); + 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; @@ -247,25 +254,14 @@ class BezierConicEffects : public GpuGM { } SkRect bounds; - //SkPoint bPts[] = {{0.f, 0.f}, {800.f, 800.f}}; - //bounds.set(bPts, 2); bounds.setBounds(pts, 3); - SkPaint boundsPaint; - boundsPaint.setColor(0xff808080); - boundsPaint.setStrokeWidth(0); - boundsPaint.setStyle(SkPaint::kStroke_Style); canvas->drawRect(bounds, boundsPaint); - std::unique_ptr op = BezierConicTestOp::Make(context, gp, bounds, - color, klm); + std::unique_ptr op = BezierConicTestOp::Make(context, et, bounds, + kOpaqueBlack, klm); renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); } - ++col; - if (numCols == col) { - col = 0; - ++row; - } } } } @@ -276,7 +272,7 @@ class BezierConicEffects : public GpuGM { // found along the curve segment it will return 1 and // dst[0] is the original conic. If it returns 2 the dst[0] // and dst[1] are the two new conics. - int split_conic(const SkPoint src[3], SkConic dst[2], const SkScalar weight) { + static int SplitConic(const SkPoint src[3], SkConic dst[2], const SkScalar weight) { SkScalar t = SkFindQuadMaxCurvature(src); if (t == 0 || t == 1) { if (dst) { @@ -296,15 +292,15 @@ class BezierConicEffects : public GpuGM { } } - // Calls split_conic on the entire conic and then once more on each subsection. + // Calls SplitConic on the entire conic and then once more on each subsection. // Most cases will result in either 1 conic (chop point is not within t range) // or 3 points (split once and then one subsection is split again). - int chop_conic(const SkPoint src[3], SkConic dst[4], const SkScalar weight) { + static int ChopConic(const SkPoint src[3], SkConic dst[4], const SkScalar weight) { SkConic dstTemp[2]; - int conicCnt = split_conic(src, dstTemp, weight); + int conicCnt = SplitConic(src, dstTemp, weight); if (2 == conicCnt) { - int conicCnt2 = split_conic(dstTemp[0].fPts, dst, dstTemp[0].fW); - conicCnt = conicCnt2 + split_conic(dstTemp[1].fPts, &dst[conicCnt2], dstTemp[1].fW); + int conicCnt2 = SplitConic(dstTemp[0].fPts, dst, dstTemp[0].fW); + conicCnt = conicCnt2 + SplitConic(dstTemp[1].fPts, &dst[conicCnt2], dstTemp[1].fW); } else { dst[0] = dstTemp[0]; } @@ -322,21 +318,21 @@ class BezierQuadTestOp : public BezierTestOp { const char* name() const override { return "BezierQuadTestOp"; } static std::unique_ptr Make(GrContext* context, - sk_sp gp, + GrClipEdgeType et, const SkRect& rect, const SkPMColor4f& color, const GrPathUtils::QuadUVMatrix& devToUV) { GrOpMemoryPool* pool = context->priv().opMemoryPool(); - return pool->allocate(std::move(gp), rect, color, devToUV); + return pool->allocate(et, rect, color, devToUV); } private: friend class ::GrOpMemoryPool; // for ctor - BezierQuadTestOp(sk_sp gp, const SkRect& rect, + BezierQuadTestOp(GrClipEdgeType et, const SkRect& rect, const SkPMColor4f& color, const GrPathUtils::QuadUVMatrix& devToUV) - : INHERITED(std::move(gp), rect, color, ClassID()), fDevToUV(devToUV) {} + : INHERITED(et, rect, color, ClassID()), fDevToUV(devToUV) {} struct Vertex { SkPoint fPosition; @@ -344,7 +340,14 @@ class BezierQuadTestOp : public BezierTestOp { }; void onPrepareDraws(Target* target) override { - SkASSERT(this->gp()->vertexStride() == sizeof(Vertex)); + GrGeometryProcessor* gp = GrQuadEffect::Make(target->allocator(), this->color(), + SkMatrix::I(), this->edgeType(), + target->caps(), SkMatrix::I(), false); + if (!gp) { + return; + } + + SkASSERT(gp->vertexStride() == sizeof(Vertex)); QuadHelper helper(target, sizeof(Vertex), 1); Vertex* verts = reinterpret_cast(helper.vertices()); if (!verts) { @@ -353,7 +356,7 @@ class BezierQuadTestOp : public BezierTestOp { SkRect rect = this->rect(); SkPointPriv::SetRectTriStrip(&verts[0].fPosition, rect, sizeof(Vertex)); fDevToUV.apply(verts, 4, sizeof(Vertex), sizeof(SkPoint)); - helper.recordDraw(target, this->gp()); + helper.recordDraw(target, gp); } GrPathUtils::QuadUVMatrix fDevToUV; @@ -374,72 +377,68 @@ class BezierQuadEffects : public GpuGM { } protected: + static const int kNumQuads = 5; + static const int kCellWidth = 128; + static const int kCellHeight = 128; + SkString onShortName() override { return SkString("bezier_quad_effects"); } SkISize onISize() override { - return SkISize::Make(800, 800); + return SkISize::Make(kGrClipEdgeTypeCnt*kCellWidth, kNumQuads*kCellHeight); } - void onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas) override { - struct Vertex { - SkPoint fPosition; - float fUV[4]; // The last two values are ignored. The effect expects a vec4f. + + const SkScalar w = kCellWidth, h = kCellHeight; + const SkPMColor4f kOpaqueBlack = SkPMColor4f::FromBytes_RGBA(0xff000000); + + const SkPoint baseControlPts[kNumQuads][3] = { + { { 0.31f * w, 0.01f * h}, { 0.48f * w, 0.74f * h }, { 0.19f * w, 0.33f * h } }, + { { 0.00f * w, 0.07f * h}, { 0.30f * w, 0.70f * h }, { 0.47f * w, 0.37f * h } }, + { { 0.15f * w, 0.23f * h}, { 0.49f * w, 0.87f * h }, { 0.85f * w, 0.66f * h } }, + { { 0.09f * w, 0.15f * h}, { 0.42f * w, 0.33f * h }, { 0.17f * w, 0.38f * h } }, + { { 0.98f * w, 0.54f * h}, { 0.83f * w, 0.91f * h }, { 0.62f * w, 0.40f * h } }, }; - constexpr int kNumQuads = 5; - SkRandom rand; - - int numCols = SkScalarCeilToInt(SkScalarSqrt(SkIntToScalar(kNumQuads*3))); - int numRows = SkScalarCeilToInt(SkIntToScalar(kNumQuads*3) / numCols); - SkScalar w = SkIntToScalar(renderTargetContext->width()) / numCols; - SkScalar h = SkIntToScalar(renderTargetContext->height()) / numRows; - int row = 0; - int col = 0; - SkPMColor4f color = SkPMColor4f::FromBytes_RGBA(0xff000000); - - for (int i = 0; i < kNumQuads; ++i) { - SkPoint baseControlPts[] = { - {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, - {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)}, - {rand.nextRangeF(0.f, w), rand.nextRangeF(0.f, h)} - }; - for(int edgeType = 0; edgeType < kGrClipEdgeTypeCnt; ++edgeType) { - sk_sp gp; - GrClipEdgeType et = (GrClipEdgeType)edgeType; - gp = GrQuadEffect::Make(color, SkMatrix::I(), et, *context->priv().caps(), - SkMatrix::I(), false); - if (!gp) { - continue; - } + SkPaint ctrlPtPaint; + ctrlPtPaint.setColor(SK_ColorRED); + + SkPaint choppedPtPaint; + choppedPtPaint.setColor(~ctrlPtPaint.getColor() | 0xFF000000); + + SkPaint polyPaint; + polyPaint.setColor(0xffA0A0A0); + polyPaint.setStrokeWidth(0); + polyPaint.setStyle(SkPaint::kStroke_Style); + + SkPaint boundsPaint; + boundsPaint.setColor(0xff808080); + boundsPaint.setStrokeWidth(0); + 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[0].fX, y + baseControlPts[0].fY}, - {x + baseControlPts[1].fX, y + baseControlPts[1].fY}, - {x + baseControlPts[2].fX, y + baseControlPts[2].fY} + {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} }; - SkPoint chopped[5]; - int cnt = SkChopQuadAtMaxCurvature(controlPts, chopped); - SkPaint ctrlPtPaint; - ctrlPtPaint.setColor(rand.nextU() | 0xFF000000); for (int i = 0; i < 3; ++i) { canvas->drawCircle(controlPts[i], 6.f, ctrlPtPaint); } - SkPaint polyPaint; - polyPaint.setColor(0xffA0A0A0); - polyPaint.setStrokeWidth(0); - polyPaint.setStyle(SkPaint::kStroke_Style); canvas->drawPoints(SkCanvas::kPolygon_PointMode, 3, controlPts, polyPaint); - SkPaint choppedPtPaint; - choppedPtPaint.setColor(~ctrlPtPaint.getColor() | 0xFF000000); + SkPoint chopped[5]; + int cnt = SkChopQuadAtMaxCurvature(controlPts, chopped); for (int c = 0; c < cnt; ++c) { SkPoint* pts = chopped + 2 * c; @@ -451,26 +450,14 @@ class BezierQuadEffects : public GpuGM { SkRect bounds; bounds.setBounds(pts, 3); - SkPaint boundsPaint; - boundsPaint.setColor(0xff808080); - boundsPaint.setStrokeWidth(0); - boundsPaint.setStyle(SkPaint::kStroke_Style); canvas->drawRect(bounds, boundsPaint); - GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); - GrPathUtils::QuadUVMatrix DevToUV(pts); - std::unique_ptr op = BezierQuadTestOp::Make(context, gp, - bounds, color, DevToUV); + std::unique_ptr op = BezierQuadTestOp::Make(context, et, bounds, + kOpaqueBlack, DevToUV); renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); } - ++col; - if (numCols == col) { - col = 0; - ++row; - } } } } diff --git a/third_party/skia/gm/bigblurs.cpp b/third_party/skia/gm/bigblurs.cpp index ff12b6bef089..6436c85322e3 100644 --- a/third_party/skia/gm/bigblurs.cpp +++ b/third_party/skia/gm/bigblurs.cpp @@ -52,7 +52,7 @@ class BigBlursGM : public GM { SkPath rectori; rectori.addRect(bigRect); - rectori.addRect(insetRect, SkPath::kCCW_Direction); + rectori.addRect(insetRect, SkPathDirection::kCCW); // The blur extends 3*kSigma out from the big rect. // Offset the close-up windows so we get the entire blur diff --git a/third_party/skia/gm/blurrect.cpp b/third_party/skia/gm/blurrect.cpp index 4d30c98d057e..35bafc73a1e1 100644 --- a/third_party/skia/gm/blurrect.cpp +++ b/third_party/skia/gm/blurrect.cpp @@ -53,7 +53,7 @@ static void draw_donut(SkCanvas* canvas, const SkRect& r, const SkPaint& p) { rect.inset(STROKE_WIDTH/2, STROKE_WIDTH/2); path.addRect(rect); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->drawPath(path, p); } @@ -71,7 +71,7 @@ static void draw_donut_skewed(SkCanvas* canvas, const SkRect& r, const SkPaint& rect.offset(7, -7); path.addRect(rect); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->drawPath(path, p); } diff --git a/third_party/skia/gm/blurs.cpp b/third_party/skia/gm/blurs.cpp index 3aef01776dce..e6f69103f5ec 100644 --- a/third_party/skia/gm/blurs.cpp +++ b/third_party/skia/gm/blurs.cpp @@ -89,8 +89,8 @@ DEF_SIMPLE_GM(blur2rects, canvas, 700, 500) { SkRect outer = SkRect::MakeXYWH(10.125f, 10.125f, 100.125f, 100); SkRect inner = SkRect::MakeXYWH(20.25f, 20.125f, 80, 80); SkPath path; - path.addRect(outer, SkPath::kCW_Direction); - path.addRect(inner, SkPath::kCCW_Direction); + path.addRect(outer, SkPathDirection::kCW); + path.addRect(inner, SkPathDirection::kCCW); canvas->drawPath(path, paint); // important to translate by a factional amount to exercise a different "phase" @@ -107,8 +107,8 @@ DEF_SIMPLE_GM(blur2rectsnonninepatch, canvas, 700, 500) { SkRect outer = SkRect::MakeXYWH(10, 110, 100, 100); SkRect inner = SkRect::MakeXYWH(50, 150, 10, 10); SkPath path; - path.addRect(outer, SkPath::kCW_Direction); - path.addRect(inner, SkPath::kCW_Direction); + path.addRect(outer, SkPathDirection::kCW); + path.addRect(inner, SkPathDirection::kCW); canvas->drawPath(path, paint); SkScalar dx = SkScalarRoundToScalar(path.getBounds().width()) + 40 + 0.25f; diff --git a/third_party/skia/gm/circularclips.cpp b/third_party/skia/gm/circularclips.cpp index 025b693888ea..b2138385f143 100644 --- a/third_party/skia/gm/circularclips.cpp +++ b/third_party/skia/gm/circularclips.cpp @@ -28,8 +28,8 @@ class CircularClipsGM : public skiagm::GM { fY = 50; fR = 40; - fCircle1.addCircle(fX1, fY, fR, SkPath::kCW_Direction); - fCircle2.addCircle(fX2, fY, fR, SkPath::kCW_Direction); + fCircle1.addCircle(fX1, fY, fR, SkPathDirection::kCW); + fCircle2.addCircle(fX2, fY, fR, SkPathDirection::kCW); } diff --git a/third_party/skia/gm/clockwise.cpp b/third_party/skia/gm/clockwise.cpp index f16e45a73347..c52cc3af5145 100644 --- a/third_party/skia/gm/clockwise.cpp +++ b/third_party/skia/gm/clockwise.cpp @@ -52,6 +52,7 @@ #include "src/gpu/glsl/GrGLSLVarying.h" #include "src/gpu/ops/GrDrawOp.h" #include "src/gpu/ops/GrOp.h" +#include "tools/gpu/ProxyUtils.h" #include #include @@ -80,26 +81,37 @@ class ClockwiseGM : public skiagm::GpuGM { class ClockwiseTestProcessor : public GrGeometryProcessor { public: - ClockwiseTestProcessor(bool readSkFragCoord) - : GrGeometryProcessor(kClockwiseTestProcessor_ClassID) - , fReadSkFragCoord(readSkFragCoord) { - this->setVertexAttributes(&gVertex, 1); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, bool readSkFragCoord) { + return arena->make(readSkFragCoord); } - const char* name() const override { return "ClockwiseTestProcessor"; } + + const char* name() const final { return "ClockwiseTestProcessor"; } + void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const final { b->add32(fReadSkFragCoord); } + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const final; + bool readSkFragCoord() const { return fReadSkFragCoord; } + private: + friend class ::SkArenaAlloc; // for access to ctor + + ClockwiseTestProcessor(bool readSkFragCoord) + : GrGeometryProcessor(kClockwiseTestProcessor_ClassID) + , fReadSkFragCoord(readSkFragCoord) { + this->setVertexAttributes(&gVertex, 1); + } + const bool fReadSkFragCoord; - friend class GLSLClockwiseTestProcessor; + typedef GrGeometryProcessor INHERITED; }; class GLSLClockwiseTestProcessor : public GrGLSLGeometryProcessor { void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - FPCoordTransformIter&& transformIter) override {} + const CoordTransformRange&) override {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override { const ClockwiseTestProcessor& proc = args.fGP.cast(); @@ -107,7 +119,7 @@ class GLSLClockwiseTestProcessor : public GrGLSLGeometryProcessor { gpArgs->fPositionVar.set(kFloat2_GrSLType, "position"); args.fFragBuilder->codeAppendf( "%s = sk_Clockwise ? half4(0,1,0,1) : half4(1,0,0,1);", args.fOutputColor); - if (!proc.fReadSkFragCoord) { + if (!proc.readSkFragCoord()) { args.fFragBuilder->codeAppendf("%s = half4(1);", args.fOutputCoverage); } else { // Verify layout(origin_upper_left) on gl_FragCoord does not affect gl_FrontFacing. @@ -137,7 +149,9 @@ class ClockwiseTestOp : public GrDrawOp { private: ClockwiseTestOp(bool readSkFragCoord, float y) - : GrDrawOp(ClassID()), fReadSkFragCoord(readSkFragCoord), fY(y) { + : GrDrawOp(ClassID()) + , fReadSkFragCoord(readSkFragCoord) + , fY(y) { this->setBounds(SkRect::MakeXYWH(0, fY, 100, 100), HasAABloat::kNo, IsHairline::kNo); } @@ -147,6 +161,25 @@ class ClockwiseTestOp : public GrDrawOp { bool hasMixedSampledCoverage, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } + + void onPrePrepare(GrRecordingContext* context, + const GrSurfaceProxyView* dstView, + GrAppliedClip* clip, + const GrXferProcessor::DstProxyView& dstProxyView) final { + SkArenaAlloc* arena = context->priv().recordTimeAllocator(); + + // This is equivalent to a GrOpFlushState::detachAppliedClip + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + + GrGeometryProcessor* geomProc = ClockwiseTestProcessor::Make(arena, fReadSkFragCoord); + + // TODO: need to also give this to the recording context + fProgramInfo = sk_gpu_test::CreateProgramInfo(context->priv().caps(), arena, dstView, + std::move(appliedClip), dstProxyView, + geomProc, SkBlendMode::kPlus, + GrPrimitiveType::kTriangleStrip); + } + void onPrepare(GrOpFlushState* flushState) override { SkPoint vertices[4] = { {100, fY}, @@ -157,32 +190,47 @@ class ClockwiseTestOp : public GrDrawOp { fVertexBuffer = flushState->resourceProvider()->createBuffer( sizeof(vertices), GrGpuBufferType::kVertex, kStatic_GrAccessPattern, vertices); } + void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { if (!fVertexBuffer) { return; } - GrPipeline pipeline(GrScissorTest::kDisabled, SkBlendMode::kPlus, - flushState->drawOpArgs().outputSwizzle()); + + if (!fProgramInfo) { + GrGeometryProcessor* geomProc = ClockwiseTestProcessor::Make(flushState->allocator(), + fReadSkFragCoord); + + fProgramInfo = sk_gpu_test::CreateProgramInfo(&flushState->caps(), + flushState->allocator(), + flushState->view(), + flushState->detachAppliedClip(), + flushState->dstProxyView(), + geomProc, SkBlendMode::kPlus, + GrPrimitiveType::kTriangleStrip); + } + GrMesh mesh(GrPrimitiveType::kTriangleStrip); mesh.setNonIndexedNonInstanced(4); mesh.setVertexData(std::move(fVertexBuffer)); - ClockwiseTestProcessor primProc(fReadSkFragCoord); - - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - pipeline, - primProc, - nullptr, nullptr, 0); - - flushState->opsRenderPass()->draw(programInfo, &mesh, 1, SkRect::MakeXYWH(0, fY, 100, 100)); + flushState->opsRenderPass()->draw(*fProgramInfo, &mesh, 1, + SkRect::MakeXYWH(0, fY, 100, 100)); } sk_sp fVertexBuffer; - const bool fReadSkFragCoord; - const float fY; + const bool fReadSkFragCoord; + const float fY; + + // The program info (and both the GrPipeline and GrPrimitiveProcessor it relies on), when + // allocated, are allocated in either the ddl-record-time or flush-time arena. It is the + // arena's job to free up their memory so we just have a bare programInfo pointer here. We + // don't even store the GrPipeline and GrPrimitiveProcessor pointers here bc they are + // guaranteed to have the same lifetime as the program info. + GrProgramInfo* fProgramInfo = nullptr; friend class ::GrOpMemoryPool; // for ctor + + typedef GrDrawOp INHERITED; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -205,8 +253,8 @@ void ClockwiseGM::onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* c topLeftRTC->priv().testingOnly_addDrawOp(ClockwiseTestOp::Make(ctx, false, 0)); topLeftRTC->priv().testingOnly_addDrawOp(ClockwiseTestOp::Make(ctx, true, 100)); rtc->drawTexture(GrNoClip(), sk_ref_sp(topLeftRTC->asTextureProxy()), rtcColorType, - GrSamplerState::Filter::kNearest, SkBlendMode::kSrcOver, - SK_PMColor4fWHITE, {0, 0, 100, 200}, + rtc->colorInfo().alphaType(), GrSamplerState::Filter::kNearest, + SkBlendMode::kSrcOver, SK_PMColor4fWHITE, {0, 0, 100, 200}, {100, 0, 200, 200}, GrAA::kNo, GrQuadAAFlags::kNone, SkCanvas::SrcRectConstraint::kStrict_SrcRectConstraint, SkMatrix::I(), nullptr); @@ -221,8 +269,8 @@ void ClockwiseGM::onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* c topLeftRTC->priv().testingOnly_addDrawOp(ClockwiseTestOp::Make(ctx, false, 0)); topLeftRTC->priv().testingOnly_addDrawOp(ClockwiseTestOp::Make(ctx, true, 100)); rtc->drawTexture(GrNoClip(), sk_ref_sp(topLeftRTC->asTextureProxy()), rtcColorType, - GrSamplerState::Filter::kNearest, SkBlendMode::kSrcOver, - SK_PMColor4fWHITE, {0, 0, 100, 200}, + rtc->colorInfo().alphaType(), GrSamplerState::Filter::kNearest, + SkBlendMode::kSrcOver, SK_PMColor4fWHITE, {0, 0, 100, 200}, {200, 0, 300, 200}, GrAA::kNo, GrQuadAAFlags::kNone, SkCanvas::SrcRectConstraint::kStrict_SrcRectConstraint, SkMatrix::I(), nullptr); diff --git a/third_party/skia/gm/collapsepaths.cpp b/third_party/skia/gm/collapsepaths.cpp index 733517120843..82233c911a3f 100644 --- a/third_party/skia/gm/collapsepaths.cpp +++ b/third_party/skia/gm/collapsepaths.cpp @@ -21,7 +21,7 @@ void test_collapse1(SkCanvas* canvas, const SkPaint& paint) { path.moveTo( 370.50653076171875, 73.684051513671875); path.lineTo( 525.02093505859375, 208.6413726806640625); path.lineTo( 478.403564453125, 213.5998992919921875); - path.setFillType(SkPath::FillType::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->drawPath(path, paint); } @@ -70,7 +70,7 @@ void test_collapse5(SkCanvas* canvas, const SkPaint& paint) { path.moveTo(154.6182708740234375, 188.230926513671875); path.lineTo( 430.242095947265625, 546.76605224609375); path.lineTo( 373.1005859375, 559.0906982421875); - path.setFillType(SkPath::FillType::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->drawPath(path, paint); } @@ -83,7 +83,7 @@ void test_collapse6(SkCanvas* canvas, const SkPaint& paint) { path.moveTo(39.09362030029296875, 47.59223175048828125); path.lineTo(108.7822418212890625, 138.244110107421875); path.lineTo(94.33460235595703125, 141.360260009765625); - path.setFillType(SkPath::FillType::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->drawPath(path, paint); } @@ -96,7 +96,7 @@ void test_collapse7(SkCanvas* canvas, const SkPaint& paint) { path.moveTo(40.33458709716796875, 49.10297393798828125); path.lineTo(112.2353668212890625, 142.6324462890625); path.lineTo(97.32910919189453125, 145.8475189208984375); - path.setFillType(SkPath::FillType::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->drawPath(path, paint); } @@ -109,7 +109,7 @@ void test_collapse8(SkCanvas* canvas, const SkPaint& paint) { path.moveTo( 34.50, 42.00); path.lineTo( 96.00, 122.00); path.lineTo( 83.25, 124.75); - path.setFillType(SkPath::FillType::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->drawPath(path, paint); } @@ -125,7 +125,7 @@ void test_collapse9(SkCanvas* canvas, const SkPaint& paint) { path.lineTo(SkDoubleToScalar(100.167), SkDoubleToScalar(140.096)); path.lineTo(SkDoubleToScalar( 99.0364), SkDoubleToScalar(140.364)); path.lineTo(SkDoubleToScalar( 94.25), SkDoubleToScalar(141.50)); - path.setFillType(SkPath::FillType::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas->drawPath(path, paint); } diff --git a/third_party/skia/gm/colormatrix.cpp b/third_party/skia/gm/colormatrix.cpp index 806dea6d1eaa..8f3f5e2174b9 100644 --- a/third_party/skia/gm/colormatrix.cpp +++ b/third_party/skia/gm/colormatrix.cpp @@ -26,7 +26,7 @@ #include "include/effects/SkGradientShader.h" #define WIDTH 500 -#define HEIGHT 500 +#define HEIGHT 160 static void set_color_matrix(SkPaint* paint, const SkColorMatrix& matrix) { paint->setColorFilter(SkColorFilters::Matrix(matrix)); @@ -100,41 +100,25 @@ class ColorMatrixGM : public skiagm::GM { set_color_matrix(&paint, matrix); canvas->drawImage(bmps[i], 0, 0, &paint); - matrix.setRotate(SkColorMatrix::kR_Axis, 90); - set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 80, 0, &paint); - - matrix.setRotate(SkColorMatrix::kG_Axis, 90); - set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 160, 0, &paint); - - matrix.setRotate(SkColorMatrix::kB_Axis, 90); - set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 240, 0, &paint); /////////////////////////////////////////////// + matrix.setSaturation(0.0f); set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 0, 80, &paint); + canvas->drawImage(bmps[i], 80, 0, &paint); matrix.setSaturation(0.5f); set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 80, 80, &paint); + canvas->drawImage(bmps[i], 160, 0, &paint); matrix.setSaturation(1.0f); set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 160, 80, &paint); + canvas->drawImage(bmps[i], 240, 0, &paint); matrix.setSaturation(2.0f); set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 240, 80, &paint); - /////////////////////////////////////////////// - matrix.setRGB2YUV(); - set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 0, 160, &paint); + canvas->drawImage(bmps[i], 320, 0, &paint); - matrix.setYUV2RGB(); - set_color_matrix(&paint, matrix); - canvas->drawImage(bmps[i], 80, 160, &paint); + /////////////////////////////////////////////// // Move red into alpha, set color to white float data[20] = { @@ -145,9 +129,9 @@ class ColorMatrixGM : public skiagm::GM { }; set_array(&paint, data); - canvas->drawImage(bmps[i], 160, 160, &paint); + canvas->drawImage(bmps[i], 400, 0, &paint); /////////////////////////////////////////////// - canvas->translate(0, 240); + canvas->translate(0, 80); } } diff --git a/third_party/skia/gm/complexclip.cpp b/third_party/skia/gm/complexclip.cpp index 3e53783004b3..944251ada2b6 100644 --- a/third_party/skia/gm/complexclip.cpp +++ b/third_party/skia/gm/complexclip.cpp @@ -68,9 +68,9 @@ class ComplexClipGM : public GM { .lineTo(50, 150) .close(); if (fInvertDraw) { - path.setFillType(SkPath::kInverseEvenOdd_FillType); + path.setFillType(SkPathFillType::kInverseEvenOdd); } else { - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); } SkPaint pathPaint; pathPaint.setAntiAlias(true); @@ -126,10 +126,10 @@ class ComplexClipGM : public GM { bool doInvB = SkToBool(invBits & 2); canvas->save(); // set clip - clipA.setFillType(doInvA ? SkPath::kInverseEvenOdd_FillType : - SkPath::kEvenOdd_FillType); - clipB.setFillType(doInvB ? SkPath::kInverseEvenOdd_FillType : - SkPath::kEvenOdd_FillType); + clipA.setFillType(doInvA ? SkPathFillType::kInverseEvenOdd : + SkPathFillType::kEvenOdd); + clipB.setFillType(doInvB ? SkPathFillType::kInverseEvenOdd : + SkPathFillType::kEvenOdd); canvas->clipPath(clipA, fDoAAClip); canvas->clipPath(clipB, gOps[op].fOp, fDoAAClip); diff --git a/third_party/skia/gm/complexclip3.cpp b/third_party/skia/gm/complexclip3.cpp index f138ee0c4b94..b48c35d5ae1e 100644 --- a/third_party/skia/gm/complexclip3.cpp +++ b/third_party/skia/gm/complexclip3.cpp @@ -96,10 +96,10 @@ class ComplexClip3GM : public GM { bool doInvB = SkToBool(invB); canvas->save(); // set clip - firstClip->setFillType(doInvA ? SkPath::kInverseEvenOdd_FillType : - SkPath::kEvenOdd_FillType); - secondClip->setFillType(doInvB ? SkPath::kInverseEvenOdd_FillType : - SkPath::kEvenOdd_FillType); + firstClip->setFillType(doInvA ? SkPathFillType::kInverseEvenOdd : + SkPathFillType::kEvenOdd); + secondClip->setFillType(doInvB ? SkPathFillType::kInverseEvenOdd : + SkPathFillType::kEvenOdd); canvas->clipPath(*firstClip, doAAA); canvas->clipPath(*secondClip, gOps[op].fOp, doAAB); diff --git a/third_party/skia/gm/convex_all_line_paths.cpp b/third_party/skia/gm/convex_all_line_paths.cpp index 2fa2adf04771..6adb597e9de0 100644 --- a/third_party/skia/gm/convex_all_line_paths.cpp +++ b/third_party/skia/gm/convex_all_line_paths.cpp @@ -183,7 +183,7 @@ class ConvexLineOnlyPathsGM : public GM { SkISize onISize() override { return SkISize::Make(kGMWidth, kGMHeight); } bool runAsBench() const override { return true; } - static SkPath GetPath(int index, SkPath::Direction dir) { + static SkPath GetPath(int index, SkPathDirection dir) { std::unique_ptr data(nullptr); const SkPoint* points; int numPts; @@ -238,7 +238,7 @@ class ConvexLineOnlyPathsGM : public GM { SkPath path; - if (SkPath::kCW_Direction == dir) { + if (SkPathDirection::kCW == dir) { path.moveTo(points[0]); for (int i = 1; i < numPts; ++i) { path.lineTo(points[i]); @@ -273,7 +273,7 @@ class ConvexLineOnlyPathsGM : public GM { SkPoint center; { - SkPath path = GetPath(index, SkPath::kCW_Direction); + SkPath path = GetPath(index, SkPathDirection::kCW); if (offset->fX+path.getBounds().width() > kGMWidth) { offset->fX = 0; offset->fY += kMaxPathHeight; @@ -290,7 +290,7 @@ class ConvexLineOnlyPathsGM : public GM { } const SkColor colors[2] = { SK_ColorBLACK, SK_ColorWHITE }; - const SkPath::Direction dirs[2] = { SkPath::kCW_Direction, SkPath::kCCW_Direction }; + const SkPathDirection dirs[2] = { SkPathDirection::kCW, SkPathDirection::kCCW }; const float scales[] = { 1.0f, 0.75f, 0.5f, 0.25f, 0.1f, 0.01f, 0.001f }; const SkPaint::Join joins[3] = { SkPaint::kRound_Join, SkPaint::kBevel_Join, @@ -374,7 +374,7 @@ class ConvexLineOnlyPathsGM : public GM { // inset rings into outsets when adjacent bisector angles converged outside the previous // ring due to accumulated error. SkPath p3; - p3.setFillType(SkPath::kEvenOdd_FillType); + p3.setFillType(SkPathFillType::kEvenOdd); p3.moveTo(1184.96f, 982.557f); p3.lineTo(1183.71f, 982.865f); p3.lineTo(1180.99f, 982.734f); diff --git a/third_party/skia/gm/convexpaths.cpp b/third_party/skia/gm/convexpaths.cpp index a92508fdc82b..0fa0e34e35e1 100644 --- a/third_party/skia/gm/convexpaths.cpp +++ b/third_party/skia/gm/convexpaths.cpp @@ -66,36 +66,36 @@ class ConvexPathsGM : public skiagm::GM { fPaths.push_back().addRect(0, 0, 100 * SK_Scalar1, 100 * SK_Scalar1, - SkPath::kCW_Direction); + SkPathDirection::kCW); fPaths.push_back().addRect(0, 0, 100 * SK_Scalar1, 100 * SK_Scalar1, - SkPath::kCCW_Direction); + SkPathDirection::kCCW); fPaths.push_back().addCircle(50 * SK_Scalar1, 50 * SK_Scalar1, - 50 * SK_Scalar1, SkPath::kCW_Direction); + 50 * SK_Scalar1, SkPathDirection::kCW); fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0, 50 * SK_Scalar1, 100 * SK_Scalar1), - SkPath::kCW_Direction); + SkPathDirection::kCW); fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0, 100 * SK_Scalar1, 5 * SK_Scalar1), - SkPath::kCCW_Direction); + SkPathDirection::kCCW); fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0, SK_Scalar1, 100 * SK_Scalar1), - SkPath::kCCW_Direction); + SkPathDirection::kCCW); fPaths.push_back().addRoundRect(SkRect::MakeXYWH(0, 0, SK_Scalar1 * 100, SK_Scalar1 * 100), 40 * SK_Scalar1, 20 * SK_Scalar1, - SkPath::kCW_Direction); + SkPathDirection::kCW); // large number of points enum { diff --git a/third_party/skia/gm/convexpolyeffect.cpp b/third_party/skia/gm/convexpolyeffect.cpp index 67a84b39371a..68d328926ccf 100644 --- a/third_party/skia/gm/convexpolyeffect.cpp +++ b/third_party/skia/gm/convexpolyeffect.cpp @@ -15,128 +15,26 @@ #include "include/core/SkPath.h" #include "include/core/SkPoint.h" #include "include/core/SkRect.h" -#include "include/core/SkRefCnt.h" #include "include/core/SkScalar.h" #include "include/core/SkSize.h" #include "include/core/SkString.h" -#include "include/core/SkTypes.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" #include "include/private/GrSharedEnums.h" #include "include/private/GrTypesPriv.h" -#include "include/private/SkColorData.h" -#include "src/core/SkPointPriv.h" #include "src/core/SkTLList.h" -#include "src/gpu/GrCaps.h" -#include "src/gpu/GrDefaultGeoProcFactory.h" #include "src/gpu/GrFragmentProcessor.h" -#include "src/gpu/GrGeometryProcessor.h" -#include "src/gpu/GrMemoryPool.h" -#include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrPaint.h" -#include "src/gpu/GrProcessorAnalysis.h" -#include "src/gpu/GrProcessorSet.h" -#include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrRenderTargetContextPriv.h" -#include "src/gpu/GrUserStencilSettings.h" #include "src/gpu/effects/GrConvexPolyEffect.h" -#include "src/gpu/effects/GrPorterDuffXferProcessor.h" -#include "src/gpu/ops/GrDrawOp.h" -#include "src/gpu/ops/GrMeshDrawOp.h" -#include "src/gpu/ops/GrOp.h" +#include "tools/gpu/TestOps.h" #include #include class GrAppliedClip; -/** outset rendered rect to visualize anti-aliased poly edges */ -static SkRect outset(const SkRect& unsorted) { - SkRect r = unsorted; - r.outset(5.f, 5.f); - return r; -} - -/** sorts a rect */ -static SkRect sorted_rect(const SkRect& unsorted) { - SkRect r = unsorted; - r.sort(); - return r; -} - namespace skiagm { -class PolyBoundsOp : public GrMeshDrawOp { -public: - DEFINE_OP_CLASS_ID - - static std::unique_ptr Make(GrRecordingContext* context, - GrPaint&& paint, - const SkRect& rect) { - GrOpMemoryPool* pool = context->priv().opMemoryPool(); - - return pool->allocate(std::move(paint), rect); - } - - const char* name() const override { return "PolyBoundsOp"; } - - void visitProxies(const VisitProxyFunc& func) const override { - fProcessors.visitProxies(func); - } - - FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, bool hasMixedSampledCoverage, - GrClampType clampType) override { - return fProcessors.finalize( - fColor, GrProcessorAnalysisCoverage::kNone, clip, &GrUserStencilSettings::kUnused, - hasMixedSampledCoverage, caps, clampType, &fColor); - } - -private: - friend class ::GrOpMemoryPool; // for ctor - - PolyBoundsOp(GrPaint&& paint, const SkRect& rect) - : INHERITED(ClassID()) - , fColor(paint.getColor4f()) - , fProcessors(std::move(paint)) - , fRect(outset(rect)) { - this->setBounds(sorted_rect(fRect), HasAABloat::kNo, IsHairline::kNo); - } - - void onPrepareDraws(Target* target) override { - using namespace GrDefaultGeoProcFactory; - - Color color(fColor); - sk_sp gp(GrDefaultGeoProcFactory::Make( - target->caps().shaderCaps(), - color, - Coverage::kSolid_Type, - LocalCoords::kUnused_Type, - SkMatrix::I())); - - SkASSERT(gp->vertexStride() == sizeof(SkPoint)); - QuadHelper helper(target, sizeof(SkPoint), 1); - SkPoint* verts = reinterpret_cast(helper.vertices()); - if (!verts) { - return; - } - - SkPointPriv::SetRectTriStrip(verts, fRect, sizeof(SkPoint)); - helper.recordDraw(target, std::move(gp)); - } - - void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { - flushState->executeDrawsAndUploadsForMeshDrawOp(this, chainBounds, std::move(fProcessors)); - } - - SkPMColor4f fColor; - GrProcessorSet fProcessors; - SkRect fRect; - - typedef GrMeshDrawOp INHERITED; -}; /** * This GM directly exercises a GrProcessor that draws convex polygons. @@ -213,7 +111,9 @@ class ConvexPolyEffect : public GpuGM { void onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas) override { SkScalar y = 0; - constexpr SkScalar kDX = 12.f; + static constexpr SkScalar kDX = 12.f; + static constexpr SkScalar kOutset = 5.f; + for (PathList::Iter iter(fPaths, PathList::Iter::kHead_IterStart); iter.get(); iter.next()) { @@ -236,8 +136,8 @@ class ConvexPolyEffect : public GpuGM { grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); grPaint.addCoverageFragmentProcessor(std::move(fp)); - std::unique_ptr op = - PolyBoundsOp::Make(context, std::move(grPaint), p.getBounds()); + auto rect = p.getBounds().makeOutset(kOutset, kOutset); + auto op = sk_gpu_test::test_ops::MakeRect(context, std::move(grPaint), rect); renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); x += SkScalarCeilToScalar(path->getBounds().width() + kDX); @@ -263,8 +163,7 @@ class ConvexPolyEffect : public GpuGM { SkScalar x = 0; for (int et = 0; et < kGrClipEdgeTypeCnt; ++et) { - SkRect rect = *iter.get(); - rect.offset(x, y); + SkRect rect = iter.get()->makeOffset(x, y); GrClipEdgeType edgeType = (GrClipEdgeType) et; std::unique_ptr fp(GrConvexPolyEffect::Make(edgeType, rect)); if (!fp) { @@ -276,8 +175,9 @@ class ConvexPolyEffect : public GpuGM { grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); grPaint.addCoverageFragmentProcessor(std::move(fp)); - std::unique_ptr op = PolyBoundsOp::Make(context, std::move(grPaint), - rect); + auto drawRect = rect.makeOutset(kOutset, kOutset); + auto op = sk_gpu_test::test_ops::MakeRect(context, std::move(grPaint), drawRect); + renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); x += SkScalarCeilToScalar(rect.width() + kDX); diff --git a/third_party/skia/gm/crbug_788500.cpp b/third_party/skia/gm/crbug_788500.cpp index 9a35bfc369f6..a0a1ad39d49a 100644 --- a/third_party/skia/gm/crbug_788500.cpp +++ b/third_party/skia/gm/crbug_788500.cpp @@ -12,7 +12,7 @@ DEF_SIMPLE_GM(crbug_788500, canvas, 300, 300) { SkPath path; - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); path.moveTo(0, 0); path.moveTo(245.5f, 98.5f); path.cubicTo(245.5f, 98.5f, 242, 78, 260, 75); diff --git a/third_party/skia/gm/crbug_908646.cpp b/third_party/skia/gm/crbug_908646.cpp index 843799ec228a..3d11276d98e0 100644 --- a/third_party/skia/gm/crbug_908646.cpp +++ b/third_party/skia/gm/crbug_908646.cpp @@ -14,7 +14,7 @@ DEF_SIMPLE_GM(crbug_908646, canvas, 300, 300) { SkPaint paint; paint.setAntiAlias(true); SkPath path; - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); path.moveTo(50, 50); path.lineTo(50, 300); path.lineTo(250, 300); diff --git a/third_party/skia/gm/cubicpaths.cpp b/third_party/skia/gm/cubicpaths.cpp index b38c0f8f01e0..a09d612af919 100644 --- a/third_party/skia/gm/cubicpaths.cpp +++ b/third_party/skia/gm/cubicpaths.cpp @@ -125,7 +125,7 @@ class CubicPathGM : public skiagm::GM { void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, - SkPaint::Style style, SkPath::FillType fill, + SkPaint::Style style, SkPathFillType fill, SkScalar strokeWidth) { path.setFillType(fill); SkPaint paint; @@ -142,14 +142,14 @@ class CubicPathGM : public skiagm::GM { void onDraw(SkCanvas* canvas) override { struct FillAndName { - SkPath::FillType fFill; + SkPathFillType fFill; const char* fName; }; constexpr FillAndName gFills[] = { - {SkPath::kWinding_FillType, "Winding"}, - {SkPath::kEvenOdd_FillType, "Even / Odd"}, - {SkPath::kInverseWinding_FillType, "Inverse Winding"}, - {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, + {SkPathFillType::kWinding, "Winding"}, + {SkPathFillType::kEvenOdd, "Even / Odd"}, + {SkPathFillType::kInverseWinding, "Inverse Winding"}, + {SkPathFillType::kInverseEvenOdd, "Inverse Even / Odd"}, }; struct StyleAndName { SkPaint::Style fStyle; @@ -244,7 +244,7 @@ class CubicClosePathGM : public skiagm::GM { void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, - SkPaint::Style style, SkPath::FillType fill, + SkPaint::Style style, SkPathFillType fill, SkScalar strokeWidth) { path.setFillType(fill); SkPaint paint; @@ -261,14 +261,14 @@ class CubicClosePathGM : public skiagm::GM { virtual void onDraw(SkCanvas* canvas) override { struct FillAndName { - SkPath::FillType fFill; + SkPathFillType fFill; const char* fName; }; constexpr FillAndName gFills[] = { - {SkPath::kWinding_FillType, "Winding"}, - {SkPath::kEvenOdd_FillType, "Even / Odd"}, - {SkPath::kInverseWinding_FillType, "Inverse Winding"}, - {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, + {SkPathFillType::kWinding, "Winding"}, + {SkPathFillType::kEvenOdd, "Even / Odd"}, + {SkPathFillType::kInverseWinding, "Inverse Winding"}, + {SkPathFillType::kInverseEvenOdd, "Inverse Even / Odd"}, }; struct StyleAndName { SkPaint::Style fStyle; diff --git a/third_party/skia/gm/degeneratesegments.cpp b/third_party/skia/gm/degeneratesegments.cpp index e73352889ecd..f96d0496d2f2 100644 --- a/third_party/skia/gm/degeneratesegments.cpp +++ b/third_party/skia/gm/degeneratesegments.cpp @@ -197,7 +197,7 @@ class DegenerateSegmentsGM : public GM { void drawPath(SkPath& path, SkCanvas* canvas, SkColor color, const SkRect& clip, SkPaint::Cap cap, SkPaint::Join join, - SkPaint::Style style, SkPath::FillType fill, + SkPaint::Style style, SkPathFillType fill, SkScalar strokeWidth) { path.setFillType(fill); SkPaint paint; @@ -261,14 +261,14 @@ class DegenerateSegmentsGM : public GM { }; struct FillAndName { - SkPath::FillType fFill; + SkPathFillType fFill; const char* fName; }; constexpr FillAndName gFills[] = { - {SkPath::kWinding_FillType, "Winding"}, - {SkPath::kEvenOdd_FillType, "Even / Odd"}, - {SkPath::kInverseWinding_FillType, "Inverse Winding"}, - {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"} + {SkPathFillType::kWinding, "Winding"}, + {SkPathFillType::kEvenOdd, "Even / Odd"}, + {SkPathFillType::kInverseWinding, "Inverse Winding"}, + {SkPathFillType::kInverseEvenOdd, "Inverse Even / Odd"} }; struct StyleAndName { SkPaint::Style fStyle; diff --git a/third_party/skia/gm/drawatlas.cpp b/third_party/skia/gm/drawatlas.cpp index 132fd5b8c2f1..e349bbff9e6c 100644 --- a/third_party/skia/gm/drawatlas.cpp +++ b/third_party/skia/gm/drawatlas.cpp @@ -208,8 +208,8 @@ static void drawTextPath(SkCanvas* canvas, bool doStroke) { SkPath path; const float baseline_offset = -5; - const SkPath::Direction dirs[] = { - SkPath::kCW_Direction, SkPath::kCCW_Direction, + const SkPathDirection dirs[] = { + SkPathDirection::kCW, SkPathDirection::kCCW, }; for (auto d : dirs) { path.reset(); diff --git a/third_party/skia/gm/dstreadshuffle.cpp b/third_party/skia/gm/dstreadshuffle.cpp index d9a2a9f14b65..9e6a7addb0a5 100644 --- a/third_party/skia/gm/dstreadshuffle.cpp +++ b/third_party/skia/gm/dstreadshuffle.cpp @@ -90,7 +90,7 @@ class DstReadShuffle : public GM { for (int i = 0; i < 5; ++i) { fConcavePath.lineTo(points[(2 * i) % 5]); } - fConcavePath.setFillType(SkPath::kEvenOdd_FillType); + fConcavePath.setFillType(SkPathFillType::kEvenOdd); SkASSERT(!fConcavePath.isConvex()); } canvas->drawPath(fConcavePath, *paint); diff --git a/third_party/skia/gm/ducky_yuv_blend.cpp b/third_party/skia/gm/ducky_yuv_blend.cpp new file mode 100644 index 000000000000..75839a600fb7 --- /dev/null +++ b/third_party/skia/gm/ducky_yuv_blend.cpp @@ -0,0 +1,88 @@ +/* + * Copyright 2019 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/SkPaint.h" +#include "include/core/SkYUVAIndex.h" +#include "include/core/SkYUVASizeInfo.h" +#include "src/core/SkCachedData.h" +#include "src/image/SkImage_Base.h" +#include "tools/Resources.h" +#include "tools/ToolUtils.h" + +// Modeled on the layout test css3/blending/background-blend-mode-image-image.html to reproduce +// skbug.com/9619 +DEF_SIMPLE_GM_CAN_FAIL(ducky_yuv_blend, canvas, errorMsg, 560, 1130) { + sk_sp duckyBG = GetResourceAsImage("ducky.png"); + sk_sp duckyFG[2] = {GetResourceAsImage("ducky.jpg"), nullptr}; + if (!duckyFG[0] || !duckyBG) { + *errorMsg = "Image(s) failed to load."; + return skiagm::DrawResult::kFail; + } + + // If we're on the GPU we do a second round of draws where the source image is YUV planes. + // Otherwise we just draw the original again, + if (auto* context = canvas->getGrContext()) { + SkYUVASizeInfo info; + SkYUVAIndex indices[4]; + SkYUVColorSpace yuvColorSpace; + const void* planes[4]; + auto data = as_IB(duckyFG[0])->getPlanes(&info, indices, &yuvColorSpace, planes); + SkPixmap pixmaps[4]; + for (int i = 0; i < 4; ++i) { + if (indices[i].fIndex >= 0) { + pixmaps[i].reset( + SkImageInfo::MakeA8(info.fSizes[i]), planes[i], info.fWidthBytes[i]); + } + } + duckyFG[1] = SkImage::MakeFromYUVAPixmaps(context, + yuvColorSpace, + pixmaps, + indices, + duckyFG[0]->dimensions(), + kTopLeft_GrSurfaceOrigin, + true); + } else { + duckyFG[1] = duckyFG[0]; + } + + static constexpr int kNumPerRow = 4; + static constexpr int kPad = 10; + static constexpr auto kDstRect = SkRect::MakeWH(130, 130); + int rowCnt = 0; + canvas->translate(kPad, kPad); + canvas->save(); + auto newRow = [&] { + canvas->restore(); + canvas->translate(0, kDstRect.height() + kPad); + canvas->save(); + rowCnt = 0; + }; + ToolUtils::draw_checkerboard( + canvas, SK_ColorDKGRAY, SK_ColorLTGRAY, (kDstRect.height() + kPad)/5); + for (auto& fg : duckyFG) { + for (int bm = static_cast(SkBlendMode::kLastCoeffMode) + 1; + bm < static_cast(SkBlendMode::kLastMode); + ++bm) { + auto mode = static_cast(bm); + SkPaint paint; + paint.setFilterQuality(kMedium_SkFilterQuality); + canvas->drawImageRect(duckyBG, kDstRect, &paint); + paint.setBlendMode(mode); + canvas->drawImageRect(fg, kDstRect, &paint); + canvas->translate(kDstRect.width() + kPad, 0); + if (++rowCnt == kNumPerRow) { + newRow(); + } + } + // Force a new row between the two foreground images + newRow(); + } + canvas->restore(); + return skiagm::DrawResult::kOk; +} diff --git a/third_party/skia/gm/emboss.cpp b/third_party/skia/gm/emboss.cpp index bb98546896ca..82a13b3969a0 100644 --- a/third_party/skia/gm/emboss.cpp +++ b/third_party/skia/gm/emboss.cpp @@ -81,6 +81,10 @@ class EmbossGM : public skiagm::GM { paint.setStyle(SkPaint::kFill_Style); canvas->drawString("Hello", 0, 50, SkFont(nullptr, 50), paint); + + paint.setShader(nullptr); + paint.setColor(SK_ColorGREEN); + canvas->drawString("World", 0, 100, SkFont(nullptr, 50), paint); } private: diff --git a/third_party/skia/gm/emptypath.cpp b/third_party/skia/gm/emptypath.cpp index 126db9e99e27..154ece5f6e0a 100644 --- a/third_party/skia/gm/emptypath.cpp +++ b/third_party/skia/gm/emptypath.cpp @@ -32,7 +32,7 @@ class EmptyPathGM : public GM { SkColor color, const SkRect& clip, SkPaint::Style style, - SkPath::FillType fill) { + SkPathFillType fill) { SkPath path; path.setFillType(fill); SkPaint paint; @@ -46,14 +46,14 @@ class EmptyPathGM : public GM { void onDraw(SkCanvas* canvas) override { struct FillAndName { - SkPath::FillType fFill; + SkPathFillType fFill; const char* fName; }; constexpr FillAndName gFills[] = { - {SkPath::kWinding_FillType, "Winding"}, - {SkPath::kEvenOdd_FillType, "Even / Odd"}, - {SkPath::kInverseWinding_FillType, "Inverse Winding"}, - {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, + {SkPathFillType::kWinding, "Winding"}, + {SkPathFillType::kEvenOdd, "Even / Odd"}, + {SkPathFillType::kInverseWinding, "Inverse Winding"}, + {SkPathFillType::kInverseEvenOdd, "Inverse Even / Odd"}, }; struct StyleAndName { SkPaint::Style fStyle; diff --git a/third_party/skia/gm/filltypes.cpp b/third_party/skia/gm/filltypes.cpp index 0b251eb41638..f8d74da8cc59 100644 --- a/third_party/skia/gm/filltypes.cpp +++ b/third_party/skia/gm/filltypes.cpp @@ -42,7 +42,7 @@ class FillTypeGM : public GM { return SkISize::Make(835, 840); } - void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft, + void showPath(SkCanvas* canvas, int x, int y, SkPathFillType ft, SkScalar scale, const SkPaint& paint) { const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) }; @@ -59,13 +59,13 @@ class FillTypeGM : public GM { } void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) { - showPath(canvas, 0, 0, SkPath::kWinding_FillType, + showPath(canvas, 0, 0, SkPathFillType::kWinding, scale, paint); - showPath(canvas, 200, 0, SkPath::kEvenOdd_FillType, + showPath(canvas, 200, 0, SkPathFillType::kEvenOdd, scale, paint); - showPath(canvas, 00, 200, SkPath::kInverseWinding_FillType, + showPath(canvas, 00, 200, SkPathFillType::kInverseWinding, scale, paint); - showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType, + showPath(canvas, 200, 200, SkPathFillType::kInverseEvenOdd, scale, paint); } diff --git a/third_party/skia/gm/filltypespersp.cpp b/third_party/skia/gm/filltypespersp.cpp index 4edaa3ac8230..b3d9caa03c27 100644 --- a/third_party/skia/gm/filltypespersp.cpp +++ b/third_party/skia/gm/filltypespersp.cpp @@ -46,7 +46,7 @@ class FillTypePerspGM : public GM { return SkISize::Make(835, 840); } - void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft, + void showPath(SkCanvas* canvas, int x, int y, SkPathFillType ft, SkScalar scale, const SkPaint& paint) { const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) }; @@ -75,13 +75,13 @@ class FillTypePerspGM : public GM { SkTileMode::kClamp)); paint.setAntiAlias(aa); - showPath(canvas, 0, 0, SkPath::kWinding_FillType, + showPath(canvas, 0, 0, SkPathFillType::kWinding, scale, paint); - showPath(canvas, 200, 0, SkPath::kEvenOdd_FillType, + showPath(canvas, 200, 0, SkPathFillType::kEvenOdd, scale, paint); - showPath(canvas, 00, 200, SkPath::kInverseWinding_FillType, + showPath(canvas, 00, 200, SkPathFillType::kInverseWinding, scale, paint); - showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType, + showPath(canvas, 200, 200, SkPathFillType::kInverseEvenOdd, scale, paint); } diff --git a/third_party/skia/gm/flippity.cpp b/third_party/skia/gm/flippity.cpp index c9e4f1997430..bac7e1a17e56 100644 --- a/third_party/skia/gm/flippity.cpp +++ b/third_party/skia/gm/flippity.cpp @@ -130,9 +130,8 @@ static sk_sp make_reference_image(GrContext* context, auto origin = bottomLeftOrigin ? kBottomLeft_GrSurfaceOrigin : kTopLeft_GrSurfaceOrigin; - auto proxy = sk_gpu_test::MakeTextureProxyFromData(context, GrRenderable::kNo, kImageSize, - kImageSize, bm.colorType(), bm.alphaType(), - origin, bm.getPixels(), bm.rowBytes()); + auto proxy = sk_gpu_test::MakeTextureProxyFromData(context, GrRenderable::kNo, origin, + bm.info(), bm.getPixels(), bm.rowBytes()); if (!proxy) { return nullptr; } diff --git a/third_party/skia/gm/fontregen.cpp b/third_party/skia/gm/fontregen.cpp index 3addd80a5281..87148154a1da 100644 --- a/third_party/skia/gm/fontregen.cpp +++ b/third_party/skia/gm/fontregen.cpp @@ -17,6 +17,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkColor.h" #include "include/core/SkFont.h" +#include "include/core/SkFontMgr.h" #include "include/core/SkFontStyle.h" #include "include/core/SkFontTypes.h" #include "include/core/SkPaint.h" @@ -109,3 +110,48 @@ class FontRegenGM : public skiagm::GpuGM { ////////////////////////////////////////////////////////////////////////////// DEF_GM(return new FontRegenGM()) + +/////////////////////////////////////////////////////////////////////////////// + +class BadAppleGM : public skiagm::GpuGM { + + SkString onShortName() override { return SkString("badapple"); } + + SkISize onISize() override { return {kSize, kSize}; } + + void onOnceBeforeDraw() override { + this->setBGColor(SK_ColorWHITE); + auto fm = SkFontMgr::RefDefault(); + + static const SkString kTexts[] = { + SkString("Meet"), + SkString("iPad Pro"), + }; + + SkFont font; + font.setEdging(SkFont::Edging::kSubpixelAntiAlias); + font.setSubpixel(true); + font.setSize(256); + + fBlobs[0] = make_blob(kTexts[0], font); + fBlobs[1] = make_blob(kTexts[1], font); + } + + void onDraw(GrContext* 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->flush(); + } + +private: + static constexpr int kSize = 512; + + sk_sp fBlobs[3]; + typedef GM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +DEF_GM(return new BadAppleGM()) diff --git a/third_party/skia/gm/fpcoordinateoverride.cpp b/third_party/skia/gm/fpcoordinateoverride.cpp index 212fd2504a55..3877f4094987 100644 --- a/third_party/skia/gm/fpcoordinateoverride.cpp +++ b/third_party/skia/gm/fpcoordinateoverride.cpp @@ -26,6 +26,7 @@ #include "src/gpu/GrRenderTargetContextPriv.h" #include "src/gpu/effects/GrRRectEffect.h" #include "src/gpu/effects/GrSkSLFP.h" +#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/ops/GrFillRectOp.h" #include "tools/Resources.h" #include "tools/ToolUtils.h" @@ -36,7 +37,7 @@ class SampleCoordEffect : public GrFragmentProcessor { SampleCoordEffect(std::unique_ptr child) : INHERITED(CLASS_ID, kNone_OptimizationFlags) { - child->setComputeLocalCoordsInVertexShader(false); + child->setSampledWithExplicitCoords(true); this->registerChildProcessor(std::move(child)); } @@ -83,10 +84,9 @@ DEF_SIMPLE_GPU_GM_BG(fpcoordinateoverride, ctx, rtCtx, canvas, 512, 512, SkBitmap bmp; GetResourceAsBitmap("images/mandrill_512_q075.jpg", &bmp); GrProxyProvider* proxyProvider = ctx->priv().proxyProvider(); - GrColorType srcColorType = SkColorTypeToGrColorType(bmp.colorType()); sk_sp texture = proxyProvider->createProxyFromBitmap(bmp, GrMipMapped::kNo); - std::unique_ptr imgFP = GrSimpleTextureEffect::Make(texture, srcColorType, - SkMatrix()); + std::unique_ptr imgFP = + GrSimpleTextureEffect::Make(texture, bmp.alphaType(), SkMatrix()); auto fp = std::unique_ptr(new SampleCoordEffect(std::move(imgFP))); GrPaint grPaint; diff --git a/third_party/skia/gm/fwidth_squircle.cpp b/third_party/skia/gm/fwidth_squircle.cpp index cc51cced50a3..3eae01f943a5 100644 --- a/third_party/skia/gm/fwidth_squircle.cpp +++ b/third_party/skia/gm/fwidth_squircle.cpp @@ -46,6 +46,7 @@ #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" #include "src/gpu/ops/GrDrawOp.h" #include "src/gpu/ops/GrOp.h" +#include "tools/gpu/ProxyUtils.h" #include #include @@ -65,19 +66,30 @@ static constexpr GrGeometryProcessor::Attribute gVertex = class FwidthSquircleTestProcessor : public GrGeometryProcessor { public: - FwidthSquircleTestProcessor(const SkMatrix& viewMatrix) - : GrGeometryProcessor(kFwidthSquircleTestProcessor_ClassID) - , fViewMatrix(viewMatrix) { - this->setVertexAttributes(&gVertex, 1); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, const SkMatrix& viewMatrix) { + return arena->make(viewMatrix); } + const char* name() const override { return "FwidthSquircleTestProcessor"; } + void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const final {} + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const final; private: + friend class ::SkArenaAlloc; // for access to ctor + + FwidthSquircleTestProcessor(const SkMatrix& viewMatrix) + : GrGeometryProcessor(kFwidthSquircleTestProcessor_ClassID) + , fViewMatrix(viewMatrix) { + this->setVertexAttributes(&gVertex, 1); + } + const SkMatrix fViewMatrix; class Impl; + + typedef GrGeometryProcessor INHERITED; }; class FwidthSquircleTestProcessor::Impl : public GrGLSLGeometryProcessor { @@ -119,7 +131,7 @@ class FwidthSquircleTestProcessor::Impl : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange&) override { const auto& proc = primProc.cast(); pdman.setSkMatrix(fViewMatrixHandle, proc.fViewMatrix); } @@ -153,11 +165,30 @@ class FwidthSquircleTestOp : public GrDrawOp { const char* name() const override { return "FwidthSquircleTestOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize( - const GrCaps&, const GrAppliedClip*, bool hasMixedSampledCoverage, GrClampType) override { + GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, + bool hasMixedSampledCoverage, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } - void onPrepare(GrOpFlushState* flushState) override { + + void onPrePrepare(GrRecordingContext* context, + const GrSurfaceProxyView* dstView, + GrAppliedClip* clip, + const GrXferProcessor::DstProxyView& dstProxyView) final { + SkArenaAlloc* arena = context->priv().recordTimeAllocator(); + + // This is equivalent to a GrOpFlushState::detachAppliedClip + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + + GrGeometryProcessor* geomProc = FwidthSquircleTestProcessor::Make(arena, fViewMatrix); + + // TODO: need to also give this to the recording context + fProgramInfo = sk_gpu_test::CreateProgramInfo(context->priv().caps(), arena, dstView, + std::move(appliedClip), dstProxyView, + geomProc, SkBlendMode::kSrcOver, + GrPrimitiveType::kTriangleStrip); + } + + void onPrepare(GrOpFlushState* flushState) final { SkPoint vertices[4] = { {-1, -1}, {+1, -1}, @@ -167,33 +198,50 @@ class FwidthSquircleTestOp : public GrDrawOp { fVertexBuffer = flushState->resourceProvider()->createBuffer( sizeof(vertices), GrGpuBufferType::kVertex, kStatic_GrAccessPattern, vertices); } - void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { + + void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) final { if (!fVertexBuffer) { return; } - GrPipeline pipeline(GrScissorTest::kDisabled, SkBlendMode::kSrcOver, - flushState->drawOpArgs().outputSwizzle()); - FwidthSquircleTestProcessor primProc(fViewMatrix); - - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - pipeline, - primProc, - nullptr, nullptr, 0); + if (!fProgramInfo) { + auto geomProc = FwidthSquircleTestProcessor::Make(flushState->allocator(), + fViewMatrix); + + fProgramInfo = sk_gpu_test::CreateProgramInfo(&flushState->caps(), + flushState->allocator(), + flushState->view(), + flushState->detachAppliedClip(), + flushState->dstProxyView(), + geomProc, SkBlendMode::kSrcOver, + GrPrimitiveType::kTriangleStrip); + } GrMesh mesh(GrPrimitiveType::kTriangleStrip); mesh.setNonIndexedNonInstanced(4); mesh.setVertexData(std::move(fVertexBuffer)); - flushState->opsRenderPass()->draw(programInfo, &mesh, 1, SkRect::MakeIWH(kWidth, kHeight)); + + flushState->opsRenderPass()->draw(*fProgramInfo, &mesh, 1, + SkRect::MakeIWH(kWidth, kHeight)); + } - sk_sp fVertexBuffer; - const SkMatrix fViewMatrix; static const int kWidth = 200; static const int kHeight = 200; + sk_sp fVertexBuffer; + const SkMatrix fViewMatrix; + + // The program info (and both the GrPipeline and GrPrimitiveProcessor it relies on), when + // allocated, are allocated in either the ddl-record-time or flush-time arena. It is the + // arena's job to free up their memory so we just have a bare programInfo pointer here. We + // don't even store the GrPipeline and GrPrimitiveProcessor pointers here bc they are + // guaranteed to have the same lifetime as the program info. + GrProgramInfo* fProgramInfo = nullptr; + friend class ::GrOpMemoryPool; // for ctor + + typedef GrDrawOp INHERITED; }; //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/third_party/skia/gm/hittestpath.cpp b/third_party/skia/gm/hittestpath.cpp index 27dab179cf74..d482e49380cd 100644 --- a/third_party/skia/gm/hittestpath.cpp +++ b/third_party/skia/gm/hittestpath.cpp @@ -53,13 +53,13 @@ DEF_SIMPLE_GM(hittestpath, canvas, 700, 460) { randoms[10] * scale, randoms[11] * scale); } - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); path.offset(SkIntToScalar(20), SkIntToScalar(20)); test_hittest(canvas, path); canvas->translate(SkIntToScalar(scale), 0); - path.setFillType(SkPath::kWinding_FillType); + path.setFillType(SkPathFillType::kWinding); test_hittest(canvas, path); } diff --git a/third_party/skia/gm/image_pict.cpp b/third_party/skia/gm/image_pict.cpp index e637bc5864fa..023e3693b3d4 100644 --- a/third_party/skia/gm/image_pict.cpp +++ b/third_party/skia/gm/image_pict.cpp @@ -191,15 +191,14 @@ class TextureGenerator : public SkImageGenerator { return nullptr; } - if (origin.fX == 0 && origin.fY == 0 && - info.width() == fProxy->width() && info.height() == fProxy->height()) { + if (origin.fX == 0 && origin.fY == 0 && info.dimensions() == fProxy->dimensions()) { return fProxy; } GrMipMapped mipMapped = willBeMipped ? GrMipMapped::kYes : GrMipMapped::kNo; - return GrSurfaceProxy::Copy(fCtx.get(), fProxy.get(), - SkColorTypeToGrColorType(info.colorType()), mipMapped, + return GrSurfaceProxy::Copy( + fCtx.get(), fProxy.get(), mipMapped, SkIRect::MakeXYWH(origin.x(), origin.y(), info.width(), info.height()), SkBackingFit::kExact, SkBudgeted::kYes); } diff --git a/third_party/skia/gm/imagefromyuvtextures.cpp b/third_party/skia/gm/imagefromyuvtextures.cpp index 68dc7dc9361d..d4b96ec38a8d 100644 --- a/third_party/skia/gm/imagefromyuvtextures.cpp +++ b/third_party/skia/gm/imagefromyuvtextures.cpp @@ -58,7 +58,9 @@ class ImageFromYUVTextures : public GpuGM { } SkISize onISize() override { - return SkISize::Make(kBmpSize + 2 * kPad, 390); + // Original image, plus each color space drawn twice + int numBitmaps = 2 * (kLastEnum_SkYUVColorSpace + 1) + 1; + return SkISize::Make(kBmpSize + 2 * kPad, numBitmaps * (kBmpSize + kPad) + kPad); } void onOnceBeforeDraw() override { diff --git a/third_party/skia/gm/inverseclip.cpp b/third_party/skia/gm/inverseclip.cpp index f7dfb794fa60..9d7b910b0813 100644 --- a/third_party/skia/gm/inverseclip.cpp +++ b/third_party/skia/gm/inverseclip.cpp @@ -12,7 +12,7 @@ // Repro case for http://skbug.com/9453 DEF_SIMPLE_GM(inverseclip, canvas, 400, 400) { SkPath clip; - clip.setFillType(SkPath::kInverseWinding_FillType); + clip.setFillType(SkPathFillType::kInverseWinding); clip.moveTo(195.448f, 31); clip.cubicTo(97.9925f, 31, 18.99f, 105.23f, 18.99f, 196.797f); clip.cubicTo(18.99f, 288.365f, 97.9925f, 362.595f, 195.448f, 362.595f); diff --git a/third_party/skia/gm/inversepaths.cpp b/third_party/skia/gm/inversepaths.cpp index 07269836f200..a6cd1bd83a4c 100644 --- a/third_party/skia/gm/inversepaths.cpp +++ b/third_party/skia/gm/inversepaths.cpp @@ -34,7 +34,7 @@ static SkPath generate_rect_line(SkScalar cx, SkScalar cy, SkScalar l) { static SkPath generate_circle(SkScalar cx, SkScalar cy, SkScalar d) { SkPath path; - path.addCircle(cx, cy, d/2, SkPath::kCW_Direction); + path.addCircle(cx, cy, d/2, SkPathDirection::kCW); return path; } @@ -131,10 +131,10 @@ DEF_SIMPLE_GM(inverse_paths, canvas, 800, 1200) { canvas->clipRect(clipRect); SkPath path = paths[pathIndex](cx, cy, size); - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); canvas->drawPath(path, paint); - path.setFillType(SkPath::kWinding_FillType); + path.setFillType(SkPathFillType::kWinding); canvas->drawPath(path, outlinePaint); canvas->restore(); diff --git a/third_party/skia/gm/linepaths.cpp b/third_party/skia/gm/linepaths.cpp index 25ffde250531..c4e6ffd94698 100644 --- a/third_party/skia/gm/linepaths.cpp +++ b/third_party/skia/gm/linepaths.cpp @@ -20,7 +20,7 @@ static void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, - SkPaint::Style style, SkPath::FillType fill, + SkPaint::Style style, SkPathFillType fill, SkScalar strokeWidth) { path.setFillType(fill); SkPaint paint; @@ -37,14 +37,14 @@ static void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, static void draw(SkCanvas* canvas, bool doClose) { struct FillAndName { - SkPath::FillType fFill; + SkPathFillType fFill; const char* fName; }; constexpr FillAndName gFills[] = { - {SkPath::kWinding_FillType, "Winding"}, - {SkPath::kEvenOdd_FillType, "Even / Odd"}, - {SkPath::kInverseWinding_FillType, "Inverse Winding"}, - {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, + {SkPathFillType::kWinding, "Winding"}, + {SkPathFillType::kEvenOdd, "Even / Odd"}, + {SkPathFillType::kInverseWinding, "Inverse Winding"}, + {SkPathFillType::kInverseEvenOdd, "Inverse Even / Odd"}, }; struct StyleAndName { SkPaint::Style fStyle; diff --git a/third_party/skia/gm/mandoline.cpp b/third_party/skia/gm/mandoline.cpp index a675013b93d8..6f943fcae8cd 100644 --- a/third_party/skia/gm/mandoline.cpp +++ b/third_party/skia/gm/mandoline.cpp @@ -28,7 +28,7 @@ class MandolineSlicer { static constexpr int kDefaultSubdivisions = 10; MandolineSlicer(SkPoint anchorPt) { - fPath.setFillType(SkPath::kEvenOdd_FillType); + fPath.setFillType(SkPathFillType::kEvenOdd); fPath.setIsVolatile(true); this->reset(anchorPt); } diff --git a/third_party/skia/gm/multipicturedraw.cpp b/third_party/skia/gm/multipicturedraw.cpp deleted file mode 100644 index 688154ef9f42..000000000000 --- a/third_party/skia/gm/multipicturedraw.cpp +++ /dev/null @@ -1,578 +0,0 @@ -/* - * Copyright 2014 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/SkBBHFactory.h" -#include "include/core/SkBlendMode.h" -#include "include/core/SkCanvas.h" -#include "include/core/SkColor.h" -#include "include/core/SkColorFilter.h" -#include "include/core/SkImageInfo.h" -#include "include/core/SkMatrix.h" -#include "include/core/SkMultiPictureDraw.h" -#include "include/core/SkPaint.h" -#include "include/core/SkPath.h" -#include "include/core/SkPicture.h" -#include "include/core/SkPictureRecorder.h" -#include "include/core/SkRRect.h" -#include "include/core/SkRect.h" -#include "include/core/SkRefCnt.h" -#include "include/core/SkScalar.h" -#include "include/core/SkSize.h" -#include "include/core/SkString.h" -#include "include/core/SkSurface.h" -#include "include/core/SkTypes.h" -#include "include/private/SkTArray.h" -#include "tools/ToolUtils.h" - -constexpr SkScalar kRoot3Over2 = 0.86602545f; // sin(60) -constexpr SkScalar kRoot3 = 1.73205081f; - -constexpr int kHexSide = 30; -constexpr int kNumHexX = 6; -constexpr int kNumHexY = 6; -constexpr int kPicWidth = kNumHexX * kHexSide; -constexpr int kPicHeight = (int)((kNumHexY - 0.5f) * 2 * kHexSide * kRoot3Over2 + 0.5f); -constexpr SkScalar kInset = 20.0f; -constexpr int kNumPictures = 4; - -constexpr int kTriSide = 40; - -// Create a hexagon centered at (originX, originY) -static SkPath make_hex_path(SkScalar originX, SkScalar originY) { - SkPath hex; - hex.moveTo(originX-kHexSide, originY); - hex.rLineTo(SkScalarHalf(kHexSide), kRoot3Over2 * kHexSide); - hex.rLineTo(SkIntToScalar(kHexSide), 0); - hex.rLineTo(SkScalarHalf(kHexSide), -kHexSide * kRoot3Over2); - hex.rLineTo(-SkScalarHalf(kHexSide), -kHexSide * kRoot3Over2); - hex.rLineTo(-SkIntToScalar(kHexSide), 0); - hex.close(); - return hex; -} - -// Make a picture that is a tiling of the plane with stroked hexagons where -// each hexagon is in its own layer. The layers are to exercise Ganesh's -// layer hoisting. -static sk_sp make_hex_plane_picture(SkColor fillColor) { - - // Create a hexagon with its center at the origin - SkPath hex = make_hex_path(0, 0); - - SkPaint fill; - fill.setStyle(SkPaint::kFill_Style); - fill.setColor(fillColor); - - SkPaint stroke; - stroke.setStyle(SkPaint::kStroke_Style); - stroke.setStrokeWidth(3); - - SkPictureRecorder recorder; - SkRTreeFactory bbhFactory; - - SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth), - SkIntToScalar(kPicHeight), - &bbhFactory); - - SkScalar xPos, yPos = 0; - - for (int y = 0; y < kNumHexY; ++y) { - xPos = 0; - - for (int x = 0; x < kNumHexX; ++x) { - canvas->saveLayer(nullptr, nullptr); - canvas->translate(xPos, yPos + ((x % 2) ? kRoot3Over2 * kHexSide : 0)); - canvas->drawPath(hex, fill); - canvas->drawPath(hex, stroke); - canvas->restore(); - - xPos += 1.5f * kHexSide; - } - - yPos += 2 * kHexSide * kRoot3Over2; - } - - return recorder.finishRecordingAsPicture(); -} - -// Create a picture that consists of a single large layer that is tiled -// with hexagons. -// This is intended to exercise the layer hoisting code's clip handling (in -// tile mode). -static sk_sp make_single_layer_hex_plane_picture() { - - // Create a hexagon with its center at the origin - SkPath hex = make_hex_path(0, 0); - - SkPaint whiteFill; - whiteFill.setStyle(SkPaint::kFill_Style); - whiteFill.setColor(SK_ColorWHITE); - - SkPaint greyFill; - greyFill.setStyle(SkPaint::kFill_Style); - greyFill.setColor(SK_ColorLTGRAY); - - SkPaint stroke; - stroke.setStyle(SkPaint::kStroke_Style); - stroke.setStrokeWidth(3); - - SkPictureRecorder recorder; - SkRTreeFactory bbhFactory; - - constexpr SkScalar kBig = 10000.0f; - SkCanvas* canvas = recorder.beginRecording(kBig, kBig, &bbhFactory); - - canvas->saveLayer(nullptr, nullptr); - - SkScalar xPos = 0.0f, yPos = 0.0f; - - for (int y = 0; yPos < kBig; ++y) { - xPos = 0; - - for (int x = 0; xPos < kBig; ++x) { - canvas->save(); - canvas->translate(xPos, yPos + ((x % 2) ? kRoot3Over2 * kHexSide : 0)); - // The color of the filled hex is swapped to yield a different - // pattern in each tile. This allows an error in layer hoisting (e.g., - // the clip isn't blocking cache reuse) to cause a visual discrepancy. - canvas->drawPath(hex, ((x+y) % 3) ? whiteFill : greyFill); - canvas->drawPath(hex, stroke); - canvas->restore(); - - xPos += 1.5f * kHexSide; - } - - yPos += 2 * kHexSide * kRoot3Over2; - } - - canvas->restore(); - - return recorder.finishRecordingAsPicture(); -} - -// Make an equilateral triangle path with its top corner at (originX, originY) -static SkPath make_tri_path(SkScalar originX, SkScalar originY) { - SkPath tri; - tri.moveTo(originX, originY); - tri.rLineTo(SkScalarHalf(kTriSide), 1.5f * kTriSide / kRoot3); - tri.rLineTo(-kTriSide, 0); - tri.close(); - return tri; -} - -static sk_sp make_tri_picture() { - SkPath tri = make_tri_path(SkScalarHalf(kTriSide), 0); - - SkPaint fill; - fill.setStyle(SkPaint::kFill_Style); - fill.setColor(SK_ColorLTGRAY); - - SkPaint stroke; - stroke.setStyle(SkPaint::kStroke_Style); - stroke.setStrokeWidth(3); - - SkPictureRecorder recorder; - SkRTreeFactory bbhFactory; - - SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth), - SkIntToScalar(kPicHeight), - &bbhFactory); - SkRect r = tri.getBounds(); - r.outset(2.0f, 2.0f); // outset for stroke - canvas->clipRect(r); - // The saveLayer/restore block is to exercise layer hoisting - canvas->saveLayer(nullptr, nullptr); - canvas->drawPath(tri, fill); - canvas->drawPath(tri, stroke); - canvas->restore(); - - return recorder.finishRecordingAsPicture(); -} - -static sk_sp make_sub_picture(const SkPicture* tri) { - SkPictureRecorder recorder; - SkRTreeFactory bbhFactory; - - SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth), - SkIntToScalar(kPicHeight), - &bbhFactory); - - canvas->scale(1.0f/2.0f, 1.0f/2.0f); - - canvas->save(); - canvas->translate(SkScalarHalf(kTriSide), 0); - canvas->drawPicture(tri); - canvas->restore(); - - canvas->save(); - canvas->translate(SkIntToScalar(kTriSide), 1.5f * kTriSide / kRoot3); - canvas->drawPicture(tri); - canvas->restore(); - - canvas->save(); - canvas->translate(0, 1.5f * kTriSide / kRoot3); - canvas->drawPicture(tri); - canvas->restore(); - - return recorder.finishRecordingAsPicture(); -} - -// Create a Sierpinkski-like picture that starts with a top row with a picture -// that just contains a triangle. Subsequent rows take the prior row's picture, -// shrinks it and replicates it 3 times then draws and appropriate number of -// copies of it. -static sk_sp make_sierpinski_picture() { - sk_sp pic(make_tri_picture()); - - SkPictureRecorder recorder; - SkRTreeFactory bbhFactory; - - SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth), - SkIntToScalar(kPicHeight), - &bbhFactory); - - constexpr int kNumLevels = 4; - for (int i = 0; i < kNumLevels; ++i) { - canvas->save(); - canvas->translate(kPicWidth/2 - (i+1) * (kTriSide/2.0f), 0.0f); - for (int j = 0; j < i+1; ++j) { - canvas->drawPicture(pic); - canvas->translate(SkIntToScalar(kTriSide), 0); - } - canvas->restore(); - - pic = make_sub_picture(pic.get()); - - canvas->translate(0, 1.5f * kTriSide / kRoot3); - } - - return recorder.finishRecordingAsPicture(); -} - -static sk_sp create_compat_surface(SkCanvas* canvas, int width, int height) { - SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); - - return ToolUtils::makeSurface(canvas, info); -} - -// This class stores the information required to compose all the result -// fragments potentially generated by the MultiPictureDraw object -class ComposeStep { -public: - ComposeStep() : fX(0.0f), fY(0.0f), fPaint(nullptr) { } - ~ComposeStep() { - delete fPaint; - } - - sk_sp fSurf; - SkScalar fX; - SkScalar fY; - SkPaint* fPaint; -}; - -typedef void (*PFContentMtd)(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]); - -// Just a single picture with no clip -static void no_clip(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]) { - canvas->drawPicture(pictures[0]); -} - -// Two pictures with a rect clip on the second one -static void rect_clip(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]) { - canvas->drawPicture(pictures[0]); - - SkRect rect = pictures[0]->cullRect(); - rect.inset(kInset, kInset); - - canvas->clipRect(rect); - - canvas->drawPicture(pictures[1]); -} - -// Two pictures with a round rect clip on the second one -static void rrect_clip(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]) { - canvas->drawPicture(pictures[0]); - - SkRect rect = pictures[0]->cullRect(); - rect.inset(kInset, kInset); - - SkRRect rrect; - rrect.setRectXY(rect, kInset, kInset); - - canvas->clipRRect(rrect); - - canvas->drawPicture(pictures[1]); -} - -// Two pictures with a clip path on the second one -static void path_clip(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]) { - canvas->drawPicture(pictures[0]); - - // Create a hexagon centered on the middle of the hex grid - SkPath hex = make_hex_path((kNumHexX / 2.0f) * kHexSide, kNumHexY * kHexSide * kRoot3Over2); - - canvas->clipPath(hex); - - canvas->drawPicture(pictures[1]); -} - -// Two pictures with an inverse clip path on the second one -static void invpath_clip(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]) { - canvas->drawPicture(pictures[0]); - - // Create a hexagon centered on the middle of the hex grid - SkPath hex = make_hex_path((kNumHexX / 2.0f) * kHexSide, kNumHexY * kHexSide * kRoot3Over2); - hex.setFillType(SkPath::kInverseEvenOdd_FillType); - - canvas->clipPath(hex); - - canvas->drawPicture(pictures[1]); -} - -// Reuse a single base (triangular) picture a _lot_ (rotated, scaled and translated). -static void sierpinski(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]) { - canvas->save(); - canvas->drawPicture(pictures[2]); - - canvas->rotate(180.0f); - canvas->translate(-SkIntToScalar(kPicWidth), -SkIntToScalar(kPicHeight)); - canvas->drawPicture(pictures[2]); - canvas->restore(); -} - -static void big_layer(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]) { - canvas->drawPicture(pictures[3]); -} - -constexpr PFContentMtd gContentMthds[] = { - no_clip, - rect_clip, - rrect_clip, - path_clip, - invpath_clip, - sierpinski, - big_layer, -}; - -static void create_content(SkMultiPictureDraw* mpd, PFContentMtd pfGen, - const SkPicture* pictures[kNumPictures], - SkCanvas* dest, const SkMatrix& xform) { - sk_sp composite; - - { - SkPictureRecorder recorder; - SkRTreeFactory bbhFactory; - - SkCanvas* pictureCanvas = recorder.beginRecording(SkIntToScalar(kPicWidth), - SkIntToScalar(kPicHeight), - &bbhFactory); - - (*pfGen)(pictureCanvas, pictures); - - composite = recorder.finishRecordingAsPicture(); - } - - mpd->add(dest, composite.get(), &xform); -} - -typedef void(*PFLayoutMtd)(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd, - PFContentMtd pfGen, const SkPicture* pictures[kNumPictures], - SkTArray* composeSteps); - -// Draw the content into a single canvas -static void simple(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd, - PFContentMtd pfGen, - const SkPicture* pictures[kNumPictures], - SkTArray *composeSteps) { - - ComposeStep& step = composeSteps->push_back(); - - step.fSurf = create_compat_surface(finalCanvas, kPicWidth, kPicHeight); - - SkCanvas* subCanvas = step.fSurf->getCanvas(); - - create_content(mpd, pfGen, pictures, subCanvas, SkMatrix::I()); -} - -// Draw the content into multiple canvases/tiles -static void tiled(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd, - PFContentMtd pfGen, - const SkPicture* pictures[kNumPictures], - SkTArray *composeSteps) { - const int kNumTilesX = 2; - const int kNumTilesY = 2; - const int kTileWidth = kPicWidth / kNumTilesX; - const int kTileHeight = kPicHeight / kNumTilesY; - - SkASSERT(kPicWidth == kNumTilesX * kTileWidth); - SkASSERT(kPicHeight == kNumTilesY * kTileHeight); - - const SkColor colors[kNumTilesX][kNumTilesY] = { - { SK_ColorCYAN, SK_ColorMAGENTA }, - { SK_ColorYELLOW, SK_ColorGREEN } - }; - - for (int y = 0; y < kNumTilesY; ++y) { - for (int x = 0; x < kNumTilesX; ++x) { - ComposeStep& step = composeSteps->push_back(); - - step.fX = SkIntToScalar(x*kTileWidth); - step.fY = SkIntToScalar(y*kTileHeight); - step.fPaint = new SkPaint; - step.fPaint->setColorFilter( - SkColorFilters::Blend(colors[x][y], SkBlendMode::kModulate)); - - step.fSurf = create_compat_surface(finalCanvas, kTileWidth, kTileHeight); - - SkCanvas* subCanvas = step.fSurf->getCanvas(); - - const SkMatrix trans = SkMatrix::MakeTrans(-SkIntToScalar(x*kTileWidth), - -SkIntToScalar(y*kTileHeight)); - - create_content(mpd, pfGen, pictures, subCanvas, trans); - } - } -} - -constexpr PFLayoutMtd gLayoutMthds[] = { simple, tiled }; - -namespace skiagm { - /** - * This GM exercises the SkMultiPictureDraw object. It tests the - * cross product of: - * tiled vs. all-at-once rendering (e.g., into many or just 1 canvas) - * different clips (e.g., none, rect, rrect) - * single vs. multiple pictures (e.g., normal vs. picture-pile-style content) - */ - class MultiPictureDraw : public GM { - public: - enum Content { - kNoClipSingle_Content, - kRectClipMulti_Content, - kRRectClipMulti_Content, - kPathClipMulti_Content, - kInvPathClipMulti_Content, - kSierpinski_Content, - kBigLayer_Content, - - kLast_Content = kBigLayer_Content - }; - - const int kContentCnt = kLast_Content + 1; - - enum Layout { - kSimple_Layout, - kTiled_Layout, - - kLast_Layout = kTiled_Layout - }; - - const int kLayoutCnt = kLast_Layout + 1; - - MultiPictureDraw(Content content, Layout layout) : fContent(content), fLayout(layout) { - SkASSERT(SK_ARRAY_COUNT(gLayoutMthds) == kLayoutCnt); - SkASSERT(SK_ARRAY_COUNT(gContentMthds) == kContentCnt); - - for (int i = 0; i < kNumPictures; ++i) { - fPictures[i] = nullptr; - } - } - - ~MultiPictureDraw() override { - for (int i = 0; i < kNumPictures; ++i) { - SkSafeUnref(fPictures[i]); - } - } - - protected: - Content fContent; - Layout fLayout; - const SkPicture* fPictures[kNumPictures]; - - void onOnceBeforeDraw() override { - fPictures[0] = make_hex_plane_picture(SK_ColorWHITE).release(); - fPictures[1] = make_hex_plane_picture(SK_ColorGRAY).release(); - fPictures[2] = make_sierpinski_picture().release(); - fPictures[3] = make_single_layer_hex_plane_picture().release(); - } - - void onDraw(SkCanvas* canvas) override { - SkMultiPictureDraw mpd; - SkTArray composeSteps; - - // Fill up the MultiPictureDraw - (*gLayoutMthds[fLayout])(canvas, &mpd, - gContentMthds[fContent], - fPictures, &composeSteps); - - mpd.draw(); - - // Compose all the drawn canvases into the final canvas - for (int i = 0; i < composeSteps.count(); ++i) { - const ComposeStep& step = composeSteps[i]; - - canvas->drawImage(step.fSurf->makeImageSnapshot().get(), - step.fX, step.fY, step.fPaint); - } - } - - SkISize onISize() override { return SkISize::Make(kPicWidth, kPicHeight); } - - SkString onShortName() override { - const char* gContentNames[] = { - "noclip", "rectclip", "rrectclip", "pathclip", - "invpathclip", "sierpinski", "biglayer" - }; - const char* gLayoutNames[] = { "simple", "tiled" }; - - SkASSERT(SK_ARRAY_COUNT(gLayoutNames) == kLayoutCnt); - SkASSERT(SK_ARRAY_COUNT(gContentNames) == kContentCnt); - - SkString name("multipicturedraw_"); - - name.append(gContentNames[fContent]); - name.append("_"); - name.append(gLayoutNames[fLayout]); - return name; - } - - bool runAsBench() const override { return true; } - - private: - typedef GM INHERITED; - }; - - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kNoClipSingle_Content, - MultiPictureDraw::kSimple_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kRectClipMulti_Content, - MultiPictureDraw::kSimple_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kRRectClipMulti_Content, - MultiPictureDraw::kSimple_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kPathClipMulti_Content, - MultiPictureDraw::kSimple_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kInvPathClipMulti_Content, - MultiPictureDraw::kSimple_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kSierpinski_Content, - MultiPictureDraw::kSimple_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kBigLayer_Content, - MultiPictureDraw::kSimple_Layout);) - - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kNoClipSingle_Content, - MultiPictureDraw::kTiled_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kRectClipMulti_Content, - MultiPictureDraw::kTiled_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kRRectClipMulti_Content, - MultiPictureDraw::kTiled_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kPathClipMulti_Content, - MultiPictureDraw::kTiled_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kInvPathClipMulti_Content, - MultiPictureDraw::kTiled_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kSierpinski_Content, - MultiPictureDraw::kTiled_Layout);) - DEF_GM(return new MultiPictureDraw(MultiPictureDraw::kBigLayer_Content, - MultiPictureDraw::kTiled_Layout);) -} diff --git a/third_party/skia/gm/nested.cpp b/third_party/skia/gm/nested.cpp index 859077f3f849..9c1370c56918 100644 --- a/third_party/skia/gm/nested.cpp +++ b/third_party/skia/gm/nested.cpp @@ -53,7 +53,7 @@ class NestedGM : public GM { kShapeCount }; - static void AddShape(SkPath* path, const SkRect& rect, Shapes shape, SkPath::Direction dir) { + static void AddShape(SkPath* path, const SkRect& rect, Shapes shape, SkPathDirection dir) { switch (shape) { case kRect_Shape: path->addRect(rect, dir); @@ -105,9 +105,9 @@ class NestedGM : public GM { for (size_t innerRect = 0; innerRect < SK_ARRAY_COUNT(innerRects); ++innerRect) { SkPath path; - AddShape(&path, outerRect, (Shapes) outerShape, SkPath::kCW_Direction); + AddShape(&path, outerRect, (Shapes) outerShape, SkPathDirection::kCW); AddShape(&path, innerRects[innerRect], (Shapes) innerShape, - SkPath::kCCW_Direction); + SkPathDirection::kCCW); canvas->save(); if (fFlipped) { diff --git a/third_party/skia/gm/pathcontourstart.cpp b/third_party/skia/gm/pathcontourstart.cpp index 430e59bcff0a..7d3ff4842d83 100644 --- a/third_party/skia/gm/pathcontourstart.cpp +++ b/third_party/skia/gm/pathcontourstart.cpp @@ -55,19 +55,19 @@ class ContourStartGM : public GM { void onDraw(SkCanvas* canvas) override { - drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned startIndex) { + drawDirs(canvas, [](const SkRect& rect, SkPathDirection dir, unsigned startIndex) { SkPath path; path.addRect(rect, dir, startIndex); return path; }); - drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned startIndex) { + drawDirs(canvas, [](const SkRect& rect, SkPathDirection dir, unsigned startIndex) { SkPath path; path.addOval(rect, dir, startIndex); return path; }); - drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned startIndex) { + drawDirs(canvas, [](const SkRect& rect, SkPathDirection dir, unsigned startIndex) { SkRRect rrect; const SkVector radii[4] = { {15, 15}, {15, 15}, {15, 15}, {15, 15}}; rrect.setRectRadii(rect, radii); @@ -77,7 +77,7 @@ class ContourStartGM : public GM { return path; }); - drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned startIndex) { + drawDirs(canvas, [](const SkRect& rect, SkPathDirection dir, unsigned startIndex) { SkRRect rrect; rrect.setRect(rect); @@ -86,7 +86,7 @@ class ContourStartGM : public GM { return path; }); - drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned startIndex) { + drawDirs(canvas, [](const SkRect& rect, SkPathDirection dir, unsigned startIndex) { SkRRect rrect; rrect.setOval(rect); @@ -105,15 +105,15 @@ class ContourStartGM : public GM { SkRect fRect; void drawDirs(SkCanvas* canvas, - SkPath (*makePath)(const SkRect&, SkPath::Direction, unsigned)) const { - drawOneColumn(canvas, SkPath::kCW_Direction, makePath); + SkPath (*makePath)(const SkRect&, SkPathDirection, unsigned)) const { + drawOneColumn(canvas, SkPathDirection::kCW, makePath); canvas->translate(kImageWidth / 10, 0); - drawOneColumn(canvas, SkPath::kCCW_Direction, makePath); + drawOneColumn(canvas, SkPathDirection::kCCW, makePath); canvas->translate(kImageWidth / 10, 0); } - void drawOneColumn(SkCanvas* canvas, SkPath::Direction dir, - SkPath (*makePath)(const SkRect&, SkPath::Direction, unsigned)) const { + void drawOneColumn(SkCanvas* canvas, SkPathDirection dir, + SkPath (*makePath)(const SkRect&, SkPathDirection, unsigned)) const { SkAutoCanvasRestore acr(canvas, true); for (unsigned i = 0; i < 8; ++i) { diff --git a/third_party/skia/gm/patheffects.cpp b/third_party/skia/gm/patheffects.cpp index 33a6841ce619..37715f1b361d 100644 --- a/third_party/skia/gm/patheffects.cpp +++ b/third_party/skia/gm/patheffects.cpp @@ -148,9 +148,9 @@ class PathEffectGM : public GM { path.reset(); SkRect r = { 0, 0, 250, 120 }; - path.addOval(r, SkPath::kCW_Direction); + path.addOval(r, SkPathDirection::kCW); r.inset(50, 50); - path.addRect(r, SkPath::kCCW_Direction); + path.addRect(r, SkPathDirection::kCCW); canvas->translate(320, 20); for (size_t i = 0; i < SK_ARRAY_COUNT(gPE2); i++) { diff --git a/third_party/skia/gm/pathinterior.cpp b/third_party/skia/gm/pathinterior.cpp index b152f72f6e8f..eb83d9383647 100644 --- a/third_party/skia/gm/pathinterior.cpp +++ b/third_party/skia/gm/pathinterior.cpp @@ -75,9 +75,9 @@ class PathInteriorGM : public skiagm::GM { for (int outerCW = 0; outerCW <= 1; ++outerCW) { for (int innerCW = 0; innerCW <= 1; ++innerCW) { SkPath path; - path.setFillType(doEvenOdd ? SkPath::kEvenOdd_FillType : SkPath::kWinding_FillType); - SkPath::Direction outerDir = outerCW ? SkPath::kCW_Direction : SkPath::kCCW_Direction; - SkPath::Direction innerDir = innerCW ? SkPath::kCW_Direction : SkPath::kCCW_Direction; + path.setFillType(doEvenOdd ? SkPathFillType::kEvenOdd : SkPathFillType::kWinding); + SkPathDirection outerDir = outerCW ? SkPathDirection::kCW : SkPathDirection::kCCW; + SkPathDirection innerDir = innerCW ? SkPathDirection::kCW : SkPathDirection::kCCW; SkRect r = insetFirst ? inset(rect) : rect; if (outerRR) { diff --git a/third_party/skia/gm/pathmaskcache.cpp b/third_party/skia/gm/pathmaskcache.cpp index 80142757ed6f..07642fed2a72 100644 --- a/third_party/skia/gm/pathmaskcache.cpp +++ b/third_party/skia/gm/pathmaskcache.cpp @@ -86,7 +86,7 @@ class PathMaskCache : public skiagm::GM { paths.push_back(); paths.back().addCircle(30.f, 30.f, 30.f); paths.back().addRect(SkRect::MakeXYWH(45.f, 45.f, 50.f, 60.f)); - paths.back().setFillType(SkPath::kEvenOdd_FillType); + paths.back().setFillType(SkPathFillType::kEvenOdd); canvas->translate(kPad, kPad); diff --git a/third_party/skia/gm/pathopsinverse.cpp b/third_party/skia/gm/pathopsinverse.cpp index 60f80d0f3245..54c494be7978 100644 --- a/third_party/skia/gm/pathopsinverse.cpp +++ b/third_party/skia/gm/pathopsinverse.cpp @@ -69,11 +69,11 @@ class PathOpsInverseGM : public GM { SkPath one, two; int yPos = 0; for (int oneFill = 0; oneFill <= 1; ++oneFill) { - SkPath::FillType oneF = oneFill ? SkPath::kInverseEvenOdd_FillType - : SkPath::kEvenOdd_FillType; + SkPathFillType oneF = oneFill ? SkPathFillType::kInverseEvenOdd + : SkPathFillType::kEvenOdd; for (int twoFill = 0; twoFill <= 1; ++twoFill) { - SkPath::FillType twoF = twoFill ? SkPath::kInverseEvenOdd_FillType - : SkPath::kEvenOdd_FillType; + SkPathFillType twoF = twoFill ? SkPathFillType::kInverseEvenOdd + : SkPathFillType::kEvenOdd; one.reset(); one.setFillType(oneF); one.addRect(10, 10, 70, 70); diff --git a/third_party/skia/gm/polygonoffset.cpp b/third_party/skia/gm/polygonoffset.cpp index 9cdd9ea5a324..9f906ac82960 100644 --- a/third_party/skia/gm/polygonoffset.cpp +++ b/third_party/skia/gm/polygonoffset.cpp @@ -23,12 +23,12 @@ #include #include -static void create_ngon(int n, SkPoint* pts, SkScalar w, SkScalar h, SkPath::Direction dir) { +static void create_ngon(int n, SkPoint* pts, SkScalar w, SkScalar h, SkPathDirection dir) { float angleStep = 360.0f / n, angle = 0.0f; if ((n % 2) == 1) { angle = angleStep/2.0f; } - if (SkPath::kCCW_Direction == dir) { + if (SkPathDirection::kCCW == dir) { angle = -angle; angleStep = -angleStep; } @@ -438,13 +438,13 @@ class PolygonOffsetGM : public GM { SkISize onISize() override { return SkISize::Make(kGMWidth, kGMHeight); } bool runAsBench() const override { return true; } - static void GetConvexPolygon(int index, SkPath::Direction dir, + static void GetConvexPolygon(int index, SkPathDirection dir, std::unique_ptr* data, int* numPts) { if (index < (int)SK_ARRAY_COUNT(PolygonOffsetData::gConvexPoints)) { // manually specified *numPts = (int)PolygonOffsetData::gConvexSizes[index]; data->reset(new SkPoint[*numPts]); - if (SkPath::kCW_Direction == dir) { + if (SkPathDirection::kCW == dir) { for (int i = 0; i < *numPts; ++i) { (*data)[i] = PolygonOffsetData::gConvexPoints[index][i]; } @@ -473,13 +473,13 @@ class PolygonOffsetGM : public GM { } } - static void GetSimplePolygon(int index, SkPath::Direction dir, + static void GetSimplePolygon(int index, SkPathDirection dir, std::unique_ptr* data, int* numPts) { if (index < (int)SK_ARRAY_COUNT(PolygonOffsetData::gSimplePoints)) { // manually specified *numPts = (int)PolygonOffsetData::gSimpleSizes[index]; data->reset(new SkPoint[*numPts]); - if (SkPath::kCW_Direction == dir) { + if (SkPathDirection::kCW == dir) { for (int i = 0; i < *numPts; ++i) { (*data)[i] = PolygonOffsetData::gSimplePoints[index][i]; } @@ -515,9 +515,9 @@ class PolygonOffsetGM : public GM { std::unique_ptr data(nullptr); int numPts; if (fConvexOnly) { - GetConvexPolygon(index, SkPath::kCW_Direction, &data, &numPts); + GetConvexPolygon(index, SkPathDirection::kCW, &data, &numPts); } else { - GetSimplePolygon(index, SkPath::kCW_Direction, &data, &numPts); + GetSimplePolygon(index, SkPathDirection::kCW, &data, &numPts); } bounds.setBounds(data.get(), numPts); if (!fConvexOnly) { @@ -531,7 +531,7 @@ class PolygonOffsetGM : public GM { offset->fX += bounds.width(); } - const SkPath::Direction dirs[2] = { SkPath::kCW_Direction, SkPath::kCCW_Direction }; + const SkPathDirection dirs[2] = { SkPathDirection::kCW, SkPathDirection::kCCW }; const float insets[] = { 5, 10, 15, 20, 25, 30, 35, 40 }; const float offsets[] = { 2, 5, 9, 14, 20, 27, 35, 44, -2, -5, -9 }; const SkColor colors[] = { 0xFF901313, 0xFF8D6214, 0xFF698B14, 0xFF1C8914, diff --git a/third_party/skia/gm/preservefillrule.cpp b/third_party/skia/gm/preservefillrule.cpp index dfbed2dac564..26ff7f67d2c5 100644 --- a/third_party/skia/gm/preservefillrule.cpp +++ b/third_party/skia/gm/preservefillrule.cpp @@ -82,19 +82,19 @@ class PreserveFillRuleGM : public GpuGM { auto starRect = SkRect::MakeWH(fStarSize, fStarSize); SkPath star7_winding = ToolUtils::make_star(starRect, 7); - star7_winding.setFillType(SkPath::kWinding_FillType); + star7_winding.setFillType(SkPathFillType::kWinding); SkPath star7_evenOdd = star7_winding; star7_evenOdd.transform(SkMatrix::MakeTrans(0, fStarSize)); - star7_evenOdd.setFillType(SkPath::kEvenOdd_FillType); + star7_evenOdd.setFillType(SkPathFillType::kEvenOdd); SkPath star5_winding = ToolUtils::make_star(starRect, 5); star5_winding.transform(SkMatrix::MakeTrans(fStarSize, 0)); - star5_winding.setFillType(SkPath::kWinding_FillType); + star5_winding.setFillType(SkPathFillType::kWinding); SkPath star5_evenOdd = star5_winding; star5_evenOdd.transform(SkMatrix::MakeTrans(0, fStarSize)); - star5_evenOdd.setFillType(SkPath::kEvenOdd_FillType); + star5_evenOdd.setFillType(SkPathFillType::kEvenOdd); SkPaint paint; paint.setColor(SK_ColorGREEN); diff --git a/third_party/skia/gm/quadpaths.cpp b/third_party/skia/gm/quadpaths.cpp index 359661fa3ced..85709347d13d 100644 --- a/third_party/skia/gm/quadpaths.cpp +++ b/third_party/skia/gm/quadpaths.cpp @@ -36,7 +36,7 @@ class QuadPathGM : public GM { void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, - SkPaint::Style style, SkPath::FillType fill, + SkPaint::Style style, SkPathFillType fill, SkScalar strokeWidth) { path.setFillType(fill); SkPaint paint; @@ -53,14 +53,14 @@ class QuadPathGM : public GM { void onDraw(SkCanvas* canvas) override { struct FillAndName { - SkPath::FillType fFill; + SkPathFillType fFill; const char* fName; }; constexpr FillAndName gFills[] = { - {SkPath::kWinding_FillType, "Winding"}, - {SkPath::kEvenOdd_FillType, "Even / Odd"}, - {SkPath::kInverseWinding_FillType, "Inverse Winding"}, - {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, + {SkPathFillType::kWinding, "Winding"}, + {SkPathFillType::kEvenOdd, "Even / Odd"}, + {SkPathFillType::kInverseWinding, "Inverse Winding"}, + {SkPathFillType::kInverseEvenOdd, "Inverse Even / Odd"}, }; struct StyleAndName { SkPaint::Style fStyle; @@ -166,7 +166,7 @@ class QuadClosePathGM : public GM { void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, - SkPaint::Style style, SkPath::FillType fill, + SkPaint::Style style, SkPathFillType fill, SkScalar strokeWidth) { path.setFillType(fill); SkPaint paint; @@ -183,14 +183,14 @@ class QuadClosePathGM : public GM { void onDraw(SkCanvas* canvas) override { struct FillAndName { - SkPath::FillType fFill; + SkPathFillType fFill; const char* fName; }; constexpr FillAndName gFills[] = { - {SkPath::kWinding_FillType, "Winding"}, - {SkPath::kEvenOdd_FillType, "Even / Odd"}, - {SkPath::kInverseWinding_FillType, "Inverse Winding"}, - {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, + {SkPathFillType::kWinding, "Winding"}, + {SkPathFillType::kEvenOdd, "Even / Odd"}, + {SkPathFillType::kInverseWinding, "Inverse Winding"}, + {SkPathFillType::kInverseEvenOdd, "Inverse Even / Odd"}, }; struct StyleAndName { SkPaint::Style fStyle; diff --git a/third_party/skia/gm/samplelocations.cpp b/third_party/skia/gm/samplelocations.cpp index eeba571a4a8b..79c0c65fdc55 100644 --- a/third_party/skia/gm/samplelocations.cpp +++ b/third_party/skia/gm/samplelocations.cpp @@ -53,6 +53,7 @@ #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" #include "src/gpu/ops/GrDrawOp.h" #include "src/gpu/ops/GrOp.h" +#include "tools/gpu/ProxyUtils.h" #include #include @@ -97,21 +98,32 @@ class SampleLocationsGM : public GpuGM { class SampleLocationsTestProcessor : public GrGeometryProcessor { public: - SampleLocationsTestProcessor(GradType gradType) - : GrGeometryProcessor(kSampleLocationsTestProcessor_ClassID) - , fGradType(gradType) { - this->setWillUseCustomFeature(CustomFeatures::kSampleLocations); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, GradType gradType) { + return arena->make(gradType); } + const char* name() const override { return "SampleLocationsTestProcessor"; } + void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const final { b->add32((uint32_t)fGradType); } + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const final; private: + friend class ::SkArenaAlloc; // for access to ctor + + SampleLocationsTestProcessor(GradType gradType) + : GrGeometryProcessor(kSampleLocationsTestProcessor_ClassID) + , fGradType(gradType) { + this->setWillUseCustomFeature(CustomFeatures::kSampleLocations); + } + const GradType fGradType; class Impl; + + typedef GrGeometryProcessor INHERITED; }; class SampleLocationsTestProcessor::Impl : public GrGLSLGeometryProcessor { @@ -185,7 +197,7 @@ class SampleLocationsTestProcessor::Impl : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - FPCoordTransformIter&&) override {} + const CoordTransformRange&) override {} }; GrGLSLPrimitiveProcessor* SampleLocationsTestProcessor::createGLSLInstance( @@ -196,6 +208,16 @@ GrGLSLPrimitiveProcessor* SampleLocationsTestProcessor::createGLSLInstance( //////////////////////////////////////////////////////////////////////////////////////////////////// // Draw Op. +static constexpr GrUserStencilSettings gStencilWrite( + GrUserStencilSettings::StaticInit< + 0x0001, + GrUserStencilTest::kAlways, + 0xffff, + GrUserStencilOp::kReplace, + GrUserStencilOp::kKeep, + 0xffff>() +); + class SampleLocationsTestOp : public GrDrawOp { public: DEFINE_OP_CLASS_ID @@ -219,38 +241,65 @@ class SampleLocationsTestOp : public GrDrawOp { bool hasMixedSampledCoverage, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } - void onPrepare(GrOpFlushState*) override {} - void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { - static constexpr GrUserStencilSettings kStencilWrite( - GrUserStencilSettings::StaticInit< - 0x0001, - GrUserStencilTest::kAlways, - 0xffff, - GrUserStencilOp::kReplace, - GrUserStencilOp::kKeep, - 0xffff>() - ); - - GrPipeline pipeline(GrScissorTest::kDisabled, SkBlendMode::kSrcOver, - flushState->drawOpArgs().outputSwizzle(), - GrPipeline::InputFlags::kHWAntialias, &kStencilWrite); - - SampleLocationsTestProcessor primProc(fGradType); - - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - pipeline, - primProc, - nullptr, nullptr, 0); + + void onPrePrepare(GrRecordingContext* context, + const GrSurfaceProxyView* dstView, + GrAppliedClip* clip, + const GrXferProcessor::DstProxyView& dstProxyView) final { + // We're going to create the GrProgramInfo (and the GrPipeline and geometry processor + // it relies on) in the DDL-record-time arena. + SkArenaAlloc* arena = context->priv().recordTimeAllocator(); + + // This is equivalent to a GrOpFlushState::detachAppliedClip + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + + GrGeometryProcessor* geomProc = SampleLocationsTestProcessor::Make(arena, fGradType); + + fProgramInfo = sk_gpu_test::CreateProgramInfo(context->priv().caps(), arena, dstView, + std::move(appliedClip), dstProxyView, + geomProc, SkBlendMode::kSrcOver, + GrPrimitiveType::kTriangleStrip, + GrPipeline::InputFlags::kHWAntialias, + &gStencilWrite); + } + + void onPrepare(GrOpFlushState*) final {} + + void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) final { + + if (!fProgramInfo) { + auto geomProc = SampleLocationsTestProcessor::Make(flushState->allocator(), + fGradType); + + fProgramInfo = sk_gpu_test::CreateProgramInfo(&flushState->caps(), + flushState->allocator(), + flushState->view(), + flushState->detachAppliedClip(), + flushState->dstProxyView(), + geomProc, SkBlendMode::kSrcOver, + GrPrimitiveType::kTriangleStrip, + GrPipeline::InputFlags::kHWAntialias, + &gStencilWrite); + } GrMesh mesh(GrPrimitiveType::kTriangleStrip); mesh.setInstanced(nullptr, 200*200, 0, 4); - flushState->opsRenderPass()->draw(programInfo, &mesh, 1, SkRect::MakeIWH(200, 200)); + + flushState->opsRenderPass()->draw(*fProgramInfo, &mesh, 1, SkRect::MakeIWH(200, 200)); } const GradType fGradType; + // The program info (and both the GrPipeline and GrPrimitiveProcessor it relies on), when + // allocated, are allocated in either the ddl-record-time or flush-time arena. It is the + // arena's job to free up their memory so we just have a bare programInfo pointer here. We + // don't even store the GrPipeline and GrPrimitiveProcessor pointers here bc they are + // guaranteed to have the same lifetime as the program info. + GrProgramInfo* fProgramInfo = nullptr; + friend class ::GrOpMemoryPool; // for ctor + + typedef GrDrawOp INHERITED; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -262,8 +311,8 @@ DrawResult SampleLocationsGM::onDraw( *errorMsg = "Requires support for sample locations."; return DrawResult::kSkip; } - if (!ctx->priv().caps()->shaderCaps()->sampleVariablesSupport()) { - *errorMsg = "Requires support for sample variables."; + if (!ctx->priv().caps()->shaderCaps()->sampleMaskSupport()) { + *errorMsg = "Requires support for sample mask."; return DrawResult::kSkip; } if (rtc->numSamples() <= 1 && !ctx->priv().caps()->mixedSamplesSupport()) { @@ -308,12 +357,12 @@ DrawResult SampleLocationsGM::onDraw( SkMatrix::I(), SkRect::MakeWH(200, 200)); // Copy offscreen texture to canvas. - rtc->drawTexture( - GrNoClip(), sk_ref_sp(offscreenRTC->asTextureProxy()), - offscreenRTC->colorInfo().colorType(), GrSamplerState::Filter::kNearest, - SkBlendMode::kSrc, SK_PMColor4fWHITE, {0,0,200,200}, {0,0,200,200}, GrAA::kNo, - GrQuadAAFlags::kNone, SkCanvas::SrcRectConstraint::kStrict_SrcRectConstraint, - SkMatrix::I(), nullptr); + rtc->drawTexture(GrNoClip(), sk_ref_sp(offscreenRTC->asTextureProxy()), + offscreenRTC->colorInfo().colorType(), offscreenRTC->colorInfo().alphaType(), + GrSamplerState::Filter::kNearest, SkBlendMode::kSrc, SK_PMColor4fWHITE, + {0,0,200,200}, {0,0,200,200}, GrAA::kNo, GrQuadAAFlags::kNone, + SkCanvas::SrcRectConstraint::kStrict_SrcRectConstraint, SkMatrix::I(), + nullptr); return skiagm::DrawResult::kOk; } diff --git a/third_party/skia/gm/sharedcorners.cpp b/third_party/skia/gm/sharedcorners.cpp index 7fc8fd12f974..88323b88fcc1 100644 --- a/third_party/skia/gm/sharedcorners.cpp +++ b/third_party/skia/gm/sharedcorners.cpp @@ -112,7 +112,7 @@ class SharedCornersGM : public GM { void drawTriangleBoxes(SkCanvas* canvas, const std::vector& points, const std::vector>& triangles) { SkPath path; - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); path.setIsVolatile(true); for (const std::array& triangle : triangles) { path.moveTo(points[triangle[0]]); diff --git a/third_party/skia/gm/skbug1719.cpp b/third_party/skia/gm/skbug1719.cpp index 177b903af410..1f4ec10423d7 100644 --- a/third_party/skia/gm/skbug1719.cpp +++ b/third_party/skia/gm/skbug1719.cpp @@ -59,7 +59,7 @@ DEF_SIMPLE_GM_BG(skbug1719, canvas, 300, 100, 0xFF303030) { drawPath.lineTo(824.f, 662.f); drawPath.cubicTo(824.f, 657.58173f, 827.58173f, 654.f, 832.f, 654.f); drawPath.close(); - drawPath.setFillType(SkPath::kEvenOdd_FillType); + drawPath.setFillType(SkPathFillType::kEvenOdd); SkPaint paint; paint.setAntiAlias(true); diff --git a/third_party/skia/gm/skvm.cpp b/third_party/skia/gm/skvm.cpp new file mode 100644 index 000000000000..28d7d0d91805 --- /dev/null +++ b/third_party/skia/gm/skvm.cpp @@ -0,0 +1,142 @@ +/* + * Copyright 2019 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/SkPaint.h" +#include "include/core/SkShader.h" +#include "include/effects/SkColorMatrix.h" +#include "src/core/SkReadBuffer.h" +#include "src/core/SkWriteBuffer.h" +#include "src/shaders/SkShaderBase.h" + +// This GM exercises interesting cases in SkVMBlitter, +// and mostly draws uninteresting simple shapes and colors. +// At the moment it's really only interesting if you #define SK_USE_SKVM_BLITTER. + +// Just a tiny example that the (x,y) coordinate parameters are vaguely working. +// In this case we'll fade the red channel over its span vertically using `y`, +// and green horizontally using `x`. +struct Fade : public SkShaderBase { + explicit Fade(sk_sp shader) : fShader(std::move(shader)) {} + + sk_sp fShader; + + bool isOpaque() const override { return fShader->isOpaque(); } + + bool onProgram(skvm::Builder* p, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const override { + if (as_SB(fShader)->program(p, dstCS, + uniforms, + x,y, r,g,b,a)) { + // In this GM `y` will range over 0-50 and `x` over 50-100. + *r = p->mul(y, p->splat(1/ 50.0f)); + *g = p->mul(x, p->splat(1/100.0f)); + return true; + } + return false; + } + + // Flattening is not really necessary, just nice to make serialize-8888 etc. not crash. + void flatten(SkWriteBuffer& b) const override { + b.writeFlattenable(fShader.get()); + } + SK_FLATTENABLE_HOOKS(Fade) +}; +sk_sp Fade::CreateProc(SkReadBuffer& b) { + return sk_make_sp(b.readShader()); +} +static struct RegisterFade { + RegisterFade() { SkFlattenable::Register("Fade", Fade::CreateProc); } +} now; + +DEF_SIMPLE_GM(SkVMBlitter, canvas, 100, 150) { + SkPaint p; + + // These draws are all supported by SkVMBlitter, + // and the some draws will reuse programs cached by earlier draws. + // + // We don't have any API to detect this, but you can flip on the #if guard + // around "calls to done" in SkVMBlitter.cpp and run this GM in isolation. + // You should see 2 call to done. + // + // $ ninja -C out fm && out/fm -b cpu -s SkVMBlitter + // ... + // 2 calls to done + // + // The first program is actually created when the GM framework first + // clears the buffer white by setting a paint color to SK_ColorWHITE like + // we do with SK_ColorRED. SkVMBlitter is clever enough now to build the + // same program for paint colors or color shaders. + // + // The second program handles the draw with the Fade shader. + + /* + 4 registers, 9 instructions: + r0 = uniform32 arg(0) 8 + r1 = splat FF (3.5733111e-43) + r2 = extract r0 0 r1 + r3 = extract r0 8 r1 + r3 = pack r2 r3 8 + r0 = extract r0 16 r1 + r1 = pack r0 r1 8 + r1 = pack r3 r1 16 + loop: + store32 arg(1) r1 + */ + p.setShader(SkShaders::Color(SK_ColorBLUE)); + canvas->drawRect({0,0, 50,50}, p); + + p.setShader(SkShaders::Color(SK_ColorGREEN)); + canvas->drawRect({50,50, 100,100}, p); + + p.setShader(nullptr); + p.setColor(SK_ColorRED); + canvas->drawRect({0,50, 50,100}, p); + + /* + 5 registers, 19 instructions: + r0 = uniform32 arg(0) 4 // load y + r0 = to_f32 r0 + r1 = splat 40A33333 (5.0999999) + r1 = mul_f32 r0 r1 + r1 = to_i32 r1 // r1 = red channel, depends on y, is uniform + r0 = uniform32 arg(0) 0 // load right edge, used to calculate x in loop + r2 = splat 40233333 (2.55) + r3 = splat FF (3.5733111e-43) // color shader alpha, known to be opaque + r4 = uniform32 arg(0) 8 // load color shader for blue + r4 = extract r4 16 r3 // extract blue + r3 = pack r4 r3 8 // r3 = blue and alpha from color shader + loop: + r4 = index + r4 = sub_i32 r0 r4 // r4 = x + r4 = to_f32 r4 + r4 = mul_f32 r4 r2 + r4 = to_i32 r4 // r4 = green channel, depends on x, is varying + r4 = pack r1 r4 8 + r4 = pack r4 r3 16 + store32 arg(1) r4 + */ + p.setShader(sk_make_sp(SkShaders::Color(SK_ColorYELLOW))); + canvas->drawRect({50,0, 100,50}, p); + + // Draw with color filter, w/ and w/o alpha modulation. + SkColorMatrix m; + m.setSaturation(0.3f); + + p.setShader(SkShaders::Color(SK_ColorMAGENTA)); + p.setColorFilter(SkColorFilters::Matrix(m)); + canvas->drawRect({0,100, 50,150}, p); + + p.setShader(SkShaders::Color(0xffffaa00)); // tan + p.setColorFilter(SkColorFilters::Matrix(m)); + p.setAlphaf(0.5f); + canvas->drawRect({25,100, 75,150}, p); // overlap a bit with purple and white +} diff --git a/third_party/skia/gm/strokefill.cpp b/third_party/skia/gm/strokefill.cpp index 9b0bb04db88b..095da77edfc5 100644 --- a/third_party/skia/gm/strokefill.cpp +++ b/third_party/skia/gm/strokefill.cpp @@ -282,51 +282,51 @@ DEF_SIMPLE_GM_BG_NAME(strokefill, canvas, 640, 480, SK_ColorWHITE, paint.setStyle(SkPaint::kStrokeAndFill_Style); SkPath path; - path.setFillType(SkPath::kWinding_FillType); - path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction); - path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCCW_Direction); + path.setFillType(SkPathFillType::kWinding); + path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPathDirection::kCW); + path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPathDirection::kCCW); canvas->drawPath(path, paint); SkPath path2; - path2.setFillType(SkPath::kWinding_FillType); - path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction); - path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCW_Direction); + path2.setFillType(SkPathFillType::kWinding); + path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPathDirection::kCCW); + path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPathDirection::kCW); canvas->drawPath(path2, paint); path2.reset(); - path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction); + path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPathDirection::kCCW); canvas->drawPath(path2, paint); SkASSERT(SkPathPriv::CheapIsFirstDirection(path2, SkPathPriv::kCCW_FirstDirection)); path2.reset(); SkASSERT(!SkPathPriv::CheapComputeFirstDirection(path2, nullptr)); - path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction); + path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPathDirection::kCW); SkASSERT(SkPathPriv::CheapIsFirstDirection(path2, SkPathPriv::kCW_FirstDirection)); canvas->drawPath(path2, paint); SkRect r = SkRect::MakeXYWH(x - SkIntToScalar(50), y + SkIntToScalar(280), SkIntToScalar(100), SkIntToScalar(100)); SkPath path3; - path3.setFillType(SkPath::kWinding_FillType); - path3.addRect(r, SkPath::kCW_Direction); + path3.setFillType(SkPathFillType::kWinding); + path3.addRect(r, SkPathDirection::kCW); r.inset(SkIntToScalar(10), SkIntToScalar(10)); - path3.addRect(r, SkPath::kCCW_Direction); + path3.addRect(r, SkPathDirection::kCCW); canvas->drawPath(path3, paint); r = SkRect::MakeXYWH(x + SkIntToScalar(70), y + SkIntToScalar(280), SkIntToScalar(100), SkIntToScalar(100)); SkPath path4; - path4.setFillType(SkPath::kWinding_FillType); - path4.addRect(r, SkPath::kCCW_Direction); + path4.setFillType(SkPathFillType::kWinding); + path4.addRect(r, SkPathDirection::kCCW); r.inset(SkIntToScalar(10), SkIntToScalar(10)); - path4.addRect(r, SkPath::kCW_Direction); + path4.addRect(r, SkPathDirection::kCW); canvas->drawPath(path4, paint); r = SkRect::MakeXYWH(x + SkIntToScalar(190), y + SkIntToScalar(280), SkIntToScalar(100), SkIntToScalar(100)); path4.reset(); SkASSERT(!SkPathPriv::CheapComputeFirstDirection(path4, nullptr)); - path4.addRect(r, SkPath::kCCW_Direction); + path4.addRect(r, SkPathDirection::kCCW); SkASSERT(SkPathPriv::CheapIsFirstDirection(path4, SkPathPriv::kCCW_FirstDirection)); path4.moveTo(0, 0); // test for crbug.com/247770 canvas->drawPath(path4, paint); @@ -335,7 +335,7 @@ DEF_SIMPLE_GM_BG_NAME(strokefill, canvas, 640, 480, SK_ColorWHITE, SkIntToScalar(100), SkIntToScalar(100)); path4.reset(); SkASSERT(!SkPathPriv::CheapComputeFirstDirection(path4, nullptr)); - path4.addRect(r, SkPath::kCW_Direction); + path4.addRect(r, SkPathDirection::kCW); SkASSERT(SkPathPriv::CheapIsFirstDirection(path4, SkPathPriv::kCW_FirstDirection)); path4.moveTo(0, 0); // test for crbug.com/247770 canvas->drawPath(path4, paint); diff --git a/third_party/skia/gm/strokes.cpp b/third_party/skia/gm/strokes.cpp index a2e7bfd97221..9b3b1a46380e 100644 --- a/third_party/skia/gm/strokes.cpp +++ b/third_party/skia/gm/strokes.cpp @@ -344,42 +344,42 @@ static SkRect inset(const SkRect& r) { class Strokes3GM : public skiagm::GM { static void make0(SkPath* path, const SkRect& bounds, SkString* title) { - path->addRect(bounds, SkPath::kCW_Direction); - path->addRect(inset(bounds), SkPath::kCW_Direction); + path->addRect(bounds, SkPathDirection::kCW); + path->addRect(inset(bounds), SkPathDirection::kCW); title->set("CW CW"); } static void make1(SkPath* path, const SkRect& bounds, SkString* title) { - path->addRect(bounds, SkPath::kCW_Direction); - path->addRect(inset(bounds), SkPath::kCCW_Direction); + path->addRect(bounds, SkPathDirection::kCW); + path->addRect(inset(bounds), SkPathDirection::kCCW); title->set("CW CCW"); } static void make2(SkPath* path, const SkRect& bounds, SkString* title) { - path->addOval(bounds, SkPath::kCW_Direction); - path->addOval(inset(bounds), SkPath::kCW_Direction); + path->addOval(bounds, SkPathDirection::kCW); + path->addOval(inset(bounds), SkPathDirection::kCW); title->set("CW CW"); } static void make3(SkPath* path, const SkRect& bounds, SkString* title) { - path->addOval(bounds, SkPath::kCW_Direction); - path->addOval(inset(bounds), SkPath::kCCW_Direction); + path->addOval(bounds, SkPathDirection::kCW); + path->addOval(inset(bounds), SkPathDirection::kCCW); title->set("CW CCW"); } static void make4(SkPath* path, const SkRect& bounds, SkString* title) { - path->addRect(bounds, SkPath::kCW_Direction); + path->addRect(bounds, SkPathDirection::kCW); SkRect r = bounds; r.inset(bounds.width() / 10, -bounds.height() / 10); - path->addOval(r, SkPath::kCW_Direction); + path->addOval(r, SkPathDirection::kCW); title->set("CW CW"); } static void make5(SkPath* path, const SkRect& bounds, SkString* title) { - path->addRect(bounds, SkPath::kCW_Direction); + path->addRect(bounds, SkPathDirection::kCW); SkRect r = bounds; r.inset(bounds.width() / 10, -bounds.height() / 10); - path->addOval(r, SkPath::kCCW_Direction); + path->addOval(r, SkPathDirection::kCCW); title->set("CW CCW"); } diff --git a/third_party/skia/gm/texturedomaineffect.cpp b/third_party/skia/gm/texturedomaineffect.cpp index 5355e2e5f6a0..e7d08cdfbd9e 100644 --- a/third_party/skia/gm/texturedomaineffect.cpp +++ b/third_party/skia/gm/texturedomaineffect.cpp @@ -9,48 +9,35 @@ #include "gm/gm.h" #include "include/core/SkBitmap.h" -#include "include/core/SkBlendMode.h" #include "include/core/SkCanvas.h" #include "include/core/SkColor.h" #include "include/core/SkMatrix.h" #include "include/core/SkPaint.h" #include "include/core/SkRect.h" -#include "include/core/SkRefCnt.h" -#include "include/core/SkScalar.h" -#include "include/core/SkShader.h" #include "include/core/SkSize.h" #include "include/core/SkString.h" -#include "include/core/SkTypes.h" #include "include/effects/SkGradientShader.h" -#include "include/gpu/GrContext.h" -#include "include/gpu/GrTypes.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkTArray.h" -#include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrFragmentProcessor.h" -#include "src/gpu/GrPaint.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrRenderTargetContextPriv.h" #include "src/gpu/GrSamplerState.h" #include "src/gpu/GrTextureProxy.h" -#include "src/gpu/effects/GrPorterDuffXferProcessor.h" #include "src/gpu/effects/GrTextureDomain.h" -#include "src/gpu/ops/GrDrawOp.h" -#include "src/gpu/ops/GrFillRectOp.h" +#include "tools/gpu/TestOps.h" #include #include namespace skiagm { /** - * This GM directly exercises GrTextureDomainEffect. + * This GM directly exercises GrDomainEffect. */ class TextureDomainEffect : public GpuGM { public: - TextureDomainEffect(GrSamplerState::Filter filter) - : fFilter(filter) { + TextureDomainEffect(GrSamplerState::Filter filter) : fFilter(filter) { this->setBGColor(0xFFFFFFFF); } @@ -66,9 +53,9 @@ class TextureDomainEffect : public GpuGM { } SkISize onISize() override { - const SkScalar canvasWidth = kDrawPad + - (kTargetWidth + 2 * kDrawPad) * GrTextureDomain::kModeCount + - kTestPad * GrTextureDomain::kModeCount; + const SkScalar canvasWidth = + kDrawPad + 2 * ((kTargetWidth + 2 * kDrawPad) * GrTextureDomain::kModeCount + + kTestPad * GrTextureDomain::kModeCount); return SkISize::Make(SkScalarCeilToInt(canvasWidth), 800); } @@ -124,8 +111,7 @@ class TextureDomainEffect : public GpuGM { fBitmap.width() / 2 + 2, fBitmap.height() / 2 + 2), }; - SkRect renderRect = SkRect::Make(fBitmap.bounds()); - renderRect.outset(kDrawPad, kDrawPad); + SkRect localRect = SkRect::Make(fBitmap.bounds()).makeOutset(kDrawPad, kDrawPad); SkScalar y = kDrawPad + kTestPad; for (int tm = 0; tm < textureMatrices.count(); ++tm) { @@ -138,26 +124,35 @@ class TextureDomainEffect : public GpuGM { // Repeat mode doesn't produce correct results with bilerp filtering continue; } - - GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); - auto fp = GrTextureDomainEffect::Make( - proxy, SkColorTypeToGrColorType(fBitmap.colorType()), - textureMatrices[tm], - GrTextureDomain::MakeTexelDomain(texelDomains[d], mode), + auto fp1 = GrSimpleTextureEffect::Make(proxy, fBitmap.alphaType(), + textureMatrices[tm], fFilter); + fp1 = GrDomainEffect::Make( + std::move(fp1), GrTextureDomain::MakeTexelDomain(texelDomains[d], mode), mode, fFilter); - - if (!fp) { + if (!fp1) { continue; } - const SkMatrix viewMatrix = SkMatrix::MakeTrans(x, y); - grPaint.addColorFragmentProcessor(std::move(fp)); - renderTargetContext->priv().testingOnly_addDrawOp( - GrFillRectOp::MakeNonAARect(context, std::move(grPaint), - viewMatrix, renderRect)); - x += renderRect.width() + kTestPad; + auto fp2 = fp1->clone(); + SkASSERT(fp2); + auto drawRect = localRect.makeOffset(x, y); + if (auto op = sk_gpu_test::test_ops::MakeRect( + context, std::move(fp1), drawRect, localRect)) { + renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); + } + x += localRect.width() + kTestPad; + // Draw again with a translated local rect and compensating translate matrix. + drawRect = localRect.makeOffset(x, y); + static constexpr SkVector kT = {-100, 300}; + if (auto op = sk_gpu_test::test_ops::MakeRect(context, + std::move(fp2), + drawRect, + localRect.makeOffset(kT), + SkMatrix::MakeTrans(-kT))) { + renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); + } + x += localRect.width() + kTestPad; } - y += renderRect.height() + kTestPad; + y += localRect.height() + kTestPad; } } return DrawResult::kOk; diff --git a/third_party/skia/gm/wacky_yuv_formats.cpp b/third_party/skia/gm/wacky_yuv_formats.cpp index 04442795e658..4607a5449b65 100644 --- a/third_party/skia/gm/wacky_yuv_formats.cpp +++ b/third_party/skia/gm/wacky_yuv_formats.cpp @@ -43,6 +43,7 @@ #include "include/private/SkTDArray.h" #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 "tools/ToolUtils.h" @@ -407,92 +408,24 @@ static SkBitmap make_bitmap(SkColorType colorType, const SkPath& path, return bm; } -static void convert_rgba_to_yuva_601_shared(SkColor col, uint8_t yuv[4], - uint8_t off, uint8_t range) { - static const float Kr = 0.299f; - static const float Kb = 0.114f; - static const float Kg = 1.0f - Kr - Kb; - - float r = SkColorGetR(col) / 255.0f; - float g = SkColorGetG(col) / 255.0f; - float b = SkColorGetB(col) / 255.0f; - - float Ey = Kr * r + Kg * g + Kb * b; - float Ecb = (b - Ey) / 1.402f; - float Ecr = (r - Ey) / 1.772; - SkASSERT(Ey >= 0.0f && Ey <= 1.0f); - SkASSERT(Ecb >= -0.5f && Ecb <= 0.5f); - SkASSERT(Ecr >= -0.5f && Ecr <= 0.5f); - - yuv[0] = SkScalarRoundToInt( range * Ey + off ); - yuv[1] = SkScalarRoundToInt( 224 * Ecb + 128 ); - yuv[2] = SkScalarRoundToInt( 224 * Ecr + 128 ); - yuv[3] = SkColorGetA(col); -} - -static void convert_rgba_to_yuva_jpeg(SkColor col, uint8_t yuv[4]) { - // full swing from 0..255 - convert_rgba_to_yuva_601_shared(col, yuv, 0, 255); -} - -static void convert_rgba_to_yuva_601(SkColor col, uint8_t yuv[4]) { - // partial swing from 16..235 - convert_rgba_to_yuva_601_shared(col, yuv, 16, 219); - -} - -static void convert_rgba_to_yuva_709(SkColor col, uint8_t yuv[4]) { - static const float Kr = 0.2126f; - static const float Kb = 0.0722f; - static const float Kg = 1.0f - Kr - Kb; - - float r = SkColorGetR(col) / 255.0f; - float g = SkColorGetG(col) / 255.0f; - float b = SkColorGetB(col) / 255.0f; - - float Ey = Kr * r + Kg * g + Kb * b; - float Ecb = (b - Ey) / 1.8556f; - float Ecr = (r - Ey) / 1.5748; - SkASSERT(Ey >= 0.0f && Ey <= 1.0f); - SkASSERT(Ecb >= -0.5f && Ecb <= 0.5f); - SkASSERT(Ecr >= -0.5f && Ecr <= 0.5f); - - yuv[0] = SkScalarRoundToInt( 219 * Ey + 16 ); - yuv[1] = SkScalarRoundToInt( 224 * Ecb + 128 ); - yuv[2] = SkScalarRoundToInt( 224 * Ecr + 128 ); +static void convert_rgba_to_yuva(const float mtx[20], SkColor col, uint8_t yuv[4]) { + const uint8_t r = SkColorGetR(col); + const uint8_t g = SkColorGetG(col); + const uint8_t b = SkColorGetB(col); + yuv[0] = SkScalarPin(SkScalarRoundToInt(mtx[ 0]*r + mtx[ 1]*g + mtx[ 2]*b + mtx[ 4]*255), 0, 255); + yuv[1] = SkScalarPin(SkScalarRoundToInt(mtx[ 5]*r + mtx[ 6]*g + mtx[ 7]*b + mtx[ 9]*255), 0, 255); + yuv[2] = SkScalarPin(SkScalarRoundToInt(mtx[10]*r + mtx[11]*g + mtx[12]*b + mtx[14]*255), 0, 255); yuv[3] = SkColorGetA(col); } +static SkPMColor convert_yuva_to_rgba(const float mtx[20], + uint8_t y, uint8_t u, uint8_t v, uint8_t a) { + uint8_t r = SkScalarPin(SkScalarRoundToInt(mtx[ 0]*y + mtx[ 1]*u + mtx[ 2]*v + mtx[ 4]*255), 0, 255); + uint8_t g = SkScalarPin(SkScalarRoundToInt(mtx[ 5]*y + mtx[ 6]*u + mtx[ 7]*v + mtx[ 9]*255), 0, 255); + uint8_t b = SkScalarPin(SkScalarRoundToInt(mtx[10]*y + mtx[11]*u + mtx[12]*v + mtx[14]*255), 0, 255); -static SkPMColor convert_yuva_to_rgba_jpeg(uint8_t y, uint8_t u, uint8_t v, uint8_t a) { - uint8_t r = SkScalarPin(SkScalarRoundToInt( 1.0f * y + 1.402f * v - 0.703749f * 255), - 0, 255); - uint8_t g = SkScalarPin(SkScalarRoundToInt( 1.0f * y - (0.344136f * u) - (0.714136f * v) + 0.531211f * 255), - 0, 255); - uint8_t b = SkScalarPin(SkScalarRoundToInt( 1.0f * y + 1.772f * u - 0.889475f * 255), - 0, 255); - - SkPMColor c = SkPremultiplyARGBInline(a, b, g, r); - return c; -} - -static SkPMColor convert_yuva_to_rgba_601(uint8_t y, uint8_t u, uint8_t v, uint8_t a) { - uint8_t r = SkScalarPin(SkScalarRoundToInt( 1.164f * y + 1.596f * v - 0.87075f * 255), 0, 255); - uint8_t g = SkScalarPin(SkScalarRoundToInt( 1.164f * y - (0.391f * u) - (0.813f * v) + 0.52925f * 255), 0, 255); - uint8_t b = SkScalarPin(SkScalarRoundToInt( 1.164f * y + 2.018f * u - 1.08175f * 255), 0, 255); - - SkPMColor c = SkPremultiplyARGBInline(a, b, g, r); - return c; -} - -static SkPMColor convert_yuva_to_rgba_709(uint8_t y, uint8_t u, uint8_t v, uint8_t a) { - uint8_t r = SkScalarPin(SkScalarRoundToInt( 1.164f * y + (1.793f * v) - 0.96925f * 255), 0, 255); - uint8_t g = SkScalarPin(SkScalarRoundToInt( 1.164f * y - (0.213f * u) - (0.533f * v) + 0.30025f * 255), 0, 255); - uint8_t b = SkScalarPin(SkScalarRoundToInt( 1.164f * y + (2.112f * u) - 1.12875f * 255), 0, 255); - - SkPMColor c = SkPremultiplyARGBInline(a, b, g, r); - return c; + return SkPremultiplyARGBInline(a, b, g, r); } static void extract_planes(const SkBitmap& bm, SkYUVColorSpace yuvColorSpace, PlaneData* planes) { @@ -520,6 +453,9 @@ static void extract_planes(const SkBitmap& bm, SkYUVColorSpace yuvColorSpace, Pl planes->fQuarter.allocPixels(SkImageInfo::Make(bm.width()/2, bm.height()/2, kRGBA_F32_SkColorType, kUnpremul_SkAlphaType)); + float mtx[20]; + SkColorMatrix_RGB2YUV(yuvColorSpace, mtx); + SkColor4f* dst = (SkColor4f *) planes->fFull.getAddr(0, 0); for (int y = 0; y < bm.height(); ++y) { for (int x = 0; x < bm.width(); ++x) { @@ -527,14 +463,7 @@ static void extract_planes(const SkBitmap& bm, SkYUVColorSpace yuvColorSpace, Pl uint8_t yuva[4]; - if (kJPEG_SkYUVColorSpace == yuvColorSpace) { - convert_rgba_to_yuva_jpeg(col, yuva); - } else if (kRec601_SkYUVColorSpace == yuvColorSpace) { - convert_rgba_to_yuva_601(col, yuva); - } else { - SkASSERT(kRec709_SkYUVColorSpace == yuvColorSpace); - convert_rgba_to_yuva_709(col, yuva); - } + convert_rgba_to_yuva(mtx, col, yuva); *planes->fYFull.getAddr8(x, y) = yuva[0]; *planes->fUFull.getAddr8(x, y) = yuva[1]; @@ -894,6 +823,9 @@ class YUVGenerator : public SkImageGenerator { fFlattened.allocPixels(info); SkASSERT(kPremul_SkAlphaType == info.alphaType()); + float mtx[20]; + SkColorMatrix_YUV2RGB(fYUVColorSpace, mtx); + for (int y = 0; y < info.height(); ++y) { for (int x = 0; x < info.width(); ++x) { @@ -921,20 +853,7 @@ class YUVGenerator : public SkImageGenerator { } // Making premul here. - switch (fYUVColorSpace) { - case kJPEG_SkYUVColorSpace: - *fFlattened.getAddr32(x, y) = convert_yuva_to_rgba_jpeg(Y, U, V, A); - break; - case kRec601_SkYUVColorSpace: - *fFlattened.getAddr32(x, y) = convert_yuva_to_rgba_601(Y, U, V, A); - break; - case kRec709_SkYUVColorSpace: - *fFlattened.getAddr32(x, y) = convert_yuva_to_rgba_709(Y, U, V, A); - break; - case kIdentity_SkYUVColorSpace: - *fFlattened.getAddr32(x, y) = SkPremultiplyARGBInline(A, V, U, Y); - break; - } + *fFlattened.getAddr32(x, y) = convert_yuva_to_rgba(mtx, Y, U, V, A); } } } @@ -999,7 +918,7 @@ static sk_sp make_yuv_gen_image(const SkImageInfo& ii, } static void draw_col_label(SkCanvas* canvas, int x, int yuvColorSpace, bool opaque) { - static const char* kYUVColorSpaceNames[] = { "JPEG", "601", "709", "Identity" }; + static const char* kYUVColorSpaceNames[] = { "JPEG", "601", "709", "2020", "Identity" }; GR_STATIC_ASSERT(SK_ARRAY_COUNT(kYUVColorSpaceNames) == kLastEnum_SkYUVColorSpace+1); SkPaint paint; @@ -1483,7 +1402,6 @@ DEF_GM(return new YUVMakeColorSpaceGM();) #include "include/effects/SkColorMatrix.h" #include "src/core/SkAutoPixmapStorage.h" -#include "src/core/SkYUVMath.h" #include "tools/Resources.h" static void draw_into_alpha(const SkImage* img, sk_sp cf, const SkPixmap& dst) { @@ -1546,7 +1464,7 @@ class YUVSplitterGM : public skiagm::GM { } SkISize onISize() override { - return SkISize::Make(1024, 768); + return SkISize::Make(1280, 768); } void onOnceBeforeDraw() override { @@ -1575,7 +1493,8 @@ class YUVSplitterGM : public skiagm::GM { canvas->translate(fOrig->width(), 0); canvas->save(); - for (auto cs : {kRec709_SkYUVColorSpace, kRec601_SkYUVColorSpace, kJPEG_SkYUVColorSpace}) { + for (auto cs : {kRec709_SkYUVColorSpace, kRec601_SkYUVColorSpace, kJPEG_SkYUVColorSpace, + kBT2020_SkYUVColorSpace}) { split_into_yuv(fOrig.get(), cs, fPM); auto img = SkImage::MakeFromYUVAPixmaps(canvas->getGrContext(), cs, fPM, indices, fPM[0].info().dimensions(), diff --git a/third_party/skia/gm/windowrectangles.cpp b/third_party/skia/gm/windowrectangles.cpp index 2763b8c06cea..f1528f5653e1 100644 --- a/third_party/skia/gm/windowrectangles.cpp +++ b/third_party/skia/gm/windowrectangles.cpp @@ -179,10 +179,8 @@ class AlphaOnlyClip final : public MaskOnlyClipBase { private: bool apply(GrRecordingContext*, GrRenderTargetContext*, bool, bool, GrAppliedClip* out, SkRect* bounds) const override { - int w = fMask->width(); - int h = fMask->height(); out->addCoverageFP(GrDeviceSpaceTextureDecalFragmentProcessor::Make( - fMask, SkIRect::MakeWH(w, h), {fX, fY})); + fMask, SkIRect::MakeSize(fMask->dimensions()), {fX, fY})); return true; } sk_sp fMask; diff --git a/third_party/skia/gm/yuv420_odd_dim.cpp b/third_party/skia/gm/yuv420_odd_dim.cpp new file mode 100644 index 000000000000..97bb9e5d46b0 --- /dev/null +++ b/third_party/skia/gm/yuv420_odd_dim.cpp @@ -0,0 +1,102 @@ +/* + * Copyright 2019 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/SkBitmap.h" +#include "include/core/SkImage.h" +#include "include/core/SkPixmap.h" +#include "include/core/SkSurface.h" +#include "include/core/SkYUVAIndex.h" +#include "include/core/SkYUVASizeInfo.h" +#include "include/encode/SkJpegEncoder.h" +#include "include/gpu/GrContext.h" +#include "include/utils/SkRandom.h" +#include "src/core/SkCachedData.h" +#include "src/image/SkImage_Base.h" + +static constexpr int kScale = 10; +static constexpr SkISize kImageDim = {5, 5}; + +static sk_sp make_image(GrContext* context) { + // Generate a small jpeg with odd dimensions. + SkBitmap bmp; + bmp.allocPixels(SkImageInfo::Make(kImageDim, kRGBA_8888_SkColorType, kPremul_SkAlphaType)); + SkRandom random; + // These random values won't compress well, but it doesn't matter. This test exists to + // compare the GPU YUV code path to the SW. + for (int y = 0; y < bmp.height(); ++y) { + for (int x = 0; x < bmp.width(); ++x) { + *bmp.getAddr32(x, y) = random.nextU() | 0xFF000000; + } + } + bmp.notifyPixelsChanged(); + SkImage::MakeFromBitmap(bmp); + SkDynamicMemoryWStream stream; + SkJpegEncoder::Options options; + options.fDownsample = SkJpegEncoder::Downsample::k420; + options.fQuality = 100; + if (!SkJpegEncoder::Encode(&stream, bmp.pixmap(), options)) { + return nullptr; + } + auto image = SkImage::MakeFromEncoded(stream.detachAsData()); + if (!context) { + return image; + } + SkYUVASizeInfo info; + SkYUVAIndex indices[4]; + SkYUVColorSpace cs; + const void* planes[4]; + if (!as_IB(image)->getPlanes(&info, indices, &cs, planes)) { + return nullptr; + } + SkPixmap pixmaps[4]; +#ifdef SK_DEBUG + static constexpr SkISize kUVDim = {kImageDim.width() / 2 + 1, kImageDim.height() / 2 + 1}; +#endif + SkASSERT(info.fSizes[0] == kImageDim); + SkASSERT(info.fSizes[1] == kUVDim); + SkASSERT(info.fSizes[2] == kUVDim); + for (int i = 0; i < 4; ++i) { + if (!info.fSizes[i].isZero()) { + pixmaps[i].reset(SkImageInfo::MakeA8(info.fSizes[i]), planes[i], info.fWidthBytes[i]); + } + } + return SkImage::MakeFromYUVAPixmaps(context, cs, pixmaps, indices, image->dimensions(), + kTopLeft_GrSurfaceOrigin, false); +} + +// This GM tests that the YUVA image code path in the GPU backend handles odd sized images with +// 420 chroma subsampling correctly. +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()) { + return skiagm::DrawResult::kOk; + } + return skiagm::DrawResult::kFail; + } + // We draw the image offscreen and then blow it up using nearest filtering by kScale. + // This avoids skbug.com/9693 + sk_sp surface; + if (auto origSurface = canvas->getSurface()) { + surface = origSurface->makeSurface(image->width(), image->height()); + } else { + auto ct = canvas->imageInfo().colorType(); + if (ct == kUnknown_SkColorType) { + ct = image->colorType(); + } + auto info = canvas->imageInfo().makeColorType(ct); + info = info.makeAlphaType(kPremul_SkAlphaType); + surface = SkSurface::MakeRaster(info); + } + surface->getCanvas()->drawImage(image, 0, 0); + canvas->scale(kScale, kScale); + canvas->drawImage(surface->makeImageSnapshot(), 0, 0); + return skiagm::DrawResult::kOk; +} diff --git a/third_party/skia/gn/BUILD.gn b/third_party/skia/gn/BUILD.gn index 3203df7fc05b..281cf26097f9 100644 --- a/third_party/skia/gn/BUILD.gn +++ b/third_party/skia/gn/BUILD.gn @@ -3,6 +3,10 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +if (is_fuchsia) { + import("//build/fuchsia/sdk.gni") +} + declare_args() { extra_asmflags = [] extra_cflags = [] @@ -12,9 +16,10 @@ declare_args() { use_PIC = true malloc = "" + xcode_sysroot = "" } -if (is_ios) { +if (is_ios && xcode_sysroot == "") { if (is_tvos) { sdk = "appletvos" if (target_cpu == "x86" || target_cpu == "x64") { @@ -26,7 +31,16 @@ if (is_ios) { sdk = "iphonesimulator" } } - ios_sysroot = exec_script("find_ios_sysroot.py", [ sdk ], "trim string") + xcode_sysroot = exec_script("find_xcode_sysroot.py", [ sdk ], "trim string") +} + +# If building for mac on a mac then lookup all the system includes so that goma and the clang +# shipped with chrome can find them. When the gn_to_bp.py tool is run, then the host_os != mac. +# In this case leave the xcode_sysroot empty, and the cc/c++ that come with XCode will be able to +# find needed include paths. +if (is_mac && host_os == "mac" && xcode_sysroot == "") { + xcode_sysroot = + exec_script("find_xcode_sysroot.py", [ "macosx" ], "trim string") } config("default") { @@ -46,6 +60,26 @@ config("default") { } } + if (is_fuchsia && using_fuchsia_sdk) { + ldflags += [ + "-v", + "--sysroot=" + rebase_path("$fuchsia_sdk_path/arch/$target_cpu/sysroot"), + ] + cflags += [ "--sysroot=" + + rebase_path("$fuchsia_sdk_path/arch/$target_cpu/sysroot") ] + if (target_cpu == "x64") { + target_triple = "--target=x86_64-${target_os}" + } else if (target_cpu == "arm64") { + target_triple = "--target=aarch64-unknown-${target_os}" + } else { + print("Unknown target CPU for Fuchsia target build.") + assert(false) + } + ldflags += [ target_triple ] + cflags += [ target_triple ] + asmflags += [ target_triple ] + } + if (is_win) { if (is_clang && target_cpu == "arm64") { cflags += [ "--target=arm64-windows" ] @@ -54,6 +88,7 @@ config("default") { "/bigobj", # Some of our files are bigger than the regular limits. "/utf-8", # Set Source and Executable character sets to UTF-8. ] + cflags_cc += [ "/std:c++17" ] if (is_clang) { cflags += [ "-fms-compatibility-version=19" ] # 2015 } @@ -93,7 +128,7 @@ config("default") { cflags += [ "-fPIC" ] } cflags += [ "-fstrict-aliasing" ] - cflags_cc += [ "-std=c++14" ] + cflags_cc += [ "-std=c++17" ] # The main idea is to slim the exported API, but these flags also improve link time on Mac. # These would make stack traces worse on Linux, so we don't just set them willy-nilly. @@ -157,20 +192,23 @@ config("default") { } asmflags += [ "-isysroot", - ios_sysroot, + xcode_sysroot, "-arch", _target, ] cflags += [ "-isysroot", - ios_sysroot, + xcode_sysroot, "-arch", _target, ] - cflags_cc += [ "-stdlib=libc++" ] + cflags_cc += [ + "-stdlib=libc++", + "-fno-aligned-allocation", + ] ldflags += [ "-isysroot", - ios_sysroot, + xcode_sysroot, "-arch", _target, "-stdlib=libc++", @@ -184,7 +222,25 @@ config("default") { defines += [ "_GLIBCXX_DEBUG" ] } } + if (is_mac) { + # If there was a xcode_sysroot set in args or calculated then use it, else don't set anything + # because the XCode cc/c++ already know all this stuff. + if (xcode_sysroot != "") { + asmflags += [ + "-isysroot", + xcode_sysroot, + ] + cflags += [ + "-isysroot", + xcode_sysroot, + ] + ldflags += [ + "-isysroot", + xcode_sysroot, + ] + } + # Disable linker warnings. They're usually just annoyances like, # ld: warning: text-based stub file # /System/Library/Frameworks/foo.framework/foo.tbd and library file @@ -241,6 +297,9 @@ config("default") { if (sanitizers == "memory") { cflags += [ "-fsanitize-memory-track-origins" ] } + if (sanitizers == "safe-stack") { + cflags_cc += [ "-fno-aligned-allocation" ] + } } } @@ -272,6 +331,9 @@ config("warnings") { # These only show up in shared builds: "/wd4251", # class 'type' needs to have dll-interface to be used by clients of class 'type2' "/wd4275", # non dll-interface class 'base' used as base for dll-interface class 'derived' + + # It'd be nice to fix these and turn this on: + "/wd5041", # out-of-line definition for constexpr static data member is not needed and is deprecated in C++17 ] } else { cflags += [ @@ -288,6 +350,13 @@ config("warnings") { cflags_cc += [ "-Wnon-virtual-dtor", "-Wno-noexcept-type", + + # GCC 8+ bundles a number of fundamentally different warnings under this same flag, + # ranging from false positive (only copying a prefix of SkRRect from serialized form) + # to possibly useful (memcpy() with non-trivial types). Annoyingly you can't really + # break them up any finer. + # TODO(mtklein): suppress / fix each site as appropriate? + "-Wno-class-memaccess", ] } diff --git a/third_party/skia/gn/BUILDCONFIG.gn b/third_party/skia/gn/BUILDCONFIG.gn index 5d05f3947731..6ffe637056d8 100644 --- a/third_party/skia/gn/BUILDCONFIG.gn +++ b/third_party/skia/gn/BUILDCONFIG.gn @@ -78,10 +78,10 @@ if (current_cpu == "") { current_cpu = target_cpu } -is_clang = is_android || is_ios || is_mac || +is_clang = is_android || is_ios || is_mac || is_fuchsia || (cc == "clang" && cxx == "clang++") || clang_win != "" if (!is_clang && !is_win) { - is_clang = exec_script("gn/is_clang.py", + is_clang = exec_script("//gn/is_clang.py", [ cc, cxx, diff --git a/third_party/skia/gn/ar.py b/third_party/skia/gn/ar.py deleted file mode 100644 index c7ffb04f6775..000000000000 --- a/third_party/skia/gn/ar.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/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 subprocess -import sys - -# Equivalent to: rm -f $2 && $1 rcs $2 @$3 - -ar, output, rspfile = sys.argv[1:] - -if os.path.exists(output): - os.remove(output) - -if sys.platform != 'darwin': - sys.exit(subprocess.call([ar, "rcs", output, "@" + rspfile])) - -# Mac ar doesn't support @rspfile syntax. -objects = open(rspfile).read().split() -# It also spams stderr with warnings about objects having no symbols. -pipe = subprocess.Popen([ar, "rcs", output] + objects, stderr=subprocess.PIPE) -_, err = pipe.communicate() -for line in err.splitlines(): - if 'has no symbols' not in line: - sys.stderr.write(line + '\n') -sys.exit(pipe.returncode) diff --git a/third_party/skia/gn/bench.gni b/third_party/skia/gn/bench.gni index cd2ad907eda2..cbd07d9ddac0 100644 --- a/third_party/skia/gn/bench.gni +++ b/third_party/skia/gn/bench.gni @@ -22,6 +22,7 @@ bench_sources = [ "$_bench/BlurImageFilterBench.cpp", "$_bench/BlurRectBench.cpp", "$_bench/BlurRectsBench.cpp", + "$_bench/BulkRectBench.cpp", "$_bench/CTConvertBench.cpp", "$_bench/ChartBench.cpp", "$_bench/ChecksumBench.cpp", diff --git a/third_party/skia/gn/call.py b/third_party/skia/gn/call.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/checkdir.py b/third_party/skia/gn/checkdir.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/checkpath.py b/third_party/skia/gn/checkpath.py new file mode 100755 index 000000000000..db8cd98df614 --- /dev/null +++ b/third_party/skia/gn/checkpath.py @@ -0,0 +1,9 @@ +#! /usr/bin/env python +# Copyright 2019 Google LLC. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import sys + +print all(os.path.exists(a) for a in sys.argv[1:]) diff --git a/third_party/skia/gn/codesign_ios.py b/third_party/skia/gn/codesign_ios.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/copy_git_directory.py b/third_party/skia/gn/copy_git_directory.py new file mode 100755 index 000000000000..04623baf500b --- /dev/null +++ b/third_party/skia/gn/copy_git_directory.py @@ -0,0 +1,60 @@ +#! /usr/bin/env python +# Copyright 2019 Google LLC. +# 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 subprocess +import sys + +def copy_git_directory(src, dst, out=None): + ''' + Makes a copy of `src` directory in `dst` directory. If files already exist + and are identical, do not touch them. If extra files or directories exist, + remove them. Assume that `src` is a git directory so that `git ls-files` can + be used to enumerate files. This has the added benefit of ignoring files + not tracked by git. Also, if out is not None, write summary of actions to out. + If `dst` is a top-level git directory, the `.git` directory will be removed. + ''' + if not os.path.isdir(src): + raise Exception('Directory "%s" does not exist.' % src) + if not os.path.isdir(dst): + os.makedirs(dst) + ls_files = subprocess.check_output(['git', 'ls-files', '-z', '.'], cwd=src) + src_files = set(p for p in ls_files.split('\0') if p) + abs_src = os.path.abspath(src) + cwd = os.getcwd() + try: + os.chdir(dst) + def output(out, sym, dst, path): + if out: + out.write('%s %s%s%s\n' % (sym, dst, os.sep, path)) + for dirpath, dirnames, filenames in os.walk('.', topdown=False): + for filename in filenames: + path = os.path.normpath(os.path.join(dirpath, filename)) + if path not in src_files: + output(out, '-', dst, path) + os.remove(path) + for filename in dirnames: + path = os.path.normpath(os.path.join(dirpath, filename)) + if not os.listdir(path): # Remove empty subfolders. + output(out, '-', dst, path + os.sep) + os.rmdir(path) + for path in src_files: + src_path = os.path.join(abs_src, path) + if os.path.exists(path): + with open(path) as f1: + with open(src_path) as f2: + if f1.read() == f2.read(): + continue + output(out, '+', dst, path) + shutil.copy2(src_path, path) + finally: + os.chdir(cwd) + +if __name__ == '__main__': + if len(sys.argv) != 3: + sys.stderr.write('\nUsage:\n %s SRC_DIR DST_DIR\n\n' % sys.argv[0]) + sys.exit(1) + copy_git_directory(sys.argv[1], sys.argv[2], sys.stdout) diff --git a/third_party/skia/gn/core.gni b/third_party/skia/gn/core.gni index d8292604f710..030ca4bfa004 100644 --- a/third_party/skia/gn/core.gni +++ b/third_party/skia/gn/core.gni @@ -203,6 +203,7 @@ skia_core_sources = [ "$_src/core/SkGaussFilter.h", "$_src/core/SkFlattenable.cpp", "$_src/core/SkFont.cpp", + "$_src/core/SkFont_serial.cpp", "$_src/core/SkFontLCDConfig.cpp", "$_src/core/SkFontMgr.cpp", "$_src/core/SkFontDescriptor.cpp", @@ -241,6 +242,7 @@ skia_core_sources = [ "$_src/core/SkMD5.cpp", "$_src/core/SkMD5.h", "$_src/core/SkMakeUnique.h", + "$_src/core/SkMalloc.cpp", "$_src/core/SkMallocPixelRef.cpp", "$_src/core/SkMask.cpp", "$_src/core/SkMask.h", @@ -371,6 +373,8 @@ skia_core_sources = [ "$_src/core/SkTDynamicHash.h", "$_src/core/SkTextBlob.cpp", "$_src/core/SkTextBlobPriv.h", + "$_src/core/SkTextBlobTrace.cpp", + "$_src/core/SkTextBlobTrace.h", "$_src/core/SkTextFormatParams.h", "$_src/core/SkTime.cpp", "$_src/core/SkTInternalLList.h", @@ -455,6 +459,7 @@ skia_core_sources = [ # private "$_include/private/SkChecksum.h", + "$_include/private/SkColorData.h", "$_include/private/SkDeferredDisplayList.h", "$_include/private/SkFixed.h", "$_include/private/SkFloatBits.h", @@ -545,17 +550,14 @@ skia_pathops_sources = [ ] skia_skpicture_public = [ - "$_include/core/SkMultiPictureDraw.h", "$_include/core/SkPicture.h", "$_include/core/SkPictureRecorder.h", ] skia_skpicture_sources = [ - "$_include/core/SkMultiPictureDraw.h", "$_include/core/SkPicture.h", "$_include/core/SkPictureRecorder.h", "$_src/core/SkBigPicture.cpp", - "$_src/core/SkMultiPictureDraw.cpp", "$_src/core/SkPicture.cpp", "$_src/core/SkPictureCommon.h", "$_src/core/SkPictureData.cpp", diff --git a/third_party/skia/gn/cp.py b/third_party/skia/gn/cp.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/create_sksl_enums.py b/third_party/skia/gn/create_sksl_enums.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/find_msvc.py b/third_party/skia/gn/find_msvc.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/find_ios_sysroot.py b/third_party/skia/gn/find_xcode_sysroot.py old mode 100644 new mode 100755 similarity index 100% rename from third_party/skia/gn/find_ios_sysroot.py rename to third_party/skia/gn/find_xcode_sysroot.py diff --git a/third_party/skia/gn/flutter_defines.gni b/third_party/skia/gn/flutter_defines.gni index a0c6b634cf79..97be7d8d66c8 100644 --- a/third_party/skia/gn/flutter_defines.gni +++ b/third_party/skia/gn/flutter_defines.gni @@ -5,7 +5,6 @@ flutter_defines = [ "SK_DISABLE_REDUCE_OPLIST_SPLITTING", "SK_LEGACY_SKCODEC_NONE_ENUM", - "SK_GL", # Flutter always wants this https://github.com/flutter/flutter/issues/11402 "SK_ENABLE_DUMP_GPU", @@ -24,3 +23,7 @@ flutter_defines = [ "SK_DISABLE_LOWP_RASTER_PIPELINE", "SK_FORCE_RASTER_PIPELINE_BLITTER", ] + +if (!is_fuchsia) { + flutter_defines += [ "SK_GL" ] +} diff --git a/third_party/skia/gn/gen_plist_ios.py b/third_party/skia/gn/gen_plist_ios.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/gm.gni b/third_party/skia/gn/gm.gni index 308ee6f43d20..0a8c5b6838aa 100644 --- a/third_party/skia/gn/gm.gni +++ b/third_party/skia/gn/gm.gni @@ -25,7 +25,6 @@ gm_sources = [ "$_gm/arcto.cpp", "$_gm/arithmode.cpp", "$_gm/asyncrescaleandread.cpp", - "$_gm/atlastext.cpp", "$_gm/b_119394958.cpp", "$_gm/backdrop.cpp", "$_gm/backdrop_imagefilter_croprect.cpp", @@ -144,6 +143,7 @@ gm_sources = [ "$_gm/drrect.cpp", "$_gm/drrect_small_inner.cpp", "$_gm/dstreadshuffle.cpp", + "$_gm/ducky_yuv_blend.cpp", "$_gm/emboss.cpp", "$_gm/emptypath.cpp", "$_gm/encode.cpp", @@ -245,7 +245,6 @@ gm_sources = [ "$_gm/mixercolorfilter.cpp", "$_gm/modecolorfilters.cpp", "$_gm/morphology.cpp", - "$_gm/multipicturedraw.cpp", "$_gm/nested.cpp", "$_gm/ninepatchstretch.cpp", "$_gm/nonclosedpaths.cpp", @@ -291,7 +290,6 @@ gm_sources = [ "$_gm/rasterhandleallocator.cpp", "$_gm/readpixels.cpp", "$_gm/recordopts.cpp", - "$_gm/rectangletexture.cpp", "$_gm/rects.cpp", "$_gm/repeated_bitmap.cpp", "$_gm/resizeimagefilter.cpp", @@ -326,6 +324,7 @@ gm_sources = [ "$_gm/skbug_8955.cpp", "$_gm/skbug_9319.cpp", "$_gm/skinning.cpp", + "$_gm/skvm.cpp", "$_gm/smallarc.cpp", "$_gm/smallpaths.cpp", "$_gm/spritebitmap.cpp", @@ -381,4 +380,10 @@ gm_sources = [ "$_gm/xfermodes2.cpp", "$_gm/xfermodes3.cpp", "$_gm/yuvtorgbeffect.cpp", + "$_gm/yuv420_odd_dim.cpp", +] + +gl_gm_sources = [ + "$_gm/atlastext.cpp", + "$_gm/rectangletexture.cpp", ] diff --git a/third_party/skia/gn/gn_to_bp.py b/third_party/skia/gn/gn_to_bp.py old mode 100644 new mode 100755 index 244335879aef..e649b4bf938b --- a/third_party/skia/gn/gn_to_bp.py +++ b/third_party/skia/gn/gn_to_bp.py @@ -318,6 +318,7 @@ def generate_args(target_os, enable_gpu): '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"': diff --git a/third_party/skia/gn/gn_to_bp_utils.py b/third_party/skia/gn/gn_to_bp_utils.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/gn_to_cmake.py b/third_party/skia/gn/gn_to_cmake.py old mode 100644 new mode 100755 index 7dbf82c14e46..9375be7aea01 --- a/third_party/skia/gn/gn_to_cmake.py +++ b/third_party/skia/gn/gn_to_cmake.py @@ -162,12 +162,11 @@ def __init__(self, project_json): self.targets = project_json['targets'] build_settings = project_json['build_settings'] self.root_path = build_settings['root_path'] - self.build_path = posixpath.join(self.root_path, - build_settings['build_dir'][2:]) + self.build_path = self.GetAbsolutePath(build_settings['build_dir']) def GetAbsolutePath(self, path): - if path.startswith("//"): - return self.root_path + "/" + path[2:] + if path.startswith('//'): + return posixpath.join(self.root_path, path[2:]) else: return path diff --git a/third_party/skia/gn/gpu.gni b/third_party/skia/gn/gpu.gni index ae5ebb0c15d9..49e3a3f59411 100644 --- a/third_party/skia/gn/gpu.gni +++ b/third_party/skia/gn/gpu.gni @@ -21,13 +21,6 @@ skia_gpu_sources = [ "$_include/gpu/GrTexture.h", "$_include/gpu/GrTypes.h", - "$_include/gpu/gl/GrGLAssembleInterface.h", - "$_include/gpu/gl/GrGLConfig.h", - "$_include/gpu/gl/GrGLExtensions.h", - "$_include/gpu/gl/GrGLFunctions.h", - "$_include/gpu/gl/GrGLInterface.h", - "$_include/gpu/gl/GrGLTypes.h", - # Private includes "$_include/private/GrContext_Base.h", "$_include/private/GrGLTypesPriv.h", @@ -130,10 +123,10 @@ skia_gpu_sources = [ "$_src/gpu/GrOpsTask.h", "$_src/gpu/GrPaint.cpp", "$_src/gpu/GrPaint.h", - "$_src/gpu/GrPathRendererChain.cpp", - "$_src/gpu/GrPathRendererChain.h", "$_src/gpu/GrPathRenderer.cpp", "$_src/gpu/GrPathRenderer.h", + "$_src/gpu/GrPathRendererChain.cpp", + "$_src/gpu/GrPathRendererChain.h", "$_src/gpu/GrPipeline.cpp", "$_src/gpu/GrPipeline.h", "$_src/gpu/GrPrimitiveProcessor.cpp", @@ -207,6 +200,7 @@ skia_gpu_sources = [ "$_src/gpu/GrSurfaceProxy.cpp", "$_src/gpu/GrSurfaceProxy.h", "$_src/gpu/GrSurfaceProxyPriv.h", + "$_src/gpu/GrSurfaceProxyView.h", "$_src/gpu/GrSurfacePriv.h", "$_src/gpu/GrSwizzle.cpp", "$_src/gpu/GrSwizzle.h", @@ -380,6 +374,8 @@ skia_gpu_sources = [ "$_src/gpu/effects/generated/GrConstColorProcessor.h", "$_src/gpu/effects/generated/GrEllipseEffect.cpp", "$_src/gpu/effects/generated/GrEllipseEffect.h", + "$_src/gpu/effects/generated/GrHSLToRGBFilterEffect.cpp", + "$_src/gpu/effects/generated/GrHSLToRGBFilterEffect.h", "$_src/gpu/effects/generated/GrLumaColorFilterEffect.cpp", "$_src/gpu/effects/generated/GrLumaColorFilterEffect.h", "$_src/gpu/effects/generated/GrMagnifierEffect.cpp", @@ -392,6 +388,8 @@ skia_gpu_sources = [ "$_src/gpu/effects/generated/GrPremulInputFragmentProcessor.h", "$_src/gpu/effects/generated/GrRectBlurEffect.cpp", "$_src/gpu/effects/generated/GrRectBlurEffect.h", + "$_src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp", + "$_src/gpu/effects/generated/GrRGBToHSLFilterEffect.h", "$_src/gpu/effects/generated/GrRRectBlurEffect.cpp", "$_src/gpu/effects/generated/GrRRectBlurEffect.h", "$_src/gpu/effects/generated/GrSaturateProcessor.cpp", @@ -444,58 +442,6 @@ skia_gpu_sources = [ "$_src/gpu/text/GrTextBlobVertexRegenerator.cpp", "$_src/gpu/text/GrTextTarget.h", - "$_src/gpu/gl/GrGLAssembleGLESInterfaceAutogen.cpp", - "$_src/gpu/gl/GrGLAssembleGLInterfaceAutogen.cpp", - "$_src/gpu/gl/GrGLAssembleHelpers.cpp", - "$_src/gpu/gl/GrGLAssembleInterface.cpp", - "$_src/gpu/gl/GrGLAssembleWebGLInterfaceAutogen.cpp", - "$_src/gpu/gl/GrGLBuffer.cpp", - "$_src/gpu/gl/GrGLBuffer.h", - "$_src/gpu/gl/GrGLCaps.cpp", - "$_src/gpu/gl/GrGLCaps.h", - "$_src/gpu/gl/GrGLContext.cpp", - "$_src/gpu/gl/GrGLContext.h", - "$_src/gpu/gl/GrGLMakeNativeInterface_none.cpp", - "$_src/gpu/gl/GrGLDefines.h", - "$_src/gpu/gl/GrGLGLSL.cpp", - "$_src/gpu/gl/GrGLGLSL.h", - "$_src/gpu/gl/GrGLGpu.cpp", - "$_src/gpu/gl/GrGLGpu.h", - "$_src/gpu/gl/GrGLGpuProgramCache.cpp", - "$_src/gpu/gl/GrGLExtensions.cpp", - "$_src/gpu/gl/GrGLInterfaceAutogen.cpp", - "$_src/gpu/gl/GrGLOpsRenderPass.cpp", - "$_src/gpu/gl/GrGLOpsRenderPass.h", - "$_src/gpu/gl/GrGLProgram.cpp", - "$_src/gpu/gl/GrGLProgram.h", - "$_src/gpu/gl/GrGLProgramDataManager.cpp", - "$_src/gpu/gl/GrGLProgramDataManager.h", - "$_src/gpu/gl/GrGLRenderTarget.cpp", - "$_src/gpu/gl/GrGLRenderTarget.h", - "$_src/gpu/gl/GrGLSemaphore.cpp", - "$_src/gpu/gl/GrGLSemaphore.h", - "$_src/gpu/gl/GrGLStencilAttachment.cpp", - "$_src/gpu/gl/GrGLStencilAttachment.h", - "$_src/gpu/gl/GrGLTexture.cpp", - "$_src/gpu/gl/GrGLTexture.h", - "$_src/gpu/gl/GrGLTextureRenderTarget.cpp", - "$_src/gpu/gl/GrGLTextureRenderTarget.h", - "$_src/gpu/gl/GrGLTypesPriv.cpp", - "$_src/gpu/gl/GrGLUtil.cpp", - "$_src/gpu/gl/GrGLUtil.h", - "$_src/gpu/gl/GrGLUniformHandler.cpp", - "$_src/gpu/gl/GrGLUniformHandler.h", - "$_src/gpu/gl/GrGLVaryingHandler.cpp", - "$_src/gpu/gl/GrGLVaryingHandler.h", - "$_src/gpu/gl/GrGLVertexArray.cpp", - "$_src/gpu/gl/GrGLVertexArray.h", - - # Files for building GLSL shaders - "$_src/gpu/gl/builders/GrGLProgramBuilder.cpp", - "$_src/gpu/gl/builders/GrGLProgramBuilder.h", - "$_src/gpu/gl/builders/GrGLShaderStringBuilder.cpp", - "$_src/gpu/gl/builders/GrGLShaderStringBuilder.h", - # GLSL "$_src/gpu/glsl/GrGLSL.cpp", "$_src/gpu/glsl/GrGLSL.h", @@ -554,6 +500,66 @@ skia_gpu_sources = [ "$_src/image/SkSurface_Gpu.cpp", ] +skia_gl_gpu_sources = [ + "$_include/gpu/gl/GrGLAssembleInterface.h", + "$_include/gpu/gl/GrGLConfig.h", + "$_include/gpu/gl/GrGLExtensions.h", + "$_include/gpu/gl/GrGLFunctions.h", + "$_include/gpu/gl/GrGLInterface.h", + "$_include/gpu/gl/GrGLTypes.h", + + "$_src/gpu/gl/GrGLAssembleGLESInterfaceAutogen.cpp", + "$_src/gpu/gl/GrGLAssembleGLInterfaceAutogen.cpp", + "$_src/gpu/gl/GrGLAssembleHelpers.cpp", + "$_src/gpu/gl/GrGLAssembleInterface.cpp", + "$_src/gpu/gl/GrGLAssembleWebGLInterfaceAutogen.cpp", + "$_src/gpu/gl/GrGLBuffer.cpp", + "$_src/gpu/gl/GrGLBuffer.h", + "$_src/gpu/gl/GrGLCaps.cpp", + "$_src/gpu/gl/GrGLCaps.h", + "$_src/gpu/gl/GrGLContext.cpp", + "$_src/gpu/gl/GrGLContext.h", + "$_src/gpu/gl/GrGLDefines.h", + "$_src/gpu/gl/GrGLGLSL.cpp", + "$_src/gpu/gl/GrGLGLSL.h", + "$_src/gpu/gl/GrGLGpu.cpp", + "$_src/gpu/gl/GrGLGpu.h", + "$_src/gpu/gl/GrGLGpuProgramCache.cpp", + "$_src/gpu/gl/GrGLExtensions.cpp", + "$_src/gpu/gl/GrGLInterfaceAutogen.cpp", + "$_src/gpu/gl/GrGLOpsRenderPass.cpp", + "$_src/gpu/gl/GrGLOpsRenderPass.h", + "$_src/gpu/gl/GrGLProgram.cpp", + "$_src/gpu/gl/GrGLProgram.h", + "$_src/gpu/gl/GrGLProgramDataManager.cpp", + "$_src/gpu/gl/GrGLProgramDataManager.h", + "$_src/gpu/gl/GrGLRenderTarget.cpp", + "$_src/gpu/gl/GrGLRenderTarget.h", + "$_src/gpu/gl/GrGLSemaphore.cpp", + "$_src/gpu/gl/GrGLSemaphore.h", + "$_src/gpu/gl/GrGLStencilAttachment.cpp", + "$_src/gpu/gl/GrGLStencilAttachment.h", + "$_src/gpu/gl/GrGLTexture.cpp", + "$_src/gpu/gl/GrGLTexture.h", + "$_src/gpu/gl/GrGLTextureRenderTarget.cpp", + "$_src/gpu/gl/GrGLTextureRenderTarget.h", + "$_src/gpu/gl/GrGLTypesPriv.cpp", + "$_src/gpu/gl/GrGLUtil.cpp", + "$_src/gpu/gl/GrGLUtil.h", + "$_src/gpu/gl/GrGLUniformHandler.cpp", + "$_src/gpu/gl/GrGLUniformHandler.h", + "$_src/gpu/gl/GrGLVaryingHandler.cpp", + "$_src/gpu/gl/GrGLVaryingHandler.h", + "$_src/gpu/gl/GrGLVertexArray.cpp", + "$_src/gpu/gl/GrGLVertexArray.h", + + # Files for building GLSL shaders + "$_src/gpu/gl/builders/GrGLProgramBuilder.cpp", + "$_src/gpu/gl/builders/GrGLProgramBuilder.h", + "$_src/gpu/gl/builders/GrGLShaderStringBuilder.cpp", + "$_src/gpu/gl/builders/GrGLShaderStringBuilder.h", +] + skia_ccpr_sources = [ # coverage counting path renderer "$_src/gpu/ccpr/GrCCAtlas.cpp", @@ -602,16 +608,16 @@ skia_ccpr_sources = [ ] skia_nvpr_sources = [ + "$_src/gpu/gl/GrGLPath.cpp", + "$_src/gpu/gl/GrGLPath.h", + "$_src/gpu/gl/GrGLPathRendering.cpp", + "$_src/gpu/gl/GrGLPathRendering.h", "$_src/gpu/GrPath.cpp", "$_src/gpu/GrPath.h", "$_src/gpu/GrPathProcessor.cpp", "$_src/gpu/GrPathProcessor.h", "$_src/gpu/GrPathRendering.cpp", "$_src/gpu/GrPathRendering.h", - "$_src/gpu/gl/GrGLPath.cpp", - "$_src/gpu/gl/GrGLPath.h", - "$_src/gpu/gl/GrGLPathRendering.cpp", - "$_src/gpu/gl/GrGLPathRendering.h", "$_src/gpu/ops/GrDrawPathOp.cpp", "$_src/gpu/ops/GrDrawPathOp.h", "$_src/gpu/ops/GrStencilAndCoverPathRenderer.cpp", @@ -623,7 +629,7 @@ skia_nvpr_sources = [ skia_gpu_sources += skia_ccpr_sources skia_gpu_sources += skia_nvpr_sources -skia_null_gpu_sources = [] +skia_null_gpu_sources = [ "$_src/gpu/gl/GrGLMakeNativeInterface_none.cpp" ] skia_vk_sources = [ "$_include/gpu/vk/GrVkBackendContext.h", @@ -636,8 +642,6 @@ skia_vk_sources = [ "$_src/gpu/vk/GrVkAMDMemoryAllocator.h", "$_src/gpu/vk/GrVkBuffer.cpp", "$_src/gpu/vk/GrVkBuffer.h", - "$_src/gpu/vk/GrVkBufferView.cpp", - "$_src/gpu/vk/GrVkBufferView.h", "$_src/gpu/vk/GrVkCaps.cpp", "$_src/gpu/vk/GrVkCaps.h", "$_src/gpu/vk/GrVkCommandBuffer.cpp", diff --git a/third_party/skia/gn/highest_version_dir.py b/third_party/skia/gn/highest_version_dir.py old mode 100644 new mode 100755 diff --git a/third_party/skia/gn/skia.gni b/third_party/skia/gn/skia.gni index 398d61f65bbd..e81309dbd894 100644 --- a/third_party/skia/gn/skia.gni +++ b/third_party/skia/gn/skia.gni @@ -5,12 +5,8 @@ if (!defined(is_skia_standalone)) { is_skia_standalone = false } -is_skia_dev_build = is_skia_standalone && !is_official_build -if (is_fuchsia) { - import("//build/fuchsia/sdk.gni") - import("//build/vulkan/config.gni") -} +is_skia_dev_build = is_skia_standalone && !is_official_build declare_args() { skia_android_serial = "" @@ -33,10 +29,12 @@ declare_args() { skia_generate_workarounds = false skia_include_multiframe_procs = false skia_lex = false + skia_libgifcodec_path = "third_party/externals/libgifcodec" skia_pdf_subset_harfbuzz = false # TODO: set skia_pdf_subset_harfbuzz to skia_use_harfbuzz. skia_qt_path = getenv("QT_PATH") skia_skqp_global_error_tolerance = 0 skia_tools_require_resources = false + skia_update_fuchsia_sdk = false skia_use_angle = false skia_use_dawn = false skia_use_egl = false @@ -48,11 +46,12 @@ declare_args() { skia_use_fonthost_mac = is_mac skia_use_freetype = is_android || is_fuchsia || is_linux skia_use_harfbuzz = true + skia_use_gl = !is_fuchsia skia_use_icu = !is_fuchsia && !is_ios skia_use_libheif = is_skia_dev_build skia_use_libjpeg_turbo = true skia_use_libpng = true - skia_use_libwebp = !is_fuchsia + skia_use_libwebp = true skia_use_lua = is_skia_dev_build && !is_ios skia_use_metal = false skia_use_opencl = false @@ -62,6 +61,8 @@ declare_args() { skia_use_xps = true skia_use_zlib = true + skia_vtune_path = "" + if (is_ios) { skia_ios_identity = ".*Google.*" skia_ios_profile = "Google Development" @@ -78,7 +79,7 @@ declare_args() { if (is_android) { skia_use_vulkan = defined(ndk_api) && ndk_api >= 24 } else if (is_fuchsia) { - skia_use_vulkan = fuchsia_use_vulkan + skia_use_vulkan = true } else { skia_use_vulkan = defined(skia_moltenvk_path) && skia_moltenvk_path != "" } @@ -93,6 +94,7 @@ declare_args() { skia_enable_nvpr = !skia_enable_flutter_defines skia_enable_spirv_validation = is_skia_dev_build && is_debug && !skia_use_dawn skia_use_dng_sdk = !is_fuchsia && skia_use_libjpeg_turbo && skia_use_zlib + skia_use_libgifcodec = !skia_use_wuffs skia_use_sfntly = skia_use_icu } diff --git a/third_party/skia/gn/sksl.gni b/third_party/skia/gn/sksl.gni index 32412594d75d..1cca777bb457 100644 --- a/third_party/skia/gn/sksl.gni +++ b/third_party/skia/gn/sksl.gni @@ -47,12 +47,14 @@ skia_gpu_processor_sources = [ "$_src/gpu/effects/GrConstColorProcessor.fp", "$_src/gpu/effects/GrColorMatrixFragmentProcessor.fp", "$_src/gpu/effects/GrEllipseEffect.fp", + "$_src/gpu/effects/GrHSLToRGBFilterEffect.fp", "$_src/gpu/effects/GrLumaColorFilterEffect.fp", "$_src/gpu/effects/GrMagnifierEffect.fp", "$_src/gpu/effects/GrMixerEffect.fp", "$_src/gpu/effects/GrOverrideInputFragmentProcessor.fp", "$_src/gpu/effects/GrPremulInputFragmentProcessor.fp", "$_src/gpu/effects/GrRectBlurEffect.fp", + "$_src/gpu/effects/GrRGBToHSLFilterEffect.fp", "$_src/gpu/effects/GrRRectBlurEffect.fp", "$_src/gpu/effects/GrSaturateProcessor.fp", "$_src/gpu/effects/GrSimpleTextureEffect.fp", diff --git a/third_party/skia/gn/tests.gni b/third_party/skia/gn/tests.gni index 765b46a98c50..17415498b316 100644 --- a/third_party/skia/gn/tests.gni +++ b/third_party/skia/gn/tests.gni @@ -15,7 +15,6 @@ tests_sources = [ "$_tests/ApplyGammaTest.cpp", "$_tests/ArenaAllocTest.cpp", "$_tests/AsADashTest.cpp", - "$_tests/BackendAllocationTest.cpp", "$_tests/BadIcoTest.cpp", "$_tests/BitSetTest.cpp", "$_tests/BitmapCopyTest.cpp", @@ -24,6 +23,7 @@ tests_sources = [ "$_tests/BlendTest.cpp", "$_tests/BlitMaskClip.cpp", "$_tests/BlurTest.cpp", + "$_tests/BulkRectTest.cpp", "$_tests/CTest.cpp", "$_tests/CachedDataTest.cpp", "$_tests/CachedDecodingPixelRefTest.cpp", @@ -65,7 +65,6 @@ tests_sources = [ "$_tests/DrawPathTest.cpp", "$_tests/DrawTextTest.cpp", "$_tests/DynamicHashTest.cpp", - "$_tests/EGLImageTest.cpp", "$_tests/EmptyPathTest.cpp", "$_tests/EncodeTest.cpp", "$_tests/EncodedInfoTest.cpp", @@ -86,8 +85,8 @@ tests_sources = [ "$_tests/FontMgrFontConfigTest.cpp", "$_tests/FontMgrTest.cpp", "$_tests/FontNamesTest.cpp", + "$_tests/FontTest.cpp", "$_tests/FrontBufferedStreamTest.cpp", - "$_tests/GLProgramsTest.cpp", "$_tests/GeometryTest.cpp", "$_tests/GifTest.cpp", "$_tests/GLBackendSurfaceTest.cpp", @@ -100,7 +99,6 @@ tests_sources = [ "$_tests/GrContextAbandonTest.cpp", "$_tests/GrContextFactoryTest.cpp", "$_tests/GrFinishedFlushTest.cpp", - "$_tests/GrGLExtensionsTest.cpp", "$_tests/GrMemoryPoolTest.cpp", "$_tests/GrMeshTest.cpp", "$_tests/GrMipMappedTest.cpp", @@ -191,10 +189,10 @@ tests_sources = [ "$_tests/PremulAlphaRoundTripTest.cpp", "$_tests/PrimitiveProcessorTest.cpp", "$_tests/ProcessorTest.cpp", + "$_tests/ProgramsTest.cpp", "$_tests/PromiseImageTest.cpp", "$_tests/ProxyConversionTest.cpp", "$_tests/ProxyRefTest.cpp", - "$_tests/ProxyTest.cpp", "$_tests/QuickRejectTest.cpp", "$_tests/RRectInPathTest.cpp", "$_tests/RTreeTest.cpp", @@ -210,13 +208,11 @@ tests_sources = [ "$_tests/RecorderTest.cpp", "$_tests/RecordingXfermodeTest.cpp", "$_tests/RectTest.cpp", - "$_tests/RectangleTextureTest.cpp", "$_tests/RefCntTest.cpp", "$_tests/RegionTest.cpp", "$_tests/RenderTargetContextTest.cpp", "$_tests/RepeatedClippedBlurTest.cpp", "$_tests/ResourceAllocatorTest.cpp", - "$_tests/ResourceCacheTest.cpp", "$_tests/RoundRectTest.cpp", "$_tests/SRGBReadWritePixelsTest.cpp", "$_tests/SRGBTest.cpp", @@ -271,7 +267,6 @@ tests_sources = [ "$_tests/StrokerTest.cpp", "$_tests/SubsetPath.cpp", "$_tests/SubsetPath.h", - "$_tests/SurfaceSemaphoreTest.cpp", "$_tests/SurfaceTest.cpp", "$_tests/SwizzlerTest.cpp", "$_tests/TArrayTest.cpp", @@ -286,12 +281,10 @@ tests_sources = [ "$_tests/TestUtils.h", "$_tests/TextBlobCacheTest.cpp", "$_tests/TextBlobTest.cpp", - "$_tests/TextureBindingsResetTest.cpp", "$_tests/TextureProxyTest.cpp", "$_tests/TextureStripAtlasManagerTest.cpp", "$_tests/Time.cpp", "$_tests/TopoSortTest.cpp", - "$_tests/TraceMemoryDumpTest.cpp", "$_tests/TracingTest.cpp", "$_tests/TransferPixelsTest.cpp", "$_tests/TypefaceTest.cpp", @@ -313,7 +306,22 @@ tests_sources = [ "$_tests/YUVTest.cpp", ] -metal_tests_sources = [ "$_tests/MtlBackendAllocationTest.mm" ] +gl_tests_sources = [ + "$_tests/BackendAllocationTest.cpp", + "$_tests/EGLImageTest.cpp", + "$_tests/GrGLExtensionsTest.cpp", + "$_tests/ProxyTest.cpp", + "$_tests/RectangleTextureTest.cpp", + "$_tests/ResourceCacheTest.cpp", + "$_tests/SurfaceSemaphoreTest.cpp", + "$_tests/TextureBindingsResetTest.cpp", + "$_tests/TraceMemoryDumpTest.cpp", +] + +metal_tests_sources = [ + "$_tests/MtlBackendAllocationTest.mm", + "$_tests/MtlCopySurfaceTest.mm", +] pathops_tests_sources = [ "$_tests/PathOpsAngleIdeas.cpp", diff --git a/third_party/skia/gn/toolchain/BUILD.gn b/third_party/skia/gn/toolchain/BUILD.gn index 565628457e6c..9a5494029d5f 100644 --- a/third_party/skia/gn/toolchain/BUILD.gn +++ b/third_party/skia/gn/toolchain/BUILD.gn @@ -1,3 +1,7 @@ +if (is_fuchsia) { + import("//build/fuchsia/sdk.gni") +} + declare_args() { host_ar = ar host_cc = cc @@ -15,6 +19,13 @@ declare_args() { target_cc = "$_prefix/$ndk_target$ndk_api-clang" target_cxx = "$_prefix/$ndk_target$ndk_api-clang++" } + } else if (is_fuchsia && using_fuchsia_sdk) { + target_ar = rebase_path("$fuchsia_toolchain_path/bin/llvm-ar") + target_cc = rebase_path("$fuchsia_toolchain_path/bin/clang") + target_cxx = rebase_path("$fuchsia_toolchain_path/bin/clang++") + cflags = "--sysroot=" + + rebase_path("$fuchsia_toolchain_path/$target_cpu/sysroot") + link = rebase_path("$fuchsia_toolchain_path/bin/ld.lld") } else { target_ar = ar target_cc = cc @@ -254,11 +265,19 @@ template("gcc_like_toolchain") { description = "assemble {{source}}" } + if (is_mac || is_ios) { + not_needed([ "ar" ]) # We use libtool instead. + } + tool("alink") { - rspfile = "{{output}}.rsp" - rspfile_content = "{{inputs}}" - ar_py = rebase_path("../ar.py") - command = "python $ar_py $ar {{output}} $rspfile" + if (is_mac || is_ios) { + command = "libtool -static -o {{output}} -no_warning_for_no_symbols {{inputs}}" + } else { + rspfile = "{{output}}.rsp" + rspfile_content = "{{inputs}}" + command = "$ar rcs {{output}} @$rspfile" + } + outputs = [ "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", ] @@ -286,7 +305,7 @@ template("gcc_like_toolchain") { # LLD doesn't need these flags, but accepts and ignores them. _start_group = "-Wl,--start-group" _end_group = "-Wl,--end-group" - if (is_mac || is_ios) { + if (is_mac || is_ios || is_fuchsia) { _start_group = "" _end_group = "" } @@ -313,7 +332,7 @@ template("gcc_like_toolchain") { # LLD doesn't need these flags, but accepts and ignores them. _start_group = "-Wl,--start-group" _end_group = "-Wl,--end-group" - if (is_mac || is_ios) { + if (is_mac || is_ios || is_fuchsia) { _start_group = "" _end_group = "" } diff --git a/third_party/skia/gn/toolchain/num_cpus.py b/third_party/skia/gn/toolchain/num_cpus.py old mode 100644 new mode 100755 diff --git a/third_party/skia/go.mod b/third_party/skia/go.mod index b8d255ca979e..bce8e8a1dcea 100644 --- a/third_party/skia/go.mod +++ b/third_party/skia/go.mod @@ -3,68 +3,10 @@ module go.skia.org/skia go 1.12 require ( - cloud.google.com/go v0.47.0 // indirect - cloud.google.com/go/bigquery v1.1.0 // indirect - cloud.google.com/go/storage v1.1.1 - github.com/Azure/go-autorest v13.2.0+incompatible // indirect - github.com/NYTimes/gziphandler v1.1.1 // indirect - github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect - github.com/aws/aws-sdk-go v1.25.14 // indirect - github.com/coreos/bbolt v1.3.3 // indirect - github.com/coreos/etcd v3.3.17+incompatible // indirect - github.com/coreos/go-semver v0.3.0 // indirect - github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f // indirect - github.com/creack/pty v1.1.9 // indirect - github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c // indirect - github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 // indirect - github.com/elazarl/goproxy/ext v0.0.0-20191011121108-aa519ddbe484 // indirect - github.com/emicklei/go-restful v2.10.0+incompatible // indirect - github.com/evanphx/json-patch v4.5.0+incompatible // indirect + cloud.google.com/go/storage v1.1.2 github.com/flynn/json5 v0.0.0-20160717195620-7620272ed633 - github.com/fortytw2/leaktest v1.3.0 // indirect - github.com/go-openapi/jsonreference v0.19.3 // indirect - github.com/go-openapi/spec v0.19.3 // indirect - github.com/gogo/protobuf v1.3.1 // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4 // indirect - github.com/google/pprof v0.0.0-20191016141926-35da2c455f8f // indirect github.com/google/uuid v1.1.1 - github.com/gophercloud/gophercloud v0.5.0 // indirect - github.com/gorilla/websocket v1.4.1 // indirect - github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 // indirect - github.com/grpc-ecosystem/grpc-gateway v1.11.3 // indirect - github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect - github.com/kr/pty v1.1.8 // indirect - github.com/magiconair/properties v1.8.1 // indirect - github.com/mailru/easyjson v0.7.0 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect - github.com/pelletier/go-toml v1.5.0 // indirect - github.com/prometheus/client_golang v1.2.0 // indirect - github.com/rogpeppe/fastuuid v1.2.0 // indirect - github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31 // indirect - github.com/rogpeppe/go-internal v1.5.0 // indirect - github.com/russross/blackfriday v2.0.0+incompatible // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/viper v1.4.0 // indirect - github.com/ugorji/go v1.1.7 // indirect - go.chromium.org/luci v0.0.0-20191017030413-7e44e8050726 // indirect - go.etcd.io/bbolt v1.3.3 // indirect - go.skia.org/infra v0.0.0-20191017021031-fc01b2d62386 - go.uber.org/multierr v1.2.0 // indirect - golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect - golang.org/x/exp v0.0.0-20191014171548-69215a2ee97e // 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-20191014212845-da9a3fd4c582 // indirect - golang.org/x/tools v0.0.0-20191017035025-0abb09c987dd // indirect - golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 // indirect + go.skia.org/infra v0.0.0-20191204112307-6a511fedc008 google.golang.org/api v0.11.0 - google.golang.org/appengine v1.6.5 // indirect - k8s.io/api v0.0.0-20191016225839-816a9b7df678 // indirect - k8s.io/gengo v0.0.0-20191010091904-7fa3014cb28f // indirect - k8s.io/kube-openapi v0.0.0-20190918143330-0270cf2f1c1d // indirect - k8s.io/utils v0.0.0-20191010214722-8d271d903fe4 // indirect - sigs.k8s.io/structured-merge-diff v0.0.0-20191009170950-ae447d53f5c3 // indirect ) diff --git a/third_party/skia/go.sum b/third_party/skia/go.sum index c18cf63eca70..74b3a2a71ed4 100644 --- a/third_party/skia/go.sum +++ b/third_party/skia/go.sum @@ -14,11 +14,8 @@ cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTj cloud.google.com/go v0.46.1/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.46.3 h1:AVXDdKsrtX33oR9fbCMu/+c1o8Ofjq6Ku/MInaLVg5Y= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.47.0 h1:1JUtpcY9E7+eTospEwWS2QXP3DEn7poB3E2j0jN74mM= -cloud.google.com/go v0.47.0/go.mod h1:5p3Ky/7f3N10VBkhuR5LFtddroTiMyjZV/Kj5qOQFxU= 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.1.0/go.mod h1:g4RsfUkOvV3Vi5yRujQETpqwCN0F+faPZ2/ykNYfBJc= cloud.google.com/go/bigtable v1.0.0 h1:2DCxzxiuoWubL6J0yl4rUtFtIJAX566mcefQS3xy6us= cloud.google.com/go/bigtable v1.0.0/go.mod h1:N+NeT8ICfOM1Ek4CeP03mSESb2x+qLkSC0+CRBEsvAA= cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= @@ -28,17 +25,14 @@ cloud.google.com/go/logging v1.0.0 h1:kaunpnoEh9L4hu6JUsBa8Y20LBfKnCuDhKUgdZp7oK cloud.google.com/go/logging v1.0.0/go.mod h1:V1cc3ogwobYzQq5f2R7DS/GvRIrI4FKj01Gs5glwAls= cloud.google.com/go/pubsub v1.0.1 h1:W9tAK3E57P75u0XLLR82LZyw8VpAnhmyTOxW9qzmyj8= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.1.0 h1:KYV0dnmEcOuxTd8YLiuQqfx8PzSwDeuDvYGoa5+DbDI= cloud.google.com/go/storage v1.1.0/go.mod h1:a81gKs1KmeOyF/qrbeu4APVXICPLcsl0Ilx2XvD7ZYU= -cloud.google.com/go/storage v1.1.1 h1:ycCxVkVbeNQj8t43giBuzCUJb9g5j1QHua8es8DMb/E= -cloud.google.com/go/storage v1.1.1/go.mod h1:nbQkUX8zrWh07WKekXr/Phd0q/ERj4IOJnkE+v56Qys= +cloud.google.com/go/storage v1.1.2 h1:q7KNypEb3CARnitCAqY63g+dZp9HDEgv/c6IPlPLMJI= +cloud.google.com/go/storage v1.1.2/go.mod h1:/03MkR5FWjF0OpcKpdJ4RgWybEaYAr2boHXq5RDlxbw= contrib.go.opencensus.io/exporter/stackdriver v0.12.7/go.mod h1:ZOhmSfHIoyVaQ+bKN+lR4h7K2olTIJsrdOwWHsNGw4w= 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-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v13.0.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v13.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -47,25 +41,19 @@ github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy86 github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/VividCortex/godaemon v0.0.0-20150910212227-3d9f6e0b234f/go.mod h1:Y8CJ3IwPIAkMhv/rRUWIlczaeqd9ty9yrl+nc2AbaL4= github.com/a8m/envsubst v1.1.0/go.mod h1:91m2Q6AZE0w4WD/laQam2MtWq6FxJVm7UqcB30DeYxw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/aws/aws-sdk-go v1.22.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.14/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= 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= @@ -76,58 +64,34 @@ github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx2 github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.0 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA= -github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/danjacques/gofslock v0.0.0-20180405201223-afa47669cc54 h1:pG2ZY7syxD1TwveleQBnIq58yZE1NldHkjs8N1eHBl8= github.com/danjacques/gofslock v0.0.0-20180405201223-afa47669cc54/go.mod h1:DC3JtzuG7kxMvJ6dZmf2ymjNyoXwgtklr7FN+Um2B0U= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20190911111923-ecfe977594f1/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= -github.com/elazarl/goproxy/ext v0.0.0-20190911111923-ecfe977594f1/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= -github.com/elazarl/goproxy/ext v0.0.0-20191011121108-aa519ddbe484/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.10.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fiorix/go-web v1.0.1-0.20150221144011-5b593f1e8966 h1:P/Czr+qFBdKELw4nys0x2e5nkT9niVq/2FS63ArJzm4= github.com/fiorix/go-web v1.0.1-0.20150221144011-5b593f1e8966/go.mod h1:5OPf/2cFhfql2NdV8pCcv9fZJ0e0LC//L+72iX1cqDM= github.com/flynn/json5 v0.0.0-20160717195620-7620272ed633 h1:xJMmr4GMYIbALX5edyoDIOQpc2bOQTeJiWMeCl9lX/8= github.com/flynn/json5 v0.0.0-20160717195620-7620272ed633/go.mod h1:NJDK3/o7abx6PP54EOe0G0n0RLmhCo9xv61gUYpI0EY= github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -135,28 +99,18 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191002201903-404acd9df4cc h1:55rEp52jU6bkyslZ1+C/7NGfpQsEc6pxGLAGDOctqbw= @@ -175,7 +129,6 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/addlicense v0.0.0-20190510175307-22550fa7c1b0/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= -github.com/google/addlicense v0.0.0-20190907113143-be125746c2c4/go.mod h1:QtPG26W17m+OIQgE6gQ24gC1M6pUaMBAbFrTIDtwG/E= github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -194,8 +147,6 @@ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPg github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190930153522-6ce02741cba3/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191016141926-35da2c455f8f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= @@ -207,8 +158,6 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= -github.com/gophercloud/gophercloud v0.4.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gophercloud/gophercloud v0.5.0/go.mod h1:b1k/BkBA9smzYde6p6zYLIe5JNAEoJzUWaIRh+9A/j0= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190915194858-d3ddacdb130f h1:TyqzGm2z1h3AGhjOoRYyeLcW4WlW81MDQkWa+rx/000= github.com/gopherjs/gopherjs v0.0.0-20190915194858-d3ddacdb130f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -216,15 +165,7 @@ github.com/gorilla/csrf v1.6.1/go.mod h1:7tSf8kmjNYr7IWDCYhd3U8Ck34iQ/Yw5CJu7bAk github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.11.3/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= @@ -234,6 +175,7 @@ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= @@ -246,7 +188,6 @@ github.com/jcgregorio/logger v0.1.2/go.mod h1:a1MmUykXJr+dI02wwT/CcnJbflFsX/sHP1 github.com/jcgregorio/slog v0.0.0-20190423190439-e6f2d537f900 h1:H8hiPQr5PtkrB5z3Do/9iR5tEwuAFNim68cqcoAlHeY= github.com/jcgregorio/slog v0.0.0-20190423190439-e6f2d537f900/go.mod h1:YT3uVwwZ2P4vmZcM3xICUNJ6dqBwoiSgVAqxHu3rcoo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -258,36 +199,30 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -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/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/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= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/luci/gtreap v0.0.0-20161228054646-35df89791e8f/go.mod h1:OjKOY0UvVOOH5nWXSIWTbQWESn8dDiGlaEZx6IAsWhU= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180730094502-03f2033d19d5/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/maruel/subcommands v0.0.0-20181220013616-967e945be48b/go.mod h1:4cd1CVd4c9phb1z9fTkV+JbmnFm394Hp9rHEAOvD+vs= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= @@ -297,13 +232,9 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20190414153302-2ae31c8b6b30/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -313,11 +244,10 @@ github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGV github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.5.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -325,20 +255,15 @@ github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77 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/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.2.0 h1:g4yo/h/me4ZL9o0SVHNRdS2jn5SY8GDmMgkhQ8Mz70s= -github.com/prometheus/client_golang v1.2.0/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo= @@ -346,26 +271,16 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+ github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8= github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= github.com/robertkrimen/otto v0.0.0-20180617131154-15f95af6e78d h1:1VUlQbCfkoSGv7qP7Y+ro3ap1P1pPZxgdGVqiTVy5C4= github.com/robertkrimen/otto v0.0.0-20180617131154-15f95af6e78d/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= -github.com/rogpeppe/go-charset v0.0.0-20190617161244-0dc95cdf6f31/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.5.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -377,21 +292,21 @@ github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUr github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 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/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= @@ -405,72 +320,52 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/texttheater/golang-levenshtein v0.0.0-20190717060638-b7aaf30637d6 h1:aROOQJhj3zNd21TC06HYxLSlBTr4pyNkcvfQ/ITSGQA= github.com/texttheater/golang-levenshtein v0.0.0-20190717060638-b7aaf30637d6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/unrolled/secure v1.0.4/go.mod h1:R6rugAuzh4TQpbFAq69oqZggyBQxFRFQIewtz5z7Jsc= github.com/vektra/mockery v0.0.0-20181123154057-e78b021dcbb5 h1:Xim2mBRFdXzXmKRO8DJg/FJtn/8Fj9NOEpO6+WuMPmk= github.com/vektra/mockery v0.0.0-20181123154057-e78b021dcbb5/go.mod h1:ppEjwdhyy7Y31EnHRDm1JkChoC7LXIJ7Ex0VYLWtZtQ= github.com/willf/bitset v1.1.10 h1:NotGKqX0KwQ72NUzqrjZq5ipPNDQex9lo3WpaS8L2sc= github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yosuke-furukawa/json5 v0.1.1/go.mod h1:sw49aWDqNdRJ6DYUtIQiaA3xyj2IL9tjeNYmX2ixwcU= github.com/zeebo/bencode v1.0.0 h1:zgop0Wu1nu4IexAZeCZ5qbsjU4O1vMrfCrVgUjbHVuA= github.com/zeebo/bencode v1.0.0/go.mod h1:Ct7CkrWIQuLWAy9M3atFHYq4kG9Ao/SsY5cdtCXmp9Y= go.chromium.org/gae v0.0.0-20190826183307-50a499513efa/go.mod h1:ypuIZj/TmtaQgUYPNNu0iKlsUkuv10PROeqHCNrqrog= -go.chromium.org/luci v0.0.0-20191005073036-345b0aec4e74 h1:hTWXfGE68FvtceDaMint5PqRN0vAbOmGxeMJj7SzIEc= -go.chromium.org/luci v0.0.0-20191005073036-345b0aec4e74/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= -go.chromium.org/luci v0.0.0-20191007184019-f6f465957ef4 h1:p9wULFOdgnlBqSKXnSylM/fFCzwQg5o2q7M8cH/iPIY= -go.chromium.org/luci v0.0.0-20191007184019-f6f465957ef4/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= -go.chromium.org/luci v0.0.0-20191008012701-86f88e50331b h1:0FgAXZ0LGuF0PGkevDQT802pgvipg0p4dFj/Qnv2AQg= -go.chromium.org/luci v0.0.0-20191008012701-86f88e50331b/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20191015220223-dd3644d64ff9 h1:tOzif5IkoxTlP+wYE08zK/ZWucKBt1/tJu6khA6hDGM= go.chromium.org/luci v0.0.0-20191015220223-dd3644d64ff9/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= -go.chromium.org/luci v0.0.0-20191017030413-7e44e8050726 h1:LbUTNTv7eM7trUfPz2O7WNpOfFOigQqlx1+Bi2Amuq8= -go.chromium.org/luci v0.0.0-20191017030413-7e44e8050726/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.chromium.org/luci v0.0.0-20191118041814-f12496792788 h1:M/QiFj01yowozhDMK3Rld0UejInoYlq/Z77y2lizZlg= +go.chromium.org/luci v0.0.0-20191118041814-f12496792788/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20191119055648-478869e8bc76 h1:Do8VBFnsvSJDRBHyPuq0N3mp3u6tooMzq5Jpe63rpw4= +go.chromium.org/luci v0.0.0-20191119055648-478869e8bc76/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= -go.skia.org/infra v0.0.0-20191007190028-3345eb620d11 h1:Pp6zcJKMpyMEe5rCivc8fvwLfvmzZqn/FgYP/ZTMLD4= -go.skia.org/infra v0.0.0-20191007190028-3345eb620d11/go.mod h1:lipauW+yX2lI3nWVtNCE5pJVTwPUAiys4VYmbjGwrzo= -go.skia.org/infra v0.0.0-20191008021319-bbb1d2b20bc8 h1:xP+Z6L7SQrD7MpHOlIFZgP6jTN2TeHOS5ZTLtCMksms= -go.skia.org/infra v0.0.0-20191008021319-bbb1d2b20bc8/go.mod h1:lipauW+yX2lI3nWVtNCE5pJVTwPUAiys4VYmbjGwrzo= -go.skia.org/infra v0.0.0-20191017021031-fc01b2d62386 h1:z5VXNDYh7+ty/gMURRfbs8ARVMAOr28qbYUt0XV6anw= -go.skia.org/infra v0.0.0-20191017021031-fc01b2d62386/go.mod h1:i1Rr16s/HPagvyT4LYfrgZ4/9kf1NQ+paaDyDOXsZcA= -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= -go.uber.org/multierr v1.2.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.skia.org/infra v0.0.0-20191118172813-369d64620dd4 h1:HYGJDLo9khjz74w0/TL7ZbfHM8g+6VYHsC83vbPNHOc= +go.skia.org/infra v0.0.0-20191118172813-369d64620dd4/go.mod h1:JDrWsoT8J2u38m70kr1/K7W7OVaDX9KbMGlDMKSL2sM= +go.skia.org/infra v0.0.0-20191204112307-6a511fedc008 h1:2Go74pB/Px+N+qo2Cd1PK7z+ZgSVCmX94PtRnVUuK+g= +go.skia.org/infra v0.0.0-20191204112307-6a511fedc008/go.mod h1:PgEMfZ1OVU5dQFV14hzkzrfqYUsjRyiq8fJrfgUGmVQ= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc h1:c0o/qxkaO2LF5t6fQrT4b5hzyggAkLLlCUjqfRxd8Q4= golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20190912063710-ac5d2bfcbfe0/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3 h1:n9HxLrNxWWtEb1cA950nuEEj3QnKbtsCJ6KjcgisNUs= golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= +golang.org/x/exp v0.0.0-20191014171548-69215a2ee97e h1:ewBcnrlKhy0GKnQ31tXkOC/G7/jHC4ogar1TiIfANC4= golang.org/x/exp v0.0.0-20191014171548-69215a2ee97e/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -481,15 +376,14 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mobile v0.0.0-20191002175909-6d0d39b2ca82/go.mod h1:p895TfNkDgPEmEQrNiOtIl3j98d/tGU95djDj7NfyjQ= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -498,7 +392,6 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09 h1:KaQtG+aDELoNmXYas3TVkGNYRuq8JQ1aa7LJt8EXVyo= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= @@ -506,13 +399,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191003171128-d98b1b443823 h1:Ypyv6BNJh07T1pUSrehkLemqPKXhus2MkfktJ91kRh4= golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191007182048-72f939374954 h1:JGZucVF/L/TotR719NbujzadOZ2AgnYlqphQGHDCKaU= -golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582 h1:p9xBe/w/OzkeYVKm234g55gMdD1nSIooTir5kV11kfA= -golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA= @@ -531,10 +419,8 @@ golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -551,10 +437,6 @@ golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa h1:KIDDMLT1O0Nr7TSxp8xM5tJcd golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191007092633-5f54ce542709 h1:wGFnQAzp3osDbpU/aeSzlZ7/hHjXuMgcAX3p8UKPEcA= golang.org/x/sys v0.0.0-20191007092633-5f54ce542709/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191007154456-ef33b2fb2c41 h1:OC2BiV9nQHWgVMNbxZ5/eZKWnnd3Z4H9W5zdNvC4EBc= -golang.org/x/sys v0.0.0-20191007154456-ef33b2fb2c41/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY= -golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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= @@ -565,7 +447,6 @@ golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxb 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-20190921001708-c4c64cad1fd0/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-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -580,27 +461,20 @@ golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac h1:MQEvx39qSf8vyrx3XRaOe+j1UDIzKwkYOVObRgGPVqI= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479 h1:lfN2PY/jymfnxkNHlbBF5DwPsUvhqUnrdgfK01iH2s0= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190909214602-067311248421/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190917162342-3b4f30a44f3b/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e h1:1xWUkZQQ9Z9UuZgNaIR6OQOE7rUFglXUUBZlO+dGg6I= golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191005014404-c9f9432ec4b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191007185444-6536af71d98a h1:mtF1GhqcFEC1RVSQxvgrZWOM22dax6fiM9VfcQoTv6U= -golang.org/x/tools v0.0.0-20191007185444-6536af71d98a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010171213-8abd42400456/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191017035025-0abb09c987dd h1:05UlZ/D8j3ueatR0iMtGQ8BOUKChM5b0XY/c50tSFe4= -golang.org/x/tools v0.0.0-20191017035025-0abb09c987dd/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191022210528-83d82311fd1f h1:X4UYO3m0+b0v4ctMUiMVB/vdVP5v25QRYMtH88N+Ne8= +golang.org/x/tools v0.0.0-20191022210528-83d82311fd1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0 h1:KKgc1aqhV8wDPbDzlDtpvyjZFY3vjz85FP7p4wcQUyI= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0 h1:9sdfJOzWlkqPltHAuzT2Cp+yrBeY1KRVYgms8soxMwM= @@ -619,7 +493,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.4 h1:WiKh4+/eMB2HaY7QhCfW/R7MuRAoA8QMCSJA6jP5/fo= google.golang.org/appengine v1.6.4/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -638,16 +511,11 @@ google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51 h1:Ex1mq5jaJof+kRn google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191002211648-c459b9ce5143 h1:tikhlQEJeezbnu0Zcblj7g5vm/L7xt6g1vnfq8mRCS4= google.golang.org/genproto v0.0.0-20191002211648-c459b9ce5143/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191007162740-aa923e3a3354 h1:KJxw2DvYTCIxlEY4yqWyLdvFGlci4EKTCbrZwfyxDME= -google.golang.org/genproto v0.0.0-20191007162740-aa923e3a3354/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191007204434-a023cd5227bd h1:84VQPzup3IpKLxuIAZjHMhVjJ8fZ4/i3yUnj3k6fUdw= -google.golang.org/genproto v0.0.0-20191007204434-a023cd5227bd/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1 h1:Hz2g2wirWK7H0qIIhGIqRGTuMwTE8HEKFnDZZ7lm9NU= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.22.1 h1:/7cs52RnTJmD43s3uxzlq2U7nqVTd/37viQwMrMNlOM= @@ -664,11 +532,9 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/olivere/elastic.v5 v5.0.82/go.mod h1:uhHoB4o3bvX5sorxBU29rPcmBQdV2Qfg0FBrx5D6pV0= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -682,27 +548,19 @@ honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXe honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/api v0.0.0-20190425012535-181e1f9c52c1/go.mod h1:AhUc3Ph6fhRc0SCpt0Hwv0E+Q8QiEAASkXKwfmT2JwU= k8s.io/api v0.0.0-20191005115622-2e41325d9e4b/go.mod h1:V9fqJJO3eGaWUKb9e6wH3fx7JXl1IaSC1VhSLk7GJjA= -k8s.io/api v0.0.0-20191016225839-816a9b7df678/go.mod h1:LZQaT8MvVpl7Bg2lYFcQm7+Mpdxq8p1NFl3yh+5DCwY= k8s.io/apimachinery v0.0.0-20190424212440-527a9d33701e/go.mod h1:5CBnzrKYGHzv9ZsSKmQ8wHt4XI4/TUBPDwYM9FlZMyw= k8s.io/apimachinery v0.0.0-20190425132440-17f84483f500/go.mod h1:5CBnzrKYGHzv9ZsSKmQ8wHt4XI4/TUBPDwYM9FlZMyw= k8s.io/apimachinery v0.0.0-20191005115455-e71eb83a557c/go.mod h1:92mWDd8Ji2sw2157KIgino5wCxffA8KSvhW2oY4ypdw= k8s.io/apimachinery v0.0.0-20191006235458-f9f2f3f8ab02/go.mod h1:92mWDd8Ji2sw2157KIgino5wCxffA8KSvhW2oY4ypdw= -k8s.io/apimachinery v0.0.0-20191016225534-b1267f8c42b4/go.mod h1:92mWDd8Ji2sw2157KIgino5wCxffA8KSvhW2oY4ypdw= k8s.io/client-go v0.0.0-20190425172711-65184652c889/go.mod h1:PeVFCnjeDy6EwLN+wdDIZd1DwDY6jnkpQt9psMo5YRU= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190907103519-ebc107f98eab/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20191010091904-7fa3014cb28f/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= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20190918143330-0270cf2f1c1d/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190923111123-69764acb6e8e/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20191010214722-8d271d903fe4/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff v0.0.0-20191007172110-13ba6db87b8b/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= -sigs.k8s.io/structured-merge-diff v0.0.0-20191009170950-ae447d53f5c3/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/third_party/skia/include/android/SkAnimatedImage.h b/third_party/skia/include/android/SkAnimatedImage.h index 760dabde7614..a3907a645457 100644 --- a/third_party/skia/include/android/SkAnimatedImage.h +++ b/third_party/skia/include/android/SkAnimatedImage.h @@ -110,6 +110,16 @@ class SK_API SkAnimatedImage : public SkDrawable { return fRepetitionCount; } + /** + * Return the total number of frames in the animation. + */ + int getFrameCount() const { return fFrameCount; } + + /** + * Return the (possibly scaled) dimensions of the image. + */ + SkISize dimensions() const { return fScaledSize; } + protected: SkRect onGetBounds() override; void onDraw(SkCanvas*) override; diff --git a/third_party/skia/include/core/SkBitmap.h b/third_party/skia/include/core/SkBitmap.h index d561321bc0bb..f16896768f85 100644 --- a/third_party/skia/include/core/SkBitmap.h +++ b/third_party/skia/include/core/SkBitmap.h @@ -21,7 +21,6 @@ struct SkRect; class SkPaint; class SkPixelRef; class SkShader; -class SkString; /** \class SkBitmap SkBitmap describes a two-dimensional raster pixel array. SkBitmap is built on @@ -56,6 +55,8 @@ class SK_API SkBitmap { after SkBitmap has been created. @return empty SkBitmap + + example: https://fiddle.skia.org/c/@Bitmap_empty_constructor */ SkBitmap(); @@ -64,6 +65,8 @@ class SK_API SkBitmap { @param src SkBitmap to copy SkImageInfo, and share SkPixelRef @return copy of src + + example: https://fiddle.skia.org/c/@Bitmap_copy_const_SkBitmap */ SkBitmap(const SkBitmap& src); @@ -72,6 +75,8 @@ class SK_API SkBitmap { @param src SkBitmap to copy SkImageInfo, and reassign SkPixelRef @return copy of src + + example: https://fiddle.skia.org/c/@Bitmap_move_SkBitmap */ SkBitmap(SkBitmap&& src); @@ -84,6 +89,8 @@ class SK_API SkBitmap { @param src SkBitmap to copy SkImageInfo, and share SkPixelRef @return copy of src + + example: https://fiddle.skia.org/c/@Bitmap_copy_operator */ SkBitmap& operator=(const SkBitmap& src); @@ -92,12 +99,16 @@ class SK_API SkBitmap { @param src SkBitmap to copy SkImageInfo, and reassign SkPixelRef @return copy of src + + example: https://fiddle.skia.org/c/@Bitmap_move_operator */ SkBitmap& operator=(SkBitmap&& src); /** Swaps the fields of the two bitmaps. @param other SkBitmap exchanged with original + + example: https://fiddle.skia.org/c/@Bitmap_swap */ void swap(SkBitmap& other); @@ -254,6 +265,8 @@ class SK_API SkBitmap { kUnknown_SkAlphaType, kOpaque_SkAlphaType, kPremul_SkAlphaType, kUnpremul_SkAlphaType @return true if SkAlphaType is set + + example: https://fiddle.skia.org/c/@Bitmap_setAlphaType */ bool setAlphaType(SkAlphaType alphaType); @@ -278,6 +291,8 @@ class SK_API SkBitmap { Most immutable SkBitmap checks trigger an assert only on debug builds. @return true if pixels are immutable + + example: https://fiddle.skia.org/c/@Bitmap_isImmutable */ bool isImmutable() const; @@ -286,6 +301,8 @@ class SK_API SkBitmap { Once SkPixelRef is marked immutable, the setting cannot be cleared. Writing to immutable SkBitmap pixels triggers an assert on debug builds. + + example: https://fiddle.skia.org/c/@Bitmap_setImmutable */ void setImmutable(); @@ -308,6 +325,8 @@ class SK_API SkBitmap { Volatile state is not shared by other bitmaps sharing the same SkPixelRef. @return true if marked volatile + + example: https://fiddle.skia.org/c/@Bitmap_isVolatile */ bool isVolatile() const; @@ -319,6 +338,8 @@ class SK_API SkBitmap { consumption on SkBaseDevice. @param isVolatile true if backing pixels are temporary + + example: https://fiddle.skia.org/c/@Bitmap_setIsVolatile */ void setIsVolatile(bool isVolatile); @@ -330,6 +351,8 @@ class SK_API SkBitmap { If SkPixelRef is allocated, its reference count is decreased by one, releasing its memory if SkBitmap is the sole owner. + + example: https://fiddle.skia.org/c/@Bitmap_reset */ void reset(); @@ -357,12 +380,16 @@ class SK_API SkBitmap { /** Returns SkRect { 0, 0, width(), height() }. @param bounds container for floating point rectangle + + example: https://fiddle.skia.org/c/@Bitmap_getBounds */ void getBounds(SkRect* bounds) const; /** Returns SkIRect { 0, 0, width(), height() }. @param bounds container for integral rectangle + + example: https://fiddle.skia.org/c/@Bitmap_getBounds_2 */ void getBounds(SkIRect* bounds) const; @@ -414,6 +441,8 @@ class SK_API SkBitmap { @param imageInfo contains width, height, SkAlphaType, SkColorType, SkColorSpace @param rowBytes imageInfo.minRowBytes() or larger; or zero @return true if SkImageInfo set successfully + + example: https://fiddle.skia.org/c/@Bitmap_setInfo */ bool setInfo(const SkImageInfo& imageInfo, size_t rowBytes = 0); @@ -456,6 +485,8 @@ class SK_API SkBitmap { @param info contains width, height, SkAlphaType, SkColorType, SkColorSpace @param flags kZeroPixels_AllocFlag, or zero + + example: https://fiddle.skia.org/c/@Bitmap_allocPixelsFlags */ void allocPixelsFlags(const SkImageInfo& info, uint32_t flags); @@ -492,6 +523,8 @@ class SK_API SkBitmap { @param info contains width, height, SkAlphaType, SkColorType, SkColorSpace @param rowBytes size of pixel row or larger; may be zero + + example: https://fiddle.skia.org/c/@Bitmap_allocPixels */ void allocPixels(const SkImageInfo& info, size_t rowBytes); @@ -526,6 +559,8 @@ class SK_API SkBitmap { implementation of malloc(). @param info contains width, height, SkAlphaType, SkColorType, SkColorSpace + + example: https://fiddle.skia.org/c/@Bitmap_allocPixels_2 */ void allocPixels(const SkImageInfo& info); @@ -562,6 +597,8 @@ class SK_API SkBitmap { @param width pixel column count; must be zero or greater @param height pixel row count; must be zero or greater @param isOpaque true if pixels do not have transparency + + example: https://fiddle.skia.org/c/@Bitmap_allocN32Pixels */ void allocN32Pixels(int width, int height, bool isOpaque = false); @@ -621,6 +658,8 @@ class SK_API SkBitmap { @param pixmap SkImageInfo, pixel address, and rowBytes() @return true if SkImageInfo was set to pixmap.info() + + example: https://fiddle.skia.org/c/@Bitmap_installPixels_3 */ bool installPixels(const SkPixmap& pixmap); @@ -638,6 +677,8 @@ class SK_API SkBitmap { of SkBitmap and SkPixelRef. @param pixels address of pixel storage, managed by caller + + example: https://fiddle.skia.org/c/@Bitmap_setPixels */ void setPixels(void* pixels); @@ -658,6 +699,8 @@ class SK_API SkBitmap { Aborts if info().colorType() is kUnknown_SkColorType, or allocation fails. Abort steps may be provided by the user at compile time by defining SK_ABORT. + + example: https://fiddle.skia.org/c/@Bitmap_allocPixels_3 */ void allocPixels(); @@ -680,6 +723,8 @@ class SK_API SkBitmap { the user at compile time by defining SK_ABORT. @param allocator instance of SkBitmap::Allocator instantiation + + example: https://fiddle.skia.org/c/@Bitmap_allocPixels_4 */ void allocPixels(Allocator* allocator); @@ -702,6 +747,8 @@ class SK_API SkBitmap { Returns (0, 0) if SkPixelRef is nullptr. @return pixel origin within SkPixelRef + + example: https://fiddle.skia.org/c/@Bitmap_pixelRefOrigin */ SkIPoint pixelRefOrigin() const; @@ -717,6 +764,8 @@ class SK_API SkBitmap { @param pixelRef SkPixelRef describing pixel address and rowBytes() @param dx column offset in SkPixelRef for bitmap origin @param dy row offset in SkPixelRef for bitmap origin + + example: https://fiddle.skia.org/c/@Bitmap_setPixelRef */ void setPixelRef(sk_sp pixelRef, int dx, int dy); @@ -735,11 +784,15 @@ class SK_API SkBitmap { Determines if pixels have changed since last examined. @return unique value for pixels in SkPixelRef + + example: https://fiddle.skia.org/c/@Bitmap_getGenerationID */ uint32_t getGenerationID() const; /** Marks that pixels in SkPixelRef have changed. Subsequent calls to getGenerationID() return a different value. + + example: https://fiddle.skia.org/c/@Bitmap_notifyPixelsChanged */ void notifyPixelsChanged() const; @@ -749,6 +802,8 @@ class SK_API SkBitmap { then RGB is ignored. @param c unpremultiplied color + + example: https://fiddle.skia.org/c/@Bitmap_eraseColor */ void eraseColor(SkColor c) const; @@ -776,6 +831,8 @@ class SK_API SkBitmap { @param c unpremultiplied color @param area rectangle to fill + + example: https://fiddle.skia.org/c/@Bitmap_erase */ void erase(SkColor c, const SkIRect& area) const; @@ -829,6 +886,8 @@ class SK_API SkBitmap { @param x column index, zero or greater, and less than width() @param y row index, zero or greater, and less than height() @return generic pointer to pixel + + example: https://fiddle.skia.org/c/@Bitmap_getAddr */ void* getAddr(int x, int y) const; @@ -891,6 +950,8 @@ class SK_API SkBitmap { @param dst SkBitmap set to subset @param subset rectangle of pixels to reference @return true if dst is replaced by subset + + example: https://fiddle.skia.org/c/@Bitmap_extractSubset */ bool extractSubset(SkBitmap* dst, const SkIRect& subset) const; @@ -950,6 +1011,8 @@ class SK_API SkBitmap { @param srcX column index whose absolute value is less than width() @param srcY row index whose absolute value is less than height() @return true if pixels are copied to dst + + example: https://fiddle.skia.org/c/@Bitmap_readPixels_2 */ bool readPixels(const SkPixmap& dst, int srcX, int srcY) const; @@ -1002,6 +1065,8 @@ class SK_API SkBitmap { @param dstX column index whose absolute value is less than width() @param dstY row index whose absolute value is less than height() @return true if src pixels are copied to SkBitmap + + example: https://fiddle.skia.org/c/@Bitmap_writePixels */ bool writePixels(const SkPixmap& src, int dstX, int dstY); @@ -1085,6 +1150,8 @@ class SK_API SkBitmap { @param pixmap storage for pixel state if pixels are readable; otherwise, ignored @return true if SkBitmap has direct access to pixels + + example: https://fiddle.skia.org/c/@Bitmap_peekPixels */ bool peekPixels(SkPixmap* pixmap) const; @@ -1130,6 +1197,8 @@ class SK_API SkBitmap { @param bitmap SkBitmap containing SkImageInfo as input, and SkPixelRef as output @return true if pixels are allocated + + example: https://fiddle.skia.org/c/@Bitmap_HeapAllocator_allocPixelRef */ bool allocPixelRef(SkBitmap* bitmap) override; }; diff --git a/third_party/skia/include/core/SkBlendMode.h b/third_party/skia/include/core/SkBlendMode.h index 270978f74b91..1dff8a7cdc27 100644 --- a/third_party/skia/include/core/SkBlendMode.h +++ b/third_party/skia/include/core/SkBlendMode.h @@ -45,6 +45,34 @@ enum class SkBlendMode { kLastMode = kLuminosity, //!< last valid value }; +/** + * For Porter-Duff SkBlendModes (those <= kLastCoeffMode), these coefficients describe the blend + * equation used. Coefficient-based blend modes specify an equation: + * ('dstCoeff' * dst + 'srcCoeff' * src), where the coefficient values are constants, functions of + * the src or dst alpha, or functions of the src or dst color. + */ +enum class SkBlendModeCoeff { + kZero, /** 0 */ + kOne, /** 1 */ + kSC, /** src color */ + kISC, /** inverse src color (i.e. 1 - sc) */ + kDC, /** dst color */ + kIDC, /** inverse dst color (i.e. 1 - dc) */ + kSA, /** src alpha */ + kISA, /** inverse src alpha (i.e. 1 - sa) */ + kDA, /** dst alpha */ + kIDA, /** inverse dst alpha (i.e. 1 - da) */ + + kCoeffCount +}; + +/** + * Returns true if 'mode' is a coefficient-based blend mode (<= kLastCoeffMode). If true is + * returned, the mode's src and dst coefficient functions are set in 'src' and 'dst'. + */ +SK_API bool SkBlendMode_AsCoeff(SkBlendMode mode, SkBlendModeCoeff* src, SkBlendModeCoeff* dst); + + /** Returns name of blendMode as null-terminated C string. @param blendMode one of: diff --git a/third_party/skia/include/core/SkCanvas.h b/third_party/skia/include/core/SkCanvas.h index 045b1170799a..a7c53421139e 100644 --- a/third_party/skia/include/core/SkCanvas.h +++ b/third_party/skia/include/core/SkCanvas.h @@ -145,6 +145,8 @@ class SK_API SkCanvas { a width and height of zero. @return empty SkCanvas + + example: https://fiddle.skia.org/c/@Canvas_empty_constructor */ SkCanvas(); @@ -162,6 +164,8 @@ class SK_API SkCanvas { @param props LCD striping orientation and setting for device independent fonts; may be nullptr @return SkCanvas placeholder with dimensions + + example: https://fiddle.skia.org/c/@Canvas_int_int_const_SkSurfaceProps_star */ SkCanvas(int width, int height, const SkSurfaceProps* props = nullptr); @@ -180,6 +184,8 @@ class SK_API SkCanvas { @param bitmap width, height, SkColorType, SkAlphaType, and pixel storage of raster surface @return SkCanvas that can be used to draw into bitmap + + example: https://fiddle.skia.org/c/@Canvas_copy_const_SkBitmap */ explicit SkCanvas(const SkBitmap& bitmap); @@ -210,11 +216,15 @@ class SK_API SkCanvas { @param props order and orientation of RGB striping; and whether to use device independent fonts @return SkCanvas that can be used to draw into bitmap + + example: https://fiddle.skia.org/c/@Canvas_const_SkBitmap_const_SkSurfaceProps */ SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props); /** Draws saved layers, if any. Frees up resources used by SkCanvas. + + example: https://fiddle.skia.org/c/@Canvas_destructor */ virtual ~SkCanvas(); @@ -222,6 +232,8 @@ class SK_API SkCanvas { GPU surface, returned SkColorType is set to kUnknown_SkColorType. @return dimensions and SkColorType of SkCanvas + + example: https://fiddle.skia.org/c/@Canvas_imageInfo */ SkImageInfo imageInfo() const; @@ -230,6 +242,8 @@ class SK_API SkCanvas { @param props storage for writable SkSurfaceProps @return true if SkSurfaceProps was copied + + example: https://fiddle.skia.org/c/@Canvas_getProps */ bool getProps(SkSurfaceProps* props) const; @@ -245,6 +259,8 @@ class SK_API SkCanvas { smaller (due to clipping or saveLayer). @return integral width and height of base layer + + example: https://fiddle.skia.org/c/@Canvas_getBaseLayerSize */ virtual SkISize getBaseLayerSize() const; @@ -257,15 +273,24 @@ class SK_API SkCanvas { @param info width, height, SkColorType, SkAlphaType, and SkColorSpace @param props SkSurfaceProps to match; may be nullptr to match SkCanvas @return SkSurface matching info and props, or nullptr if no match is available + + example: https://fiddle.skia.org/c/@Canvas_makeSurface */ sk_sp makeSurface(const SkImageInfo& info, const SkSurfaceProps* props = nullptr); /** Returns GPU context of the GPU surface associated with SkCanvas. @return GPU context, if available; nullptr otherwise + + example: https://fiddle.skia.org/c/@Canvas_getGrContext */ virtual GrContext* getGrContext(); + /** 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. + */ + SkSurface* getSurface() const; + #if defined(COBALT) /** * Return the framebuffer object identifier for the render target, if @@ -287,6 +312,9 @@ class SK_API SkCanvas { @param origin storage for SkCanvas top layer origin, its top-left corner; may be nullptr @return address of pixels, or nullptr if inaccessible + + example: https://fiddle.skia.org/c/@Canvas_accessTopLayerPixels_a + example: https://fiddle.skia.org/c/@Canvas_accessTopLayerPixels_b */ void* accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes, SkIPoint* origin = nullptr); @@ -298,6 +326,8 @@ class SK_API SkCanvas { the drawing destination. @return context of custom allocation + + example: https://fiddle.skia.org/c/@Canvas_accessTopRasterHandle */ SkRasterHandleAllocator::Handle accessTopRasterHandle() const; @@ -313,6 +343,8 @@ class SK_API SkCanvas { @param pixmap storage for pixel state if pixels are readable; otherwise, ignored @return true if SkCanvas has direct access to pixels + + example: https://fiddle.skia.org/c/@Canvas_peekPixels */ bool peekPixels(SkPixmap* pixmap); @@ -385,6 +417,8 @@ class SK_API SkCanvas { @param srcX offset into readable pixels on x-axis; may be negative @param srcY offset into readable pixels on y-axis; may be negative @return true if pixels were copied + + example: https://fiddle.skia.org/c/@Canvas_readPixels_2 */ bool readPixels(const SkPixmap& pixmap, int srcX, int srcY); @@ -420,6 +454,8 @@ class SK_API SkCanvas { @param srcX offset into readable pixels on x-axis; may be negative @param srcY offset into readable pixels on y-axis; may be negative @return true if pixels were copied + + example: https://fiddle.skia.org/c/@Canvas_readPixels_3 */ bool readPixels(const SkBitmap& bitmap, int srcX, int srcY); @@ -456,6 +492,8 @@ class SK_API SkCanvas { @param x offset into SkCanvas writable pixels on x-axis; may be negative @param y offset into SkCanvas writable pixels on y-axis; may be negative @return true if pixels were written to SkCanvas + + example: https://fiddle.skia.org/c/@Canvas_writePixels */ bool writePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes, int x, int y); @@ -492,6 +530,10 @@ class SK_API SkCanvas { @param x offset into SkCanvas writable pixels on x-axis; may be negative @param y offset into SkCanvas writable pixels on y-axis; may be negative @return true if pixels were written to SkCanvas + + example: https://fiddle.skia.org/c/@Canvas_writePixels_2 + example: https://fiddle.skia.org/c/@State_Stack_a + example: https://fiddle.skia.org/c/@State_Stack_b */ bool writePixels(const SkBitmap& bitmap, int x, int y); @@ -508,6 +550,8 @@ class SK_API SkCanvas { Call restoreToCount() with result to restore this and subsequent saves. @return depth of saved stack + + example: https://fiddle.skia.org/c/@Canvas_save */ int save(); @@ -529,6 +573,8 @@ class SK_API SkCanvas { @param bounds hint to limit the size of the layer; may be nullptr @param paint graphics state for layer; may be nullptr @return depth of saved stack + + example: https://fiddle.skia.org/c/@Canvas_saveLayer */ int saveLayer(const SkRect* bounds, const SkPaint* paint); @@ -574,6 +620,8 @@ class SK_API SkCanvas { @param bounds hint to limit the size of layer; may be nullptr @param alpha opacity of layer @return depth of saved stack + + example: https://fiddle.skia.org/c/@Canvas_saveLayerAlpha */ int saveLayerAlpha(const SkRect* bounds, U8CPU alpha); @@ -709,6 +757,8 @@ class SK_API SkCanvas { @param layerRec layer state @return depth of save state stack before this call was made. + + example: https://fiddle.skia.org/c/@Canvas_saveLayer_3 */ int saveLayer(const SaveLayerRec& layerRec); @@ -716,6 +766,10 @@ class SK_API SkCanvas { last saved. The state is removed from the stack. Does nothing if the stack is empty. + + example: https://fiddle.skia.org/c/@AutoCanvasRestore_restore + + example: https://fiddle.skia.org/c/@Canvas_restore */ void restore(); @@ -724,6 +778,8 @@ class SK_API SkCanvas { The save count of a new canvas is one. @return depth of save state stack + + example: https://fiddle.skia.org/c/@Canvas_getSaveCount */ int getSaveCount() const; @@ -734,6 +790,8 @@ class SK_API SkCanvas { Restores state to initial values if saveCount is less than or equal to one. @param saveCount depth of state stack to restore + + example: https://fiddle.skia.org/c/@Canvas_restoreToCount */ void restoreToCount(int saveCount); @@ -747,6 +805,8 @@ class SK_API SkCanvas { @param dx distance to translate on x-axis @param dy distance to translate on y-axis + + example: https://fiddle.skia.org/c/@Canvas_translate */ void translate(SkScalar dx, SkScalar dy); @@ -760,6 +820,8 @@ class SK_API SkCanvas { @param sx amount to scale on x-axis @param sy amount to scale on y-axis + + example: https://fiddle.skia.org/c/@Canvas_scale */ void scale(SkScalar sx, SkScalar sy); @@ -772,6 +834,8 @@ class SK_API SkCanvas { the result with SkMatrix. @param degrees amount to rotate, in degrees + + example: https://fiddle.skia.org/c/@Canvas_rotate */ void rotate(SkScalar degrees); @@ -788,6 +852,8 @@ class SK_API SkCanvas { @param degrees amount to rotate, in degrees @param px x-axis value of the point to rotate about @param py y-axis value of the point to rotate about + + example: https://fiddle.skia.org/c/@Canvas_rotate_2 */ void rotate(SkScalar degrees, SkScalar px, SkScalar py); @@ -802,6 +868,8 @@ class SK_API SkCanvas { @param sx amount to skew on x-axis @param sy amount to skew on y-axis + + example: https://fiddle.skia.org/c/@Canvas_skew */ void skew(SkScalar sx, SkScalar sy); @@ -811,6 +879,8 @@ class SK_API SkCanvas { transforming the result with existing SkMatrix. @param matrix matrix to premultiply with existing SkMatrix + + example: https://fiddle.skia.org/c/@Canvas_concat */ void concat(const SkMatrix& matrix); @@ -818,11 +888,15 @@ class SK_API SkCanvas { Unlike concat(), any prior matrix state is overwritten. @param matrix matrix to copy, replacing existing SkMatrix + + example: https://fiddle.skia.org/c/@Canvas_setMatrix */ void setMatrix(const SkMatrix& matrix); /** Sets SkMatrix to the identity matrix. Any prior matrix state is overwritten. + + example: https://fiddle.skia.org/c/@Canvas_resetMatrix */ void resetMatrix(); @@ -833,6 +907,8 @@ class SK_API SkCanvas { @param rect SkRect to combine with clip @param op SkClipOp to apply to clip @param doAntiAlias true if clip is to be anti-aliased + + example: https://fiddle.skia.org/c/@Canvas_clipRect */ void clipRect(const SkRect& rect, SkClipOp op, bool doAntiAlias); @@ -879,6 +955,8 @@ class SK_API SkCanvas { @param rrect SkRRect to combine with clip @param op SkClipOp to apply to clip @param doAntiAlias true if clip is to be anti-aliased + + example: https://fiddle.skia.org/c/@Canvas_clipRRect */ void clipRRect(const SkRRect& rrect, SkClipOp op, bool doAntiAlias); @@ -913,6 +991,8 @@ class SK_API SkCanvas { @param path SkPath to combine with clip @param op SkClipOp to apply to clip @param doAntiAlias true if clip is to be anti-aliased + + example: https://fiddle.skia.org/c/@Canvas_clipPath */ void clipPath(const SkPath& path, SkClipOp op, bool doAntiAlias); @@ -958,6 +1038,8 @@ class SK_API SkCanvas { @param deviceRgn SkRegion to combine with clip @param op SkClipOp to apply to clip + + example: https://fiddle.skia.org/c/@Canvas_clipRegion */ void clipRegion(const SkRegion& deviceRgn, SkClipOp op = SkClipOp::kIntersect); @@ -968,6 +1050,8 @@ class SK_API SkCanvas { @param rect SkRect to compare with clip @return true if rect, transformed by SkMatrix, does not intersect clip + + example: https://fiddle.skia.org/c/@Canvas_quickReject */ bool quickReject(const SkRect& rect) const; @@ -978,6 +1062,8 @@ class SK_API SkCanvas { @param path SkPath to compare with clip @return true if path, transformed by SkMatrix, does not intersect clip + + example: https://fiddle.skia.org/c/@Canvas_quickReject_2 */ bool quickReject(const SkPath& path) const; @@ -988,6 +1074,8 @@ class SK_API SkCanvas { is anti-aliased. @return bounds of clip in local coordinates + + example: https://fiddle.skia.org/c/@Canvas_getLocalClipBounds */ SkRect getLocalClipBounds() const; @@ -1011,6 +1099,8 @@ class SK_API SkCanvas { Unlike getLocalClipBounds(), returned SkIRect is not outset. @return bounds of clip in SkBaseDevice coordinates + + example: https://fiddle.skia.org/c/@Canvas_getDeviceClipBounds */ SkIRect getDeviceClipBounds() const; @@ -1032,6 +1122,8 @@ class SK_API SkCanvas { @param color unpremultiplied ARGB @param mode SkBlendMode used to combine source color and destination + + example: https://fiddle.skia.org/c/@Canvas_drawColor */ void drawColor(SkColor color, SkBlendMode mode = SkBlendMode::kSrcOver); @@ -1063,6 +1155,8 @@ class SK_API SkCanvas { SkPathEffect in paint is ignored. @param paint graphics state used to fill SkCanvas + + example: https://fiddle.skia.org/c/@Canvas_drawPaint */ void drawPaint(const SkPaint& paint); @@ -1104,6 +1198,8 @@ class SK_API SkCanvas { @param count number of points in the array @param pts array of points to draw @param paint stroke, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawPoints */ void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint); @@ -1118,6 +1214,8 @@ class SK_API SkCanvas { @param x left edge of circle or square @param y top edge of circle or square @param paint stroke, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawPoint */ void drawPoint(SkScalar x, SkScalar y, const SkPaint& paint); @@ -1146,6 +1244,8 @@ class SK_API SkCanvas { @param x1 end of line segment on x-axis @param y1 end of line segment on y-axis @param paint stroke, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawLine */ void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const SkPaint& paint); @@ -1169,6 +1269,8 @@ class SK_API SkCanvas { @param rect rectangle to draw @param paint stroke or fill, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawRect */ void drawRect(const SkRect& rect, const SkPaint& paint); @@ -1193,6 +1295,8 @@ class SK_API SkCanvas { @param region region to draw @param paint SkPaint stroke or fill, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawRegion */ void drawRegion(const SkRegion& region, const SkPaint& paint); @@ -1202,6 +1306,8 @@ class SK_API SkCanvas { @param oval SkRect bounds of oval @param paint SkPaint stroke or fill, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawOval */ void drawOval(const SkRect& oval, const SkPaint& paint); @@ -1214,6 +1320,8 @@ class SK_API SkCanvas { @param rrect SkRRect with up to eight corner radii to draw @param paint SkPaint stroke or fill, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawRRect */ void drawRRect(const SkRRect& rrect, const SkPaint& paint); @@ -1232,6 +1340,9 @@ class SK_API SkCanvas { @param outer SkRRect outer bounds to draw @param inner SkRRect inner bounds to draw @param paint SkPaint stroke or fill, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawDRRect_a + example: https://fiddle.skia.org/c/@Canvas_drawDRRect_b */ void drawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint); @@ -1244,6 +1355,8 @@ class SK_API SkCanvas { @param cy circle center on the y-axis @param radius half the diameter of circle @param paint SkPaint stroke or fill, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawCircle */ void drawCircle(SkScalar cx, SkScalar cy, SkScalar radius, const SkPaint& paint); @@ -1297,6 +1410,8 @@ class SK_API SkCanvas { @param rx axis length on x-axis of oval describing rounded corners @param ry axis length on y-axis of oval describing rounded corners @param paint stroke, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawRoundRect */ void drawRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, const SkPaint& paint); @@ -1311,6 +1426,8 @@ class SK_API SkCanvas { @param path SkPath to draw @param paint stroke, blend, color, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawPath */ void drawPath(const SkPath& path, const SkPaint& paint); @@ -1442,6 +1559,8 @@ class SK_API SkCanvas { @param dst destination SkRect of image to draw to @param paint SkPaint containing SkBlendMode, SkColorFilter, SkImageFilter, and so on; or nullptr + + example: https://fiddle.skia.org/c/@Canvas_drawImageRect_3 */ void drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint); @@ -2015,6 +2134,8 @@ class SK_API SkCanvas { @param x horizontal offset applied to blob @param y vertical offset applied to blob @param paint blend, color, stroking, and so on, used to draw + + example: https://fiddle.skia.org/c/@Canvas_drawTextBlob */ void drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint); @@ -2074,6 +2195,8 @@ class SK_API SkCanvas { @param picture recorded drawing commands to play @param matrix SkMatrix to rotate, scale, translate, and so on; may be nullptr @param paint SkPaint to apply transparency, filtering, and so on; may be nullptr + + example: https://fiddle.skia.org/c/@Canvas_drawPicture_3 */ void drawPicture(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint); @@ -2100,6 +2223,8 @@ class SK_API SkCanvas { @param vertices triangle mesh to draw @param mode combines vertices colors with SkShader, if both are present @param paint specifies the SkShader, used as SkVertices texture; may be nullptr + + example: https://fiddle.skia.org/c/@Canvas_drawVertices */ void drawVertices(const SkVertices* vertices, SkBlendMode mode, const SkPaint& paint); @@ -2110,6 +2235,8 @@ class SK_API SkCanvas { @param vertices triangle mesh to draw @param mode combines vertices colors with SkShader, if both are present @param paint specifies the SkShader, used as SkVertices texture, may be nullptr + + example: https://fiddle.skia.org/c/@Canvas_drawVertices_2 */ void drawVertices(const sk_sp& vertices, SkBlendMode mode, const SkPaint& paint); @@ -2310,6 +2437,8 @@ class SK_API SkCanvas { @param drawable custom struct encapsulating drawing commands @param matrix transformation applied to drawing; may be nullptr + + example: https://fiddle.skia.org/c/@Canvas_drawDrawable */ void drawDrawable(SkDrawable* drawable, const SkMatrix* matrix = nullptr); @@ -2323,6 +2452,8 @@ class SK_API SkCanvas { @param drawable custom struct encapsulating drawing commands @param x offset into SkCanvas writable pixels on x-axis @param y offset into SkCanvas writable pixels on y-axis + + example: https://fiddle.skia.org/c/@Canvas_drawDrawable_2 */ void drawDrawable(SkDrawable* drawable, SkScalar x, SkScalar y); @@ -2335,6 +2466,8 @@ class SK_API SkCanvas { @param rect SkRect extent of canvas to annotate @param key string used for lookup @param value data holding value stored in annotation + + example: https://fiddle.skia.org/c/@Canvas_drawAnnotation_2 */ void drawAnnotation(const SkRect& rect, const char key[], SkData* value); @@ -2359,6 +2492,8 @@ class SK_API SkCanvas { work until clip changes. @return true if clip is empty + + example: https://fiddle.skia.org/c/@Canvas_isClipEmpty */ virtual bool isClipEmpty() const; @@ -2366,6 +2501,8 @@ class SK_API SkCanvas { Returns false if the clip is empty, or if it is not SkRect. @return true if clip is SkRect and not empty + + example: https://fiddle.skia.org/c/@Canvas_isClipRect */ virtual bool isClipRect() const; @@ -2373,6 +2510,9 @@ class SK_API SkCanvas { This does not account for translation by SkBaseDevice or SkSurface. @return SkMatrix in SkCanvas + + example: https://fiddle.skia.org/c/@Canvas_getTotalMatrix + example: https://fiddle.skia.org/c/@Clip */ const SkMatrix& getTotalMatrix() const; diff --git a/third_party/skia/include/core/SkColor.h b/third_party/skia/include/core/SkColor.h index bee77d8b6045..53df435e46a2 100644 --- a/third_party/skia/include/core/SkColor.h +++ b/third_party/skia/include/core/SkColor.h @@ -336,12 +336,16 @@ struct SkRGBA4f { @param color Color with Alpha, red, blue, and green components @return SkColor as SkRGBA4f + + example: https://fiddle.skia.org/c/@RGBA4f_FromColor */ static SkRGBA4f FromColor(SkColor color); // impl. depends on kAT /** Returns closest SkColor to SkRGBA4f. Only allowed if SkRGBA4f is unpremultiplied. @return color as SkColor + + example: https://fiddle.skia.org/c/@RGBA4f_toSkColor */ SkColor toSkColor() const; // impl. depends on kAT diff --git a/third_party/skia/include/core/SkColorFilter.h b/third_party/skia/include/core/SkColorFilter.h index 7f1e979b5db6..e539714b34c3 100644 --- a/third_party/skia/include/core/SkColorFilter.h +++ b/third_party/skia/include/core/SkColorFilter.h @@ -20,7 +20,12 @@ class SkBitmap; class SkColorMatrix; class SkColorSpace; struct SkStageRec; -class SkString; + +namespace skvm { + class Builder; + struct F32; + struct Uniforms; +} /** * ColorFilters are optional objects in the drawing pipeline. When present in @@ -56,6 +61,11 @@ class SK_API SkColorFilter : public SkFlattenable { bool appendStages(const SkStageRec& rec, bool shaderIsOpaque) const; + virtual bool program(skvm::Builder*, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const; + enum Flags { /** If set the filter methods will not change the alpha channel of the colors. */ diff --git a/third_party/skia/include/core/SkColorSpace.h b/third_party/skia/include/core/SkColorSpace.h index 9e52e85cc6bd..66e99f681ca0 100644 --- a/third_party/skia/include/core/SkColorSpace.h +++ b/third_party/skia/include/core/SkColorSpace.h @@ -141,10 +141,9 @@ class SK_API SkColorSpace : public SkNVRefCnt { bool gammaIsLinear() const; /** - * If the transfer function can be represented as coefficients to the standard - * equation, returns true and sets |fn| to the proper values. - * - * If not, returns false. + * Sets |fn| to the transfer function from this color space. Returns true if the transfer + * function can be represented as coefficients to the standard ICC 7-parameter equation. + * Returns false otherwise (eg, PQ, HLG). */ bool isNumericalTransferFn(skcms_TransferFunction* fn) const; @@ -152,8 +151,6 @@ class SK_API SkColorSpace : public SkNVRefCnt { * Returns true and sets |toXYZD50| if the color gamut can be described as a matrix. * Returns false otherwise. */ - bool toXYZD50(SkMatrix44* toXYZD50) const; - bool toXYZD50(skcms_Matrix3x3* toXYZD50) const; /** @@ -220,9 +217,10 @@ class SK_API SkColorSpace : public SkNVRefCnt { */ static bool Equals(const SkColorSpace*, const SkColorSpace*); - void transferFn(float gabcdef[7]) const; - void invTransferFn(float gabcdef[7]) const; - void gamutTransformTo(const SkColorSpace* dst, float src_to_dst_row_major[9]) const; + void transferFn(float gabcdef[7]) const; // DEPRECATED: Remove when webview usage is gone + void transferFn(skcms_TransferFunction* fn) const; + void invTransferFn(skcms_TransferFunction* fn) const; + void gamutTransformTo(const SkColorSpace* dst, skcms_Matrix3x3* src_to_dst) const; uint32_t transferFnHash() const { return fTransferFnHash; } uint64_t hash() const { return (uint64_t)fTransferFnHash << 32 | fToXYZD50Hash; } @@ -230,19 +228,18 @@ class SK_API SkColorSpace : public SkNVRefCnt { private: friend class SkColorSpaceSingletonFactory; - SkColorSpace(const float transferFn[7], - const skcms_Matrix3x3& toXYZ); + SkColorSpace(const skcms_TransferFunction& transferFn, const skcms_Matrix3x3& toXYZ); void computeLazyDstFields() const; uint32_t fTransferFnHash; uint32_t fToXYZD50Hash; - float fTransferFn[7]; - float fToXYZD50_3x3[9]; // row-major + skcms_TransferFunction fTransferFn; + skcms_Matrix3x3 fToXYZD50; - mutable float fInvTransferFn[7]; - mutable float fFromXYZD50_3x3[9]; // row-major + mutable skcms_TransferFunction fInvTransferFn; + mutable skcms_Matrix3x3 fFromXYZD50; mutable SkOnce fLazyDstFieldsOnce; }; diff --git a/third_party/skia/include/core/SkDataTable.h b/third_party/skia/include/core/SkDataTable.h index 74e7d0ef29c5..8a4834ff9527 100644 --- a/third_party/skia/include/core/SkDataTable.h +++ b/third_party/skia/include/core/SkDataTable.h @@ -9,7 +9,6 @@ #define SkDataTable_DEFINED #include "include/core/SkData.h" -#include "include/core/SkString.h" #include "include/private/SkTDArray.h" /** diff --git a/third_party/skia/include/core/SkDrawLooper.h b/third_party/skia/include/core/SkDrawLooper.h index ef06c8f7b80f..6542e67881bc 100644 --- a/third_party/skia/include/core/SkDrawLooper.h +++ b/third_party/skia/include/core/SkDrawLooper.h @@ -20,7 +20,6 @@ class SkArenaAlloc; class SkCanvas; class SkPaint; struct SkRect; -class SkString; /** \class SkDrawLooper Subclasses of SkDrawLooper can be attached to a SkPaint. Where they are, diff --git a/third_party/skia/include/core/SkImage.h b/third_party/skia/include/core/SkImage.h index c4fa7a544465..108a5d059efe 100644 --- a/third_party/skia/include/core/SkImage.h +++ b/third_party/skia/include/core/SkImage.h @@ -28,7 +28,6 @@ class SkImageFilter; class SkImageGenerator; class SkPaint; class SkPicture; -class SkString; class SkSurface; class GrBackendTexture; class GrContext; @@ -72,6 +71,8 @@ class SK_API SkImage : public SkRefCnt { @param pixmap SkImageInfo, pixel address, and row bytes @return copy of SkPixmap pixels, or nullptr + + example: https://fiddle.skia.org/c/@Image_MakeRasterCopy */ static sk_sp MakeRasterCopy(const SkPixmap& pixmap); @@ -134,6 +135,8 @@ class SK_API SkImage : public SkRefCnt { @param bitmap SkImageInfo, row bytes, and pixels @return created SkImage, or nullptr + + example: https://fiddle.skia.org/c/@Image_MakeFromBitmap */ static sk_sp MakeFromBitmap(const SkBitmap& bitmap); @@ -175,6 +178,8 @@ class SK_API SkImage : public SkRefCnt { * @param length the number of bytes of encoded data * @param subset the bounds of the pixels within the decoded image to return. may be null. * @return created SkImage, or nullptr + + example: https://fiddle.skia.org/c/@Image_MakeFromEncoded */ static sk_sp MakeFromEncoded(sk_sp encoded, const SkIRect* subset = nullptr); @@ -378,9 +383,7 @@ class SK_API SkImage : public SkRefCnt { image. @param context GPU context - @param yuvColorSpace How the YUV values are converted to RGB. One of: - kJPEG_SkYUVColorSpace, kRec601_SkYUVColorSpace, - kRec709_SkYUVColorSpace, kIdentity_SkYUVColorSpace + @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 @@ -403,9 +406,7 @@ class SK_API SkImage : public SkRefCnt { image. 'backendTexture' is used to store the result of the flattening. @param context GPU context - @param yuvColorSpace How the YUV values are converted to RGB. One of: - kJPEG_SkYUVColorSpace, kRec601_SkYUVColorSpace, - kRec709_SkYUVColorSpace, kIdentity_SkYUVColorSpace + @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 @@ -436,9 +437,7 @@ class SK_API SkImage : public SkRefCnt { via multitexturing. @param context GPU context - @param yuvColorSpace How the YUV values are converted to RGB. One of: - kJPEG_SkYUVColorSpace, kRec601_SkYUVColorSpace, - kRec709_SkYUVColorSpace, kIdentity_SkYUVColorSpace + @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 @@ -468,9 +467,7 @@ class SK_API SkImage : public SkRefCnt { Recognized GPU formats vary by platform and GPU back-end. @param context GPU context - @param yuvColorSpace How the YUV values are converted to RGB. One of: - kJPEG_SkYUVColorSpace, kRec601_SkYUVColorSpace, - kRec709_SkYUVColorSpace, kIdentity_SkYUVColorSpace + @param yuvColorSpace How the YUV values are converted to RGB @param yuvaPixmaps array of (up to four) SkPixmap which contain the, possibly interleaved, YUVA planes @param yuvaIndices array indicating which pixmap in yuvaPixmaps, and channel @@ -514,8 +511,7 @@ class SK_API SkImage : public SkRefCnt { yuvColorSpace describes how YUV colors convert to RGB colors. @param context GPU context - @param yuvColorSpace one of: kJPEG_SkYUVColorSpace, kRec601_SkYUVColorSpace, - kRec709_SkYUVColorSpace, kIdentity_SkYUVColorSpace + @param yuvColorSpace How the YUV values are converted to RGB @param nv12Textures array of YUV textures on GPU @param imageOrigin one of: kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin @param imageColorSpace range of colors; may be nullptr @@ -535,8 +531,7 @@ class SK_API SkImage : public SkRefCnt { yuvColorSpace describes how YUV colors convert to RGB colors. @param context GPU context - @param yuvColorSpace one of: kJPEG_SkYUVColorSpace, kRec601_SkYUVColorSpace, - kRec709_SkYUVColorSpace, kIdentity_SkYUVColorSpace + @param yuvColorSpace How the YUV values are converted to RGB @param nv12Textures array of YUV textures on GPU @param imageOrigin one of: kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin @param backendTexture the resource that stores the final pixels @@ -664,12 +659,16 @@ class SK_API SkImage : public SkRefCnt { or was parsed from encoded data. @return SkAlphaType in SkImage + + example: https://fiddle.skia.org/c/@Image_alphaType */ SkAlphaType alphaType() const; /** Returns SkColorType if known; otherwise, returns kUnknown_SkColorType. @return SkColorType of SkImage + + example: https://fiddle.skia.org/c/@Image_colorType */ SkColorType colorType() const; @@ -682,6 +681,8 @@ class SK_API SkImage : public SkRefCnt { is drawn, depending on the capabilities of the SkSurface receiving the drawing. @return SkColorSpace in SkImage, or nullptr + + example: https://fiddle.skia.org/c/@Image_colorSpace */ SkColorSpace* colorSpace() const; @@ -696,6 +697,8 @@ class SK_API SkImage : public SkRefCnt { is drawn, depending on the capabilities of the SkSurface receiving the drawing. @return SkColorSpace in SkImage, or nullptr, wrapped in a smart pointer + + example: https://fiddle.skia.org/c/@Image_refColorSpace */ sk_sp refColorSpace() const; @@ -703,6 +706,8 @@ class SK_API SkImage : public SkRefCnt { is packed in 8 bits as defined by kAlpha_8_SkColorType. @return true if pixels represent a transparency mask + + example: https://fiddle.skia.org/c/@Image_isAlphaOnly */ bool isAlphaOnly() const; @@ -723,6 +728,9 @@ class SK_API SkImage : public SkRefCnt { */ sk_sp makeShader(SkTileMode tmx, SkTileMode tmy, const SkMatrix* localMatrix = nullptr) const; + sk_sp makeShader(SkTileMode tmx, SkTileMode tmy, const SkMatrix& localMatrix) const { + return this->makeShader(tmx, tmy, &localMatrix); + } /** Creates SkShader from SkImage. SkShader dimensions are taken from SkImage. SkShader uses SkShader::kClamp_TileMode to fill drawn area outside SkImage. localMatrix permits @@ -734,6 +742,10 @@ class SK_API SkImage : public SkRefCnt { sk_sp makeShader(const SkMatrix* localMatrix = nullptr) const { return this->makeShader(SkTileMode::kClamp, SkTileMode::kClamp, localMatrix); } + sk_sp makeShader(const SkMatrix& localMatrix) const { + return this->makeShader(SkTileMode::kClamp, SkTileMode::kClamp, &localMatrix); + } + /** Copies SkImage pixel address, row bytes, and SkImageInfo to pixmap, if address is available, and returns true. If pixel address is not available, return @@ -741,6 +753,8 @@ class SK_API SkImage : public SkRefCnt { @param pixmap storage for pixel state if pixels are readable; otherwise, ignored @return true if SkImage has direct access to pixels + + example: https://fiddle.skia.org/c/@Image_peekPixels */ bool peekPixels(SkPixmap* pixmap) const; @@ -752,6 +766,8 @@ class SK_API SkImage : public SkRefCnt { and is available as a GPU texture. @return true if SkImage is a GPU texture + + example: https://fiddle.skia.org/c/@Image_isTextureBacked */ bool isTextureBacked() const; @@ -765,6 +781,8 @@ class SK_API SkImage : public SkRefCnt { @param context GPU context @return true if SkImage can be drawn + + example: https://fiddle.skia.org/c/@Image_isValid */ bool isValid(GrContext* context) const; @@ -937,6 +955,8 @@ class SK_API SkImage : public SkRefCnt { SkEncodedImageFormat::kWEBP @param quality encoder specific metric with 100 equaling best @return encoded SkImage, or nullptr + + example: https://fiddle.skia.org/c/@Image_encodeToData */ sk_sp encodeToData(SkEncodedImageFormat encodedImageFormat, int quality) const; @@ -948,6 +968,8 @@ class SK_API SkImage : public SkRefCnt { encoding fails. @return encoded SkImage, or nullptr + + example: https://fiddle.skia.org/c/@Image_encodeToData_2 */ sk_sp encodeToData() const; @@ -958,6 +980,8 @@ class SK_API SkImage : public SkRefCnt { Returns nullptr if SkImage contents are not encoded. @return encoded SkImage, or nullptr + + example: https://fiddle.skia.org/c/@Image_refEncodedData */ sk_sp refEncodedData() const; @@ -969,6 +993,8 @@ class SK_API SkImage : public SkRefCnt { @param subset bounds of returned SkImage @return partial or full SkImage, or nullptr + + example: https://fiddle.skia.org/c/@Image_makeSubset */ sk_sp makeSubset(const SkIRect& subset) const; @@ -995,6 +1021,8 @@ class SK_API SkImage : public SkRefCnt { Returns nullptr if backed by GPU texture and copy fails. @return raster image, lazy image, or nullptr + + example: https://fiddle.skia.org/c/@Image_makeNonTextureImage */ sk_sp makeNonTextureImage() const; @@ -1005,6 +1033,8 @@ class SK_API SkImage : public SkRefCnt { Returns nullptr if copy, decode, or pixel read fails. @return raster image, or nullptr + + example: https://fiddle.skia.org/c/@Image_makeRasterImage */ sk_sp makeRasterImage() const; @@ -1096,6 +1126,9 @@ class SK_API SkImage : public SkRefCnt { and caches its pixels or texture on-demand. @return true if SkImage is created as needed + + example: https://fiddle.skia.org/c/@Image_isLazyGenerated_a + example: https://fiddle.skia.org/c/@Image_isLazyGenerated_b */ bool isLazyGenerated() const; @@ -1108,6 +1141,8 @@ class SK_API SkImage : public SkRefCnt { @param target SkColorSpace describing color range of returned SkImage @return created SkImage in target SkColorSpace + + example: https://fiddle.skia.org/c/@Image_makeColorSpace */ sk_sp makeColorSpace(sk_sp target) const; diff --git a/third_party/skia/include/core/SkImageInfo.h b/third_party/skia/include/core/SkImageInfo.h index 1abfb7edc63e..209db01d7b2e 100644 --- a/third_party/skia/include/core/SkImageInfo.h +++ b/third_party/skia/include/core/SkImageInfo.h @@ -185,10 +185,11 @@ SK_API bool SkColorTypeValidateAlphaType(SkColorType colorType, SkAlphaType alph It can be used to visualize the YUV planes or to explicitly post process the YUV channels. */ enum SkYUVColorSpace { - kJPEG_SkYUVColorSpace, //!< describes full range - kRec601_SkYUVColorSpace, //!< describes SDTV range - kRec709_SkYUVColorSpace, //!< describes HDTV range - kIdentity_SkYUVColorSpace, //!< maps Y->R, U->G, V->B + kJPEG_SkYUVColorSpace, //!< describes full range + kRec601_SkYUVColorSpace, //!< describes SDTV range + kRec709_SkYUVColorSpace, //!< describes HDTV range + kBT2020_SkYUVColorSpace, //!< describes UHDTV range, non-constant-luminance + kIdentity_SkYUVColorSpace, //!< maps Y->R, U->G, V->B kLastEnum_SkYUVColorSpace = kIdentity_SkYUVColorSpace, //!< last valid value }; @@ -273,6 +274,8 @@ class SK_API SkColorInfo { Returns zero if colorType() is kUnknown_SkColorType. @return bytes in pixel + + example: https://fiddle.skia.org/c/@ImageInfo_bytesPerPixel */ int bytesPerPixel() const; @@ -280,6 +283,8 @@ class SK_API SkColorInfo { Returns zero for kUnknown_SkColorType. @return one of: 0, 1, 2, 3, 4; left shift to convert pixels to bytes + + example: https://fiddle.skia.org/c/@ImageInfo_shiftPerPixel */ int shiftPerPixel() const; @@ -392,6 +397,8 @@ struct SK_API SkImageInfo { kUnknown_SkAlphaType, kOpaque_SkAlphaType, kPremul_SkAlphaType, kUnpremul_SkAlphaType @return created SkImageInfo + + example: https://fiddle.skia.org/c/@ImageInfo_MakeS32 */ static SkImageInfo MakeS32(int width, int height, SkAlphaType at); @@ -422,11 +429,12 @@ struct SK_API SkImageInfo { Parameters are not validated to see if their values are legal, or that the combination is supported. - @param size width and height, each must be zero or greater - @return created SkImageInfo + @param dimensions width and height, each must be zero or greater + @param cs range of colors; may be nullptr + @return created SkImageInfo */ - static SkImageInfo MakeN32Premul(const SkISize& size) { - return MakeN32Premul(size.width(), size.height()); + static SkImageInfo MakeN32Premul(SkISize dimensions, sk_sp cs = nullptr) { + return Make(dimensions, kN32_SkColorType, kPremul_SkAlphaType, std::move(cs)); } /** Creates SkImageInfo from integral dimensions width and height, kAlpha_8_SkColorType, @@ -439,6 +447,15 @@ struct SK_API SkImageInfo { static SkImageInfo MakeA8(int width, int height) { return Make({width, height}, kAlpha_8_SkColorType, kPremul_SkAlphaType, nullptr); } + /** Creates SkImageInfo from integral dimensions, kAlpha_8_SkColorType, + kPremul_SkAlphaType, with SkColorSpace set to nullptr. + + @param dimensions pixel row and column count; must be zero or greater + @return created SkImageInfo + */ + static SkImageInfo MakeA8(SkISize dimensions) { + return Make(dimensions, kAlpha_8_SkColorType, kPremul_SkAlphaType, nullptr); + } /** Creates SkImageInfo from integral dimensions width and height, kUnknown_SkColorType, kUnknown_SkAlphaType, with SkColorSpace set to nullptr. @@ -661,6 +678,8 @@ struct SK_API SkImageInfo { @param y row index, zero or greater, and less than height() @param rowBytes size of pixel row or larger @return offset within pixel array + + example: https://fiddle.skia.org/c/@ImageInfo_computeOffset */ size_t computeOffset(int x, int y, size_t rowBytes) const; @@ -692,6 +711,8 @@ struct SK_API SkImageInfo { @param rowBytes size of pixel row or larger @return memory required by pixel buffer + + example: https://fiddle.skia.org/c/@ImageInfo_computeByteSize */ size_t computeByteSize(size_t rowBytes) const; diff --git a/third_party/skia/include/core/SkMaskFilter.h b/third_party/skia/include/core/SkMaskFilter.h index ffb30e4cbe20..ea7cf7cfd0e3 100644 --- a/third_party/skia/include/core/SkMaskFilter.h +++ b/third_party/skia/include/core/SkMaskFilter.h @@ -15,7 +15,6 @@ class SkMatrix; struct SkRect; -class SkString; /** \class SkMaskFilter diff --git a/third_party/skia/include/core/SkMatrix.h b/third_party/skia/include/core/SkMatrix.h index 896263b5953b..f034aac78af7 100644 --- a/third_party/skia/include/core/SkMatrix.h +++ b/third_party/skia/include/core/SkMatrix.h @@ -14,7 +14,6 @@ struct SkRSXform; struct SkPoint3; -class SkString; /** \class SkMatrix SkMatrix holds a 3x3 matrix for transforming coordinates. This allows mapping @@ -28,6 +27,8 @@ class SkString; SkMatrix includes a hidden variable that classifies the type of matrix to improve performance. SkMatrix is not thread safe unless getType() is called first. + + example: https://fiddle.skia.org/c/@Matrix_063 */ SK_BEGIN_REQUIRE_DENSE class SK_API SkMatrix { @@ -88,6 +89,17 @@ class SK_API SkMatrix { return m; } + /** Sets SkMatrix to translate by (t.x(), t.y()). Returned matrix is: + + | 1 0 t.x() | + | 0 1 t.y() | + | 0 0 1 | + + @param t translation vector + @return SkMatrix with translation + */ + static SkMatrix SK_WARN_UNUSED_RESULT MakeTrans(SkVector t) { return MakeTrans(t.x(), t.y()); } + /** Sets SkMatrix to: | scaleX skewX transX | @@ -256,6 +268,8 @@ class SK_API SkMatrix { @param tol to be deprecated @return true if SkMatrix only rotates, uniformly scales, translates + + example: https://fiddle.skia.org/c/@Matrix_isSimilarity */ bool isSimilarity(SkScalar tol = SK_ScalarNearlyZero) const; @@ -269,6 +283,8 @@ class SK_API SkMatrix { @param tol to be deprecated @return true if SkMatrix only rotates, scales, translates + + example: https://fiddle.skia.org/c/@Matrix_preservesRightAngles */ bool preservesRightAngles(SkScalar tol = SK_ScalarNearlyZero) const; @@ -617,6 +633,8 @@ class SK_API SkMatrix { @param rsxForm compressed SkRSXform matrix @return reference to SkMatrix + + example: https://fiddle.skia.org/c/@Matrix_setRSXform */ SkMatrix& setRSXform(const SkRSXform& rsxForm); @@ -1101,6 +1119,8 @@ class SK_API SkMatrix { @param stf one of: kFill_ScaleToFit, kStart_ScaleToFit, kCenter_ScaleToFit, kEnd_ScaleToFit @return true if SkMatrix can represent SkRect mapping + + example: https://fiddle.skia.org/c/@Matrix_setRectToRect */ bool setRectToRect(const SkRect& src, const SkRect& dst, ScaleToFit stf); @@ -1137,6 +1157,8 @@ class SK_API SkMatrix { @param dst SkPoint to map to @param count number of SkPoint in src and dst @return true if SkMatrix was constructed successfully + + example: https://fiddle.skia.org/c/@Matrix_setPolyToPoly */ bool setPolyToPoly(const SkPoint src[], const SkPoint dst[], int count); @@ -1168,6 +1190,8 @@ class SK_API SkMatrix { Affine 3 by 2 matrices in column major order are used by OpenGL and XPS. @param affine storage for 3 by 2 affine matrix + + example: https://fiddle.skia.org/c/@Matrix_SetAffineIdentity */ static void SetAffineIdentity(SkScalar affine[6]); @@ -1224,6 +1248,8 @@ class SK_API SkMatrix { @param dst storage for mapped SkPoint @param src SkPoint to transform @param count number of SkPoint to transform + + example: https://fiddle.skia.org/c/@Matrix_mapPoints */ void mapPoints(SkPoint dst[], const SkPoint src[], int count) const; @@ -1270,6 +1296,8 @@ class SK_API SkMatrix { @param dst storage for mapped SkPoint3 array @param src SkPoint3 array to transform @param count items in SkPoint3 array to transform + + example: https://fiddle.skia.org/c/@Matrix_mapHomogeneousPoints */ void mapHomogeneousPoints(SkPoint3 dst[], const SkPoint3 src[], int count) const; @@ -1288,6 +1316,8 @@ class SK_API SkMatrix { @param x x-axis value of SkPoint to map @param y y-axis value of SkPoint to map @param result storage for mapped SkPoint + + example: https://fiddle.skia.org/c/@Matrix_mapXY */ void mapXY(SkScalar x, SkScalar y, SkPoint* result) const; @@ -1339,6 +1369,8 @@ class SK_API SkMatrix { @param dst storage for mapped vectors @param src vectors to transform @param count number of vectors to transform + + example: https://fiddle.skia.org/c/@Matrix_mapVectors */ void mapVectors(SkVector dst[], const SkVector src[], int count) const; @@ -1422,6 +1454,8 @@ class SK_API SkMatrix { @param dst storage for bounds of mapped SkPoint @param src SkRect to map @return true if dst is equivalent to mapped src + + example: https://fiddle.skia.org/c/@Matrix_mapRect */ bool mapRect(SkRect* dst, const SkRect& src) const; @@ -1485,6 +1519,8 @@ class SK_API SkMatrix { @param dst storage for bounds of mapped SkPoint @param src SkRect to map + + example: https://fiddle.skia.org/c/@Matrix_mapRectScaleTranslate */ void mapRectScaleTranslate(SkRect* dst, const SkRect& src) const; @@ -1495,6 +1531,8 @@ class SK_API SkMatrix { @param radius circle size to map @return average mapped radius + + example: https://fiddle.skia.org/c/@Matrix_mapRadius */ SkScalar mapRadius(SkScalar radius) const; @@ -1506,6 +1544,8 @@ class SK_API SkMatrix { does not include rotation or skewing along the y-axis. @return true if SkMatrix does not have complex perspective + + example: https://fiddle.skia.org/c/@Matrix_isFixedStepInX */ bool isFixedStepInX() const; @@ -1514,6 +1554,8 @@ class SK_API SkMatrix { @param y position of line parallel to x-axis @return vector advance of mapped unit step on x-axis + + example: https://fiddle.skia.org/c/@Matrix_fixedStepInX */ SkVector fixedStepInX(SkScalar y) const; @@ -1559,6 +1601,8 @@ class SK_API SkMatrix { /** Writes text representation of SkMatrix to standard output. Floating point values are written with limited precision; it may not be possible to reconstruct original SkMatrix from output. + + example: https://fiddle.skia.org/c/@Matrix_dump */ void dump() const; @@ -1567,6 +1611,8 @@ class SK_API SkMatrix { Returns -1 if scale factor overflows or SkMatrix contains perspective. @return minimum scale factor + + example: https://fiddle.skia.org/c/@Matrix_getMinScale */ SkScalar getMinScale() const; @@ -1575,6 +1621,8 @@ class SK_API SkMatrix { Returns -1 if scale factor overflows or SkMatrix contains perspective. @return maximum scale factor + + example: https://fiddle.skia.org/c/@Matrix_getMaxScale */ SkScalar getMaxScale() const; @@ -1606,6 +1654,8 @@ class SK_API SkMatrix { @param scale axes scaling factors; may be nullptr @param remaining SkMatrix without scaling; may be nullptr @return true if scale can be computed + + example: https://fiddle.skia.org/c/@Matrix_decomposeScale */ bool decomposeScale(SkSize* scale, SkMatrix* remaining = nullptr) const; @@ -1616,6 +1666,8 @@ class SK_API SkMatrix { | 0 0 1 | @return const identity SkMatrix + + example: https://fiddle.skia.org/c/@Matrix_I */ static const SkMatrix& I(); @@ -1627,6 +1679,8 @@ class SK_API SkMatrix { | SK_ScalarMax SK_ScalarMax SK_ScalarMax | @return const invalid SkMatrix + + example: https://fiddle.skia.org/c/@Matrix_InvalidMatrix */ static const SkMatrix& InvalidMatrix(); diff --git a/third_party/skia/include/core/SkMatrix44.h b/third_party/skia/include/core/SkMatrix44.h index 4e17b5f1bacb..0d595d28ebb5 100644 --- a/third_party/skia/include/core/SkMatrix44.h +++ b/third_party/skia/include/core/SkMatrix44.h @@ -336,22 +336,22 @@ class SK_API SkMatrix44 { SkMScalar m_02, SkMScalar m_12, SkMScalar m_22, SkMScalar m_32, SkMScalar m_03, SkMScalar m_13, SkMScalar m_23, SkMScalar m_33); - void setTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz); - void preTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz); - void postTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz); + SkMatrix44& setTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz); + SkMatrix44& preTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz); + SkMatrix44& postTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz); - void setScale(SkMScalar sx, SkMScalar sy, SkMScalar sz); - void preScale(SkMScalar sx, SkMScalar sy, SkMScalar sz); - void postScale(SkMScalar sx, SkMScalar sy, SkMScalar sz); + SkMatrix44& setScale(SkMScalar sx, SkMScalar sy, SkMScalar sz); + SkMatrix44& preScale(SkMScalar sx, SkMScalar sy, SkMScalar sz); + SkMatrix44& postScale(SkMScalar sx, SkMScalar sy, SkMScalar sz); - inline void setScale(SkMScalar scale) { - this->setScale(scale, scale, scale); + inline SkMatrix44& setScale(SkMScalar scale) { + return this->setScale(scale, scale, scale); } - inline void preScale(SkMScalar scale) { - this->preScale(scale, scale, scale); + inline SkMatrix44& preScale(SkMScalar scale) { + return this->preScale(scale, scale, scale); } - inline void postScale(SkMScalar scale) { - this->postScale(scale, scale, scale); + inline SkMatrix44& postScale(SkMScalar scale) { + return this->postScale(scale, scale, scale); } void setRotateDegreesAbout(SkMScalar x, SkMScalar y, SkMScalar z, diff --git a/third_party/skia/include/core/SkMilestone.h b/third_party/skia/include/core/SkMilestone.h index 6ac2a14b075c..44e9ef43944c 100644 --- a/third_party/skia/include/core/SkMilestone.h +++ b/third_party/skia/include/core/SkMilestone.h @@ -5,5 +5,5 @@ * found in the LICENSE file. */ #ifndef SK_MILESTONE -#define SK_MILESTONE 79 +#define SK_MILESTONE 80 #endif diff --git a/third_party/skia/include/core/SkMultiPictureDraw.h b/third_party/skia/include/core/SkMultiPictureDraw.h deleted file mode 100644 index 70c4e16c1f1f..000000000000 --- a/third_party/skia/include/core/SkMultiPictureDraw.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2014 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkMultiPictureDraw_DEFINED -#define SkMultiPictureDraw_DEFINED - -#include "include/core/SkMatrix.h" -#include "include/private/SkTDArray.h" - -class SkCanvas; -class SkPaint; -class SkPicture; - -/** \class SkMultiPictureDraw - - The MultiPictureDraw object accepts several picture/canvas pairs and - then attempts to optimally draw the pictures into the canvases, sharing - as many resources as possible. -*/ -class SK_API SkMultiPictureDraw { -public: - /** - * Create an object to optimize the drawing of multiple pictures. - * @param reserve Hint for the number of add calls expected to be issued - */ - SkMultiPictureDraw(int reserve = 0); - ~SkMultiPictureDraw() { this->reset(); } - - /** - * Add a canvas/picture pair for later rendering. - * @param canvas the canvas in which to draw picture - * @param picture the picture to draw into canvas - * @param matrix if non-NULL, applied to the CTM when drawing - * @param paint if non-NULL, draw picture to a temporary buffer - * and then apply the paint when the result is drawn - */ - void add(SkCanvas* canvas, - const SkPicture* picture, - const SkMatrix* matrix = nullptr, - const SkPaint* paint = nullptr); - - /** - * Perform all the previously added draws. This will reset the state - * of this object. If flush is true, all canvases are flushed after - * draw. - */ - void draw(bool flush = false); - - /** - * Abandon all buffered draws and reset to the initial state. - */ - void reset(); - -private: - struct DrawData { - SkCanvas* fCanvas; - const SkPicture* fPicture; // reffed - SkMatrix fMatrix; - SkPaint* fPaint; // owned - - void init(SkCanvas*, const SkPicture*, const SkMatrix*, const SkPaint*); - void draw(); - - static void Reset(SkTDArray&); - }; - - SkTDArray fThreadSafeDrawData; - SkTDArray fGPUDrawData; -}; - -#endif diff --git a/third_party/skia/include/core/SkPaint.h b/third_party/skia/include/core/SkPaint.h index 36f8751ea33b..c2213e12afc1 100644 --- a/third_party/skia/include/core/SkPaint.h +++ b/third_party/skia/include/core/SkPaint.h @@ -39,6 +39,8 @@ class SK_API SkPaint { /** Constructs SkPaint with default values. @return default initialized SkPaint + + example: https://fiddle.skia.org/c/@Paint_empty_constructor */ SkPaint(); @@ -66,6 +68,8 @@ class SK_API SkPaint { @param paint original to copy @return shallow copy of paint + + example: https://fiddle.skia.org/c/@Paint_copy_const_SkPaint */ SkPaint(const SkPaint& paint); @@ -76,6 +80,8 @@ class SK_API SkPaint { @param paint original to move @return content of paint + + example: https://fiddle.skia.org/c/@Paint_move_SkPaint */ SkPaint(SkPaint&& paint); @@ -94,6 +100,8 @@ class SK_API SkPaint { @param paint original to copy @return content of paint + + example: https://fiddle.skia.org/c/@Paint_copy_operator */ SkPaint& operator=(const SkPaint& paint); @@ -106,6 +114,8 @@ class SK_API SkPaint { @param paint original to move @return content of paint + + example: https://fiddle.skia.org/c/@Paint_move_operator */ SkPaint& operator=(SkPaint&& paint); @@ -142,11 +152,15 @@ class SK_API SkPaint { The hash returned is platform and implementation specific. @return a shallow hash + + example: https://fiddle.skia.org/c/@Paint_getHash */ uint32_t getHash() const; /** Sets all SkPaint contents to their initial values. This is equivalent to replacing SkPaint with the result of SkPaint(). + + example: https://fiddle.skia.org/c/@Paint_reset */ void reset(); @@ -191,6 +205,9 @@ class SK_API SkPaint { @param quality one of: kNone_SkFilterQuality, kLow_SkFilterQuality, kMedium_SkFilterQuality, kHigh_SkFilterQuality + + example: https://fiddle.skia.org/c/@Color_Methods + example: https://fiddle.skia.org/c/@Paint_setFilterQuality */ void setFilterQuality(SkFilterQuality quality); @@ -222,6 +239,9 @@ class SK_API SkPaint { Has no effect if style is not a legal SkPaint::Style value. @param style one of: kFill_Style, kStroke_Style, kStrokeAndFill_Style + + example: https://fiddle.skia.org/c/@Paint_setStyle + example: https://fiddle.skia.org/c/@Stroke_Width */ void setStyle(Style style); @@ -244,6 +264,8 @@ class SK_API SkPaint { unpremultiplied, packing 8-bit components for alpha, red, blue, and green. @param color unpremultiplied ARGB + + example: https://fiddle.skia.org/c/@Paint_setColor */ void setColor(SkColor color); @@ -292,6 +314,8 @@ class SK_API SkPaint { @param r amount of red, from no red (0) to full red (255) @param g amount of green, from no green (0) to full green (255) @param b amount of blue, from no blue (0) to full blue (255) + + example: https://fiddle.skia.org/c/@Paint_setARGB */ void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b); @@ -307,6 +331,9 @@ class SK_API SkPaint { Has no effect if width is less than zero. @param width zero thickness for hairline; greater than zero for pen thickness + + example: https://fiddle.skia.org/c/@Miter_Limit + example: https://fiddle.skia.org/c/@Paint_setStrokeWidth */ void setStrokeWidth(SkScalar width); @@ -321,6 +348,8 @@ class SK_API SkPaint { Has no effect if miter is less than zero. @param miter zero and greater miter limit + + example: https://fiddle.skia.org/c/@Paint_setStrokeMiter */ void setStrokeMiter(SkScalar miter); @@ -374,6 +403,9 @@ class SK_API SkPaint { @param cap one of: kButt_Cap, kRound_Cap, kSquare_Cap; has no effect if cap is not valid + + example: https://fiddle.skia.org/c/@Paint_setStrokeCap_a + example: https://fiddle.skia.org/c/@Paint_setStrokeCap_b */ void setStrokeCap(Cap cap); @@ -387,6 +419,8 @@ class SK_API SkPaint { @param join one of: kMiter_Join, kRound_Join, kBevel_Join; otherwise, has no effect + + example: https://fiddle.skia.org/c/@Paint_setStrokeJoin */ void setStrokeJoin(Join join); @@ -428,6 +462,8 @@ class SK_API SkPaint { Increases SkShader SkRefCnt by one. @return SkShader if previously set, nullptr otherwise + + example: https://fiddle.skia.org/c/@Paint_refShader */ sk_sp refShader() const; @@ -437,6 +473,9 @@ class SK_API SkPaint { Increments shader SkRefCnt by one. @param shader how geometry is filled with color; if nullptr, color is used instead + + example: https://fiddle.skia.org/c/@Color_Filter_Methods + example: https://fiddle.skia.org/c/@Paint_setShader */ void setShader(sk_sp shader); @@ -451,6 +490,8 @@ class SK_API SkPaint { Increases SkColorFilter SkRefCnt by one. @return SkColorFilter if set, or nullptr + + example: https://fiddle.skia.org/c/@Paint_refColorFilter */ sk_sp refColorFilter() const; @@ -460,6 +501,9 @@ class SK_API SkPaint { Increments filter SkRefCnt by one. @param colorFilter SkColorFilter to apply to subsequent draw + + example: https://fiddle.skia.org/c/@Blend_Mode_Methods + example: https://fiddle.skia.org/c/@Paint_setColorFilter */ void setColorFilter(sk_sp colorFilter); @@ -494,6 +538,8 @@ class SK_API SkPaint { Increases SkPathEffect SkRefCnt by one. @return SkPathEffect if previously set, nullptr otherwise + + example: https://fiddle.skia.org/c/@Paint_refPathEffect */ sk_sp refPathEffect() const; @@ -503,6 +549,9 @@ class SK_API SkPaint { Increments pathEffect SkRefCnt by one. @param pathEffect replace SkPath with a modification when drawn + + example: https://fiddle.skia.org/c/@Mask_Filter_Methods + example: https://fiddle.skia.org/c/@Paint_setPathEffect */ void setPathEffect(sk_sp pathEffect); @@ -518,6 +567,8 @@ class SK_API SkPaint { Increases SkMaskFilter SkRefCnt by one. @return SkMaskFilter if previously set, nullptr otherwise + + example: https://fiddle.skia.org/c/@Paint_refMaskFilter */ sk_sp refMaskFilter() const; @@ -528,6 +579,9 @@ class SK_API SkPaint { Increments maskFilter SkRefCnt by one. @param maskFilter modifies clipping mask generated from drawn geometry + + example: https://fiddle.skia.org/c/@Paint_setMaskFilter + example: https://fiddle.skia.org/c/@Typeface_Methods */ void setMaskFilter(sk_sp maskFilter); @@ -542,6 +596,8 @@ class SK_API SkPaint { Increases SkImageFilter SkRefCnt by one. @return SkImageFilter if previously set, nullptr otherwise + + example: https://fiddle.skia.org/c/@Paint_refImageFilter */ sk_sp refImageFilter() const; @@ -552,6 +608,9 @@ class SK_API SkPaint { Increments imageFilter SkRefCnt by one. @param imageFilter how SkImage is sampled when transformed + + example: https://fiddle.skia.org/c/@Draw_Looper_Methods + example: https://fiddle.skia.org/c/@Paint_setImageFilter */ void setImageFilter(sk_sp imageFilter); @@ -562,6 +621,8 @@ class SK_API SkPaint { new alpha of zero. @return true if SkPaint prevents all drawing + + example: https://fiddle.skia.org/c/@Paint_nothingToDraw */ bool nothingToDraw() const; diff --git a/third_party/skia/include/core/SkPath.h b/third_party/skia/include/core/SkPath.h index 6a876486855e..27ccdc60e637 100644 --- a/third_party/skia/include/core/SkPath.h +++ b/third_party/skia/include/core/SkPath.h @@ -41,6 +41,7 @@ class SkWStream; class SK_API SkPath { public: +#ifdef SK_SUPPORT_LEGACY_PATH_DIRECTION_ENUM /** \enum SkPath::Direction Direction describes whether contour is clockwise or counterclockwise. When SkPath contains multiple overlapping contours, Direction together with @@ -58,11 +59,14 @@ class SK_API SkPath { kCW_Direction = static_cast(SkPathDirection::kCW), kCCW_Direction = static_cast(SkPathDirection::kCCW) }; +#endif /** Constructs an empty SkPath. By default, SkPath has no verbs, no SkPoint, and no weights. SkPath::FillType is set to kWinding_FillType. @return empty SkPath + + example: https://fiddle.skia.org/c/@Path_empty_constructor */ SkPath(); @@ -77,10 +81,14 @@ class SK_API SkPath { @param path SkPath to copy by value @return copy of SkPath + + example: https://fiddle.skia.org/c/@Path_copy_const_SkPath */ SkPath(const SkPath& path); /** Releases ownership of any shared data and deletes data if SkPath is sole owner. + + example: https://fiddle.skia.org/c/@Path_destructor */ ~SkPath(); @@ -95,6 +103,8 @@ class SK_API SkPath { @param path verb array, SkPoint array, weights, and SkPath::FillType to copy @return SkPath copied by value + + example: https://fiddle.skia.org/c/@Path_copy_operator */ SkPath& operator=(const SkPath& path); @@ -127,6 +137,8 @@ class SK_API SkPath { @param compare SkPath to compare @return true if SkPath verb array and weights are equivalent + + example: https://fiddle.skia.org/c/@Path_isInterpolatable */ bool isInterpolatable(const SkPath& compare) const; @@ -148,9 +160,12 @@ class SK_API SkPath { one minus contribution of ending SkPoint array @param out SkPath replaced by interpolated averages @return true if SkPath contain same number of SkPoint + + example: https://fiddle.skia.org/c/@Path_interpolate */ bool interpolate(const SkPath& ending, SkScalar weight, SkPath* out) const; +#ifdef SK_SUPPORT_LEGACY_PATH_FILLTYPE_ENUM /** \enum SkPath::FillType FillType selects the rule used to fill SkPath. SkPath set to kWinding_FillType fills if the sum of contour edges is not zero, where clockwise edges add one, and @@ -185,12 +200,62 @@ class SK_API SkPath { fFillType = SkToU8(ft); } + /** Returns true if fill is inverted and SkPath with fill represents area outside + of its geometric bounds. + + @param fill one of: kWinding_FillType, kEvenOdd_FillType, + kInverseWinding_FillType, kInverseEvenOdd_FillType + @return true if SkPath fills outside its bounds + */ + static bool IsInverseFillType(FillType fill) { + static_assert(0 == kWinding_FillType, "fill_type_mismatch"); + static_assert(1 == kEvenOdd_FillType, "fill_type_mismatch"); + static_assert(2 == kInverseWinding_FillType, "fill_type_mismatch"); + static_assert(3 == kInverseEvenOdd_FillType, "fill_type_mismatch"); + return (fill & 2) != 0; + } + + /** Returns equivalent SkPath::FillType representing SkPath fill inside its bounds. + . + + @param fill one of: kWinding_FillType, kEvenOdd_FillType, + kInverseWinding_FillType, kInverseEvenOdd_FillType + @return fill, or kWinding_FillType or kEvenOdd_FillType if fill is inverted + */ + static FillType ConvertToNonInverseFillType(FillType fill) { + static_assert(0 == kWinding_FillType, "fill_type_mismatch"); + static_assert(1 == kEvenOdd_FillType, "fill_type_mismatch"); + static_assert(2 == kInverseWinding_FillType, "fill_type_mismatch"); + static_assert(3 == kInverseEvenOdd_FillType, "fill_type_mismatch"); + return (FillType)(fill & 1); + } +#else + /** Returns FillType, the rule used to fill SkPath. FillType of a new SkPath is + kWinding_FillType. + + @return one of: kWinding_FillType, kEvenOdd_FillType, kInverseWinding_FillType, + kInverseEvenOdd_FillType + */ + SkPathFillType getFillType() const { return (SkPathFillType)fFillType; } +#endif + // Temporary method -- remove when we've switched to the new enum + SkPathFillType getNewFillType() const { return (SkPathFillType)this->getFillType(); } + + /** Sets FillType, the rule used to fill SkPath. While there is no check + that ft is legal, values outside of FillType are not supported. + + @param ft one of: kWinding, kEvenOdd, kInverseWinding, kInverseEvenOdd + */ + void setFillType(SkPathFillType ft) { + fFillType = SkToU8(ft); + } + /** Returns if FillType describes area outside SkPath geometry. The inverse fill area extends indefinitely. @return true if FillType is kInverseWinding_FillType or kInverseEvenOdd_FillType */ - bool isInverseFillType() const { return IsInverseFillType((FillType)fFillType); } + bool isInverseFillType() const { return SkPathFillType_IsInverse(this->getNewFillType()); } /** Replaces FillType with its inverse. The inverse of FillType describes the area unmodified by the original FillType. @@ -199,6 +264,44 @@ class SK_API SkPath { fFillType ^= 2; } + /** Returns the comvexity type, computing if needed. Never returns kUnknown. + @return path's convexity type (convex or concave) + */ + SkPathConvexityType getConvexityType() const { + SkPathConvexityType convexity = this->getConvexityTypeOrUnknown(); + if (convexity != SkPathConvexityType::kUnknown) { + return convexity; + } + return this->internalGetConvexity(); + } + + /** If the path's convexity is already known, return it, else return kUnknown. + * If you always want to know the convexity, even if that means having to compute it, + * call getConvexitytype(). + * + * @return known convexity, or kUnknown + */ + SkPathConvexityType getConvexityTypeOrUnknown() const { + return (SkPathConvexityType)fConvexity.load(std::memory_order_relaxed); + } + + /** Stores a convexity type for this path. This is what will be returned if + * getConvexityTypeOrUnknown() is called. If you pass kUnknown, then if getContexityType() + * is called, the real convexity will be computed. + * + * @param convexity one of: kUnknown, kConvex, or kConcave + * + * example: https://fiddle.skia.org/c/@Path_setConvexity + */ + void setConvexityType(SkPathConvexityType convexity); + + /** Returns true if the path is convex. If necessary, it will first compute the convexity. + */ + bool isConvex() const { + return SkPathConvexityType::kConvex == this->getConvexityType(); + } + +#ifdef SK_SUPPORT_LEGACY_PATH_DIRECTION_ENUM /** \enum SkPath::Convexity SkPath is convex if it contains one contour and contour loops no more than 360 degrees, and contour angles all have same Direction. Convex SkPath @@ -217,51 +320,12 @@ class SK_API SkPath { kConcave_Convexity = static_cast(SkPathConvexityType::kConcave), }; - /** Computes SkPath::Convexity if required, and returns stored value. - SkPath::Convexity is computed if stored value is kUnknown_Convexity, - or if SkPath has been altered since SkPath::Convexity was computed or set. - - @return computed or stored SkPath::Convexity - */ - Convexity getConvexity() const { - Convexity convexity = this->getConvexityOrUnknown(); - if (convexity != kUnknown_Convexity) { - return convexity; - } - return this->internalGetConvexity(); - } - - /** Returns last computed SkPath::Convexity, or kUnknown_Convexity if - SkPath has been altered since SkPath::Convexity was computed or set. - - @return stored SkPath::Convexity - */ - Convexity getConvexityOrUnknown() const { return fConvexity.load(std::memory_order_relaxed); } - - /** Stores convexity so that it is later returned by getConvexity() or getConvexityOrUnknown(). - convexity may differ from getConvexity(), although setting an incorrect value may - cause incorrect or inefficient drawing. - - If convexity is kUnknown_Convexity: getConvexity() will - compute SkPath::Convexity, and getConvexityOrUnknown() will return kUnknown_Convexity. - - If convexity is kConvex_Convexity or kConcave_Convexity, getConvexity() - and getConvexityOrUnknown() will return convexity until the path is - altered. - - @param convexity one of: kUnknown_Convexity, kConvex_Convexity, or kConcave_Convexity - */ - void setConvexity(Convexity convexity); - - /** Computes SkPath::Convexity if required, and returns true if value is kConvex_Convexity. - If setConvexity() was called with kConvex_Convexity or kConcave_Convexity, and - the path has not been altered, SkPath::Convexity is not recomputed. - - @return true if SkPath::Convexity stored or computed is kConvex_Convexity - */ - bool isConvex() const { - return kConvex_Convexity == this->getConvexity(); + Convexity getConvexity() const { return (Convexity)this->getConvexityType(); } + Convexity getConvexityOrUnknown() const { return (Convexity)this->getConvexityTypeOrUnknown(); } + void setConvexity(Convexity convexity) { + this->setConvexityType((SkPathConvexityType)convexity); } +#endif /** Returns true if this path is recognized as an oval or circle. @@ -271,6 +335,8 @@ class SK_API SkPath { @param bounds storage for bounding SkRect of oval; may be nullptr @return true if SkPath is recognized as an oval or circle + + example: https://fiddle.skia.org/c/@Path_isOval */ bool isOval(SkRect* bounds) const; @@ -283,25 +349,31 @@ class SK_API SkPath { @param rrect storage for bounding SkRect of SkRRect; may be nullptr @return true if SkPath contains only SkRRect + + example: https://fiddle.skia.org/c/@Path_isRRect */ bool isRRect(SkRRect* rrect) const; /** Sets SkPath to its initial state. - Removes verb array, SkPoint array, and weights, and sets FillType to kWinding_FillType. + Removes verb array, SkPoint array, and weights, and sets FillType to kWinding. Internal storage associated with SkPath is released. @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_reset */ SkPath& reset(); /** Sets SkPath to its initial state, preserving internal storage. - Removes verb array, SkPoint array, and weights, and sets FillType to kWinding_FillType. + Removes verb array, SkPoint array, and weights, and sets FillType to kWinding. Internal storage associated with SkPath is retained. Use rewind() instead of reset() if SkPath storage will be reused and performance is critical. @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_rewind */ SkPath& rewind(); @@ -321,6 +393,8 @@ class SK_API SkPath { closed contour draws SkPaint::Join instead of SkPaint::Cap at first and last SkPoint. @return true if the last contour ends with a kClose_Verb + + example: https://fiddle.skia.org/c/@Path_isLastContourClosed */ bool isLastContourClosed() const; @@ -376,6 +450,8 @@ class SK_API SkPath { @param p2 line end point @param exact if false, allow nearly equals @return true if line is degenerate; its length is effectively zero + + example: https://fiddle.skia.org/c/@Path_IsLineDegenerate */ static bool IsLineDegenerate(const SkPoint& p1, const SkPoint& p2, bool exact); @@ -416,6 +492,8 @@ class SK_API SkPath { @param line storage for line. May be nullptr @return true if SkPath contains exactly one line + + example: https://fiddle.skia.org/c/@Path_isLine */ bool isLine(SkPoint line[2]) const; @@ -423,6 +501,8 @@ class SK_API SkPath { SkPoint count is initially zero. @return SkPath SkPoint array length + + example: https://fiddle.skia.org/c/@Path_countPoints */ int countPoints() const; @@ -432,6 +512,8 @@ class SK_API SkPath { @param index SkPoint array element selector @return SkPoint array value or (0, 0) + + example: https://fiddle.skia.org/c/@Path_getPoint */ SkPoint getPoint(int index) const; @@ -442,6 +524,8 @@ class SK_API SkPath { @param points storage for SkPath SkPoint array. May be nullptr @param max maximum to copy; must be greater than or equal to zero @return SkPath SkPoint array length + + example: https://fiddle.skia.org/c/@Path_getPoints */ int getPoints(SkPoint points[], int max) const; @@ -449,6 +533,8 @@ class SK_API SkPath { kCubic_Verb, and kClose_Verb; added to SkPath. @return length of verb array + + example: https://fiddle.skia.org/c/@Path_countVerbs */ int countVerbs() const; @@ -458,6 +544,8 @@ class SK_API SkPath { @param verbs storage for verbs, may be nullptr @param max maximum number to copy into verbs @return the actual number of verbs in the path + + example: https://fiddle.skia.org/c/@Path_getVerbs */ int getVerbs(uint8_t verbs[], int max) const; @@ -476,6 +564,8 @@ class SK_API SkPath { making assignment as efficient as swap(). @param other SkPath exchanged by value + + example: https://fiddle.skia.org/c/@Path_swap */ void swap(SkPath& other); @@ -519,6 +609,8 @@ class SK_API SkPath { and unlike getBounds(), does not cache the result. @return tight bounds of curves in SkPath + + example: https://fiddle.skia.org/c/@Path_computeTightBounds */ SkRect computeTightBounds() const; @@ -532,6 +624,8 @@ class SK_API SkPath { @param rect SkRect, line, or SkPoint checked for containment @return true if rect is contained + + example: https://fiddle.skia.org/c/@Path_conservativelyContainsRect */ bool conservativelyContainsRect(const SkRect& rect) const; @@ -540,6 +634,8 @@ class SK_API SkPath { reducing the number and size of allocations when creating SkPath. @param extraPtCount number of additional SkPoint to allocate + + example: https://fiddle.skia.org/c/@Path_incReserve */ void incReserve(int extraPtCount); @@ -553,6 +649,8 @@ class SK_API SkPath { @param x x-axis value of contour start @param y y-axis value of contour start @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_moveTo */ SkPath& moveTo(SkScalar x, SkScalar y); @@ -573,6 +671,8 @@ class SK_API SkPath { @param dx offset from last point to contour start on x-axis @param dy offset from last point to contour start on y-axis @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_rMoveTo */ SkPath& rMoveTo(SkScalar dx, SkScalar dy); @@ -585,6 +685,8 @@ class SK_API SkPath { @param x end of added line on x-axis @param y end of added line on y-axis @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_lineTo */ SkPath& lineTo(SkScalar x, SkScalar y); @@ -612,6 +714,10 @@ class SK_API SkPath { @param dx offset from last point to line end on x-axis @param dy offset from last point to line end on y-axis @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_rLineTo + example: https://fiddle.skia.org/c/@Quad_a + example: https://fiddle.skia.org/c/@Quad_b */ SkPath& rLineTo(SkScalar dx, SkScalar dy); @@ -628,6 +734,8 @@ class SK_API SkPath { @param x2 end SkPoint of quad on x-axis @param y2 end SkPoint of quad on y-axis @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_quadTo */ SkPath& quadTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2); @@ -663,6 +771,11 @@ class SK_API SkPath { @param dx2 offset from last point to quad end on x-axis @param dy2 offset from last point to quad end on y-axis @return reference to SkPath + + example: https://fiddle.skia.org/c/@Conic_Weight_a + example: https://fiddle.skia.org/c/@Conic_Weight_b + example: https://fiddle.skia.org/c/@Conic_Weight_c + example: https://fiddle.skia.org/c/@Path_rQuadTo */ SkPath& rQuadTo(SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2); @@ -816,6 +929,8 @@ class SK_API SkPath { @param sweepAngle sweep, in degrees. Positive is clockwise; treated modulo 360 @param forceMoveTo true to start a new contour with arc @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_arcTo */ SkPath& arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool forceMoveTo); @@ -839,6 +954,10 @@ class SK_API SkPath { @param y2 y-axis value end of second tangent @param radius distance from arc to circle center @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_arcTo_2_a + example: https://fiddle.skia.org/c/@Path_arcTo_2_b + example: https://fiddle.skia.org/c/@Path_arcTo_2_c */ SkPath& arcTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar radius); @@ -899,7 +1018,7 @@ class SK_API SkPath { @return reference to SkPath */ SkPath& arcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, - Direction sweep, SkScalar x, SkScalar y); + SkPathDirection sweep, SkScalar x, SkScalar y); /** Appends arc to SkPath. Arc is implemented by one or more conic weighted to describe part of oval with radii (r.fX, r.fY) rotated by xAxisRotate degrees. Arc curves @@ -924,7 +1043,7 @@ class SK_API SkPath { @param xy end of arc @return reference to SkPath */ - SkPath& arcTo(const SkPoint r, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, + SkPath& arcTo(const SkPoint r, SkScalar xAxisRotate, ArcSize largeArc, SkPathDirection sweep, const SkPoint xy) { return this->arcTo(r.fX, r.fY, xAxisRotate, largeArc, sweep, xy.fX, xy.fY); } @@ -956,7 +1075,7 @@ class SK_API SkPath { @return reference to SkPath */ SkPath& rArcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, - Direction sweep, SkScalar dx, SkScalar dy); + SkPathDirection sweep, SkScalar dx, SkScalar dy); /** Appends kClose_Verb to SkPath. A closed contour connects the first and last SkPoint with line, forming a continuous loop. Open and closed contour draw the same @@ -967,38 +1086,10 @@ class SK_API SkPath { close() has no effect if SkPath is empty or last SkPath SkPath::Verb is kClose_Verb. @return reference to SkPath - */ - SkPath& close(); - - /** Returns true if fill is inverted and SkPath with fill represents area outside - of its geometric bounds. - - @param fill one of: kWinding_FillType, kEvenOdd_FillType, - kInverseWinding_FillType, kInverseEvenOdd_FillType - @return true if SkPath fills outside its bounds - */ - static bool IsInverseFillType(FillType fill) { - static_assert(0 == kWinding_FillType, "fill_type_mismatch"); - static_assert(1 == kEvenOdd_FillType, "fill_type_mismatch"); - static_assert(2 == kInverseWinding_FillType, "fill_type_mismatch"); - static_assert(3 == kInverseEvenOdd_FillType, "fill_type_mismatch"); - return (fill & 2) != 0; - } - - /** Returns equivalent SkPath::FillType representing SkPath fill inside its bounds. - . - @param fill one of: kWinding_FillType, kEvenOdd_FillType, - kInverseWinding_FillType, kInverseEvenOdd_FillType - @return fill, or kWinding_FillType or kEvenOdd_FillType if fill is inverted + example: https://fiddle.skia.org/c/@Path_close */ - static FillType ConvertToNonInverseFillType(FillType fill) { - static_assert(0 == kWinding_FillType, "fill_type_mismatch"); - static_assert(1 == kEvenOdd_FillType, "fill_type_mismatch"); - static_assert(2 == kInverseWinding_FillType, "fill_type_mismatch"); - static_assert(3 == kInverseEvenOdd_FillType, "fill_type_mismatch"); - return (FillType)(fill & 1); - } + SkPath& close(); /** Approximates conic with quad array. Conic is constructed from start SkPoint p0, control SkPoint p1, end SkPoint p2, and weight w. @@ -1040,8 +1131,10 @@ class SK_API SkPath { @param isClosed storage set to true if SkPath is closed; may be nullptr @param direction storage set to SkRect direction; may be nullptr @return true if SkPath contains SkRect + + example: https://fiddle.skia.org/c/@Path_isRect */ - bool isRect(SkRect* rect, bool* isClosed = nullptr, Direction* direction = nullptr) const; + bool isRect(SkRect* rect, bool* isClosed = nullptr, SkPathDirection* direction = nullptr) const; /** Adds SkRect to SkPath, appending kMove_Verb, three kLine_Verb, and kClose_Verb, starting with top-left corner of SkRect; followed by top-right, bottom-right, @@ -1051,8 +1144,10 @@ class SK_API SkPath { @param rect SkRect to add as a closed contour @param dir SkPath::Direction to wind added contour @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_addRect */ - SkPath& addRect(const SkRect& rect, Direction dir = kCW_Direction); + SkPath& addRect(const SkRect& rect, SkPathDirection dir = SkPathDirection::kCW); /** Adds SkRect to SkPath, appending kMove_Verb, three kLine_Verb, and kClose_Verb. If dir is kCW_Direction, SkRect corners are added clockwise; if dir is @@ -1063,8 +1158,10 @@ class SK_API SkPath { @param dir SkPath::Direction to wind added contour @param start initial corner of SkRect to add @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_addRect_2 */ - SkPath& addRect(const SkRect& rect, Direction dir, unsigned start); + SkPath& addRect(const SkRect& rect, SkPathDirection dir, unsigned start); /** Adds SkRect (left, top, right, bottom) to SkPath, appending kMove_Verb, three kLine_Verb, and kClose_Verb, @@ -1080,7 +1177,7 @@ class SK_API SkPath { @return reference to SkPath */ SkPath& addRect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom, - Direction dir = kCW_Direction); + SkPathDirection dir = SkPathDirection::kCW); /** Adds oval to path, appending kMove_Verb, four kConic_Verb, and kClose_Verb. Oval is upright ellipse bounded by SkRect oval with radii equal to half oval width @@ -1090,8 +1187,10 @@ class SK_API SkPath { @param oval bounds of ellipse added @param dir SkPath::Direction to wind ellipse @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_addOval */ - SkPath& addOval(const SkRect& oval, Direction dir = kCW_Direction); + SkPath& addOval(const SkRect& oval, SkPathDirection dir = SkPathDirection::kCW); /** Adds oval to SkPath, appending kMove_Verb, four kConic_Verb, and kClose_Verb. Oval is upright ellipse bounded by SkRect oval with radii equal to half oval width @@ -1102,8 +1201,10 @@ class SK_API SkPath { @param dir SkPath::Direction to wind ellipse @param start index of initial point of ellipse @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_addOval_2 */ - SkPath& addOval(const SkRect& oval, Direction dir, unsigned start); + SkPath& addOval(const SkRect& oval, SkPathDirection dir, unsigned start); /** Adds circle centered at (x, y) of size radius to SkPath, appending kMove_Verb, four kConic_Verb, and kClose_Verb. Circle begins at: (x + radius, y), continuing @@ -1118,7 +1219,7 @@ class SK_API SkPath { @return reference to SkPath */ SkPath& addCircle(SkScalar x, SkScalar y, SkScalar radius, - Direction dir = kCW_Direction); + SkPathDirection dir = SkPathDirection::kCW); /** Appends arc to SkPath, as the start of new contour. Arc added is part of ellipse bounded by oval, from startAngle through sweepAngle. Both startAngle and @@ -1133,6 +1234,8 @@ class SK_API SkPath { @param startAngle starting angle of arc in degrees @param sweepAngle sweep, in degrees. Positive is clockwise; treated modulo 360 @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_addArc */ SkPath& addArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle); @@ -1155,7 +1258,7 @@ class SK_API SkPath { @return reference to SkPath */ SkPath& addRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, - Direction dir = kCW_Direction); + SkPathDirection dir = SkPathDirection::kCW); /** Appends SkRRect to SkPath, creating a new closed contour. SkRRect has bounds equal to rect; each corner is 90 degrees of an ellipse with radii from the @@ -1167,7 +1270,7 @@ class SK_API SkPath { @return reference to SkPath */ SkPath& addRoundRect(const SkRect& rect, const SkScalar radii[], - Direction dir = kCW_Direction); + SkPathDirection dir = SkPathDirection::kCW); /** Adds rrect to SkPath, creating a new closed contour. If dir is kCW_Direction, rrect starts at top-left of the lower-left corner and @@ -1179,8 +1282,10 @@ class SK_API SkPath { @param rrect bounds and radii of rounded rectangle @param dir SkPath::Direction to wind SkRRect @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_addRRect */ - SkPath& addRRect(const SkRRect& rrect, Direction dir = kCW_Direction); + SkPath& addRRect(const SkRRect& rrect, SkPathDirection dir = SkPathDirection::kCW); /** Adds rrect to SkPath, creating a new closed contour. If dir is kCW_Direction, rrect winds clockwise; if dir is kCCW_Direction, rrect winds counterclockwise. @@ -1190,8 +1295,10 @@ class SK_API SkPath { @param dir SkPath::Direction to wind SkRRect @param start index of initial point of SkRRect @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_addRRect_2 */ - SkPath& addRRect(const SkRRect& rrect, Direction dir, unsigned start); + SkPath& addRRect(const SkRRect& rrect, SkPathDirection dir, unsigned start); /** Adds contour created from line array, adding (count - 1) line segments. Contour added starts at pts[0], then adds a line for every additional SkPoint @@ -1205,6 +1312,8 @@ class SK_API SkPath { @param count length of SkPoint array @param close true to add line connecting contour end and start @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_addPoly */ SkPath& addPoly(const SkPoint pts[], int count, bool close); @@ -1282,6 +1391,8 @@ class SK_API SkPath { @param src SkPath verbs, SkPoint, and conic weights to add @return reference to SkPath + + example: https://fiddle.skia.org/c/@Path_reverseAddPath */ SkPath& reverseAddPath(const SkPath& src); @@ -1291,6 +1402,8 @@ class SK_API SkPath { @param dx offset added to SkPoint array x-axis coordinates @param dy offset added to SkPoint array y-axis coordinates @param dst overwritten, translated copy of SkPath; may be nullptr + + example: https://fiddle.skia.org/c/@Path_offset */ void offset(SkScalar dx, SkScalar dy, SkPath* dst) const; @@ -1310,6 +1423,8 @@ class SK_API SkPath { @param matrix SkMatrix to apply to SkPath @param dst overwritten, transformed copy of SkPath; may be nullptr + + example: https://fiddle.skia.org/c/@Path_transform */ void transform(const SkMatrix& matrix, SkPath* dst) const; @@ -1328,6 +1443,8 @@ class SK_API SkPath { @param lastPt storage for final SkPoint in SkPoint array; may be nullptr @return true if SkPoint array contains one or more SkPoint + + example: https://fiddle.skia.org/c/@Path_getLastPt */ bool getLastPt(SkPoint* lastPt) const; @@ -1336,6 +1453,8 @@ class SK_API SkPath { @param x set x-axis value of last point @param y set y-axis value of last point + + example: https://fiddle.skia.org/c/@Path_setLastPt */ void setLastPt(SkScalar x, SkScalar y); @@ -1396,6 +1515,8 @@ class SK_API SkPath { Call setPath to initialize SkPath::Iter at a later time. @return SkPath::Iter of empty SkPath + + example: https://fiddle.skia.org/c/@Path_Iter_Iter */ Iter(); @@ -1406,6 +1527,8 @@ class SK_API SkPath { @param path SkPath to iterate @param forceClose true if open contours generate kClose_Verb @return SkPath::Iter of path + + example: https://fiddle.skia.org/c/@Path_Iter_const_SkPath */ Iter(const SkPath& path, bool forceClose); @@ -1415,6 +1538,8 @@ class SK_API SkPath { @param path SkPath to iterate @param forceClose true if open contours generate kClose_Verb + + example: https://fiddle.skia.org/c/@Path_Iter_setPath */ void setPath(const SkPath& path, bool forceClose); @@ -1425,14 +1550,11 @@ class SK_API SkPath { @param pts storage for SkPoint data describing returned SkPath::Verb @return next SkPath::Verb from verb array + + example: https://fiddle.skia.org/c/@Path_RawIter_next */ Verb next(SkPoint pts[4]); - // DEPRECATED - Verb next(SkPoint pts[4], bool /*doConsumeDegenerates*/, bool /*exact*/ = false) { - return this->next(pts); - } - /** Returns conic weight if next() returned kConic_Verb. If next() has not been called, or next() did not return kConic_Verb, @@ -1458,6 +1580,8 @@ class SK_API SkPath { SkPath::Iter may have been initialized with force close set to true. @return true if contour is closed + + example: https://fiddle.skia.org/c/@Path_Iter_isClosedContour */ bool isClosedContour() const; @@ -1559,6 +1683,8 @@ class SK_API SkPath { @param x x-axis value of containment test @param y y-axis value of containment test @return true if SkPoint is in SkPath + + example: https://fiddle.skia.org/c/@Path_contains */ bool contains(SkScalar x, SkScalar y) const; @@ -1570,6 +1696,8 @@ class SK_API SkPath { @param stream writable SkWStream receiving SkPath text representation; may be nullptr @param forceClose true if missing kClose_Verb is output @param dumpAsHex true if SkScalar values are written as hexadecimal + + example: https://fiddle.skia.org/c/@Path_dump */ void dump(SkWStream* stream, bool forceClose, bool dumpAsHex) const; @@ -1577,6 +1705,8 @@ class SK_API SkPath { directly compiled as C++ code. Floating point values are written with limited precision; it may not be possible to reconstruct original SkPath from output. + + example: https://fiddle.skia.org/c/@Path_dump_2 */ void dump() const; @@ -1586,6 +1716,8 @@ class SK_API SkPath { original SkPath. Use instead of dump() when submitting + + example: https://fiddle.skia.org/c/@Path_dumpHex */ void dumpHex() const; @@ -1600,6 +1732,8 @@ class SK_API SkPath { @param buffer storage for SkPath; may be nullptr @return size of storage required for SkPath; always a multiple of 4 + + example: https://fiddle.skia.org/c/@Path_writeToMemory */ size_t writeToMemory(void* buffer) const; @@ -1612,6 +1746,8 @@ class SK_API SkPath { The format used for SkPath in memory is not guaranteed. @return SkPath data wrapped in SkData buffer + + example: https://fiddle.skia.org/c/@Path_serialize */ sk_sp serialize() const; @@ -1627,6 +1763,8 @@ class SK_API SkPath { @param buffer storage for SkPath @param length buffer size in bytes; must be multiple of 4 @return number of bytes read, or zero on failure + + example: https://fiddle.skia.org/c/@Path_readFromMemory */ size_t readFromMemory(const void* buffer, size_t length); @@ -1640,6 +1778,8 @@ class SK_API SkPath { SkPath::FillType does affect generation identifier on Android framework. @return non-zero, globally unique value + + example: https://fiddle.skia.org/c/@Path_getGenerationID */ uint32_t getGenerationID() const; @@ -1651,10 +1791,62 @@ class SK_API SkPath { */ bool isValid() const { return this->isValidImpl() && fPathRef->isValid(); } +#ifdef SK_SUPPORT_LEGACY_PATH_DIRECTION_ENUM + SkPath& arcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, + Direction sweep, SkScalar x, SkScalar y) { + return this->arcTo(rx, ry, xAxisRotate, largeArc, (SkPathDirection)sweep, x, y); + } + SkPath& arcTo(const SkPoint r, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, + const SkPoint xy) { + return this->arcTo(r.fX, r.fY, xAxisRotate, largeArc, (SkPathDirection)sweep, xy.fX, xy.fY); + } + SkPath& rArcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, + Direction sweep, SkScalar dx, SkScalar dy) { + return this->rArcTo(rx, ry, xAxisRotate, largeArc, (SkPathDirection)sweep, dx, dy); + } + bool isRect(SkRect* rect, bool* isClosed, Direction* direction) const { + return this->isRect(rect, isClosed, (SkPathDirection*)direction); + } + bool isRect(SkRect* rect, bool* isClosed, nullptr_t) const { + return this->isRect(rect, isClosed); + } + SkPath& addRect(const SkRect& rect, Direction dir) { + return this->addRect(rect, (SkPathDirection)dir); + } + SkPath& addRect(const SkRect& rect, Direction dir, unsigned start) { + return this->addRect(rect, (SkPathDirection)dir, start); + } + SkPath& addRect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom, + Direction dir) { + return this->addRect(left, top, right, bottom, (SkPathDirection)dir); + } + SkPath& addOval(const SkRect& oval, Direction dir) { + return addOval(oval, (SkPathDirection)dir); + } + SkPath& addOval(const SkRect& oval, Direction dir, unsigned start) { + return this->addOval(oval, (SkPathDirection)dir, start); + } + SkPath& addCircle(SkScalar x, SkScalar y, SkScalar radius, Direction dir) { + return this->addCircle(x, y, radius, (SkPathDirection)dir); + } + SkPath& addRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, Direction dir) { + return this->addRoundRect(rect, rx, ry, (SkPathDirection)dir); + } + SkPath& addRoundRect(const SkRect& rect, const SkScalar radii[], Direction dir) { + return this->addRoundRect(rect, radii, (SkPathDirection)dir); + } + SkPath& addRRect(const SkRRect& rrect, Direction dir) { + return this->addRRect(rrect, (SkPathDirection)dir); + } + SkPath& addRRect(const SkRRect& rrect, Direction dir, unsigned start) { + return this->addRRect(rrect, (SkPathDirection)dir, start); + } +#endif + private: sk_sp fPathRef; int fLastMoveToIndex; - mutable std::atomic fConvexity; + mutable std::atomic fConvexity; // SkPathConvexityType mutable std::atomic fFirstDirection; // really an SkPathPriv::FirstDirection uint8_t fFillType : 2; uint8_t fIsVolatile : 1; @@ -1695,7 +1887,7 @@ class SK_API SkPath { inline bool hasOnlyMoveTos() const; - Convexity internalGetConvexity() const; + SkPathConvexityType internalGetConvexity() const; /** Asserts if SkPath data is inconsistent. Debugging check intended for internal use only. @@ -1727,7 +1919,7 @@ class SK_API SkPath { // Bottlenecks for working with fConvexity and fFirstDirection. // Notice the setters are const... these are mutable atomic fields. - void setConvexity(Convexity) const; + void setConvexityType(SkPathConvexityType) const; void setFirstDirection(uint8_t) const; uint8_t getFirstDirection() const; diff --git a/third_party/skia/include/core/SkPathTypes.h b/third_party/skia/include/core/SkPathTypes.h index 4f5adf458ce2..305c119f6c5f 100644 --- a/third_party/skia/include/core/SkPathTypes.h +++ b/third_party/skia/include/core/SkPathTypes.h @@ -21,6 +21,18 @@ enum class SkPathFillType { kInverseEvenOdd }; +static inline bool SkPathFillType_IsEvenOdd(SkPathFillType ft) { + return (static_cast(ft) & 1) != 0; +} + +static inline bool SkPathFillType_IsInverse(SkPathFillType ft) { + return (static_cast(ft) & 2) != 0; +} + +static inline SkPathFillType SkPathFillType_ConvertToNonInverse(SkPathFillType ft) { + return static_cast(static_cast(ft) & 1); +} + enum class SkPathConvexityType { kUnknown, kConvex, diff --git a/third_party/skia/include/core/SkPicture.h b/third_party/skia/include/core/SkPicture.h index a7ec138b5808..ca3b07fda892 100644 --- a/third_party/skia/include/core/SkPicture.h +++ b/third_party/skia/include/core/SkPicture.h @@ -111,6 +111,8 @@ class SK_API SkPicture : public SkRefCnt { SkPicture::playback was called. @return true to stop playback + + example: https://fiddle.skia.org/c/@Picture_AbortCallback_abort */ virtual bool abort() = 0; }; @@ -123,6 +125,8 @@ class SK_API SkPicture : public SkRefCnt { @param canvas receiver of drawing commands @param callback allows interruption of playback + + example: https://fiddle.skia.org/c/@Picture_playback */ virtual void playback(SkCanvas* canvas, AbortCallback* callback = nullptr) const = 0; @@ -134,6 +138,8 @@ class SK_API SkPicture : public SkRefCnt { cull. @return bounds passed when SkPicture was created + + example: https://fiddle.skia.org/c/@Picture_cullRect */ virtual SkRect cullRect() const = 0; @@ -153,6 +159,8 @@ class SK_API SkPicture : public SkRefCnt { @param procs custom serial data encoders; may be nullptr @return storage containing serialized SkPicture + + example: https://fiddle.skia.org/c/@Picture_serialize */ sk_sp serialize(const SkSerialProcs* procs = nullptr) const; @@ -165,6 +173,8 @@ class SK_API SkPicture : public SkRefCnt { @param stream writable serial data stream @param procs custom serial data encoders; may be nullptr + + example: https://fiddle.skia.org/c/@Picture_serialize_2 */ void serialize(SkWStream* stream, const SkSerialProcs* procs = nullptr) const; @@ -177,6 +187,8 @@ class SK_API SkPicture : public SkRefCnt { @param cull placeholder dimensions @return placeholder with unique identifier + + example: https://fiddle.skia.org/c/@Picture_MakePlaceholder */ static sk_sp MakePlaceholder(SkRect cull); @@ -186,6 +198,8 @@ class SK_API SkPicture : public SkRefCnt { calls may be optimized away. @return approximate operation count + + example: https://fiddle.skia.org/c/@Picture_approximateOpCount */ virtual int approximateOpCount() const = 0; @@ -193,6 +207,8 @@ class SK_API SkPicture : public SkRefCnt { referenced by SkPicture. @return approximate size + + example: https://fiddle.skia.org/c/@Picture_approximateBytesUsed */ virtual size_t approximateBytesUsed() const = 0; diff --git a/third_party/skia/include/core/SkPixelRef.h b/third_party/skia/include/core/SkPixelRef.h index 48ad377accb3..c64f19b46119 100644 --- a/third_party/skia/include/core/SkPixelRef.h +++ b/third_party/skia/include/core/SkPixelRef.h @@ -14,7 +14,6 @@ #include "include/core/SkPixmap.h" #include "include/core/SkRefCnt.h" #include "include/core/SkSize.h" -#include "include/core/SkString.h" #include "include/private/SkMutex.h" #include "include/private/SkTDArray.h" diff --git a/third_party/skia/include/core/SkPixmap.h b/third_party/skia/include/core/SkPixmap.h index 7d460275ff4e..a1b08cc831f1 100644 --- a/third_party/skia/include/core/SkPixmap.h +++ b/third_party/skia/include/core/SkPixmap.h @@ -68,6 +68,8 @@ class SK_API SkPixmap { The prior pixels are unaffected; it is up to the caller to release pixels memory if desired. + + example: https://fiddle.skia.org/c/@Pixmap_reset */ void reset(); @@ -85,6 +87,8 @@ class SK_API SkPixmap { @param info width, height, SkAlphaType, SkColorType of SkImageInfo @param addr pointer to pixels allocated by caller; may be nullptr @param rowBytes size of one row of addr; width times pixel size, or larger + + example: https://fiddle.skia.org/c/@Pixmap_reset_2 */ void reset(const SkImageInfo& info, const void* addr, size_t rowBytes); @@ -93,6 +97,8 @@ class SK_API SkPixmap { SkColorSpace reference count is incremented. @param colorSpace SkColorSpace moved to SkImageInfo + + example: https://fiddle.skia.org/c/@Pixmap_setColorSpace */ void setColorSpace(sk_sp colorSpace); @@ -243,6 +249,8 @@ class SK_API SkPixmap { Returns false for kUnknown_SkColorType. @return true if all pixels have opaque values or SkColorType is opaque + + example: https://fiddle.skia.org/c/@Pixmap_computeIsOpaque */ bool computeIsOpaque() const; @@ -261,6 +269,8 @@ class SK_API SkPixmap { @param x column index, zero or greater, and less than width() @param y row index, zero or greater, and less than height() @return pixel converted to unpremultiplied color + + example: https://fiddle.skia.org/c/@Pixmap_getColor */ SkColor getColor(int x, int y) const; @@ -669,6 +679,8 @@ class SK_API SkPixmap { @param filterQuality one of: kNone_SkFilterQuality, kLow_SkFilterQuality, kMedium_SkFilterQuality, kHigh_SkFilterQuality @return true if pixels are scaled to fit dst + + example: https://fiddle.skia.org/c/@Pixmap_scalePixels */ bool scalePixels(const SkPixmap& dst, SkFilterQuality filterQuality) const; @@ -679,6 +691,8 @@ class SK_API SkPixmap { @param color unpremultiplied color to write @param subset bounding integer SkRect of written pixels @return true if pixels are changed + + example: https://fiddle.skia.org/c/@Pixmap_erase */ bool erase(SkColor color, const SkIRect& subset) const; @@ -699,6 +713,8 @@ class SK_API SkPixmap { @param color unpremultiplied color to write @param subset bounding integer SkRect of pixels to write; may be nullptr @return true if pixels are changed + + example: https://fiddle.skia.org/c/@Pixmap_erase_3 */ bool erase(const SkColor4f& color, const SkIRect* subset = nullptr) const; diff --git a/third_party/skia/include/core/SkPoint.h b/third_party/skia/include/core/SkPoint.h index 62516db4c4be..92cb0b7f0999 100644 --- a/third_party/skia/include/core/SkPoint.h +++ b/third_party/skia/include/core/SkPoint.h @@ -175,13 +175,13 @@ struct SK_API SkPoint { @return fX */ - SkScalar x() const { return fX; } + constexpr SkScalar x() const { return fX; } /** Returns y-axis value of SkPoint or vector. @return fY */ - SkScalar y() const { return fY; } + constexpr SkScalar y() const { return fY; } /** Returns true if fX and fY are both zero. @@ -293,6 +293,8 @@ struct SK_API SkPoint { false; otherwise returns true. @return true if former length is not zero or nearly zero + + example: https://fiddle.skia.org/c/@Point_normalize_2 */ bool normalize(); @@ -303,6 +305,8 @@ struct SK_API SkPoint { @param x proportional value for fX @param y proportional value for fY @return true if (x, y) length is not zero or nearly zero + + example: https://fiddle.skia.org/c/@Point_setNormalize */ bool setNormalize(SkScalar x, SkScalar y); @@ -312,6 +316,8 @@ struct SK_API SkPoint { @param length straight-line distance to origin @return true if former length is not zero or nearly zero + + example: https://fiddle.skia.org/c/@Point_setLength */ bool setLength(SkScalar length); @@ -323,6 +329,8 @@ struct SK_API SkPoint { @param y proportional value for fY @param length straight-line distance to origin @return true if (x, y) length is not zero or nearly zero + + example: https://fiddle.skia.org/c/@Point_setLength_2 */ bool setLength(SkScalar x, SkScalar y, SkScalar length); @@ -330,6 +338,8 @@ struct SK_API SkPoint { @param scale factor to multiply SkPoint by @param dst storage for scaled SkPoint + + example: https://fiddle.skia.org/c/@Point_scale */ void scale(SkScalar scale, SkPoint* dst) const; @@ -475,6 +485,8 @@ struct SK_API SkPoint { @param x component of length @param y component of length @return straight-line distance to origin + + example: https://fiddle.skia.org/c/@Point_Length */ static SkScalar Length(SkScalar x, SkScalar y); @@ -488,6 +500,8 @@ struct SK_API SkPoint { @param vec normalized to unit length @return original vec length + + example: https://fiddle.skia.org/c/@Point_Normalize */ static SkScalar Normalize(SkVector* vec); diff --git a/third_party/skia/include/core/SkPreConfig.h b/third_party/skia/include/core/SkPreConfig.h index 89b3eecfdd97..6c70e12aa55c 100644 --- a/third_party/skia/include/core/SkPreConfig.h +++ b/third_party/skia/include/core/SkPreConfig.h @@ -201,4 +201,9 @@ #endif #endif +// SK_SPI is functionally identical to SK_API, but used within src to clarify that it's less stable +#if !defined(SK_SPI) + #define SK_SPI SK_API +#endif + #endif diff --git a/third_party/skia/include/core/SkRRect.h b/third_party/skia/include/core/SkRRect.h index 7bc838784ae1..5bd0e8539c46 100644 --- a/third_party/skia/include/core/SkRRect.h +++ b/third_party/skia/include/core/SkRRect.h @@ -222,6 +222,8 @@ class SK_API SkRRect { @param rect bounds of rounded rectangle @param xRad x-axis radius of corners @param yRad y-axis radius of corners + + example: https://fiddle.skia.org/c/@RRect_setRectXY */ void setRectXY(const SkRect& rect, SkScalar xRad, SkScalar yRad); @@ -259,6 +261,8 @@ class SK_API SkRRect { @param rect bounds of rounded rectangle @param radii corner x-axis and y-axis radii + + example: https://fiddle.skia.org/c/@RRect_setRectRadii */ void setRectRadii(const SkRect& rect, const SkVector radii[4]); @@ -338,6 +342,8 @@ class SK_API SkRRect { @param dx added to rect().fLeft, and subtracted from rect().fRight @param dy added to rect().fTop, and subtracted from rect().fBottom @param dst insets bounds and radii + + example: https://fiddle.skia.org/c/@RRect_inset */ void inset(SkScalar dx, SkScalar dy, SkRRect* dst) const; @@ -420,6 +426,8 @@ class SK_API SkRRect { @param rect area tested for containment @return true if SkRRect contains rect + + example: https://fiddle.skia.org/c/@RRect_contains */ bool contains(const SkRect& rect) const; @@ -429,6 +437,8 @@ class SK_API SkRRect { be generated by corrupting memory. @return true if bounds and radii match type() + + example: https://fiddle.skia.org/c/@RRect_isValid */ bool isValid() const; @@ -439,6 +449,8 @@ class SK_API SkRRect { @param buffer storage for SkRRect @return bytes written, kSizeInMemory + + example: https://fiddle.skia.org/c/@RRect_writeToMemory */ size_t writeToMemory(void* buffer) const; @@ -449,6 +461,8 @@ class SK_API SkRRect { @param buffer memory to read from @param length size of buffer @return bytes read, or 0 if length is less than kSizeInMemory + + example: https://fiddle.skia.org/c/@RRect_readFromMemory */ size_t readFromMemory(const void* buffer, size_t length); @@ -461,6 +475,8 @@ class SK_API SkRRect { @param matrix SkMatrix specifying the transform @param dst SkRRect to store the result @return true if transformation succeeded. + + example: https://fiddle.skia.org/c/@RRect_transform */ bool transform(const SkMatrix& matrix, SkRRect* dst) const; @@ -469,6 +485,8 @@ class SK_API SkRRect { of floating point numbers. @param asHex true if SkScalar values are written as hexadecimal + + example: https://fiddle.skia.org/c/@RRect_dump */ void dump(bool asHex) const; diff --git a/third_party/skia/include/core/SkRect.h b/third_party/skia/include/core/SkRect.h index eff1c0a69ff7..894cfaede21b 100644 --- a/third_party/skia/include/core/SkRect.h +++ b/third_party/skia/include/core/SkRect.h @@ -518,6 +518,8 @@ struct SK_API SkIRect { Has no effect if r is empty. Otherwise, if SkIRect is empty, sets SkIRect to r. @param r expansion SkIRect + + example: https://fiddle.skia.org/c/@IRect_join_2 */ void join(const SkIRect& r); @@ -820,6 +822,8 @@ struct SK_API SkRect { TODO: Consider adding parameter to control whether quad is clockwise or counterclockwise. @param quad storage for corners of SkRect + + example: https://fiddle.skia.org/c/@Rect_toQuad */ void toQuad(SkPoint quad[4]) const; @@ -882,6 +886,8 @@ struct SK_API SkRect { @param pts SkPoint array @param count entries in array @return true if all SkPoint values are finite + + example: https://fiddle.skia.org/c/@Rect_setBoundsCheck */ bool setBoundsCheck(const SkPoint pts[], int count); @@ -890,6 +896,8 @@ struct SK_API SkRect { @param pts SkPoint array @param count entries in array + + example: https://fiddle.skia.org/c/@Rect_setBoundsNoCheck */ void setBoundsNoCheck(const SkPoint pts[], int count); @@ -948,10 +956,17 @@ struct SK_API SkRect { @param dy added to fTop and fBottom @return SkRect offset on axes, with original width and height */ - SkRect makeOffset(SkScalar dx, SkScalar dy) const { + constexpr SkRect makeOffset(SkScalar dx, SkScalar dy) const { return MakeLTRB(fLeft + dx, fTop + dy, fRight + dx, fBottom + dy); } + /** Returns SkRect offset by v. + + @param v added to rect + @return SkRect offset on axes, with original width and height + */ + constexpr SkRect makeOffset(SkVector v) const { return this->makeOffset(v.x(), v.y()); } + /** Returns SkRect, inset by (dx, dy). If dx is negative, SkRect returned is wider. @@ -1062,6 +1077,8 @@ struct SK_API SkRect { @param r limit of result @return true if r and SkRect have area in common + + example: https://fiddle.skia.org/c/@Rect_intersect */ bool intersect(const SkRect& r); @@ -1118,6 +1135,8 @@ struct SK_API SkRect { SkRect to r. @param r expansion SkRect + + example: https://fiddle.skia.org/c/@Rect_join_2 */ void join(const SkRect& r); @@ -1306,6 +1325,8 @@ struct SK_API SkRect { generate exact binary representations of floating point numbers. @param asHex true if SkScalar values are written as hexadecimal + + example: https://fiddle.skia.org/c/@Rect_dump */ void dump(bool asHex) const; diff --git a/third_party/skia/include/core/SkRegion.h b/third_party/skia/include/core/SkRegion.h index 30d8f8984ec4..45841b7c7ea1 100644 --- a/third_party/skia/include/core/SkRegion.h +++ b/third_party/skia/include/core/SkRegion.h @@ -28,6 +28,8 @@ class SK_API SkRegion { at (0, 0) with zero width and height. @return empty SkRegion + + example: https://fiddle.skia.org/c/@Region_empty_constructor */ SkRegion(); @@ -42,6 +44,8 @@ class SK_API SkRegion { @param region SkRegion to copy by value @return copy of SkRegion + + example: https://fiddle.skia.org/c/@Region_copy_const_SkRegion */ SkRegion(const SkRegion& region); @@ -49,10 +53,14 @@ class SK_API SkRegion { @param rect bounds of constructed SkRegion @return rectangular SkRegion + + example: https://fiddle.skia.org/c/@Region_copy_const_SkIRect */ explicit SkRegion(const SkIRect& rect); /** Releases ownership of any shared data and deletes data if SkRegion is sole owner. + + example: https://fiddle.skia.org/c/@Region_destructor */ ~SkRegion(); @@ -67,6 +75,8 @@ class SK_API SkRegion { @param region SkRegion to copy by value @return SkRegion to copy by value + + example: https://fiddle.skia.org/c/@Region_copy_operator */ SkRegion& operator=(const SkRegion& region); @@ -75,6 +85,8 @@ class SK_API SkRegion { @param other SkRegion to compare @return true if SkRegion pair are equivalent + + example: https://fiddle.skia.org/c/@Region_equal1_operator */ bool operator==(const SkRegion& other) const; @@ -112,6 +124,8 @@ class SK_API SkRegion { making assignment as efficient as swap(). @param other operator=(const SkRegion& region) set + + example: https://fiddle.skia.org/c/@Region_swap */ void swap(SkRegion& other); @@ -151,6 +165,8 @@ class SK_API SkRegion { Call to compare SkRegion for relative complexity. @return relative complexity + + example: https://fiddle.skia.org/c/@Region_computeRegionComplexity */ int computeRegionComplexity() const; @@ -160,6 +176,8 @@ class SK_API SkRegion { @param path SkPath to append to @return true if path changed + + example: https://fiddle.skia.org/c/@Region_getBoundaryPath */ bool getBoundaryPath(SkPath* path) const; @@ -167,6 +185,8 @@ class SK_API SkRegion { at (0, 0) with zero width and height. Always returns false. @return false + + example: https://fiddle.skia.org/c/@Region_setEmpty */ bool setEmpty(); @@ -175,6 +195,8 @@ class SK_API SkRegion { @param rect bounds of constructed SkRegion @return true if rect is not empty + + example: https://fiddle.skia.org/c/@Region_setRect */ bool setRect(const SkIRect& rect); @@ -186,6 +208,8 @@ class SK_API SkRegion { @param rects array of SkIRect @param count array size @return true if constructed SkRegion is not empty + + example: https://fiddle.skia.org/c/@Region_setRects */ bool setRects(const SkIRect rects[], int count); @@ -200,6 +224,8 @@ class SK_API SkRegion { @param region SkRegion to copy by value @return SkRegion to copy by value + + example: https://fiddle.skia.org/c/@Region_setRegion */ bool setRegion(const SkRegion& region); @@ -212,6 +238,8 @@ class SK_API SkRegion { @param path SkPath providing outline @param clip SkRegion containing path @return true if constructed SkRegion is not empty + + example: https://fiddle.skia.org/c/@Region_setPath */ bool setPath(const SkPath& path, const SkRegion& clip); @@ -220,6 +248,8 @@ class SK_API SkRegion { @param rect SkIRect to intersect @return true if rect and SkRegion have area in common + + example: https://fiddle.skia.org/c/@Region_intersects */ bool intersects(const SkIRect& rect) const; @@ -228,6 +258,8 @@ class SK_API SkRegion { @param other SkRegion to intersect @return true if other and SkRegion have area in common + + example: https://fiddle.skia.org/c/@Region_intersects_2 */ bool intersects(const SkRegion& other) const; @@ -237,6 +269,8 @@ class SK_API SkRegion { @param x test SkIPoint x-coordinate @param y test SkIPoint y-coordinate @return true if (x, y) is inside SkRegion + + example: https://fiddle.skia.org/c/@Region_contains */ bool contains(int32_t x, int32_t y) const; @@ -245,6 +279,8 @@ class SK_API SkRegion { @param other SkIRect to contain @return true if other is inside SkRegion + + example: https://fiddle.skia.org/c/@Region_contains_2 */ bool contains(const SkIRect& other) const; @@ -253,6 +289,8 @@ class SK_API SkRegion { @param other SkRegion to contain @return true if other is inside SkRegion + + example: https://fiddle.skia.org/c/@Region_contains_3 */ bool contains(const SkRegion& other) const; @@ -310,6 +348,8 @@ class SK_API SkRegion { @param dx x-axis offset @param dy y-axis offset @param dst translated result + + example: https://fiddle.skia.org/c/@Region_translate_2 */ void translate(int dx, int dy, SkRegion* dst) const; @@ -367,6 +407,8 @@ class SK_API SkRegion { kDifference_Op, kIntersect_Op, kUnion_Op, kXOR_Op, kReverseDifference_Op, kReplace_Op @return false if result is empty + + example: https://fiddle.skia.org/c/@Region_op_4 */ bool op(const SkIRect& rect, const SkRegion& rgn, Op op); @@ -379,6 +421,8 @@ class SK_API SkRegion { kDifference_Op, kIntersect_Op, kUnion_Op, kXOR_Op, kReverseDifference_Op, kReplace_Op @return false if result is empty + + example: https://fiddle.skia.org/c/@Region_op_5 */ bool op(const SkRegion& rgn, const SkIRect& rect, Op op); @@ -391,6 +435,8 @@ class SK_API SkRegion { kDifference_Op, kIntersect_Op, kUnion_Op, kXOR_Op, kReverseDifference_Op, kReplace_Op @return false if result is empty + + example: https://fiddle.skia.org/c/@Region_op_6 */ bool op(const SkRegion& rgna, const SkRegion& rgnb, Op op); @@ -421,6 +467,8 @@ class SK_API SkRegion { @param region SkRegion to iterate @return SkRegion iterator + + example: https://fiddle.skia.org/c/@Region_Iterator_copy_const_SkRegion */ Iterator(const SkRegion& region); @@ -428,12 +476,16 @@ class SK_API SkRegion { Returns true if SkRegion was set; otherwise, returns false. @return true if SkRegion was set + + example: https://fiddle.skia.org/c/@Region_Iterator_rewind */ bool rewind(); /** Resets iterator, using the new SkRegion. @param region SkRegion to iterate + + example: https://fiddle.skia.org/c/@Region_Iterator_reset */ void reset(const SkRegion& region); @@ -444,6 +496,8 @@ class SK_API SkRegion { bool done() const { return fDone; } /** Advances SkRegion::Iterator to next SkIRect in SkRegion if it is not done. + + example: https://fiddle.skia.org/c/@Region_Iterator_next */ void next(); @@ -479,6 +533,8 @@ class SK_API SkRegion { @param region SkRegion to iterate @param clip bounds of iteration @return SkRegion iterator + + example: https://fiddle.skia.org/c/@Region_Cliperator_const_SkRegion_const_SkIRect */ Cliperator(const SkRegion& region, const SkIRect& clip); @@ -489,6 +545,8 @@ class SK_API SkRegion { bool done() { return fDone; } /** Advances iterator to next SkIRect in SkRegion contained by clip. + + example: https://fiddle.skia.org/c/@Region_Cliperator_next */ void next(); @@ -520,6 +578,8 @@ class SK_API SkRegion { @param left bounds of iteration @param right bounds of iteration @return SkRegion iterator + + example: https://fiddle.skia.org/c/@Region_Spanerator_const_SkRegion_int_int_int */ Spanerator(const SkRegion& region, int y, int left, int right); @@ -529,6 +589,8 @@ class SK_API SkRegion { @param left pointer to span start; may be nullptr @param right pointer to span end; may be nullptr @return true if interval was found + + example: https://fiddle.skia.org/c/@Region_Spanerator_next */ bool next(int* left, int* right); @@ -543,6 +605,8 @@ class SK_API SkRegion { @param buffer storage for binary data @return size of SkRegion + + example: https://fiddle.skia.org/c/@Region_writeToMemory */ size_t writeToMemory(void* buffer) const; @@ -552,6 +616,8 @@ class SK_API SkRegion { @param buffer storage for binary data @param length size of buffer @return bytes read + + example: https://fiddle.skia.org/c/@Region_readFromMemory */ size_t readFromMemory(const void* buffer, size_t length); diff --git a/third_party/skia/include/core/SkSize.h b/third_party/skia/include/core/SkSize.h index 87be93d00733..0fa8f9f5ef57 100644 --- a/third_party/skia/include/core/SkSize.h +++ b/third_party/skia/include/core/SkSize.h @@ -30,8 +30,10 @@ struct SkISize { /** Set the width and height to 0 */ void setEmpty() { fWidth = fHeight = 0; } - int32_t width() const { return fWidth; } - int32_t height() const { return fHeight; } + constexpr int32_t width() const { return fWidth; } + constexpr int32_t height() const { return fHeight; } + + int64_t area() const { return fWidth * fHeight; } bool equals(int32_t w, int32_t h) const { return fWidth == w && fHeight == h; } }; @@ -54,10 +56,6 @@ struct SkSize { return {SkIntToScalar(src.width()), SkIntToScalar(src.height())}; } - SkSize& operator=(const SkISize& src) { - return *this = SkSize{SkIntToScalar(src.fWidth), SkIntToScalar(src.fHeight)}; - } - static SkSize MakeEmpty() { return {0, 0}; } void set(SkScalar w, SkScalar h) { *this = SkSize{w, h}; } diff --git a/third_party/skia/include/core/SkSurface.h b/third_party/skia/include/core/SkSurface.h index eaf530490ded..bbc55979fe27 100644 --- a/third_party/skia/include/core/SkSurface.h +++ b/third_party/skia/include/core/SkSurface.h @@ -496,6 +496,8 @@ class SK_API SkSurface : public SkRefCnt { @param width one or greater @param height one or greater @return SkSurface if width and height are positive; otherwise, nullptr + + example: https://fiddle.skia.org/c/@Surface_MakeNull */ static sk_sp MakeNull(int width, int height); @@ -520,6 +522,8 @@ class SK_API SkSurface : public SkRefCnt { notifyContentWillChange(). @return unique content identifier + + example: https://fiddle.skia.org/c/@Surface_notifyContentWillChange */ uint32_t generationID(); @@ -537,6 +541,8 @@ class SK_API SkSurface : public SkRefCnt { TODO: Can kRetain_ContentChangeMode be deprecated? @param mode one of: kDiscard_ContentChangeMode, kRetain_ContentChangeMode + + example: https://fiddle.skia.org/c/@Surface_notifyContentWillChange */ void notifyContentWillChange(ContentChangeMode mode); @@ -609,6 +615,8 @@ class SK_API SkSurface : public SkRefCnt { is deleted. @return drawing SkCanvas for SkSurface + + example: https://fiddle.skia.org/c/@Surface_getCanvas */ SkCanvas* getCanvas(); @@ -622,6 +630,8 @@ class SK_API SkSurface : public SkRefCnt { @param imageInfo width, height, SkColorType, SkAlphaType, SkColorSpace, of SkSurface; width and height must be greater than zero @return compatible SkSurface or nullptr + + example: https://fiddle.skia.org/c/@Surface_makeSurface */ sk_sp makeSurface(const SkImageInfo& imageInfo); @@ -635,6 +645,8 @@ class SK_API SkSurface : public SkRefCnt { SkBudgeted::kYes. @return SkImage initialized with SkSurface contents + + example: https://fiddle.skia.org/c/@Surface_makeImageSnapshot */ sk_sp makeImageSnapshot(); @@ -646,6 +658,8 @@ class SK_API SkSurface : public SkRefCnt { * it and the surface. * - If bounds does not intersect the surface, then this returns nullptr. * - If bounds == the surface, then this is the same as calling the no-parameter variant. + + example: https://fiddle.skia.org/c/@Surface_makeImageSnapshot_2 */ sk_sp makeImageSnapshot(const SkIRect& bounds); @@ -659,6 +673,8 @@ class SK_API SkSurface : public SkRefCnt { @param y vertical offset in SkCanvas @param paint SkPaint containing SkBlendMode, SkColorFilter, SkImageFilter, and so on; or nullptr + + example: https://fiddle.skia.org/c/@Surface_draw */ void draw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint); @@ -670,6 +686,8 @@ class SK_API SkSurface : public SkRefCnt { @param pixmap storage for pixel state if pixels are readable; otherwise, ignored @return true if SkSurface has direct access to pixels + + example: https://fiddle.skia.org/c/@Surface_peekPixels */ bool peekPixels(SkPixmap* pixmap); @@ -699,6 +717,8 @@ class SK_API SkSurface : public SkRefCnt { @param srcX offset into readable pixels on x-axis; may be negative @param srcY offset into readable pixels on y-axis; may be negative @return true if pixels were copied + + example: https://fiddle.skia.org/c/@Surface_readPixels */ bool readPixels(const SkPixmap& dst, int srcX, int srcY); @@ -761,6 +781,8 @@ class SK_API SkSurface : public SkRefCnt { @param srcX offset into readable pixels on x-axis; may be negative @param srcY offset into readable pixels on y-axis; may be negative @return true if pixels were copied + + example: https://fiddle.skia.org/c/@Surface_readPixels_3 */ bool readPixels(const SkBitmap& dst, int srcX, int srcY); @@ -827,17 +849,6 @@ class SK_API SkSurface : public SkRefCnt { RescaleGamma rescaleGamma, SkFilterQuality rescaleQuality, ReadPixelsCallback callback, ReadPixelsContext context); - /** Legacy version of asyncRescaleAndReadPixels() that passes data directly to the callback - rather than using AsyncReadResult. The data is only valid during the lifetime of the - callback. - - Deprecated. - */ - using LegacyReadPixelsCallback = void(ReadPixelsContext, const void* data, size_t rowBytes); - void asyncRescaleAndReadPixels(const SkImageInfo& info, const SkIRect& srcRect, - RescaleGamma rescaleGamma, SkFilterQuality rescaleQuality, - LegacyReadPixelsCallback 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 @@ -874,23 +885,6 @@ class SK_API SkSurface : public SkRefCnt { ReadPixelsCallback callback, ReadPixelsContext); - /** Legacy version of asyncRescaleAndReadPixelsYUV420() that passes data directly to the - callback rather than using AsyncReadResult. The data is only valid during the lifetime of - the callback. - - Deprecated. - */ - using LegacyReadPixelsCallbackYUV420 = void(ReadPixelsContext, const void* data[3], - size_t rowBytes[3]); - void asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, - sk_sp dstColorSpace, - const SkIRect& srcRect, - int dstW, int dstH, - RescaleGamma rescaleGamma, - SkFilterQuality rescaleQuality, - LegacyReadPixelsCallbackYUV420 callback, - ReadPixelsContext); - /** Copies SkRect of pixels from the src SkPixmap to the SkSurface. Source SkRect corners are (0, 0) and (src.width(), src.height()). @@ -903,6 +897,8 @@ class SK_API SkSurface : public SkRefCnt { @param src storage for pixels to copy to SkSurface @param dstX x-axis position relative to SkSurface to begin copy; may be negative @param dstY y-axis position relative to SkSurface to begin copy; may be negative + + example: https://fiddle.skia.org/c/@Surface_writePixels */ void writePixels(const SkPixmap& src, int dstX, int dstY); @@ -918,6 +914,8 @@ class SK_API SkSurface : public SkRefCnt { @param src storage for pixels to copy to SkSurface @param dstX x-axis position relative to SkSurface to begin copy; may be negative @param dstY y-axis position relative to SkSurface to begin copy; may be negative + + example: https://fiddle.skia.org/c/@Surface_writePixels_2 */ void writePixels(const SkBitmap& src, int dstX, int dstY); @@ -1011,6 +1009,8 @@ class SK_API SkSurface : public SkRefCnt { @param characterization properties for parallel drawing @return true if supported + + example: https://fiddle.skia.org/c/@Surface_characterize */ bool characterize(SkSurfaceCharacterization* characterization) const; @@ -1022,6 +1022,8 @@ class SK_API SkSurface : public SkRefCnt { @param deferredDisplayList drawing commands @return false if deferredDisplayList is not compatible + + example: https://fiddle.skia.org/c/@Surface_draw_2 */ bool draw(SkDeferredDisplayList* deferredDisplayList); diff --git a/third_party/skia/include/core/SkTextBlob.h b/third_party/skia/include/core/SkTextBlob.h index de4856efdc2e..dd956f86a17d 100644 --- a/third_party/skia/include/core/SkTextBlob.h +++ b/third_party/skia/include/core/SkTextBlob.h @@ -156,6 +156,8 @@ class SK_API SkTextBlob final : public SkNVRefCnt { @param memory storage for data @param memory_size size of storage @return bytes written, or zero if required storage is larger than memory_size + + example: https://fiddle.skia.org/c/@TextBlob_serialize */ size_t serialize(const SkSerialProcs& procs, void* memory, size_t memory_size) const; @@ -169,6 +171,8 @@ class SK_API SkTextBlob final : public SkNVRefCnt { @param procs custom serial data encoders; may be nullptr @return storage containing serialized SkTextBlob + + example: https://fiddle.skia.org/c/@TextBlob_serialize_2 */ sk_sp serialize(const SkSerialProcs& procs) const; @@ -259,6 +263,8 @@ class SK_API SkTextBlobBuilder { /** Constructs empty SkTextBlobBuilder. By default, SkTextBlobBuilder has no runs. @return empty SkTextBlobBuilder + + example: https://fiddle.skia.org/c/@TextBlobBuilder_empty_constructor */ SkTextBlobBuilder(); @@ -274,6 +280,8 @@ class SK_API SkTextBlobBuilder { reused to build a new set of runs. @return SkTextBlob or nullptr + + example: https://fiddle.skia.org/c/@TextBlobBuilder_make */ sk_sp make(); diff --git a/third_party/skia/include/docs/SkPDFDocument.h b/third_party/skia/include/docs/SkPDFDocument.h index c208b7f1565c..892489e446a5 100644 --- a/third_party/skia/include/docs/SkPDFDocument.h +++ b/third_party/skia/include/docs/SkPDFDocument.h @@ -5,10 +5,14 @@ #include "include/core/SkDocument.h" +#include "include/core/SkMilestone.h" #include "include/core/SkScalar.h" #include "include/core/SkString.h" #include "include/core/SkTime.h" +#define SKPDF_STRING(X) SKPDF_STRING_IMPL(X) +#define SKPDF_STRING_IMPL(X) #X + class SkExecutor; namespace SkPDF { @@ -106,9 +110,8 @@ struct Metadata { SkString fCreator; /** The product that is converting this document to PDF. - Leave fProducer empty to get the default, correct value. */ - SkString fProducer; + SkString fProducer = SkString("Skia/PDF m" SKPDF_STRING(SK_MILESTONE)); /** The date and time the document was created. The zero default value represents an unknown/unset time. @@ -161,6 +164,9 @@ struct Metadata { SkExecutor* fExecutor = nullptr; /** Preferred Subsetter. Only respected if both are compiled in. + + The Sfntly subsetter is deprecated. + Experimental. */ enum Subsetter { @@ -199,4 +205,7 @@ static inline sk_sp MakeDocument(SkWStream* stream) { } } // namespace SkPDF + +#undef SKPDF_STRING +#undef SKPDF_STRING_IMPL #endif // SkPDFDocument_DEFINED diff --git a/third_party/skia/include/effects/SkColorMatrix.h b/third_party/skia/include/effects/SkColorMatrix.h index f2b7964b5f77..334a86dd12b0 100644 --- a/third_party/skia/include/effects/SkColorMatrix.h +++ b/third_party/skia/include/effects/SkColorMatrix.h @@ -9,30 +9,29 @@ #define SkColorMatrix_DEFINED #include "include/core/SkTypes.h" -#include + +#include +#include class SK_API SkColorMatrix { public: + constexpr SkColorMatrix() : SkColorMatrix(1, 0, 0, 0, 0, + 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, + 0, 0, 0, 1, 0) {} + + constexpr SkColorMatrix(float m00, float m01, float m02, float m03, float m04, + float m10, float m11, float m12, float m13, float m14, + float m20, float m21, float m22, float m23, float m24, + float m30, float m31, float m32, float m33, float m34) + : fMat { m00, m01, m02, m03, m04, + m10, m11, m12, m13, m14, + m20, m21, m22, m23, m24, + m30, m31, m32, m33, m34 } {} + void setIdentity(); void setScale(float rScale, float gScale, float bScale, float aScale = 1.0f); - void setRowMajor(const float src[20]) { - memcpy(fMat, src, sizeof(fMat)); - } - - void getRowMajor(float dst[20]) const { - memcpy(dst, fMat, sizeof(fMat)); - } - - enum Axis { - kR_Axis = 0, - kG_Axis = 1, - kB_Axis = 2 - }; - void setRotate(Axis, float degrees); - void setSinCos(Axis, float sine, float cosine); - void preRotate(Axis, float degrees); - void postRotate(Axis, float degrees); void postTranslate(float dr, float dg, float db, float da); void setConcat(const SkColorMatrix& a, const SkColorMatrix& b); @@ -40,25 +39,12 @@ class SK_API SkColorMatrix { void postConcat(const SkColorMatrix& mat) { this->setConcat(mat, *this); } void setSaturation(float sat); - void setRGB2YUV(); - void setYUV2RGB(); - - bool operator==(const SkColorMatrix& other) const { - return 0 == memcmp(fMat, other.fMat, sizeof(fMat)); - } - - bool operator!=(const SkColorMatrix& other) const { return !((*this) == other); } - float* get20(float m[20]) const { - memcpy(m, fMat, sizeof(fMat)); - return m; - } - void set20(const float m[20]) { - memcpy(fMat, m, sizeof(fMat)); - } + void setRowMajor(const float src[20]) { std::copy_n(src, 20, fMat.begin()); } + void getRowMajor(float dst[20]) const { std::copy_n(fMat.begin(), 20, dst); } private: - float fMat[20]; + std::array fMat; friend class SkColorFilters; }; diff --git a/third_party/skia/include/gpu/GrBackendSurface.h b/third_party/skia/include/gpu/GrBackendSurface.h index e98f6af2c2c9..e47625e767bf 100644 --- a/third_party/skia/include/gpu/GrBackendSurface.h +++ b/third_party/skia/include/gpu/GrBackendSurface.h @@ -23,7 +23,7 @@ class GrVkImageLayout; class GrGLTextureParameters; #ifdef SK_DAWN -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" #endif #ifdef SK_METAL @@ -72,7 +72,7 @@ class SK_API GrBackendFormat { static GrBackendFormat MakeVk(const GrVkYcbcrConversionInfo& ycbcrInfo); #ifdef SK_DAWN - static GrBackendFormat MakeDawn(dawn::TextureFormat format) { + static GrBackendFormat MakeDawn(wgpu::TextureFormat format) { return GrBackendFormat(format); } #endif @@ -109,10 +109,10 @@ class SK_API GrBackendFormat { #ifdef SK_DAWN /** - * If the backend API is Dawn this gets the format as a dawn::TextureFormat and returns true. + * If the backend API is Dawn this gets the format as a wgpu::TextureFormat and returns true. * Otherwise, returns false. */ - bool asDawnFormat(dawn::TextureFormat*) const; + bool asDawnFormat(wgpu::TextureFormat*) const; #endif #ifdef SK_METAL @@ -147,7 +147,7 @@ class SK_API GrBackendFormat { GrBackendFormat(const VkFormat vkFormat, const GrVkYcbcrConversionInfo&); #ifdef SK_DAWN - GrBackendFormat(dawn::TextureFormat format); + GrBackendFormat(wgpu::TextureFormat format); #endif #ifdef SK_METAL @@ -166,7 +166,7 @@ class SK_API GrBackendFormat { GrVkYcbcrConversionInfo fYcbcrConversionInfo; } fVk; #ifdef SK_DAWN - dawn::TextureFormat fDawnFormat; + wgpu::TextureFormat fDawnFormat; #endif #ifdef SK_METAL diff --git a/third_party/skia/include/gpu/GrContext.h b/third_party/skia/include/gpu/GrContext.h index 405195476d11..d89b2db67d36 100644 --- a/third_party/skia/include/gpu/GrContext.h +++ b/third_party/skia/include/gpu/GrContext.h @@ -72,8 +72,8 @@ class SK_API GrContext : public GrRecordingContext { #endif #ifdef SK_DAWN - static sk_sp MakeDawn(const dawn::Device& device, const GrContextOptions& options); - static sk_sp MakeDawn(const dawn::Device& device); + static sk_sp MakeDawn(const wgpu::Device& device, const GrContextOptions& options); + static sk_sp MakeDawn(const wgpu::Device& device); #endif static sk_sp MakeMock(const GrMockOptions*, const GrContextOptions&); @@ -365,7 +365,8 @@ class SK_API GrContext : public GrRecordingContext { void storeVkPipelineCacheData(); // Returns the gpu memory size of the the texture that backs the passed in SkImage. Returns 0 if - // the SkImage is not texture backed. + // the SkImage is not texture backed. For external format textures this will also return 0 as we + // cannot determine the correct size. static size_t ComputeImageSize(sk_sp image, GrMipMapped, bool useNextPow2 = false); /* diff --git a/third_party/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h b/third_party/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h index a4db30e66d96..b0a51001dfb6 100644 --- a/third_party/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h +++ b/third_party/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h @@ -12,6 +12,8 @@ disable_blend_equation_advanced) \ GPU_OP(DISABLE_DISCARD_FRAMEBUFFER, \ disable_discard_framebuffer) \ + GPU_OP(DISABLE_DUAL_SOURCE_BLENDING_SUPPORT, \ + disable_dual_source_blending_support) \ GPU_OP(DISABLE_TEXTURE_STORAGE, \ disable_texture_storage) \ GPU_OP(DISALLOW_LARGE_INSTANCED_DRAW, \ diff --git a/third_party/skia/include/gpu/GrSurface.h b/third_party/skia/include/gpu/GrSurface.h index b57ef02b6b7a..f350af86f423 100644 --- a/third_party/skia/include/gpu/GrSurface.h +++ b/third_party/skia/include/gpu/GrSurface.h @@ -20,20 +20,25 @@ class GrTexture; class GrSurface : public GrGpuResource { public: + /** + * Retrieves the dimensions of the surface. + */ + SkISize dimensions() const { return fDimensions; } + /** * Retrieves the width of the surface. */ - int width() const { return fWidth; } + int width() const { return fDimensions.width(); } /** * Retrieves the height of the surface. */ - int height() const { return fHeight; } + int height() const { return fDimensions.height(); } /** * Helper that gets the width and height of the surface as a bounding rectangle. */ - SkRect getBoundsRect() const { return SkRect::MakeIWH(this->width(), this->height()); } + SkRect getBoundsRect() const { return SkRect::Make(this->dimensions()); } /** * Retrieves the pixel config specified when the surface was created. @@ -75,7 +80,7 @@ class GrSurface : public GrGpuResource { inline GrSurfacePriv surfacePriv(); inline const GrSurfacePriv surfacePriv() const; - static size_t ComputeSize(const GrCaps&, const GrBackendFormat&, int width, int height, + static size_t ComputeSize(const GrCaps&, const GrBackendFormat&, SkISize dimensions, int colorSamplesPerPixel, GrMipMapped, bool binSize = false); /** @@ -115,11 +120,10 @@ class GrSurface : public GrGpuResource { // Provides access to methods that should be public within Skia code. friend class GrSurfacePriv; - GrSurface(GrGpu* gpu, const SkISize& size, GrPixelConfig config, GrProtected isProtected) + GrSurface(GrGpu* gpu, const SkISize& dimensions, GrPixelConfig config, GrProtected isProtected) : INHERITED(gpu) , fConfig(config) - , fWidth(size.width()) - , fHeight(size.height()) + , fDimensions(dimensions) , fSurfaceFlags(GrInternalSurfaceFlags::kNone) , fIsProtected(isProtected) {} @@ -145,8 +149,7 @@ class GrSurface : public GrGpuResource { } GrPixelConfig fConfig; - int fWidth; - int fHeight; + SkISize fDimensions; GrInternalSurfaceFlags fSurfaceFlags; GrProtected fIsProtected; sk_sp fReleaseHelper; diff --git a/third_party/skia/include/gpu/dawn/GrDawnTypes.h b/third_party/skia/include/gpu/dawn/GrDawnTypes.h index f8936c29d868..1b7bfe5c6756 100644 --- a/third_party/skia/include/gpu/dawn/GrDawnTypes.h +++ b/third_party/skia/include/gpu/dawn/GrDawnTypes.h @@ -10,12 +10,21 @@ #ifdef Always #undef Always +static constexpr int Always = 2; #endif -#include "dawn/dawncpp.h" +#ifdef Success +#undef Success +static constexpr int Success = 0; +#endif +#ifdef None +#undef None +static constexpr int None = 0L; +#endif +#include "dawn/webgpu_cpp.h" struct GrDawnImageInfo { - dawn::Texture fTexture; - dawn::TextureFormat fFormat; + wgpu::Texture fTexture; + wgpu::TextureFormat fFormat; uint32_t fLevelCount; GrDawnImageInfo() : fTexture(nullptr), fFormat(), fLevelCount(0) { } diff --git a/third_party/skia/include/private/GrRecordingContext.h b/third_party/skia/include/private/GrRecordingContext.h index 1f44bee16990..10d281b50602 100644 --- a/third_party/skia/include/private/GrRecordingContext.h +++ b/third_party/skia/include/private/GrRecordingContext.h @@ -22,6 +22,7 @@ class GrSurfaceContext; class GrSurfaceProxy; class GrTextBlobCache; class GrTextureContext; +class SkArenaAlloc; class GrRecordingContext : public GrImageContext { public: @@ -49,6 +50,11 @@ class GrRecordingContext : public GrImageContext { sk_sp refOpMemoryPool(); GrOpMemoryPool* opMemoryPool(); + SkArenaAlloc* recordTimeAllocator(); + // This entry point should only be used for DDL creation where we want the ops' data's lifetime + // to match that of the DDL. + std::unique_ptr detachRecordTimeAllocator(); + GrStrikeCache* getGrStrikeCache() { return fStrikeCache.get(); } GrTextBlobCache* getTextBlobCache(); const GrTextBlobCache* getTextBlobCache() const; @@ -125,6 +131,7 @@ class GrRecordingContext : public GrImageContext { std::unique_ptr fDrawingManager; // All the GrOp-derived classes use this pool. sk_sp fOpMemoryPool; + std::unique_ptr fRecordTimeAllocator; std::unique_ptr fStrikeCache; std::unique_ptr fTextBlobCache; diff --git a/third_party/skia/include/private/GrTypesPriv.h b/third_party/skia/include/private/GrTypesPriv.h index 0d29f7dc3360..69cbc6ffef48 100644 --- a/third_party/skia/include/private/GrTypesPriv.h +++ b/third_party/skia/include/private/GrTypesPriv.h @@ -248,12 +248,12 @@ enum class GrFillRule : bool { }; inline GrFillRule GrFillRuleForSkPath(const SkPath& path) { - switch (path.getFillType()) { - case SkPath::kWinding_FillType: - case SkPath::kInverseWinding_FillType: + switch (path.getNewFillType()) { + case SkPathFillType::kWinding: + case SkPathFillType::kInverseWinding: return GrFillRule::kNonzero; - case SkPath::kEvenOdd_FillType: - case SkPath::kInverseEvenOdd_FillType: + case SkPathFillType::kEvenOdd: + case SkPathFillType::kInverseEvenOdd: return GrFillRule::kEvenOdd; } SkUNREACHABLE; @@ -266,8 +266,11 @@ enum class GrAAType : unsigned { /** Use fragment shader code or mixed samples to blend with a fractional pixel coverage. */ kCoverage, /** Use normal MSAA. */ - kMSAA + kMSAA, + + kLast = kMSAA }; +static const int kGrAATypeCount = static_cast(GrAAType::kLast) + 1; static constexpr bool GrAATypeIsHW(GrAAType type) { switch (type) { @@ -823,30 +826,16 @@ static constexpr GrPixelConfig GrCompressionTypePixelConfig(SkImage::Compression SkUNREACHABLE; } -/** - * Returns true if the pixel config is a GPU-specific compressed format - * representation. - */ -static constexpr bool GrPixelConfigIsCompressed(GrPixelConfig config) { - switch (config) { - case kRGB_ETC1_GrPixelConfig: - return true; - default: - return false; - } - SkUNREACHABLE; -} - /** * Returns the data size for the given SkImage::CompressionType */ static inline size_t GrCompressedFormatDataSize(SkImage::CompressionType compressionType, - int width, int height) { + SkISize dimensions) { switch (compressionType) { case SkImage::kETC1_CompressionType: - SkASSERT((width & 3) == 0); - SkASSERT((height & 3) == 0); - return (width >> 2) * (height >> 2) * 8; + SkASSERT((dimensions.width() & 3) == 0); + SkASSERT((dimensions.height() & 3) == 0); + return (dimensions.width() >> 2) * (dimensions.height() >> 2) * 8; } SK_ABORT("Invalid pixel config"); @@ -883,7 +872,7 @@ enum class GrColorType { kRG_F16, kRGBA_16161616, - // Unusual formats that come up after reading back in cases where we are reassigning the meaning + // Unusual types that come up after reading back in cases where we are reassigning the meaning // of a texture format's channels to use for a particular color format but have to read back the // data to a full RGBA quadruple. (e.g. using a R8 texture format as A8 color type but the API // only supports reading to RGBA8.) None of these have SkColorType equivalents. @@ -891,7 +880,14 @@ enum class GrColorType { kAlpha_F32xxx, kGray_8xxx, - kLast = kGray_8xxx + // Types used to initialize backend textures. + kRGB_888, + kR_8, + kR_16, + kR_F16, + kGray_F16, + + kLast = kGray_F16 }; static const int kGrColorTypeCnt = static_cast(GrColorType::kLast) + 1; @@ -921,6 +917,11 @@ static constexpr SkColorType GrColorTypeToSkColorType(GrColorType ct) { case GrColorType::kRG_1616: return kR16G16_unorm_SkColorType; case GrColorType::kRGBA_16161616: return kR16G16B16A16_unorm_SkColorType; case GrColorType::kRG_F16: return kR16G16_float_SkColorType; + case GrColorType::kRGB_888: return kUnknown_SkColorType; + case GrColorType::kR_8: return kUnknown_SkColorType; + case GrColorType::kR_16: return kUnknown_SkColorType; + case GrColorType::kR_F16: return kUnknown_SkColorType; + case GrColorType::kGray_F16: return kUnknown_SkColorType; } SkUNREACHABLE; } @@ -983,6 +984,11 @@ static constexpr uint32_t GrColorTypeComponentFlags(GrColorType ct) { case GrColorType::kRGBA_16161616: return kRGBA_SkColorTypeComponentFlags; case GrColorType::kRG_F16: return kRed_SkColorTypeComponentFlag | kGreen_SkColorTypeComponentFlag; + case GrColorType::kRGB_888: return kRGB_SkColorTypeComponentFlags; + case GrColorType::kR_8: return kRed_SkColorTypeComponentFlag; + case GrColorType::kR_16: return kRed_SkColorTypeComponentFlag; + case GrColorType::kR_F16: return kRed_SkColorTypeComponentFlag; + case GrColorType::kGray_F16: return kGray_SkColorTypeComponentFlag; } SkUNREACHABLE; } @@ -1122,6 +1128,16 @@ static constexpr GrColorTypeDesc GrGetColorTypeDesc(GrColorType ct) { return GrColorTypeDesc::MakeRGBA(16, GrColorTypeEncoding::kUnorm); case GrColorType::kRG_F16: return GrColorTypeDesc::MakeRG(16, GrColorTypeEncoding::kFloat); + case GrColorType::kRGB_888: + return GrColorTypeDesc::MakeRGB(8, GrColorTypeEncoding::kUnorm); + case GrColorType::kR_8: + return GrColorTypeDesc::MakeR(8, GrColorTypeEncoding::kUnorm); + case GrColorType::kR_16: + return GrColorTypeDesc::MakeR(16, GrColorTypeEncoding::kUnorm); + case GrColorType::kR_F16: + return GrColorTypeDesc::MakeR(16, GrColorTypeEncoding::kFloat); + case GrColorType::kGray_F16: + return GrColorTypeDesc::MakeGray(16, GrColorTypeEncoding::kFloat); } SkUNREACHABLE; } @@ -1178,6 +1194,11 @@ static constexpr size_t GrColorTypeBytesPerPixel(GrColorType ct) { case GrColorType::kRG_1616: return 4; case GrColorType::kRGBA_16161616: return 8; case GrColorType::kRG_F16: return 4; + case GrColorType::kRGB_888: return 3; + case GrColorType::kR_8: return 1; + case GrColorType::kR_16: return 2; + case GrColorType::kR_F16: return 2; + case GrColorType::kGray_F16: return 2; } SkUNREACHABLE; } @@ -1265,6 +1286,11 @@ static constexpr GrPixelConfig GrColorTypeToPixelConfig(GrColorType colorType) { case GrColorType::kRG_1616: return kRG_1616_GrPixelConfig; case GrColorType::kRGBA_16161616: return kRGBA_16161616_GrPixelConfig; case GrColorType::kRG_F16: return kRG_half_GrPixelConfig; + case GrColorType::kRGB_888: return kUnknown_GrPixelConfig; + case GrColorType::kR_8: return kUnknown_GrPixelConfig; + case GrColorType::kR_16: return kUnknown_GrPixelConfig; + case GrColorType::kR_F16: return kUnknown_GrPixelConfig; + case GrColorType::kGray_F16: return kUnknown_GrPixelConfig; } SkUNREACHABLE; } @@ -1325,6 +1351,11 @@ static constexpr const char* GrColorTypeToStr(GrColorType ct) { case GrColorType::kRG_1616: return "kRG_1616"; case GrColorType::kRGBA_16161616: return "kRGBA_16161616"; case GrColorType::kRG_F16: return "kRG_F16"; + case GrColorType::kRGB_888: return "kRGB_888"; + case GrColorType::kR_8: return "kR_8"; + case GrColorType::kR_16: return "kR_16"; + case GrColorType::kR_F16: return "kR_F16"; + case GrColorType::kGray_F16: return "kGray_F16"; } SkUNREACHABLE; } diff --git a/third_party/skia/include/private/SkColorData.h b/third_party/skia/include/private/SkColorData.h index de1134df6ba4..5495f024acdc 100644 --- a/third_party/skia/include/private/SkColorData.h +++ b/third_party/skia/include/private/SkColorData.h @@ -425,8 +425,8 @@ using SkPMColor4f = SkRGBA4f; constexpr SkPMColor4f SK_PMColor4fTRANSPARENT = { 0, 0, 0, 0 }; constexpr SkPMColor4f SK_PMColor4fWHITE = { 1, 1, 1, 1 }; constexpr SkPMColor4f SK_PMColor4fILLEGAL = { SK_FloatNegativeInfinity, - SK_FloatNegativeInfinity, - SK_FloatNegativeInfinity, - SK_FloatNegativeInfinity }; + SK_FloatNegativeInfinity, + SK_FloatNegativeInfinity, + SK_FloatNegativeInfinity }; #endif diff --git a/third_party/skia/include/private/SkDeferredDisplayList.h b/third_party/skia/include/private/SkDeferredDisplayList.h index e8fc35b611c7..ccf1d0844a36 100644 --- a/third_party/skia/include/private/SkDeferredDisplayList.h +++ b/third_party/skia/include/private/SkDeferredDisplayList.h @@ -59,7 +59,7 @@ class SkDeferredDisplayList { const SkDeferredDisplayListPriv priv() const; private: - friend class GrDrawingManager; // for access to 'fRenderTasks' and 'fLazyProxyData' + friend class GrDrawingManager; // for access to 'fRenderTasks', 'fLazyProxyData', 'fOpPOD' friend class SkDeferredDisplayListRecorder; // for access to 'fLazyProxyData' friend class SkDeferredDisplayListPriv; @@ -71,6 +71,7 @@ class SkDeferredDisplayList { SkTArray> fRenderTasks; PendingPathsMap fPendingPaths; // This is the path data from CCPR. + std::unique_ptr fRecordTimeData; #endif sk_sp fLazyProxyData; }; diff --git a/third_party/skia/include/private/SkImageInfoPriv.h b/third_party/skia/include/private/SkImageInfoPriv.h index d0ff6fd8df3a..15f0224010ac 100644 --- a/third_party/skia/include/private/SkImageInfoPriv.h +++ b/third_party/skia/include/private/SkImageInfoPriv.h @@ -58,13 +58,6 @@ static inline bool SkAlphaTypeIsValid(unsigned value) { return value <= kLastEnum_SkAlphaType; } -static inline bool SkColorTypeIsGray(SkColorType ct) { - auto flags = SkColorTypeComponentFlags(ct); - // Currently assuming that a color type has only gray or does not have gray. - SkASSERT(!(kGray_SkColorTypeComponentFlag & flags) || kGray_SkColorTypeComponentFlag == flags); - return kGray_SkColorTypeComponentFlag == flags; -} - static int SkColorTypeShiftPerPixel(SkColorType ct) { switch (ct) { case kUnknown_SkColorType: return 0; @@ -105,6 +98,32 @@ static inline size_t SkColorTypeComputeOffset(SkColorType ct, int x, int y, size return y * rowBytes + (x << SkColorTypeShiftPerPixel(ct)); } +static inline bool SkColorTypeIsNormalized(SkColorType ct) { + switch (ct) { + case kUnknown_SkColorType: + case kAlpha_8_SkColorType: + case kRGB_565_SkColorType: + case kARGB_4444_SkColorType: + case kRGBA_8888_SkColorType: + case kRGB_888x_SkColorType: + case kBGRA_8888_SkColorType: + case kRGBA_1010102_SkColorType: + case kRGB_101010x_SkColorType: + case kGray_8_SkColorType: + case kRGBA_F16Norm_SkColorType: + case kR8G8_unorm_SkColorType: + case kA16_unorm_SkColorType: + case kA16_float_SkColorType: /*subtle... alpha is always [0,1]*/ + case kR16G16_unorm_SkColorType: + case kR16G16B16A16_unorm_SkColorType: return true; + + case kRGBA_F16_SkColorType: + case kRGBA_F32_SkColorType: + case kR16G16_float_SkColorType: return false; + } + SkUNREACHABLE; +} + /** * Returns true if |info| contains a valid combination of width, height, colorType, and alphaType. */ diff --git a/third_party/skia/include/private/SkOnce.h b/third_party/skia/include/private/SkOnce.h index 662bffb1cd24..edf3e833582b 100644 --- a/third_party/skia/include/private/SkOnce.h +++ b/third_party/skia/include/private/SkOnce.h @@ -8,6 +8,7 @@ #ifndef SkOnce_DEFINED #define SkOnce_DEFINED +#include "include/private/SkThreadAnnotations.h" #include #include @@ -39,7 +40,9 @@ class SkOnce { // Some other thread is calling fn(). // We'll just spin here acquiring until it releases Done into fState. + SK_POTENTIALLY_BLOCKING_REGION_BEGIN; while (fState.load(std::memory_order_acquire) != Done) { /*spin*/ } + SK_POTENTIALLY_BLOCKING_REGION_END; } private: diff --git a/third_party/skia/include/private/SkSemaphore.h b/third_party/skia/include/private/SkSemaphore.h index 29bbca6fa9b4..e4ca9e88f29d 100644 --- a/third_party/skia/include/private/SkSemaphore.h +++ b/third_party/skia/include/private/SkSemaphore.h @@ -10,6 +10,7 @@ #include "include/core/SkTypes.h" #include "include/private/SkOnce.h" +#include "include/private/SkThreadAnnotations.h" #include class SkSemaphore { @@ -72,7 +73,9 @@ inline void SkSemaphore::wait() { // Since this fetches the value before the subtract, zero and below means that there are no // resources left, so the thread needs to wait. if (fCount.fetch_sub(1, std::memory_order_acquire) <= 0) { + SK_POTENTIALLY_BLOCKING_REGION_BEGIN; this->osWait(); + SK_POTENTIALLY_BLOCKING_REGION_END; } } diff --git a/third_party/skia/include/private/SkTArray.h b/third_party/skia/include/private/SkTArray.h index c70164abf3b5..3b437bb25a91 100644 --- a/third_party/skia/include/private/SkTArray.h +++ b/third_party/skia/include/private/SkTArray.h @@ -49,7 +49,7 @@ template class SkTArray { SkTArray(SkTArray&& that) { // TODO: If 'that' owns its memory why don't we just steal the pointer? this->init(that.fCount); - that.move(fMemArray); + that.move(fItemArray); that.fCount = 0; } @@ -86,7 +86,7 @@ template class SkTArray { fCount = 0; this->checkRealloc(that.count()); fCount = that.count(); - that.move(fMemArray); + that.move(fItemArray); that.fCount = 0; return *this; } @@ -96,7 +96,7 @@ template class SkTArray { fItemArray[i].~T(); } if (fOwnMemory) { - sk_free(fMemArray); + sk_free(fItemArray); } } @@ -428,7 +428,7 @@ template class SkTArray { template SkTArray(SkTArray&& array, SkAlignedSTStorage* storage) { this->initWithPreallocatedStorage(array.fCount, storage->get(), N); - array.move(fMemArray); + array.move(fItemArray); array.fCount = 0; } @@ -450,12 +450,12 @@ template class SkTArray { fCount = count; if (!count && !reserveCount) { fAllocCount = 0; - fMemArray = nullptr; + fItemArray = nullptr; fOwnMemory = true; fReserved = false; } else { fAllocCount = SkTMax(count, SkTMax(kMinHeapAllocCount, reserveCount)); - fMemArray = sk_malloc_throw(fAllocCount, sizeof(T)); + fItemArray = (T*)sk_malloc_throw(fAllocCount, sizeof(T)); fOwnMemory = true; fReserved = reserveCount > 0; } @@ -466,15 +466,15 @@ template class SkTArray { SkASSERT(preallocCount > 0); SkASSERT(preallocStorage); fCount = count; - fMemArray = nullptr; + fItemArray = nullptr; fReserved = false; if (count > preallocCount) { fAllocCount = SkTMax(count, kMinHeapAllocCount); - fMemArray = sk_malloc_throw(fAllocCount, sizeof(T)); + fItemArray = (T*)sk_malloc_throw(fAllocCount, sizeof(T)); fOwnMemory = true; } else { fAllocCount = preallocCount; - fMemArray = preallocStorage; + fItemArray = (T*)preallocStorage; fOwnMemory = false; } } @@ -496,7 +496,7 @@ template class SkTArray { memcpy(&fItemArray[dst], &fItemArray[src], sizeof(T)); } template SK_WHEN(E, void) move(void* dst) { - sk_careful_memcpy(dst, fMemArray, fCount * sizeof(T)); + sk_careful_memcpy(dst, fItemArray, fCount * sizeof(T)); } template SK_WHEN(!E, void) move(int dst, int src) { @@ -551,21 +551,18 @@ template class SkTArray { fAllocCount = Sk64_pin_to_s32(newAllocCount); SkASSERT(fAllocCount >= newCount); - void* newMemArray = sk_malloc_throw(fAllocCount, sizeof(T)); - this->move(newMemArray); + T* newItemArray = (T*)sk_malloc_throw(fAllocCount, sizeof(T)); + this->move(newItemArray); if (fOwnMemory) { - sk_free(fMemArray); + sk_free(fItemArray); } - fMemArray = newMemArray; + fItemArray = newItemArray; fOwnMemory = true; fReserved = false; } - union { - T* fItemArray; - void* fMemArray; - }; + T* fItemArray; int fCount; int fAllocCount; bool fOwnMemory : 1; diff --git a/third_party/skia/include/private/SkTDArray.h b/third_party/skia/include/private/SkTDArray.h index c6a079755135..f4d2e7c3ea2f 100644 --- a/third_party/skia/include/private/SkTDArray.h +++ b/third_party/skia/include/private/SkTDArray.h @@ -319,12 +319,10 @@ template class SkTDArray { #endif void shrinkToFit() { - fReserve = fCount; - if (fReserve) { + if (fReserve != fCount) { + SkASSERT(fReserve > fCount); + fReserve = fCount; fArray = (T*)sk_realloc_throw(fArray, fReserve * sizeof(T)); - } else { - sk_free(fArray); - fArray = nullptr; } } diff --git a/third_party/skia/include/private/SkTHash.h b/third_party/skia/include/private/SkTHash.h index bc563d168c24..d04a2cc01415 100644 --- a/third_party/skia/include/private/SkTHash.h +++ b/third_party/skia/include/private/SkTHash.h @@ -274,6 +274,13 @@ class SkTHashMap { return nullptr; } + V& operator[](const K& key) { + if (V* val = this->find(key)) { + return *val; + } + return *this->set(key, V{}); + } + // Remove the key/value entry in the table with this key. void remove(const K& key) { SkASSERT(this->find(key)); diff --git a/third_party/skia/include/private/SkTLogic.h b/third_party/skia/include/private/SkTLogic.h index f128a462b4a2..8cf8c284f1d0 100644 --- a/third_party/skia/include/private/SkTLogic.h +++ b/third_party/skia/include/private/SkTLogic.h @@ -62,9 +62,9 @@ template<> struct make_index_sequence<1> : skstd::index_sequence<0>{}; struct monostate {}; template struct conjunction : std::true_type { }; -template struct conjunction : B0 { }; -template -struct conjunction : std::conditional, B0>::type { }; +template struct conjunction : T { }; +template +struct conjunction : std::conditional, T>::type { }; } // namespace skstd // The sknonstd namespace contains things we would like to be proposed and feel std-ish. diff --git a/third_party/skia/include/private/SkThreadAnnotations.h b/third_party/skia/include/private/SkThreadAnnotations.h index fd312b58853b..29e07c4eeb5a 100644 --- a/third_party/skia/include/private/SkThreadAnnotations.h +++ b/third_party/skia/include/private/SkThreadAnnotations.h @@ -76,5 +76,16 @@ #define SK_NO_THREAD_SAFETY_ANALYSIS \ SK_THREAD_ANNOTATION_ATTRIBUTE(no_thread_safety_analysis) +#if defined(SK_BUILD_FOR_GOOGLE3) + extern "C" { + void __google_potentially_blocking_region_begin(void); + void __google_potentially_blocking_region_end (void); + } + #define SK_POTENTIALLY_BLOCKING_REGION_BEGIN __google_potentially_blocking_region_begin() + #define SK_POTENTIALLY_BLOCKING_REGION_END __google_potentially_blocking_region_end() +#else + #define SK_POTENTIALLY_BLOCKING_REGION_BEGIN + #define SK_POTENTIALLY_BLOCKING_REGION_END +#endif #endif // SkThreadAnnotations_DEFINED diff --git a/third_party/skia/include/third_party/skcms/skcms.h b/third_party/skia/include/third_party/skcms/skcms.h index f45878455883..3df6b4400c9e 100644 --- a/third_party/skia/include/third_party/skcms/skcms.h +++ b/third_party/skia/include/third_party/skcms/skcms.h @@ -176,15 +176,8 @@ SKCMS_API bool skcms_ApproximateCurve(const skcms_Curve* curve, skcms_TransferFunction* approx, float* max_error); -typedef struct skcms_ICCTag { - uint32_t signature; - uint32_t type; - uint32_t size; - const uint8_t* buf; -} skcms_ICCTag; - -SKCMS_API void skcms_GetTagByIndex (const skcms_ICCProfile*, uint32_t idx, skcms_ICCTag*); -SKCMS_API bool skcms_GetTagBySignature(const skcms_ICCProfile*, uint32_t sig, skcms_ICCTag*); +SKCMS_API bool skcms_GetCHAD(const skcms_ICCProfile*, skcms_Matrix3x3*); +SKCMS_API bool skcms_GetWTPT(const skcms_ICCProfile*, float xyz[3]); // These are common ICC signature values enum { diff --git a/third_party/skia/include/utils/SkBase64.h b/third_party/skia/include/utils/SkBase64.h index d547cb4d0a44..4fa19275c726 100644 --- a/third_party/skia/include/utils/SkBase64.h +++ b/third_party/skia/include/utils/SkBase64.h @@ -21,6 +21,7 @@ struct SkBase64 { SkBase64(); Error decode(const char* src, size_t length); char* getData() { return fData; } + size_t getDataSize() { return fLength; } /** Base64 encodes src into dst. encode is a pointer to at least 65 chars. encode[64] will be used as the pad character. Encodings other than the diff --git a/third_party/skia/include/utils/mac/SkCGUtils.h b/third_party/skia/include/utils/mac/SkCGUtils.h index a8bde9950d07..43cd59f9fcee 100644 --- a/third_party/skia/include/utils/mac/SkCGUtils.h +++ b/third_party/skia/include/utils/mac/SkCGUtils.h @@ -74,13 +74,5 @@ static inline CGImageRef SkCreateCGImageRef(const SkBitmap& bm) { */ void SkCGDrawBitmap(CGContextRef, const SkBitmap&, float x, float y); -/** - * Return a provider that wraps the specified stream. - * When the provider is finally deleted, it will delete the stream. - */ -CGDataProviderRef SkCreateDataProviderFromStream(std::unique_ptr); - -CGDataProviderRef SkCreateDataProviderFromData(sk_sp); - #endif // defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) #endif // SkCGUtils_DEFINED diff --git a/third_party/skia/infra/bots/android_compile/trigger_wait_ac_task.py b/third_party/skia/infra/bots/android_compile/trigger_wait_ac_task.py new file mode 100755 index 000000000000..6a6e2b7f7c02 --- /dev/null +++ b/third_party/skia/infra/bots/android_compile/trigger_wait_ac_task.py @@ -0,0 +1,237 @@ +#!/usr/bin/env python +# Copyright (c) 2018 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. + +"""Script that triggers and waits for tasks on android-compile.skia.org""" + +import base64 +import hashlib +import json +import math +import optparse +import os +import subprocess +import sys +import time + +INFRA_BOTS_DIR = os.path.abspath(os.path.realpath(os.path.join( + os.path.dirname(os.path.abspath(__file__)), os.pardir))) +sys.path.insert(0, INFRA_BOTS_DIR) +import git_utils +import utils + + +ANDROID_COMPILE_BUCKET = 'android-compile-tasks' + +GS_RETRIES = 5 +GS_RETRY_WAIT_BASE = 15 + +POLLING_FREQUENCY_SECS = 10 +DEADLINE_SECS = 2* 60 * 60 # 2 hours. + +INFRA_FAILURE_ERROR_MSG = ( + '\n\n' + 'Your run failed due to unknown infrastructure failures.\n' + 'Please contact rmistry@ or the trooper from ' + 'http://skia-tree-status.appspot.com/trooper\n' + 'Sorry for the inconvenience!\n' +) + + +class AndroidCompileException(Exception): + pass + + +def _create_task_dict(options): + """Creates a dict representation of the requested task.""" + params = {} + params['lunch_target'] = options.lunch_target + params['mmma_targets'] = options.mmma_targets + params['issue'] = options.issue + params['patchset'] = options.patchset + params['hash'] = options.hash + return params + + +def _get_gs_bucket(): + """Returns the Google storage bucket with the gs:// prefix.""" + return 'gs://%s' % ANDROID_COMPILE_BUCKET + + +def _write_to_storage(task): + """Writes the specified compile task to Google storage.""" + with utils.tmp_dir(): + json_file = os.path.join(os.getcwd(), _get_task_file_name(task)) + with open(json_file, 'w') as f: + json.dump(task, f) + subprocess.check_call(['gsutil', 'cp', json_file, '%s/' % _get_gs_bucket()]) + print 'Created %s/%s' % (_get_gs_bucket(), os.path.basename(json_file)) + + +def _get_task_file_name(task): + """Returns the file name of the compile task. Eg: ${issue}-${patchset}.json""" + return '%s-%s-%s.json' % (task['lunch_target'], task['issue'], + task['patchset']) + + +# Checks to see if task already exists in Google storage. +# If the task has completed then the Google storage file is deleted. +def _does_task_exist_in_storage(task): + """Checks to see if the corresponding file of the task exists in storage. + + If the file exists and the task has already completed then the storage file is + deleted and False is returned. + """ + gs_file = '%s/%s' % (_get_gs_bucket(), _get_task_file_name(task)) + try: + output = subprocess.check_output(['gsutil', 'cat', gs_file]) + except subprocess.CalledProcessError: + print 'Task does not exist in Google storage' + return False + taskJSON = json.loads(output) + if taskJSON.get('done'): + print 'Task exists in Google storage and has completed.' + print 'Deleting it so that a new run can be scheduled.' + subprocess.check_call(['gsutil', 'rm', gs_file]) + return False + else: + print 'Tasks exists in Google storage and is still running.' + return True + + +def _trigger_task(options): + """Triggers a task on the compile server by creating a file in storage.""" + task = _create_task_dict(options) + # Check to see if file already exists in Google Storage. + if not _does_task_exist_in_storage(task): + _write_to_storage(task) + return task + + +def _add_cl_comment(issue, comment): + # Depot tools needs a checkout to use "git cl" even though we are just adding + # a comment to a change unrelated to the checkout. + with git_utils.NewGitCheckout(repository=utils.SKIA_REPO) as checkout: + add_comment_cmd = ['git', 'cl', 'comments', '-i', str(issue), '-a', comment] + subprocess.check_call(add_comment_cmd) + + +def trigger_and_wait(options): + """Triggers a task on the compile server and waits for it to complete.""" + task = _trigger_task(options) + print 'Android Compile Task for %d/%d has been successfully added to %s.' % ( + options.issue, options.patchset, ANDROID_COMPILE_BUCKET) + print '%s will be polled every %d seconds.' % (ANDROID_COMPILE_BUCKET, + POLLING_FREQUENCY_SECS) + + # Now poll the Google storage file till the task completes or till deadline + # is hit. + time_started_polling = time.time() + while True: + if (time.time() - time_started_polling) > DEADLINE_SECS: + raise AndroidCompileException( + 'Task did not complete in the deadline of %s seconds.' % ( + DEADLINE_SECS)) + + # Get the status of the task. + gs_file = '%s/%s' % (_get_gs_bucket(), _get_task_file_name(task)) + + for retry in range(GS_RETRIES): + try: + output = subprocess.check_output(['gsutil', 'cat', gs_file]) + except subprocess.CalledProcessError: + raise AndroidCompileException('The %s file no longer exists.' % gs_file) + try: + ret = json.loads(output) + break + except ValueError, e: + print 'Received output that could not be converted to json: %s' % output + print e + if retry == (GS_RETRIES-1): + print '%d retries did not help' % GS_RETRIES + raise + waittime = GS_RETRY_WAIT_BASE * math.pow(2, retry) + print 'Retry in %d seconds.' % waittime + time.sleep(waittime) + + if ret.get('infra_failure'): + if ret.get('error'): + raise AndroidCompileException('Run failed with:\n\n%s\n' % ret['error']) + else: + # Use a general purpose error message. + raise AndroidCompileException(INFRA_FAILURE_ERROR_MSG) + + if ret.get('done'): + if not ret.get('is_master_branch', True): + print 'The Android Framework Compile bot only works for patches and' + print 'hashes from the master branch.' + return 0 + elif ret['withpatch_success']: + print 'Your run was successfully completed.' + print 'With patch logs are here: %s' % ret['withpatch_log'] + return 0 + elif ret['nopatch_success']: + raise AndroidCompileException('The build with the patch failed and the ' + 'build without the patch succeeded. This means that the patch ' + 'causes Android to fail compilation.\n\n' + 'With patch logs are here: %s\n\n' + 'No patch logs are here: %s\n\n' + 'You can force sync of the checkout if needed here: %s\n\n' % ( + ret['withpatch_log'], ret['nopatch_log'], + 'https://skia-android-compile.corp.goog/')) + else: + msg = ('FYI: Both with patch and no patch builds of the %s bot ' + 'failed.\nThis could mean that the Android tree is currently ' + 'broken and infra is investigating.\nMarking this bot as ' + 'successful to not block the CQ.\n\n' + 'With patch logs are here: %s\n' + 'No patch logs are here: %s\n\n') % ( + options.builder_name, ret['withpatch_log'], + ret['nopatch_log']) + _add_cl_comment(task['issue'], msg) + print msg + return 0 + + # Print status of the task. + print 'Task: %s\n' % pretty_task_str(ret) + time.sleep(POLLING_FREQUENCY_SECS) + + +def pretty_task_str(task): + status = 'Not picked up by server yet' + if task.get('task_id'): + status = 'Running withpatch compilation' + if task.get('withpatch_log'): + status = 'Running nopatch compilation' + return '[id: %s, checkout: %s, status: %s]' % ( + task.get('task_id'), task.get('checkout'), status) + + +def main(): + option_parser = optparse.OptionParser() + option_parser.add_option( + '', '--lunch_target', type=str, default='', + help='The lunch target the android compile bot should build with.') + option_parser.add_option( + '', '--mmma_targets', type=str, default='', + help='The comma-separated mmma targets the android compile bot should ' + 'build.') + option_parser.add_option( + '', '--issue', type=int, default=0, + help='The Gerrit change number to get the patch from.') + option_parser.add_option( + '', '--patchset', type=int, default=0, + help='The Gerrit change patchset to use.') + option_parser.add_option( + '', '--hash', type=str, default='', + help='The Skia repo hash to compile against.') + option_parser.add_option( + '', '--builder_name', type=str, default='', + help='The builder that triggered this run.') + options, _ = option_parser.parse_args() + sys.exit(trigger_and_wait(options)) + + +if __name__ == '__main__': + main() diff --git a/third_party/skia/infra/bots/assets/asset_utils.py b/third_party/skia/infra/bots/assets/asset_utils.py old mode 100644 new mode 100755 index 686720ce9f2b..9dd9f453e437 --- a/third_party/skia/infra/bots/assets/asset_utils.py +++ b/third_party/skia/infra/bots/assets/asset_utils.py @@ -44,11 +44,16 @@ class CIPDStore(object): """Wrapper object for CIPD.""" - def __init__(self, cipd_url=DEFAULT_CIPD_SERVICE_URL): + def __init__(self, cipd_url=DEFAULT_CIPD_SERVICE_URL, + service_account_json=None): self._cipd = 'cipd' if sys.platform == 'win32': self._cipd = 'cipd.bat' self._cipd_url = cipd_url + if service_account_json: + self._service_account_json = os.path.abspath(service_account_json) + else: + self._service_account_json = None self._check_setup() def _check_setup(self): @@ -67,7 +72,9 @@ def _run(self, cmd, specify_service_url=True): cipd_args = [] if specify_service_url: cipd_args.extend(['--service-url', self._cipd_url]) - if os.getenv('USE_CIPD_GCE_AUTH'): + if self._service_account_json: + cipd_args.extend(['-service-account-json', self._service_account_json]) + elif os.getenv('USE_CIPD_GCE_AUTH'): # Enable automatic GCE authentication. For context see # https://bugs.chromium.org/p/skia/issues/detail?id=6385#c3 cipd_args.extend(['-service-account-json', ':gce']) @@ -153,7 +160,8 @@ def delete_contents(self, name): class GSStore(object): """Wrapper object for interacting with Google Storage.""" - def __init__(self, gsutil=None, bucket=DEFAULT_GS_BUCKET): + def __init__(self, gsutil=None, bucket=DEFAULT_GS_BUCKET, + service_account_json=None): if gsutil: gsutil = os.path.abspath(gsutil) else: @@ -171,6 +179,9 @@ def __init__(self, gsutil=None, bucket=DEFAULT_GS_BUCKET): self._gsutil = [gsutil] if gsutil.endswith('.py'): self._gsutil = ['python', gsutil] + if service_account_json: + sa = os.path.abspath(service_account_json) + self._gsutil += ['-o', 'Credentials:gs_service_key_file=' + sa] self._gs_bucket = bucket def copy(self, src, dst): @@ -230,9 +241,12 @@ def delete_contents(self, name): class MultiStore(object): """Wrapper object which uses CIPD as the primary store and GS for backup.""" def __init__(self, cipd_url=DEFAULT_CIPD_SERVICE_URL, + service_account_json=None, gsutil=None, gs_bucket=DEFAULT_GS_BUCKET): - self._cipd = CIPDStore(cipd_url=cipd_url) - self._gs = GSStore(gsutil=gsutil, bucket=gs_bucket) + self._cipd = CIPDStore(cipd_url=cipd_url, + service_account_json=service_account_json) + self._gs = GSStore(gsutil=gsutil, bucket=gs_bucket, + service_account_json=service_account_json) def get_available_versions(self, name): return self._cipd.get_available_versions(name) diff --git a/third_party/skia/infra/bots/assets/asset_utils_test.py b/third_party/skia/infra/bots/assets/asset_utils_test.py old mode 100644 new mode 100755 diff --git a/third_party/skia/infra/bots/assets/assets.py b/third_party/skia/infra/bots/assets/assets.py index f29ddec60806..a5284dd3ca6e 100755 --- a/third_party/skia/infra/bots/assets/assets.py +++ b/third_party/skia/infra/bots/assets/assets.py @@ -23,31 +23,43 @@ import utils +def _common_args(prs): + """Add common args to the given argparse.ArgumentParser.""" + prs.add_argument('asset_name', help='Name of the asset.') + prs.add_argument('--gsutil') + prs.add_argument('--service_account_json') + + +def _store(args): + """Return asset_utils.MultiStore based on args.""" + return asset_utils.MultiStore(gsutil=args.gsutil, + service_account_json=args.service_account_json) + + +def _asset(args): + """Return asset_utils.Asset based on args.""" + return asset_utils.Asset(args.asset_name, _store(args)) + + def add(args): """Add a new asset.""" - asset_utils.Asset.add(args.asset_name, - asset_utils.MultiStore(gsutil=args.gsutil)) + asset_utils.Asset.add(args.asset_name, _store(args)) def remove(args): """Remove an asset.""" - asset_utils.Asset(args.asset_name, - asset_utils.MultiStore(gsutil=args.gsutil)).remove() + _asset(args).remove() def download(args): """Download the current version of an asset.""" - asset = asset_utils.Asset(args.asset_name, - asset_utils.MultiStore(gsutil=args.gsutil)) - asset.download_current_version(args.target_dir) + _asset(args).download_current_version(args.target_dir) def upload(args): """Upload a new version of the asset.""" - asset = asset_utils.Asset(args.asset_name, - asset_utils.MultiStore(gsutil=args.gsutil)) - asset.upload_new_version(args.target_dir, commit=args.commit, - extra_tags=args.extra_tags) + _asset(args).upload_new_version(args.target_dir, commit=args.commit, + extra_tags=args.extra_tags) def main(argv): @@ -56,27 +68,23 @@ def main(argv): prs_add = subs.add_parser('add', help='Add a new asset.') prs_add.set_defaults(func=add) - prs_add.add_argument('asset_name', help='Name of the asset.') - prs_add.add_argument('--gsutil') + _common_args(prs_add) prs_remove = subs.add_parser('remove', help='Remove an asset.') prs_remove.set_defaults(func=remove) - prs_remove.add_argument('asset_name', help='Name of the asset.') - prs_remove.add_argument('--gsutil') + _common_args(prs_remove) prs_download = subs.add_parser( 'download', help='Download the current version of an asset.') prs_download.set_defaults(func=download) - prs_download.add_argument('asset_name', help='Name of the asset.') + _common_args(prs_download) prs_download.add_argument('--target_dir', '-t', required=True) - prs_download.add_argument('--gsutil') prs_upload = subs.add_parser( 'upload', help='Upload a new version of an asset.') prs_upload.set_defaults(func=upload) - prs_upload.add_argument('asset_name', help='Name of the asset.') + _common_args(prs_upload) prs_upload.add_argument('--target_dir', '-t', required=True) - prs_upload.add_argument('--gsutil') prs_upload.add_argument('--commit', action='store_true') prs_upload.add_argument( '--extra_tags', nargs='+', diff --git a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/VERSION b/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/VERSION deleted file mode 100644 index 62f9457511f8..000000000000 --- a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/VERSION +++ /dev/null @@ -1 +0,0 @@ -6 \ No newline at end of file diff --git a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/common.py b/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/common.py deleted file mode 100755 index caa0ad899c2d..000000000000 --- a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/common.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/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/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/create.py b/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/create.py deleted file mode 100755 index 50571297cdaf..000000000000 --- a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/create.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2018 Google Inc. -# -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - - -"""Create the asset.""" - - -import argparse -import common -import os -import shutil -import subprocess -import utils - -# This is basically all the deps of g++-multilib-mips64el-linux-gnuabi64 that -# are not already installed on the bots. -# -# We could try to also include packages that *are* already installed on the bots -# as well, but that would be quite a bit, and would probably entail more hacky -# fixes like below. -# -# There is probably a way to generate this list from apt, but it's not as -# straightforward as it should be. -PKGS = [ - 'binutils-mips64el-linux-gnuabi64', - 'cpp-8-mips64el-linux-gnuabi64', - 'g++-8-mips64el-linux-gnuabi64', - 'gcc-8-cross-base', - 'gcc-8-mips64el-linux-gnuabi64', - 'gcc-8-mips64el-linux-gnuabi64-base', - 'libatomic1-mips64el-cross', - 'libc6-dev-mips64el-cross', - 'libc6-mips64el-cross', - 'libgcc-8-dev-mips64el-cross', - 'libgcc1-mips64el-cross', - 'libgomp1-mips64el-cross', - 'libisl19', - 'libmpfr6', # This is new in buster, so build machines don't have it yet. - 'libstdc++-8-dev-mips64el-cross', - 'libstdc++6-mips64el-cross', - 'linux-libc-dev-mips64el-cross', -] - -def create_asset(target_dir): - """Create the asset.""" - # This is all a bit hacky. Rather than installing to a chroot, we just extract - # all the packages to the target dir, then fix things up so that it can be - # used in our recipes. - with utils.tmp_dir(): - # Download required Debian packages. - subprocess.check_call(['apt-get', 'download'] + PKGS) - for f in os.listdir('.'): - subprocess.check_call(['dpkg-deb', '--extract', f, target_dir]) - parent_dir = os.path.join(target_dir, 'usr') - # Remove unnecessary files that cause problems with zipping (due to dangling - # symlinks). - os.remove(os.path.join(parent_dir, - 'lib/gcc-cross/mips64el-linux-gnuabi64/8/libcc1.so')) - shutil.rmtree(os.path.join(parent_dir, 'share')) - # Remove usr/ prefix. - for d in os.listdir(parent_dir): - os.rename(os.path.join(parent_dir, d), os.path.join(target_dir, d)) - os.rmdir(parent_dir) - # Remove absolute paths in GNU ld scripts. - lib_dir = os.path.join(target_dir, 'mips64el-linux-gnuabi64/lib') - ld_script_token = 'OUTPUT_FORMAT(elf64-tradlittlemips)' - ld_script_files = subprocess.check_output( - ['grep', '--recursive', '--files-with-matches', - '--binary-files=without-match', '--fixed-strings', ld_script_token, - lib_dir]).split() - abs_path = '/usr/mips64el-linux-gnuabi64/lib/' - for f in ld_script_files: - with open(f) as script: - contents = script.read() - contents = contents.replace(abs_path, '') - with open(f, 'w') as script: - script.write(contents) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('--target_dir', '-t', required=True) - args = parser.parse_args() - create_asset(args.target_dir) - - -if __name__ == '__main__': - main() diff --git a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/create_and_upload.py b/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/create_and_upload.py deleted file mode 100755 index de56a80fa858..000000000000 --- a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/create_and_upload.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/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. - - -"""Create the asset and upload it.""" - - -import argparse -import common -import os -import subprocess -import sys -import utils - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('--gsutil') - args = parser.parse_args() - - with utils.tmp_dir(): - cwd = os.getcwd() - create_script = os.path.join(common.FILE_DIR, 'create.py') - upload_script = os.path.join(common.FILE_DIR, 'upload.py') - - try: - subprocess.check_call(['python', create_script, '-t', cwd]) - cmd = ['python', upload_script, '-t', cwd] - if args.gsutil: - cmd.extend(['--gsutil', args.gsutil]) - subprocess.check_call(cmd) - except subprocess.CalledProcessError: - # Trap exceptions to avoid printing two stacktraces. - sys.exit(1) - - -if __name__ == '__main__': - main() diff --git a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/download.py b/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/download.py deleted file mode 100755 index ca999e03783f..000000000000 --- a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/download.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/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/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/upload.py b/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/upload.py deleted file mode 100755 index bdfbda783ea6..000000000000 --- a/third_party/skia/infra/bots/assets/mips64el_toolchain_linux/upload.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/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/third_party/skia/infra/bots/assets/skimage/VERSION b/third_party/skia/infra/bots/assets/skimage/VERSION index 72f523f36edb..86ee83a4a268 100644 --- a/third_party/skia/infra/bots/assets/skimage/VERSION +++ b/third_party/skia/infra/bots/assets/skimage/VERSION @@ -1 +1 @@ -39 \ No newline at end of file +40 \ No newline at end of file diff --git a/third_party/skia/infra/bots/assets/skp/VERSION b/third_party/skia/infra/bots/assets/skp/VERSION index 274ccca8ac98..58e77f351501 100644 --- a/third_party/skia/infra/bots/assets/skp/VERSION +++ b/third_party/skia/infra/bots/assets/skp/VERSION @@ -1 +1 @@ -209 \ No newline at end of file +215 \ No newline at end of file diff --git a/third_party/skia/infra/bots/assets/text_blob_traces/README.md b/third_party/skia/infra/bots/assets/text_blob_traces/README.md new file mode 100644 index 000000000000..b8e335c7c652 --- /dev/null +++ b/third_party/skia/infra/bots/assets/text_blob_traces/README.md @@ -0,0 +1,41 @@ +Text Blob Traces +================ + +Create +------ + +Download and build Chromium as usual, but add the line + + #define SK_CAPTURE_DRAW_TEXT_BLOB + +to the top of `third_party/skia/src/core/SkRemoteGlyphCache.h`. +Run `chrome --no-sandbox URL` Trace files will be written to the current +working directory. Use `blob_cache_sim` to check the contents of the trace. + +Upload +------ + +To upload a new version of the assets, first place the new version in the +directory `text_blob_traces`, then execute: + + infra/bots/assets/assets.py upload -t text_blob_traces text_blob_traces + +Then commit the file `infra/bots/assets/text_blob_traces/VERSION` + +Download +-------- + +Execute: + + infra/bots/assets/assets.py download -t text_blob_traces text_blob_traces + +Run Bench and Simulator +----------------------- + + tools/git-sync-deps + bin/gn gen out/release --args='is_debug=false' + ninja -C out/release nanobench blob_cache_sim + + out/release/nanobench -m SkDiffBench --texttraces text_blob_traces -q + + out/release/blob_cache_sim text_blob_traces/* diff --git a/third_party/skia/infra/bots/assets/text_blob_traces/VERSION b/third_party/skia/infra/bots/assets/text_blob_traces/VERSION new file mode 100644 index 000000000000..c227083464fb --- /dev/null +++ b/third_party/skia/infra/bots/assets/text_blob_traces/VERSION @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/third_party/skia/infra/bots/assets/valgrind/VERSION b/third_party/skia/infra/bots/assets/valgrind/VERSION index c7930257dfef..f11c82a4cb6c 100644 --- a/third_party/skia/infra/bots/assets/valgrind/VERSION +++ b/third_party/skia/infra/bots/assets/valgrind/VERSION @@ -1 +1 @@ -7 \ No newline at end of file +9 \ No newline at end of file diff --git a/third_party/skia/infra/bots/assets/valgrind/create.py b/third_party/skia/infra/bots/assets/valgrind/create.py index 3f6707de1536..e01cc443c1b0 100755 --- a/third_party/skia/infra/bots/assets/valgrind/create.py +++ b/third_party/skia/infra/bots/assets/valgrind/create.py @@ -22,7 +22,7 @@ import utils -VALGRIND = 'valgrind-3.13.0' +VALGRIND = 'valgrind-3.15.0' TARBALL = '%s.tar.bz2' % VALGRIND DOWNLOAD_URL = 'ftp://sourceware.org/pub/valgrind/%s' % TARBALL TEMP_DIR = os.path.join(tempfile.gettempdir(), 'skia-%s' % VALGRIND) diff --git a/third_party/skia/infra/bots/canvaskit.isolate b/third_party/skia/infra/bots/canvaskit.isolate new file mode 100644 index 000000000000..5863ff9fd981 --- /dev/null +++ b/third_party/skia/infra/bots/canvaskit.isolate @@ -0,0 +1,13 @@ +{ + 'includes': [ + 'swarm_recipe.isolate', + ], + 'variables': { + 'files': [ + '../../modules/canvaskit', + '../../modules/pathkit/perf/perfReporter.js', + '../../modules/pathkit/tests/testReporter.js', + '../canvaskit', + ], + }, +} diff --git a/third_party/skia/infra/bots/check_deps.py b/third_party/skia/infra/bots/check_deps.py old mode 100644 new mode 100755 diff --git a/third_party/skia/infra/bots/compile.isolate b/third_party/skia/infra/bots/compile.isolate index 85accb86e25a..8b9f55abfdfd 100644 --- a/third_party/skia/infra/bots/compile.isolate +++ b/third_party/skia/infra/bots/compile.isolate @@ -12,6 +12,7 @@ '../../bench', '../../bin/fetch-clang-format', '../../bin/fetch-gn', + '../../build/fuchsia', '../../build_overrides/dawn.gni', '../../buildtools', '../../dm', @@ -43,7 +44,6 @@ 'assets/cast_toolchain/VERSION', 'assets/clang_linux/VERSION', 'assets/clang_win/VERSION', - 'assets/mips64el_toolchain_linux/VERSION', ], }, } diff --git a/third_party/skia/infra/bots/g3_compile/trigger_wait_g3_task.py b/third_party/skia/infra/bots/g3_compile/trigger_wait_g3_task.py old mode 100644 new mode 100755 index df0e49c320bc..c79620097478 --- a/third_party/skia/infra/bots/g3_compile/trigger_wait_g3_task.py +++ b/third_party/skia/infra/bots/g3_compile/trigger_wait_g3_task.py @@ -16,6 +16,7 @@ INFRA_BOTS_DIR = os.path.abspath(os.path.realpath(os.path.join( os.path.dirname(os.path.abspath(__file__)), os.pardir))) sys.path.insert(0, INFRA_BOTS_DIR) +import git_utils import utils @@ -108,6 +109,15 @@ def _trigger_task(options): return task +def _add_cl_comment(issue, comment): + # Depot tools needs a checkout to use "git cl" even though we are just adding + # a comment to a change unrelated to the checkout. + # TODO(rmistry): Try using the Gerrit API? + with git_utils.NewGitCheckout(repository=utils.SKIA_REPO): + add_comment_cmd = ['git', 'cl', 'comments', '-i', str(issue), '-a', comment] + subprocess.check_call(add_comment_cmd) + + def _read_from_storage(gs_file, use_expo_retries=True): """Returns the contents of the specified file from storage.""" num_retries = GS_RETRIES if use_expo_retries else 1 @@ -168,6 +178,14 @@ def trigger_and_wait(options): elif ret['status'] == 'merge_conflict': raise G3CompileException(MERGE_CONFLICT_ERROR_MSG) elif ret['status'] == 'failure': + # Add a comment to the CL before throwing an exception. See skbug/9631 + # for context. + msg = ('FYI: The %s experimental CQ bot failed for patchset #%s.\n' + 'The bot is known to be flaky and the failure might or might ' + 'not be related to this change.\n' + 'Please take a quick look at http://cl/%s to verify.') % ( + options.builder_name, task['patchset'], ret['cl']) + _add_cl_comment(task['issue'], msg) raise G3CompileException( '\n\nRun failed G3 TAP: cl/%s' % ret['cl'] + PATCHING_INFORMATION) elif ret['status'] == 'success': @@ -201,6 +219,9 @@ def main(): option_parser.add_option( '', '--output_file', type=str, help='The file to write the task to.') + option_parser.add_option( + '', '--builder_name', type=str, default='', + help='The builder that triggered this run.') options, _ = option_parser.parse_args() sys.exit(trigger_and_wait(options)) diff --git a/third_party/skia/infra/bots/gen_compile_isolate.py b/third_party/skia/infra/bots/gen_compile_isolate.py old mode 100644 new mode 100755 index 01f76ed30b34..c9bf2629d2e0 --- a/third_party/skia/infra/bots/gen_compile_isolate.py +++ b/third_party/skia/infra/bots/gen_compile_isolate.py @@ -40,7 +40,6 @@ 'infra/bots/assets/cast_toolchain/VERSION', 'infra/bots/assets/clang_linux/VERSION', 'infra/bots/assets/clang_win/VERSION', - 'infra/bots/assets/mips64el_toolchain_linux/VERSION', 'infra/canvaskit', 'infra/pathkit', 'resources', diff --git a/third_party/skia/infra/bots/gen_tasks_logic/gen_tasks_logic.go b/third_party/skia/infra/bots/gen_tasks_logic/gen_tasks_logic.go index b8d913ee994a..be1783bd273a 100644 --- a/third_party/skia/infra/bots/gen_tasks_logic/gen_tasks_logic.go +++ b/third_party/skia/infra/bots/gen_tasks_logic/gen_tasks_logic.go @@ -22,8 +22,6 @@ import ( "time" "github.com/golang/glog" - "go.skia.org/infra/go/sklog" - "go.skia.org/infra/go/util" "go.skia.org/infra/task_scheduler/go/specs" ) @@ -42,7 +40,7 @@ const ( DEFAULT_OS_DEBIAN = "Debian-9.4" DEFAULT_OS_LINUX_GCE = "Debian-9.8" DEFAULT_OS_MAC = "Mac-10.14.6" - DEFAULT_OS_WIN = "Windows-Server-14393" + DEFAULT_OS_WIN = "Windows-Server-17763" // Small is a 2-core machine. // TODO(dogben): Would n1-standard-1 or n1-standard-2 be sufficient? @@ -99,66 +97,10 @@ var ( Path: "cache/docker", }, } - // Versions of the following copied from - // https://chrome-internal.googlesource.com/infradata/config/+/master/configs/cr-buildbucket/swarming_task_template_canary.json#42 - // to test the fix for chromium:836196. - // (In the future we may want to use versions from - // https://chrome-internal.googlesource.com/infradata/config/+/master/configs/cr-buildbucket/swarming_task_template.json#42) - // TODO(borenet): Roll these versions automatically! - CIPD_PKGS_PYTHON = []*specs.CipdPackage{ - &specs.CipdPackage{ - Name: "infra/tools/luci/vpython/${platform}", - Path: "cipd_bin_packages", - Version: "git_revision:f96db4b66034c859090be3c47eb38227277f228b", - }, - } - - CIPD_PKGS_CPYTHON = []*specs.CipdPackage{ - &specs.CipdPackage{ - Name: "infra/python/cpython/${platform}", - Path: "cipd_bin_packages", - Version: "version:2.7.15.chromium14", - }, - } - - CIPD_PKGS_KITCHEN = append([]*specs.CipdPackage{ - &specs.CipdPackage{ - Name: "infra/tools/luci/kitchen/${platform}", - Path: ".", - Version: "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc", - }, - &specs.CipdPackage{ - Name: "infra/tools/luci-auth/${platform}", - Path: "cipd_bin_packages", - Version: "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e", - }, - }, CIPD_PKGS_PYTHON...) - - CIPD_PKGS_GIT = []*specs.CipdPackage{ - &specs.CipdPackage{ - Name: "infra/git/${platform}", - Path: "cipd_bin_packages", - Version: "version:2.17.1.chromium15", - }, - &specs.CipdPackage{ - Name: "infra/tools/git/${platform}", - Path: "cipd_bin_packages", - Version: "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77", - }, - &specs.CipdPackage{ - Name: "infra/tools/luci/git-credential-luci/${platform}", - Path: "cipd_bin_packages", - Version: "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e", - }, - } - CIPD_PKGS_GSUTIL = []*specs.CipdPackage{ - &specs.CipdPackage{ - Name: "infra/gsutil", - Path: "cipd_bin_packages", - Version: "version:4.28", - }, - } + // TODO(borenet): This hacky and bad. + CIPD_PKGS_KITCHEN = append(specs.CIPD_PKGS_KITCHEN[:2], specs.CIPD_PKGS_PYTHON[1]) + CIPD_PKG_CPYTHON = specs.CIPD_PKGS_PYTHON[0] CIPD_PKGS_XCODE = []*specs.CipdPackage{ // https://chromium.googlesource.com/chromium/tools/build/+/e19b7d9390e2bb438b566515b141ed2b9ed2c7c2/scripts/slave/recipe_modules/ios/api.py#317 @@ -246,9 +188,6 @@ type Config struct { // URL of the Skia Gold known hashes endpoint. GoldHashesURL string `json:"gold_hashes_url"` - // GCS bucket used for Calmbench results. - GsBucketCalm string `json:"gs_bucket_calm"` - // GCS bucket used for GM results. GsBucketGm string `json:"gs_bucket_gm"` @@ -268,13 +207,12 @@ type Config struct { Project string `json:"project"` // Service accounts. - ServiceAccountCompile string `json:"service_account_compile"` - ServiceAccountHousekeeper string `json:"service_account_housekeeper"` - ServiceAccountRecreateSKPs string `json:"service_account_recreate_skps"` - ServiceAccountUploadBinary string `json:"service_account_upload_binary"` - ServiceAccountUploadCalmbench string `json:"service_account_upload_calmbench"` - ServiceAccountUploadGM string `json:"service_account_upload_gm"` - ServiceAccountUploadNano string `json:"service_account_upload_nano"` + ServiceAccountCompile string `json:"service_account_compile"` + ServiceAccountHousekeeper string `json:"service_account_housekeeper"` + ServiceAccountRecreateSKPs string `json:"service_account_recreate_skps"` + ServiceAccountUploadBinary string `json:"service_account_upload_binary"` + ServiceAccountUploadGM string `json:"service_account_upload_gm"` + ServiceAccountUploadNano string `json:"service_account_upload_nano"` // Optional override function which derives Swarming bot dimensions // from parts of task names. @@ -312,6 +250,18 @@ func LoadJson(filename string, dest interface{}) { } } +// In returns true if |s| is *in* |a| slice. +// TODO(borenet): This is copied from go.skia.org/infra/go/util to avoid the +// huge set of additional dependencies added by that package. +func In(s string, a []string) bool { + for _, x := range a { + if x == s { + return true + } + } + return false +} + // GenTasks regenerates the tasks.json file. Loads the job list from a jobs.json // file which is the sibling of the calling gen_tasks.go file. If cfg is nil, it // is similarly loaded from a cfg.json file which is the sibling of the calling @@ -369,7 +319,7 @@ func GenTasks(cfg *Config) { func getThisDirName() string { _, thisFileName, _, ok := runtime.Caller(0) if !ok { - sklog.Fatal("Unable to find path to current file.") + glog.Fatal("Unable to find path to current file.") } return filepath.Dir(filepath.Dir(thisFileName)) } @@ -381,7 +331,7 @@ func getThisDirName() string { func getCallingDirName() string { _, callingFileName, _, ok := runtime.Caller(2) if !ok { - sklog.Fatal("Unable to find path to calling file.") + glog.Fatal("Unable to find path to calling file.") } return filepath.Dir(callingFileName) } @@ -417,7 +367,7 @@ func props(p map[string]string) string { j, err := json.Marshal(d) if err != nil { - sklog.Fatal(err) + glog.Fatal(err) } return strings.Replace(string(j), "\\u003c", "<", -1) } @@ -427,9 +377,9 @@ func props(p map[string]string) string { func (b *builder) kitchenTask(name, recipe, isolate, serviceAccount string, dimensions []string, extraProps map[string]string, outputDir string) *specs.TaskSpec { cipd := append([]*specs.CipdPackage{}, CIPD_PKGS_KITCHEN...) if strings.Contains(name, "Win") && !strings.Contains(name, "LenovoYogaC630") { - cipd = append(cipd, CIPD_PKGS_CPYTHON...) + cipd = append(cipd, CIPD_PKG_CPYTHON) } else if strings.Contains(name, "P30") { - cipd = append(cipd, CIPD_PKGS_CPYTHON...) + cipd = append(cipd, CIPD_PKG_CPYTHON) } properties := map[string]string{ "buildername": name, @@ -503,7 +453,7 @@ func (b *builder) dockerGceDimensions() []string { // deriveCompileTaskName returns the name of a compile task based on the given // job name. func (b *builder) deriveCompileTaskName(jobName string, parts map[string]string) string { - if parts["role"] == "Test" || parts["role"] == "Perf" || parts["role"] == "Calmbench" { + if parts["role"] == "Test" || parts["role"] == "Perf" { task_os := parts["os"] ec := []string{} if val := parts["extra_config"]; val != "" { @@ -512,17 +462,17 @@ func (b *builder) deriveCompileTaskName(jobName string, parts map[string]string) "Skpbench", "AbandonGpuContext", "PreAbandonGpuContext", "Valgrind", "ReleaseAndAbandonGpuContext", "CCPR", "FSAA", "FAAA", "FDAA", "NativeFonts", "GDI", "NoGPUThreads", "ProcDump", "DDL1", "DDL3", "T8888", "DDLTotal", "DDLRecord", "9x9", - "BonusConfigs", "SkottieTracing", "SkottieWASM", "NonNVPR", "Mskp"} + "BonusConfigs", "SkottieTracing", "SkottieWASM", "NonNVPR", "Mskp", "Docker"} keep := make([]string, 0, len(ec)) for _, part := range ec { - if !util.In(part, ignore) { + if !In(part, ignore) { keep = append(keep, part) } } ec = keep } if task_os == "Android" { - if !util.In("Android", ec) { + if !In("Android", ec) { ec = append([]string{"Android"}, ec...) } task_os = "Debian9" @@ -537,6 +487,10 @@ func (b *builder) deriveCompileTaskName(jobName string, parts map[string]string) task_os = "Mac" } else if strings.Contains(task_os, "Win") { task_os = "Win" + } else if parts["compiler"] == "GCC" { + // GCC compiles are now on a Docker container. We use the same OS and + // version to compile as to test. + ec = append(ec, "Docker") } else if strings.Contains(task_os, "Ubuntu") || strings.Contains(task_os, "Debian") { task_os = "Debian9" } else if strings.Contains(task_os, "Mac") { @@ -591,6 +545,9 @@ func (b *builder) defaultSwarmDimensions(parts map[string]string) []string { d := map[string]string{ "pool": b.cfg.Pool, } + if strings.Contains(parts["extra_config"], "Docker") && (parts["role"] == "Build" || (parts["cpu_or_gpu"] == "CPU" && parts["model"] == "GCE")) { + return b.dockerGceDimensions() + } if os, ok := parts["os"]; ok { d["os"], ok = map[string]string{ "Android": "Android", @@ -600,10 +557,11 @@ func (b *builder) defaultSwarmDimensions(parts map[string]string) []string { "Mac": DEFAULT_OS_MAC, "Mac10.13": "Mac-10.13.6", "Mac10.14": "Mac-10.14.3", + "Mac10.15": "Mac-10.15.1", "Ubuntu18": "Ubuntu-18.04", "Win": DEFAULT_OS_WIN, - "Win10": "Windows-10-18362", - "Win2016": DEFAULT_OS_WIN, + "Win10": "Windows-10-18363", + "Win2019": DEFAULT_OS_WIN, "Win7": "Windows-7-SP1", "Win8": "Windows-8.1-SP0", "iOS": "iOS-11.4.1", @@ -619,10 +577,6 @@ func (b *builder) defaultSwarmDimensions(parts map[string]string) []string { // ChOps VMs are at a newer version of MacOS. d["os"] = "Mac-10.14.6" } - if d["os"] == DEFAULT_OS_WIN { - // Upgrades result in a new image but not a new OS version. - d["image"] = "windows-server-2016-dc-v20190108" - } if parts["model"] == "LenovoYogaC630" { // This is currently a unique snowflake. d["os"] = "Windows-10" @@ -630,7 +584,7 @@ func (b *builder) defaultSwarmDimensions(parts map[string]string) []string { } else { d["os"] = DEFAULT_OS_DEBIAN } - if parts["role"] == "Test" || parts["role"] == "Perf" || parts["role"] == "Calmbench" { + if parts["role"] == "Test" || parts["role"] == "Perf" { if strings.Contains(parts["os"], "Android") || strings.Contains(parts["os"], "Chromecast") { // For Android, the device type is a better dimension // than CPU or GPU. @@ -650,6 +604,7 @@ func (b *builder) defaultSwarmDimensions(parts map[string]string) []string { "Pixel2XL": {"taimen", "PPR1.180610.009"}, "Pixel3": {"blueline", "PQ1A.190105.004"}, "Pixel3a": {"sargo", "QP1A.190711.020"}, + "Pixel4": {"flame", "QD1A.190821.011.C4"}, "TecnoSpark3Pro": {"TECNO-KB8", "PPR1.180610.011"}, }[parts["model"]] if !ok { @@ -731,14 +686,14 @@ func (b *builder) defaultSwarmDimensions(parts map[string]string) []string { // At some point this might use the device ID, but for now it's like Chromebooks. "Adreno630": "Adreno630", "GT610": "10de:104a-23.21.13.9101", - "GTX660": "10de:11c0-25.21.14.1634", - "GTX960": "10de:1401-25.21.14.1634", + "GTX660": "10de:11c0-26.21.14.4120", + "GTX960": "10de:1401-26.21.14.4120", "IntelHD4400": "8086:0a16-20.19.15.4963", - "IntelIris540": "8086:1926-25.20.100.6519", + "IntelIris540": "8086:1926-26.20.100.7463", "IntelIris6100": "8086:162b-20.19.15.4963", - "IntelIris655": "8086:3ea5-25.20.100.6519", - "RadeonHD7770": "1002:683d-24.20.13001.1010", - "RadeonR9M470X": "1002:6646-24.20.13001.1010", + "IntelIris655": "8086:3ea5-26.20.100.7463", + "RadeonHD7770": "1002:683d-26.20.13031.18002", + "RadeonR9M470X": "1002:6646-26.20.13031.18002", "QuadroP400": "10de:1cb3-25.21.14.1678", }[parts["cpu_or_gpu_value"]] if !ok { @@ -828,15 +783,15 @@ func (b *builder) relpath(f string) string { target := filepath.Join(b.relpathTargetDir, f) rv, err := filepath.Rel(b.relpathBaseDir, target) if err != nil { - sklog.Fatal(err) + glog.Fatal(err) } return rv } // bundleRecipes generates the task to bundle and isolate the recipes. func (b *builder) bundleRecipes() string { - pkgs := append([]*specs.CipdPackage{}, CIPD_PKGS_GIT...) - pkgs = append(pkgs, CIPD_PKGS_PYTHON...) + pkgs := append([]*specs.CipdPackage{}, specs.CIPD_PKGS_GIT...) + pkgs = append(pkgs, specs.CIPD_PKGS_PYTHON...) b.MustAddTask(BUNDLE_RECIPES_NAME, &specs.TaskSpec{ CipdPackages: pkgs, Command: []string{ @@ -857,7 +812,7 @@ func (b *builder) bundleRecipes() string { func (b *builder) buildTaskDrivers() string { b.MustAddTask(BUILD_TASK_DRIVERS_NAME, &specs.TaskSpec{ Caches: CACHES_GO, - CipdPackages: append(CIPD_PKGS_GIT, b.MustGetCipdPackageFromAsset("go")), + CipdPackages: append(specs.CIPD_PKGS_GIT, b.MustGetCipdPackageFromAsset("go")), Command: []string{ "/bin/bash", "skia/infra/bots/build_task_drivers.sh", specs.PLACEHOLDER_ISOLATED_OUTDIR, }, @@ -873,7 +828,7 @@ func (b *builder) buildTaskDrivers() string { // updateGoDeps generates the task to update Go dependencies. func (b *builder) updateGoDeps(name string) string { - cipd := append([]*specs.CipdPackage{}, CIPD_PKGS_GIT...) + cipd := append([]*specs.CipdPackage{}, specs.CIPD_PKGS_GIT...) cipd = append(cipd, b.MustGetCipdPackageFromAsset("go")) cipd = append(cipd, b.MustGetCipdPackageFromAsset("protoc")) @@ -947,7 +902,7 @@ func getIsolatedCIPDDeps(parts map[string]string) []string { // Skpbench only needs skps deps = append(deps, ISOLATE_SKP_NAME) deps = append(deps, ISOLATE_MSKP_NAME) - } else if util.In(o, rpiOS) { + } else if In(o, rpiOS) { deps = append(deps, ISOLATE_SKP_NAME) deps = append(deps, ISOLATE_SVG_NAME) deps = append(deps, ISOLATE_SKIMAGE_NAME) @@ -962,7 +917,7 @@ func (b *builder) usesGit(t *specs.TaskSpec, name string) { if !strings.Contains(name, "NoDEPS") { t.Caches = append(t.Caches, CACHES_WORKDIR...) } - t.CipdPackages = append(t.CipdPackages, CIPD_PKGS_GIT...) + t.CipdPackages = append(t.CipdPackages, specs.CIPD_PKGS_GIT...) } // usesGo adds attributes to tasks which use go. Recipes should use @@ -979,7 +934,7 @@ func (b *builder) usesGo(t *specs.TaskSpec, name string) { // usesDocker adds attributes to tasks which use docker. func usesDocker(t *specs.TaskSpec, name string) { - if strings.Contains(name, "EMCC") || strings.Contains(name, "SKQP") || strings.Contains(name, "LottieWeb") || strings.Contains(name, "CMake") { + if strings.Contains(name, "EMCC") || strings.Contains(name, "SKQP") || strings.Contains(name, "LottieWeb") || strings.Contains(name, "CMake") || strings.Contains(name, "Docker") { t.Caches = append(t.Caches, CACHES_DOCKER...) } } @@ -1019,7 +974,6 @@ func (b *builder) compile(name string, parts map[string]string) string { strings.Contains(name, "CMake") || strings.Contains(name, "CommandBuffer") || strings.Contains(name, "Flutter") || - strings.Contains(name, "ParentRevision") || strings.Contains(name, "SKQP") { recipe = "sync_and_compile" isolate = "swarm_recipe.isolate" @@ -1060,12 +1014,6 @@ func (b *builder) compile(name string, parts map[string]string) string { if strings.Contains(name, "Clang") { task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("clang_linux")) } - if parts["target_arch"] == "mips64el" || parts["target_arch"] == "loongson3a" { - if parts["compiler"] != "GCC" { - glog.Fatalf("mips64el toolchain is GCC, but compiler is %q in %q", parts["compiler"], name) - } - task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("mips64el_toolchain_linux")) - } if strings.Contains(name, "SwiftShader") { task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("cmake_linux")) } @@ -1107,7 +1055,7 @@ func (b *builder) compile(name string, parts map[string]string) string { // All compile tasks are runnable as their own Job. Assert that the Job // is listed in jobs. - if !util.In(name, b.jobs) { + if !In(name, b.jobs) { glog.Fatalf("Job %q is missing from the jobs list!", name) } @@ -1123,7 +1071,7 @@ func (b *builder) recreateSKPs(name string) string { fmt.Sprintf("os:%s", DEFAULT_OS_LINUX_GCE), } task := b.kitchenTask(name, "recreate_skps", "swarm_recipe.isolate", b.cfg.ServiceAccountRecreateSKPs, dims, EXTRA_PROPS, OUTPUT_NONE) - task.CipdPackages = append(task.CipdPackages, CIPD_PKGS_GIT...) + b.usesGit(task, name) b.usesGo(task, name) timeout(task, 4*time.Hour) b.MustAddTask(name, task) @@ -1134,8 +1082,9 @@ func (b *builder) recreateSKPs(name string) string { // by hand. func (b *builder) checkGeneratedFiles(name string) string { task := b.kitchenTask(name, "check_generated_files", "swarm_recipe.isolate", b.cfg.ServiceAccountCompile, b.linuxGceDimensions(MACHINE_TYPE_LARGE), EXTRA_PROPS, OUTPUT_NONE) - task.Caches = append(task.Caches, CACHES_WORKDIR...) + b.usesGit(task, name) b.usesGo(task, name) + task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("clang_linux")) b.MustAddTask(name, task) return name } @@ -1153,8 +1102,9 @@ func (b *builder) housekeeper(name string) string { // the name of the last task in the generated chain of tasks, which the Job // should add as a dependency. func (b *builder) androidFrameworkCompile(name string) string { - task := b.kitchenTask(name, "android_compile", "compile_android_framework.isolate", b.cfg.ServiceAccountCompile, b.linuxGceDimensions(MACHINE_TYPE_SMALL), EXTRA_PROPS, OUTPUT_NONE) + task := b.kitchenTask(name, "android_compile", "compile_android_framework.isolate", "skia-android-framework-compile@skia-swarming-bots.iam.gserviceaccount.com", b.linuxGceDimensions(MACHINE_TYPE_SMALL), EXTRA_PROPS, OUTPUT_NONE) timeout(task, 2*time.Hour) + b.usesGit(task, name) b.MustAddTask(name, task) return name } @@ -1163,8 +1113,9 @@ func (b *builder) androidFrameworkCompile(name string) string { // the name of the last task in the generated chain of tasks, which the Job // should add as a dependency. func (b *builder) g3FrameworkCompile(name string) string { - task := b.kitchenTask(name, "g3_compile", "compile_g3_framework.isolate", b.cfg.ServiceAccountCompile, b.linuxGceDimensions(MACHINE_TYPE_SMALL), EXTRA_PROPS, OUTPUT_NONE) + task := b.kitchenTask(name, "g3_compile", "compile_g3_framework.isolate", "skia-g3-framework-compile@skia-swarming-bots.iam.gserviceaccount.com", b.linuxGceDimensions(MACHINE_TYPE_SMALL), EXTRA_PROPS, OUTPUT_NONE) timeout(task, 3*time.Hour) + b.usesGit(task, name) b.MustAddTask(name, task) return name } @@ -1187,7 +1138,7 @@ func (b *builder) infra(name string) string { "repository": specs.PLACEHOLDER_REPO, } task := b.kitchenTask(name, "infra", "infra_tests.isolate", b.cfg.ServiceAccountCompile, dims, extraProps, OUTPUT_NONE) - task.CipdPackages = append(task.CipdPackages, CIPD_PKGS_GSUTIL...) + task.CipdPackages = append(task.CipdPackages, specs.CIPD_PKGS_GSUTIL...) task.Idempotent = true // Repos which call into Skia's gen_tasks.go should define their own // infra_tests.isolate and therefore should not use relpath(). @@ -1204,11 +1155,12 @@ func (b *builder) buildstats(name string, parts map[string]string, compileTaskNa task := b.kitchenTask(name, "compute_buildstats", "swarm_recipe.isolate", "", b.swarmDimensions(parts), EXTRA_PROPS, OUTPUT_PERF) task.Dependencies = append(task.Dependencies, compileTaskName) task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("bloaty")) + b.usesGit(task, name) b.MustAddTask(name, task) // Upload release results (for tracking in perf) // We have some jobs that are FYI (e.g. Debug-CanvasKit, tree-map generator) - if strings.Contains(name, "Release") && !util.In(name, BUILD_STATS_NO_UPLOAD) { + if strings.Contains(name, "Release") && !In(name, BUILD_STATS_NO_UPLOAD) { uploadName := fmt.Sprintf("%s%s%s", PREFIX_UPLOAD, b.jobNameSchema.Sep, name) extraProps := map[string]string{ "gs_bucket": b.cfg.GsBucketNano, @@ -1217,44 +1169,7 @@ func (b *builder) buildstats(name string, parts map[string]string, compileTaskNa extraProps[k] = v } uploadTask := b.kitchenTask(name, "upload_buildstats_results", "swarm_recipe.isolate", b.cfg.ServiceAccountUploadNano, b.linuxGceDimensions(MACHINE_TYPE_SMALL), extraProps, OUTPUT_NONE) - uploadTask.CipdPackages = append(uploadTask.CipdPackages, CIPD_PKGS_GSUTIL...) - uploadTask.Dependencies = append(uploadTask.Dependencies, name) - b.MustAddTask(uploadName, uploadTask) - return uploadName - } - - return name -} - -// getParentRevisionName returns the name of a compile task which builds -// against a "parent" revision. -func getParentRevisionName(compileTaskName string, parts map[string]string) string { - if parts["extra_config"] == "" { - return compileTaskName + "-ParentRevision" - } else { - return compileTaskName + "_ParentRevision" - } -} - -// calmbench generates a calmbench task. Returns the name of the last task in the -// generated chain of tasks, which the Job should add as a dependency. -func (b *builder) calmbench(name string, parts map[string]string, compileTaskName, compileParentName string) string { - task := b.kitchenTask(name, "calmbench", "calmbench.isolate", "", b.swarmDimensions(parts), EXTRA_PROPS, OUTPUT_PERF) - b.usesGit(task, name) - task.Dependencies = append(task.Dependencies, compileTaskName, compileParentName, ISOLATE_SKP_NAME, ISOLATE_SVG_NAME) - b.MustAddTask(name, task) - - // Upload results if necessary. - if strings.Contains(name, "Release") && b.doUpload(name) { - uploadName := fmt.Sprintf("%s%s%s", PREFIX_UPLOAD, b.jobNameSchema.Sep, name) - extraProps := map[string]string{ - "gs_bucket": b.cfg.GsBucketCalm, - } - for k, v := range EXTRA_PROPS { - extraProps[k] = v - } - uploadTask := b.kitchenTask(name, "upload_calmbench_results", "swarm_recipe.isolate", b.cfg.ServiceAccountUploadCalmbench, b.linuxGceDimensions(MACHINE_TYPE_SMALL), extraProps, OUTPUT_NONE) - uploadTask.CipdPackages = append(uploadTask.CipdPackages, CIPD_PKGS_GSUTIL...) + uploadTask.CipdPackages = append(uploadTask.CipdPackages, specs.CIPD_PKGS_GSUTIL...) uploadTask.Dependencies = append(uploadTask.Dependencies, name) b.MustAddTask(uploadName, uploadTask) return uploadName @@ -1280,8 +1195,10 @@ func (b *builder) doUpload(name string) bool { // test generates a Test task. Returns the name of the last task in the // generated chain of tasks, which the Job should add as a dependency. func (b *builder) test(name string, parts map[string]string, compileTaskName string, pkgs []*specs.CipdPackage) string { + isolate := "test_skia_bundled.isolate" recipe := "test" if strings.Contains(name, "SKQP") { + isolate = "skqp.isolate" recipe = "skqp_test" if strings.Contains(name, "Emulator") { recipe = "test_skqp_emulator" @@ -1291,10 +1208,13 @@ func (b *builder) test(name string, parts map[string]string, compileTaskName str // running hs_bench or kx, it will be easier to fit into the current job name schema. recipe = "compute_test" } else if strings.Contains(name, "PathKit") { + isolate = "pathkit.isolate" recipe = "test_pathkit" } else if strings.Contains(name, "CanvasKit") { + isolate = "canvaskit.isolate" recipe = "test_canvaskit" } else if strings.Contains(name, "LottieWeb") { + isolate = "lottie_web.isolate" recipe = "test_lottie_web" } extraProps := map[string]string{ @@ -1307,10 +1227,6 @@ func (b *builder) test(name string, parts map[string]string, compileTaskName str if iid != nil { extraProps["internal_hardware_label"] = strconv.Itoa(*iid) } - isolate := "test_skia_bundled.isolate" - if strings.Contains(name, "CanvasKit") || strings.Contains(name, "Emulator") || strings.Contains(name, "LottieWeb") || strings.Contains(name, "PathKit") { - isolate = "swarm_recipe.isolate" - } task := b.kitchenTask(name, recipe, isolate, "", b.swarmDimensions(parts), extraProps, OUTPUT_TEST) task.CipdPackages = append(task.CipdPackages, pkgs...) if strings.Contains(name, "Lottie") { @@ -1361,7 +1277,7 @@ func (b *builder) test(name string, parts map[string]string, compileTaskName str extraProps[k] = v } uploadTask := b.kitchenTask(name, "upload_dm_results", "swarm_recipe.isolate", b.cfg.ServiceAccountUploadGM, b.linuxGceDimensions(MACHINE_TYPE_SMALL), extraProps, OUTPUT_NONE) - uploadTask.CipdPackages = append(uploadTask.CipdPackages, CIPD_PKGS_GSUTIL...) + uploadTask.CipdPackages = append(uploadTask.CipdPackages, specs.CIPD_PKGS_GSUTIL...) uploadTask.Dependencies = append(uploadTask.Dependencies, name) b.MustAddTask(uploadName, uploadTask) return uploadName @@ -1379,13 +1295,19 @@ func (b *builder) perf(name string, parts map[string]string, compileTaskName str recipe = "skpbench" isolate = b.relpath("skpbench_skia_bundled.isolate") } else if strings.Contains(name, "PathKit") { + isolate = "pathkit.isolate" recipe = "perf_pathkit" } else if strings.Contains(name, "CanvasKit") { + isolate = "canvaskit.isolate" recipe = "perf_canvaskit" } else if strings.Contains(name, "SkottieTracing") { recipe = "perf_skottietrace" - } else if strings.Contains(name, "SkottieWASM") || strings.Contains(name, "LottieWeb") { + } else if strings.Contains(name, "SkottieWASM") { recipe = "perf_skottiewasm_lottieweb" + isolate = "skottie_wasm.isolate" + } else if strings.Contains(name, "LottieWeb") { + recipe = "perf_skottiewasm_lottieweb" + isolate = "lottie_web.isolate" } task := b.kitchenTask(name, recipe, isolate, "", b.swarmDimensions(parts), EXTRA_PROPS, OUTPUT_PERF) task.CipdPackages = append(task.CipdPackages, pkgs...) @@ -1414,10 +1336,14 @@ func (b *builder) perf(name string, parts map[string]string, compileTaskName str } else if strings.Contains(parts["extra_config"], "SkottieWASM") || strings.Contains(parts["extra_config"], "LottieWeb") { task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("node")) task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("lottie-samples")) - task.CipdPackages = append(task.CipdPackages, CIPD_PKGS_GIT...) } else if strings.Contains(parts["extra_config"], "Skottie") { task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("lottie-samples")) } + + if strings.Contains(name, "Android") && strings.Contains(name, "CPU") { + task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("text_blob_traces")) + } + iid := b.internalHardwareLabel(parts) if iid != nil { task.Command = append(task.Command, fmt.Sprintf("internal_hardware_label=%d", *iid)) @@ -1434,7 +1360,7 @@ func (b *builder) perf(name string, parts map[string]string, compileTaskName str extraProps[k] = v } uploadTask := b.kitchenTask(name, "upload_nano_results", "swarm_recipe.isolate", b.cfg.ServiceAccountUploadNano, b.linuxGceDimensions(MACHINE_TYPE_SMALL), extraProps, OUTPUT_NONE) - uploadTask.CipdPackages = append(uploadTask.CipdPackages, CIPD_PKGS_GSUTIL...) + uploadTask.CipdPackages = append(uploadTask.CipdPackages, specs.CIPD_PKGS_GSUTIL...) uploadTask.Dependencies = append(uploadTask.Dependencies, name) b.MustAddTask(uploadName, uploadTask) return uploadName @@ -1462,7 +1388,7 @@ func (b *builder) presubmit(name string) string { task.CipdPackages = append(task.CipdPackages, &specs.CipdPackage{ Name: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build", Path: "recipe_bundle", - Version: "git_revision:617e0fd3186eaae8bcb7521def0d6d3b4a5bcaf1", + Version: "git_revision:a8bcedad6768e206c4d2bd1718caa849f29cd42d", }) task.Dependencies = []string{} // No bundled recipes for this one. b.MustAddTask(name, task) @@ -1527,11 +1453,6 @@ func (b *builder) process(name string) { if err != nil { glog.Fatal(err) } - compileParentName := getParentRevisionName(compileTaskName, compileTaskParts) - compileParentParts, err := b.jobNameSchema.ParseJobName(compileParentName) - if err != nil { - glog.Fatal(err) - } // These bots do not need a compile task. if parts["role"] != "Build" && @@ -1549,9 +1470,6 @@ func (b *builder) process(name string) { !strings.Contains(name, "SkottieWASM") && !strings.Contains(name, "LottieWeb") { b.compile(compileTaskName, compileTaskParts) - if parts["role"] == "Calmbench" { - b.compile(compileParentName, compileParentParts) - } } // Housekeepers. @@ -1614,11 +1532,6 @@ func (b *builder) process(name string) { deps = append(deps, b.perf(name, parts, compileTaskName, pkgs)) } - // Calmbench bots. - if parts["role"] == "Calmbench" { - deps = append(deps, b.calmbench(name, parts, compileTaskName, compileParentName)) - } - // Valgrind runs at a low priority so that it doesn't occupy all the bots. if strings.Contains(name, "Valgrind") { // Priority of 0.085 should result in Valgrind tasks with a blamelist of ~10 commits having the @@ -1675,7 +1588,11 @@ func NewJobNameSchema(jsonFile string) (*JobNameSchema, error) { if err != nil { return nil, err } - defer util.Close(f) + defer func() { + if err := f.Close(); err != nil { + glog.Errorf("Failed to close %s: %s", jsonFile, err) + } + }() if err := json.NewDecoder(f).Decode(&rv); err != nil { return nil, err } diff --git a/third_party/skia/infra/bots/git_utils.py b/third_party/skia/infra/bots/git_utils.py old mode 100644 new mode 100755 diff --git a/third_party/skia/infra/bots/infra_tests.py b/third_party/skia/infra/bots/infra_tests.py index 10546ed72238..36da49212996 100755 --- a/third_party/skia/infra/bots/infra_tests.py +++ b/third_party/skia/infra/bots/infra_tests.py @@ -52,11 +52,6 @@ def gen_tasks_test(train): except OSError: return ('Failed to run "%s"; do you have Go installed on your machine?' % ' '.join(cmd)) - if output: - if ('cannot find package "go.skia.org/infra' in output or - 'gen_tasks.go:' in output): - return ('Failed to run gen_tests.go:\n\n%s\nMaybe you need to run:\n\n' - '$ go get -u go.skia.org/infra/...' % output) return output diff --git a/third_party/skia/infra/bots/jobs.json b/third_party/skia/infra/bots/jobs.json index 884d2aab812d..83a60aa2c41f 100644 --- a/third_party/skia/infra/bots/jobs.json +++ b/third_party/skia/infra/bots/jobs.json @@ -1,4 +1,16 @@ [ + "Build-Debian10-GCC-loongson3a-Debug-Docker", + "Build-Debian10-GCC-loongson3a-Release-Docker", + "Build-Debian10-GCC-mips64el-Debug-Docker", + "Build-Debian10-GCC-mips64el-Release-Docker", + "Build-Debian10-GCC-x86-Debug-Docker", + "Build-Debian10-GCC-x86-Release-Docker", + "Build-Debian10-GCC-x86_64-Debug-Docker", + "Build-Debian10-GCC-x86_64-Debug-NoGPU_Docker", + "Build-Debian10-GCC-x86_64-Release-Docker", + "Build-Debian10-GCC-x86_64-Release-NoGPU_Docker", + "Build-Debian10-GCC-x86_64-Release-Shared_Docker", + "Build-Debian9-Clang-TAP-Presubmit-G3_Framework", "Build-Debian9-Clang-arm-Debug-Android", "Build-Debian9-Clang-arm-Debug-Android_Vulkan", "Build-Debian9-Clang-arm-Debug-Chromebook_GLES", @@ -17,6 +29,7 @@ "Build-Debian9-Clang-arm64-Release-Android_ASAN", "Build-Debian9-Clang-arm64-Release-Android_ASAN_Vulkan", "Build-Debian9-Clang-arm64-Release-Android_Vulkan", + "Build-Debian9-Clang-arm64-Release-Android_Wuffs", "Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework", "Build-Debian9-Clang-host-sdk-Android_Framework", "Build-Debian9-Clang-x64-Debug-Android", @@ -50,18 +63,17 @@ "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES", "Build-Debian9-Clang-x86_64-Release-Fast", "Build-Debian9-Clang-x86_64-Release-NoDEPS", - "Build-Debian9-Clang-x86_64-Release-ParentRevision", "Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD", "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE2", "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41", "Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER", + "Build-Debian9-Clang-x86_64-Release-SK_USE_SKVM_BLITTER", "Build-Debian9-Clang-x86_64-Release-Static", "Build-Debian9-Clang-x86_64-Release-SwiftShader", "Build-Debian9-Clang-x86_64-Release-TSAN", "Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan", "Build-Debian9-Clang-x86_64-Release-Vulkan", "Build-Debian9-Clang-x86_64-Release-Wuffs", - "Build-Debian9-Clang-TAP-Presubmit-G3_Framework", "Build-Debian9-EMCC-asmjs-Debug-PathKit", "Build-Debian9-EMCC-asmjs-Release-PathKit", "Build-Debian9-EMCC-wasm-Debug-CanvasKit", @@ -70,18 +82,6 @@ "Build-Debian9-EMCC-wasm-Release-CanvasKit", "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU", "Build-Debian9-EMCC-wasm-Release-PathKit", - "Build-Debian9-GCC-loongson3a-Debug", - "Build-Debian9-GCC-loongson3a-Release", - "Build-Debian9-GCC-mips64el-Debug", - "Build-Debian9-GCC-mips64el-Release", - "Build-Debian9-GCC-x86-Debug", - "Build-Debian9-GCC-x86-Release", - "Build-Debian9-GCC-x86_64-Debug", - "Build-Debian9-GCC-x86_64-Debug-NoGPU", - "Build-Debian9-GCC-x86_64-Release", - "Build-Debian9-GCC-x86_64-Release-NoGPU", - "Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41", - "Build-Debian9-GCC-x86_64-Release-Shared", "Build-Mac-Clang-arm-Debug-iOS", "Build-Mac-Clang-arm-Release-iOS", "Build-Mac-Clang-arm64-Debug-Android", @@ -141,8 +141,6 @@ "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit", "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit_CPU", "BuildStats-Debian9-EMCC-wasm-Release-PathKit", - "Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All", - "Calmbench-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All", "Housekeeper-Nightly-RecreateSKPs_Canary", "Housekeeper-Nightly-UpdateGoDeps", "Housekeeper-OnDemand-Presubmit", @@ -152,9 +150,9 @@ "Housekeeper-PerCommit-CheckGeneratedFiles", "Housekeeper-PerCommit-InfraTests_Linux", "Housekeeper-PerCommit-InfraTests_Win", + "Housekeeper-PerCommit-IsolateMSKP", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateMSKP", "Housekeeper-PerCommit-IsolateSkImage", "Housekeeper-Weekly-RecreateSKPs", "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android", @@ -175,31 +173,25 @@ "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads", "Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android", "Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android", + "Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs", "Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android", "Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android", "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android", "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan", "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android", "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench", - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench", "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench", + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench", "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan", "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench", "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android", - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_CCPR_Skpbench", - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Skpbench", "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan", - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan_Skpbench", "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android", - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_CCPR_Skpbench", - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Skpbench", "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan", - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan_Skpbench", "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android", - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_CCPR_Skpbench", - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Skpbench", "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan", - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan_Skpbench", + "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android", + "Perf-Android-Clang-Pixel4-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", @@ -229,11 +221,7 @@ "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit", "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM", "Perf-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit", - "Perf-Debian9-EMCC-NUC7i5BNK-GPU-IntelIris640-wasm-Release-All-SkottieWASM", "Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb", - "Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb_Canvas", - "Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb", - "Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb_Canvas", "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All", "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer", "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal", @@ -243,12 +231,14 @@ "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal", "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All", "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer", - "Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All", - "Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer", + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All", + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer", "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All", "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ASAN", + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41", "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan", - "Perf-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41", + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM", + "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", "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan", @@ -281,8 +271,8 @@ "Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan", "Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All", "Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan", - "Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All", - "Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN", + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All", + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN", "Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All", "Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal", "Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All", @@ -364,6 +354,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-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", @@ -382,6 +376,10 @@ "Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All", "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All", "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All", + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker", + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker", + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker", + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker", "Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All", "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All", "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN", @@ -400,6 +398,7 @@ "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2", "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41", "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER", + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_USE_SKVM_BLITTER", "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN", "Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All", "Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All", @@ -435,10 +434,6 @@ "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit", "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit", "Test-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit", - "Test-Debian9-GCC-GCE-CPU-AVX2-x86-Debug-All", - "Test-Debian9-GCC-GCE-CPU-AVX2-x86-Release-All", - "Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All", - "Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-All", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All", "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", @@ -469,12 +464,13 @@ "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All", "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal", "Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts", - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All", - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer", - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal", - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All", - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal", "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts", + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All", + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer", + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal", + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts", + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All", + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1", @@ -489,10 +485,10 @@ "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-PreAbandonGpuContext", + "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-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41", + "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-Vulkan", - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41", - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41", - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41", "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All", "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE", "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan", @@ -563,20 +559,20 @@ "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", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86-Debug-All", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86-Release-All", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA", - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN", - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Debug-All", - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Release-All", - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Debug-All", - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Release-All", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN", + "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-Release-All", "Test-Win7-Clang-Golo-CPU-AVX-x86-Debug-All", "Test-Win7-Clang-Golo-CPU-AVX-x86-Release-All", "Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All", diff --git a/third_party/skia/infra/bots/lottie_web.isolate b/third_party/skia/infra/bots/lottie_web.isolate new file mode 100644 index 000000000000..eeb475ecd057 --- /dev/null +++ b/third_party/skia/infra/bots/lottie_web.isolate @@ -0,0 +1,10 @@ +{ + 'includes': [ + 'swarm_recipe.isolate', + ], + 'variables': { + 'files': [ + '../../tools/lottie-web-perf', + ], + }, +} diff --git a/third_party/skia/infra/bots/pathkit.isolate b/third_party/skia/infra/bots/pathkit.isolate new file mode 100644 index 000000000000..b773253a17c1 --- /dev/null +++ b/third_party/skia/infra/bots/pathkit.isolate @@ -0,0 +1,11 @@ +{ + 'includes': [ + 'swarm_recipe.isolate', + ], + 'variables': { + 'files': [ + '../../modules/pathkit', + '../pathkit', + ], + }, +} diff --git a/third_party/skia/infra/bots/recipe_modules/build/__init__.py b/third_party/skia/infra/bots/recipe_modules/build/__init__.py index a7325b49f0b2..8a8ba889bb6a 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/__init__.py +++ b/third_party/skia/infra/bots/recipe_modules/build/__init__.py @@ -4,6 +4,7 @@ DEPS = [ 'depot_tools/gclient', + 'docker', 'env', 'infra', 'recipe_engine/context', diff --git a/third_party/skia/infra/bots/recipe_modules/build/android.py b/third_party/skia/infra/bots/recipe_modules/build/android.py index d352eb352c37..7a990cfe74d0 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/android.py +++ b/third_party/skia/infra/bots/recipe_modules/build/android.py @@ -46,6 +46,8 @@ def compile_fn(api, checkout_root, out_dir): args['skia_enable_vulkan_debug_layers'] = 'false' if 'ASAN' in extra_tokens: args['sanitize'] = '"ASAN"' + if 'Wuffs' in extra_tokens: + args['skia_use_wuffs'] = 'true' # If an Android API level is specified, use that. for t in extra_tokens: diff --git a/third_party/skia/infra/bots/recipe_modules/build/api.py b/third_party/skia/infra/bots/recipe_modules/build/api.py index 0edf5c0a2e1b..c4964d9cd53a 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/api.py +++ b/third_party/skia/infra/bots/recipe_modules/build/api.py @@ -14,6 +14,7 @@ from . import chromecast from . import cmake from . import default +from . import docker from . import flutter from . import pathkit from . import skqp @@ -47,6 +48,9 @@ def __init__(self, buildername, *args, **kwargs): elif 'CMake' in b: self.compile_fn = cmake.compile_fn self.copy_fn = cmake.copy_build_products + elif 'Docker' in b: + self.compile_fn = docker.compile_fn + self.copy_fn = docker.copy_build_products else: self.compile_fn = default.compile_fn self.copy_fn = default.copy_build_products diff --git a/third_party/skia/infra/bots/recipe_modules/build/default.py b/third_party/skia/infra/bots/recipe_modules/build/default.py index 23430b43ecd3..b94b496b97fc 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/default.py +++ b/third_party/skia/infra/bots/recipe_modules/build/default.py @@ -6,18 +6,6 @@ from . import util -# XCode build is listed in parentheses after the version at -# https://developer.apple.com/news/releases/, or on Wikipedia here: -# https://en.wikipedia.org/wiki/Xcode#Version_comparison_table -# Use lowercase letters. -# When updating XCODE_BUILD_VERSION, you will also need to update -# XCODE_CLANG_VERSION. -XCODE_BUILD_VERSION = '10g8' -# Wikipedia lists the Clang version here: -# https://en.wikipedia.org/wiki/Xcode#Toolchain_versions -XCODE_CLANG_VERSION = '10.0.1' - - def build_command_buffer(api, chrome_dir, skia_dir, out): api.run(api.python, 'build command_buffer', script=skia_dir.join('tools', 'build_command_buffer.py'), @@ -93,6 +81,11 @@ def compile_fn(api, checkout_root, out_dir): env = {} if os == 'Mac': + # XCode build is listed in parentheses after the version at + # https://developer.apple.com/news/releases/, or on Wikipedia here: + # https://en.wikipedia.org/wiki/Xcode#Version_comparison_table + # Use lowercase letters. + XCODE_BUILD_VERSION = '11c29' extra_cflags.append( '-DDUMMY_xcode_build_version=%s' % XCODE_BUILD_VERSION) mac_toolchain_cmd = api.vars.slave_dir.join( @@ -127,6 +120,11 @@ def compile_fn(api, checkout_root, out_dir): # We have some bots on 10.13. env['MACOSX_DEPLOYMENT_TARGET'] = '10.13' + if 'CheckGeneratedFiles' in extra_tokens: + compiler = 'Clang' + args['skia_compile_processors'] = 'true' + args['skia_generate_workarounds'] = 'true' + if compiler == 'Clang' and api.vars.is_linux: cc = clang_linux + '/bin/clang' cxx = clang_linux + '/bin/clang++' @@ -140,28 +138,6 @@ def compile_fn(api, checkout_root, out_dir): elif compiler == 'Clang': cc, cxx = 'clang', 'clang++' - elif compiler == 'GCC': - if target_arch in ['mips64el', 'loongson3a']: - mips64el_toolchain_linux = str(api.vars.slave_dir.join( - 'mips64el_toolchain_linux')) - cc = mips64el_toolchain_linux + '/bin/mips64el-linux-gnuabi64-gcc-8' - cxx = mips64el_toolchain_linux + '/bin/mips64el-linux-gnuabi64-g++-8' - env['LD_LIBRARY_PATH'] = ( - mips64el_toolchain_linux + '/lib/x86_64-linux-gnu/') - extra_ldflags.append('-L' + mips64el_toolchain_linux + - '/mips64el-linux-gnuabi64/lib') - extra_cflags.extend([ - ('-DDUMMY_mips64el_toolchain_linux_version=%s' % - api.run.asset_version('mips64el_toolchain_linux', skia_dir)) - ]) - args.update({ - 'skia_use_system_freetype2': 'false', - 'skia_use_fontconfig': 'false', - 'skia_enable_gpu': 'false', - 'werror': 'false', - }) - else: - cc, cxx = 'gcc', 'g++' if 'Tidy' in extra_tokens: # Swap in clang-tidy.sh for clang++, but update PATH so it can find clang++. @@ -242,8 +218,6 @@ def compile_fn(api, checkout_root, out_dir): 'skia_use_vulkan': 'false', 'skia_use_zlib': 'false', }) - if 'NoGPU' in extra_tokens: - args['skia_enable_gpu'] = 'false' if 'Shared' in extra_tokens: args['is_component_build'] = 'true' if 'Vulkan' in extra_tokens and not 'Android' in extra_tokens: @@ -274,9 +248,6 @@ def compile_fn(api, checkout_root, out_dir): args['skia_ios_profile'] = '"%s"' % api.vars.slave_dir.join( 'provisioning_profile_ios', 'Upstream_Testing_Provisioning_Profile.mobileprovision') - if 'CheckGeneratedFiles' in extra_tokens: - args['skia_compile_processors'] = 'true' - args['skia_generate_workarounds'] = 'true' if compiler == 'Clang' and 'Win' in os: args['clang_win'] = '"%s"' % api.vars.slave_dir.join('clang_win') extra_cflags.append('-DDUMMY_clang_win_version=%s' % @@ -345,13 +316,18 @@ def copy_build_products(api, src, dst): util.DEFAULT_BUILD_PRODUCTS) if os == 'Mac' and any('SAN' in t for t in extra_tokens): - # Hardcoding this path because it should only change when we upgrade to a - # new Xcode. - lib_dir = api.vars.cache_dir.join( - 'Xcode.app', 'Contents', 'Developer', 'Toolchains', - 'XcodeDefault.xctoolchain', 'usr', 'lib', 'clang', XCODE_CLANG_VERSION, - 'lib', 'darwin') - dylibs = api.file.glob_paths('find xSAN dylibs', lib_dir, + # The XSAN dylibs are in + # Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib + # /clang/11.0.0/lib/darwin, where 11.0.0 could change in future versions. + xcode_clang_ver_dirs = api.file.listdir( + 'find XCode Clang version', + api.vars.cache_dir.join( + 'Xcode.app', 'Contents', 'Developer', 'Toolchains', + 'XcodeDefault.xctoolchain', 'usr', 'lib', 'clang'), + test_data=['11.0.0']) + assert len(xcode_clang_ver_dirs) == 1 + dylib_dir = xcode_clang_ver_dirs[0].join('lib', 'darwin') + dylibs = api.file.glob_paths('find xSAN dylibs', dylib_dir, 'libclang_rt.*san_osx_dynamic.dylib', test_data=[ 'libclang_rt.asan_osx_dynamic.dylib', diff --git a/third_party/skia/infra/bots/recipe_modules/build/docker.py b/third_party/skia/infra/bots/recipe_modules/build/docker.py new file mode 100644 index 000000000000..09aa329dc628 --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/build/docker.py @@ -0,0 +1,92 @@ +# Copyright 2019 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. + + +from . import util + + +# TODO(dogben): Move this mapping to a machine-editable file. +IMAGES = { + 'gcc-debian10': ( + 'gcr.io/skia-public/gcc-debian10@sha256:' + '89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c'), + 'gcc-debian10-x86': ( + 'gcr.io/skia-public/gcc-debian10-x86@sha256:' + 'b1ec55403ac66d9500d033d6ffd7663894d32335711fbbb0fb4c67dfce812203'), + 'gcc-debian10-mips64el': ( + 'gcr.io/skia-public/gcc-debian10-mips64el@sha256:' + 'c173a718d9f62f0cd1e5335713ebc4721d5dcf662fb02597744b71c53338a540'), +} + + +def py_to_gn(val): + """Convert val to a string that can be used as GN args.""" + if isinstance(val, bool): + return 'true' if val else 'false' + elif isinstance(val, basestring): + # TODO(dogben): Handle quoting "$\ + return '"%s"' % val + elif isinstance(val, (list, tuple)): + return '[%s]' % (','.join(py_to_gn(x) for x in val)) + elif isinstance(val, dict): + gn = ' '.join( + '%s=%s' % (k, py_to_gn(v)) for (k, v) in sorted(val.iteritems())) + return gn + else: # pragma: nocover + raise Exception('Converting %s to gn is not implemented.' % type(val)) + + +def compile_fn(api, checkout_root, out_dir): + compiler = api.vars.builder_cfg.get('compiler', '') + configuration = api.vars.builder_cfg.get('configuration', '') + extra_tokens = api.vars.extra_tokens + extra_tokens.remove('Docker') + os = api.vars.builder_cfg.get('os', '') + target_arch = api.vars.builder_cfg.get('target_arch', '') + + args = { + 'extra_cflags': [], + 'extra_ldflags': [], + 'target_cpu': target_arch, + 'werror': True + } + if configuration != 'Debug': + args['is_debug'] = False + + if 'NoGPU' in extra_tokens: + args['skia_enable_gpu'] = False + extra_tokens.remove('NoGPU') + if 'Shared' in extra_tokens: + args['is_component_build'] = True + extra_tokens.remove('Shared') + + image_name = None + if os == 'Debian10' and compiler == 'GCC' and not extra_tokens: + args['cc'] = 'gcc' + args['cxx'] = 'g++' + if target_arch == 'x86_64': + image_name = 'gcc-debian10' + elif target_arch == 'x86': + image_name = 'gcc-debian10-x86' + elif target_arch in ['mips64el', 'loongson3a']: + image_name = 'gcc-debian10-mips64el' + args['cc'] = '/usr/bin/mips64el-linux-gnuabi64-gcc-8' + args['cxx'] = '/usr/bin/mips64el-linux-gnuabi64-g++-8' + + if not image_name: + raise Exception('Not implemented: ' + api.vars.builder_name) + + image_hash = IMAGES[image_name] + # We always perform an incremental compile, since out dir is cached across + # compile tasks. However, we need to force a recompile when the toolchain + # changes. The simplest way to do that is using a C define that changes + # anytime the image changes. + args['extra_cflags'].append('-DDUMMY_docker_image=%s' % image_hash) + + script = api.build.resource('docker-compile.sh') + api.docker.run('Run build script in Docker', image_hash, + checkout_root, out_dir, script, args=[py_to_gn(args)]) + +def copy_build_products(api, src, dst): + util.copy_listed_files(api, src, dst, util.DEFAULT_BUILD_PRODUCTS) diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-loongson3a-Release-Docker.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-loongson3a-Release-Docker.json new file mode 100644 index 000000000000..2a3d7237ee75 --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-loongson3a-Release-Docker.json @@ -0,0 +1,122 @@ +[ + { + "cmd": [], + "name": "Docker setup" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-loongson3a-Release-Docker/Release" + ], + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-loongson3a-Release-Docker/Release" + ], + "infra_step": true, + "name": "Docker setup.chmod 777 [START_DIR]/cache/work/skia/out/Build-Debian10-GCC-loongson3a-Release-Docker/Release", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "[START_DIR]/cache/work" + ], + "infra_step": true, + "name": "Docker setup.chmod 755 [START_DIR]/cache/work", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "RECIPE_MODULE[skia::build]/resources/docker-compile.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=[START_DIR]/cache/work,target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-loongson3a-Release-Docker/Release,target=/OUT", + "gcr.io/skia-public/gcc-debian10-mips64el@sha256:c173a718d9f62f0cd1e5335713ebc4721d5dcf662fb02597744b71c53338a540", + "/SRC/../RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "cc=\"/usr/bin/mips64el-linux-gnuabi64-gcc-8\" cxx=\"/usr/bin/mips64el-linux-gnuabi64-g++-8\" extra_cflags=[\"-DDUMMY_docker_image=gcr.io/skia-public/gcc-debian10-mips64el@sha256:c173a718d9f62f0cd1e5335713ebc4721d5dcf662fb02597744b71c53338a540\"] extra_ldflags=[] is_debug=false target_cpu=\"loongson3a\" werror=true" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Run build script in Docker" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-loongson3a-Release-Docker/Release", + "[START_DIR]/[SWARM_OUT_DIR]/out/Release" + ], + "infra_step": true, + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86-Debug-Docker.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86-Debug-Docker.json new file mode 100644 index 000000000000..5788145ba2db --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86-Debug-Docker.json @@ -0,0 +1,122 @@ +[ + { + "cmd": [], + "name": "Docker setup" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86-Debug-Docker/Debug" + ], + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86-Debug-Docker/Debug" + ], + "infra_step": true, + "name": "Docker setup.chmod 777 [START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86-Debug-Docker/Debug", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "[START_DIR]/cache/work" + ], + "infra_step": true, + "name": "Docker setup.chmod 755 [START_DIR]/cache/work", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "RECIPE_MODULE[skia::build]/resources/docker-compile.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=[START_DIR]/cache/work,target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86-Debug-Docker/Debug,target=/OUT", + "gcr.io/skia-public/gcc-debian10-x86@sha256:b1ec55403ac66d9500d033d6ffd7663894d32335711fbbb0fb4c67dfce812203", + "/SRC/../RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "cc=\"gcc\" cxx=\"g++\" extra_cflags=[\"-DDUMMY_docker_image=gcr.io/skia-public/gcc-debian10-x86@sha256:b1ec55403ac66d9500d033d6ffd7663894d32335711fbbb0fb4c67dfce812203\"] extra_ldflags=[] target_cpu=\"x86\" werror=true" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Run build script in Docker" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86-Debug-Docker/Debug", + "[START_DIR]/[SWARM_OUT_DIR]/out/Debug" + ], + "infra_step": true, + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Debug-Docker.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Debug-Docker.json new file mode 100644 index 000000000000..3a0a196039a8 --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Debug-Docker.json @@ -0,0 +1,122 @@ +[ + { + "cmd": [], + "name": "Docker setup" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Debug-Docker/Debug" + ], + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Debug-Docker/Debug" + ], + "infra_step": true, + "name": "Docker setup.chmod 777 [START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Debug-Docker/Debug", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "[START_DIR]/cache/work" + ], + "infra_step": true, + "name": "Docker setup.chmod 755 [START_DIR]/cache/work", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "RECIPE_MODULE[skia::build]/resources/docker-compile.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=[START_DIR]/cache/work,target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Debug-Docker/Debug,target=/OUT", + "gcr.io/skia-public/gcc-debian10@sha256:89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c", + "/SRC/../RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "cc=\"gcc\" cxx=\"g++\" extra_cflags=[\"-DDUMMY_docker_image=gcr.io/skia-public/gcc-debian10@sha256:89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c\"] extra_ldflags=[] target_cpu=\"x86_64\" werror=true" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Run build script in Docker" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Debug-Docker/Debug", + "[START_DIR]/[SWARM_OUT_DIR]/out/Debug" + ], + "infra_step": true, + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Release-NoGPU_Docker.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Release-NoGPU_Docker.json new file mode 100644 index 000000000000..ef87b5c7ff6e --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Release-NoGPU_Docker.json @@ -0,0 +1,122 @@ +[ + { + "cmd": [], + "name": "Docker setup" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-NoGPU_Docker/Release" + ], + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-NoGPU_Docker/Release" + ], + "infra_step": true, + "name": "Docker setup.chmod 777 [START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-NoGPU_Docker/Release", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "[START_DIR]/cache/work" + ], + "infra_step": true, + "name": "Docker setup.chmod 755 [START_DIR]/cache/work", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "RECIPE_MODULE[skia::build]/resources/docker-compile.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=[START_DIR]/cache/work,target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-NoGPU_Docker/Release,target=/OUT", + "gcr.io/skia-public/gcc-debian10@sha256:89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c", + "/SRC/../RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "cc=\"gcc\" cxx=\"g++\" extra_cflags=[\"-DDUMMY_docker_image=gcr.io/skia-public/gcc-debian10@sha256:89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c\"] extra_ldflags=[] is_debug=false skia_enable_gpu=false target_cpu=\"x86_64\" werror=true" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Run build script in Docker" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-NoGPU_Docker/Release", + "[START_DIR]/[SWARM_OUT_DIR]/out/Release" + ], + "infra_step": true, + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Release-Shared_Docker.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Release-Shared_Docker.json new file mode 100644 index 000000000000..d9177edff89b --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian10-GCC-x86_64-Release-Shared_Docker.json @@ -0,0 +1,122 @@ +[ + { + "cmd": [], + "name": "Docker setup" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-Shared_Docker/Release" + ], + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-Shared_Docker/Release" + ], + "infra_step": true, + "name": "Docker setup.chmod 777 [START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-Shared_Docker/Release", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "[START_DIR]/cache/work" + ], + "infra_step": true, + "name": "Docker setup.chmod 755 [START_DIR]/cache/work", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "RECIPE_MODULE[skia::build]/resources/docker-compile.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=[START_DIR]/cache/work,target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-Shared_Docker/Release,target=/OUT", + "gcr.io/skia-public/gcc-debian10@sha256:89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c", + "/SRC/../RECIPE_MODULE[skia::build]/resources/docker-compile.sh", + "cc=\"gcc\" cxx=\"g++\" extra_cflags=[\"-DDUMMY_docker_image=gcr.io/skia-public/gcc-debian10@sha256:89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c\"] extra_ldflags=[] is_component_build=true is_debug=false target_cpu=\"x86_64\" werror=true" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Run build script in Docker" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[START_DIR]/cache/work/skia/out/Build-Debian10-GCC-x86_64-Release-Shared_Docker/Release", + "[START_DIR]/[SWARM_OUT_DIR]/out/Release" + ], + "infra_step": true, + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Android_API26.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Android_API26.json index fde93379a4bc..1596a6bc340d 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Android_API26.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Android_API26.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get android_ndk_linux VERSION" + "name": "Get android_ndk_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Android_ASAN.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Android_ASAN.json index 850576b44b81..cdffdb639422 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Android_ASAN.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Android_ASAN.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get android_ndk_linux VERSION" + "name": "Get android_ndk_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromebook_GLES.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromebook_GLES.json index e1074521fa53..616961f73b59 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromebook_GLES.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromebook_GLES.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-arm-Release-Chromecast.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromecast.json similarity index 92% rename from third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-arm-Release-Chromecast.json rename to third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromecast.json index 10f0ca01787f..22a3fb21925f 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-arm-Release-Chromecast.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromecast.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get cast_toolchain VERSION" + "name": "Get cast_toolchain VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -31,7 +35,7 @@ "cmd": [ "[START_DIR]/cache/work/skia/bin/gn", "gen", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-arm-Release-Chromecast/Release", + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm-Release-Chromecast/Release", "--args=ar=\"[START_DIR]/cast_toolchain/armv7a/bin/armv7a-cros-linux-gnueabihf-ar\" cc=\"[START_DIR]/cast_toolchain/armv7a/usr/bin/clang-9.elf\" cxx=\"[START_DIR]/cast_toolchain/armv7a/usr/bin/clang++-9.elf\" extra_asmflags=[\"-target\", \"armv7a-cros-linux-gnueabihf\"] extra_cflags=[\"-target\", \"armv7a-cros-linux-gnueabihf\", \"--sysroot\", \"[START_DIR]/cast_toolchain/armv7a/usr/armv7a-cros-linux-gnueabihf\", \"-I[START_DIR]/chromebook_arm_gles/include\", \"-DMESA_EGL_NO_X11_HEADERS\", \"-DSK_NO_COMMAND_BUFFER\", \"-Wno-error=unused-function\", \"-g0\", \"-DDUMMY_cast_toolchain_version=42\", \"-include\", \"[START_DIR]/cache/work/skia/tools/force_older_glibc_math.h\"] extra_ldflags=[\"-target\", \"armv7a-cros-linux-gnueabihf\", \"--sysroot\", \"[START_DIR]/cast_toolchain/armv7a/usr/armv7a-cros-linux-gnueabihf\", \"-static-libstdc++\", \"-static-libgcc\", \"-L[START_DIR]/cast_toolchain/armv7a/lib\", \"-L[START_DIR]/chromebook_arm_gles/lib\", \"-fuse-ld=gold\", \"-B[START_DIR]/cast_toolchain/armv7a/usr/libexec/gcc\"] is_debug=false skia_enable_gpu=true skia_use_egl=true skia_use_fontconfig=false skia_use_icu=false skia_use_system_freetype2=false target_cpu=\"arm\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", @@ -45,7 +49,7 @@ "cmd": [ "ninja", "-C", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-arm-Release-Chromecast/Release", + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm-Release-Chromecast/Release", "nanobench", "dm" ], @@ -61,7 +65,7 @@ "python", "-u", "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-arm-Release-Chromecast/Release", + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm-Release-Chromecast/Release", "[START_DIR]/[SWARM_OUT_DIR]/out/Release" ], "infra_step": true, diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-NoGPU.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm64-Release-Android_Wuffs.json similarity index 63% rename from third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-NoGPU.json rename to third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm64-Release-Android_Wuffs.json index 29fb6d2f1900..3a506e31da10 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-NoGPU.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm64-Release-Android_Wuffs.json @@ -1,4 +1,22 @@ [ + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/cache/work/skia/infra/bots/assets/android_ndk_linux/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get android_ndk_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, { "cmd": [ "python", @@ -17,8 +35,8 @@ "cmd": [ "[START_DIR]/cache/work/skia/bin/gn", "gen", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-NoGPU/Release", - "--args=cc=\"gcc\" cxx=\"g++\" is_debug=false skia_enable_gpu=false target_cpu=\"x86_64\" werror=true" + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm64-Release-Android_Wuffs/Release", + "--args=extra_cflags=[\"-DDUMMY_ndk_version=42\"] is_debug=false ndk=\"[START_DIR]/android_ndk_linux\" skia_use_wuffs=true target_cpu=\"arm64\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { @@ -31,7 +49,7 @@ "cmd": [ "ninja", "-C", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-NoGPU/Release" + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm64-Release-Android_Wuffs/Release" ], "cwd": "[START_DIR]/cache/work/skia", "env": { @@ -44,8 +62,8 @@ "cmd": [ "python", "-u", - "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-NoGPU/Release", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'nanobench', 'skpbench']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm64-Release-Android_Wuffs/Release", "[START_DIR]/[SWARM_OUT_DIR]/out/Release" ], "infra_step": true, @@ -59,7 +77,7 @@ "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@", + "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'nanobench', 'skpbench']@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@try:@@@", "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES.json index ac5834fdd241..81b5a2b6912e 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Coverage.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Coverage.json index c9acc8a5cdfa..e5532c12e064 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Coverage.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Coverage.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-MSAN.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-MSAN.json index 3e6a3ef06364..04564da88493 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-MSAN.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-MSAN.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-OpenCL.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-OpenCL.json index ed92d9a2f99c..a7adfbcdf0d9 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-OpenCL.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-OpenCL.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SK_CPU_LIMIT_SSE41.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SK_CPU_LIMIT_SSE41.json index aa59d142c177..8437ee742975 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SK_CPU_LIMIT_SSE41.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SK_CPU_LIMIT_SSE41.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SafeStack.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SafeStack.json index d31d03c7563b..78c25cc6c93b 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SafeStack.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SafeStack.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN.json index be1c41494c42..7f0dd251fa22 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Tidy.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Tidy.json index ca6d65d2734b..5e6915944e55 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Tidy.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Tidy.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Wuffs.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Wuffs.json index 4faca2718f2e..991e648dd697 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Wuffs.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Debug-Wuffs.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-loongson3a-Release.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-ANGLE.json similarity index 79% rename from third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-loongson3a-Release.json rename to third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-ANGLE.json index bfc835b3b22c..0389e08a8957 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-loongson3a-Release.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-ANGLE.json @@ -7,11 +7,15 @@ "--json-output", "/path/to/tmp/json", "copy", - "[START_DIR]/cache/work/skia/infra/bots/assets/mips64el_toolchain_linux/VERSION", + "[START_DIR]/cache/work/skia/infra/bots/assets/clang_linux/VERSION", "/path/to/tmp/" ], "infra_step": true, - "name": "Get mips64el_toolchain_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -31,13 +35,12 @@ "cmd": [ "[START_DIR]/cache/work/skia/bin/gn", "gen", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-loongson3a-Release/Release", - "--args=cc=\"[START_DIR]/mips64el_toolchain_linux/bin/mips64el-linux-gnuabi64-gcc-8\" cxx=\"[START_DIR]/mips64el_toolchain_linux/bin/mips64el-linux-gnuabi64-g++-8\" extra_cflags=[\"-DDUMMY_mips64el_toolchain_linux_version=42\"] extra_ldflags=[\"-L[START_DIR]/mips64el_toolchain_linux/mips64el-linux-gnuabi64/lib\"] is_debug=false skia_enable_gpu=false skia_use_fontconfig=false skia_use_system_freetype2=false target_cpu=\"loongson3a\" werror=false" + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-x86_64-Release-ANGLE/Release", + "--args=cc=\"[START_DIR]/clang_linux/bin/clang\" cxx=\"[START_DIR]/clang_linux/bin/clang++\" extra_cflags=[\"-B[START_DIR]/clang_linux/bin\", \"-DDUMMY_clang_linux_version=42\"] extra_ldflags=[\"-B[START_DIR]/clang_linux/bin\", \"-fuse-ld=lld\"] is_debug=false skia_use_angle=true target_cpu=\"x86_64\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { "CHROME_HEADLESS": "1", - "LD_LIBRARY_PATH": "[START_DIR]/mips64el_toolchain_linux/lib/x86_64-linux-gnu/", "PATH": ":RECIPE_REPO[depot_tools]" }, "name": "gn gen" @@ -46,12 +49,11 @@ "cmd": [ "ninja", "-C", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-loongson3a-Release/Release" + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-x86_64-Release-ANGLE/Release" ], "cwd": "[START_DIR]/cache/work/skia", "env": { "CHROME_HEADLESS": "1", - "LD_LIBRARY_PATH": "[START_DIR]/mips64el_toolchain_linux/lib/x86_64-linux-gnu/", "PATH": ":RECIPE_REPO[depot_tools]" }, "name": "ninja" @@ -61,7 +63,7 @@ "python", "-u", "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-loongson3a-Release/Release", + "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-x86_64-Release-ANGLE/Release", "[START_DIR]/[SWARM_OUT_DIR]/out/Release" ], "infra_step": true, diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-ASAN.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-ASAN.json index 6d546efaed17..3660a072c268 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-ASAN.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-ASAN.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Fast.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Fast.json index b910eaf3e932..d95b38427abc 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Fast.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Fast.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-NoDEPS.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-NoDEPS.json index 18d2be7af089..f98dd33a3685 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-NoDEPS.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-NoDEPS.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Static.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Static.json index 0583da8cb653..fb0769f6bac9 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Static.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Static.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-SwiftShader.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-SwiftShader.json index 2efd3711a92b..bd4cd0ce6785 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-SwiftShader.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-SwiftShader.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Vulkan.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Vulkan.json index b893230de209..68a951eb8a44 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Vulkan.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-x86_64-Release-Vulkan.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_linux VERSION" + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm-Debug-iOS.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm-Debug-iOS.json index 1311131521f6..42735c2bce3b 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm-Debug-iOS.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm-Debug-iOS.json @@ -3,7 +3,7 @@ "cmd": [], "name": "ensure xcode", "~followup_annotations": [ - "@@@STEP_TEXT@Ensuring Xcode version 10g8 in [START_DIR]/cache/Xcode.app@@@" + "@@@STEP_TEXT@Ensuring Xcode version 11c29 in [START_DIR]/cache/Xcode.app@@@" ] }, { @@ -13,7 +13,7 @@ "-kind", "ios", "-xcode-version", - "10g8", + "11c29", "-output-dir", "[START_DIR]/cache/Xcode.app" ], @@ -53,7 +53,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/cache/work/skia/out/Build-Mac-Clang-arm-Debug-iOS/Debug", - "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=10g8\", \"-O1\"] skia_ios_identity=\".*GS9WA.*\" skia_ios_profile=\"[START_DIR]/provisioning_profile_ios/Upstream_Testing_Provisioning_Profile.mobileprovision\" target_cpu=\"arm\" target_os=\"ios\" werror=true" + "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=11c29\", \"-O1\"] skia_ios_identity=\".*GS9WA.*\" skia_ios_profile=\"[START_DIR]/provisioning_profile_ios/Upstream_Testing_Provisioning_Profile.mobileprovision\" target_cpu=\"arm\" target_os=\"ios\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm64-Debug-Android_Vulkan.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm64-Debug-Android_Vulkan.json index f09ae3326efd..ab3e9b5da03c 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm64-Debug-Android_Vulkan.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm64-Debug-Android_Vulkan.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get android_ndk_darwin VERSION" + "name": "Get android_ndk_darwin VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm64-Debug-iOS.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm64-Debug-iOS.json index b0da46130993..11af19da8259 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm64-Debug-iOS.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-arm64-Debug-iOS.json @@ -3,7 +3,7 @@ "cmd": [], "name": "ensure xcode", "~followup_annotations": [ - "@@@STEP_TEXT@Ensuring Xcode version 10g8 in [START_DIR]/cache/Xcode.app@@@" + "@@@STEP_TEXT@Ensuring Xcode version 11c29 in [START_DIR]/cache/Xcode.app@@@" ] }, { @@ -13,7 +13,7 @@ "-kind", "ios", "-xcode-version", - "10g8", + "11c29", "-output-dir", "[START_DIR]/cache/Xcode.app" ], @@ -53,7 +53,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/cache/work/skia/out/Build-Mac-Clang-arm64-Debug-iOS/Debug", - "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=10g8\", \"-O1\"] skia_ios_identity=\".*GS9WA.*\" skia_ios_profile=\"[START_DIR]/provisioning_profile_ios/Upstream_Testing_Provisioning_Profile.mobileprovision\" target_cpu=\"arm64\" target_os=\"ios\" werror=true" + "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=11c29\", \"-O1\"] skia_ios_identity=\".*GS9WA.*\" skia_ios_profile=\"[START_DIR]/provisioning_profile_ios/Upstream_Testing_Provisioning_Profile.mobileprovision\" target_cpu=\"arm64\" target_os=\"ios\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-ASAN.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-ASAN.json index c20b915109e9..6e18c312a2aa 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-ASAN.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-ASAN.json @@ -3,7 +3,7 @@ "cmd": [], "name": "ensure xcode", "~followup_annotations": [ - "@@@STEP_TEXT@Ensuring Xcode version 10g8 in [START_DIR]/cache/Xcode.app@@@" + "@@@STEP_TEXT@Ensuring Xcode version 11c29 in [START_DIR]/cache/Xcode.app@@@" ] }, { @@ -13,7 +13,7 @@ "-kind", "ios", "-xcode-version", - "10g8", + "11c29", "-output-dir", "[START_DIR]/cache/Xcode.app" ], @@ -53,7 +53,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/cache/work/skia/out/Build-Mac-Clang-x86_64-Debug-ASAN/Debug", - "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=10g8\", \"-O1\"] sanitize=\"ASAN\" skia_enable_spirv_validation=false target_cpu=\"x86_64\" werror=true" + "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=11c29\", \"-O1\"] sanitize=\"ASAN\" skia_enable_spirv_validation=false target_cpu=\"x86_64\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { @@ -115,6 +115,23 @@ "@@@STEP_LOG_END@python.inline@@@" ] }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "listdir", + "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang" + ], + "infra_step": true, + "name": "find XCode Clang version", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@listdir@[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0@@@", + "@@@STEP_LOG_END@listdir@@@" + ] + }, { "cmd": [ "vpython", @@ -123,15 +140,15 @@ "--json-output", "/path/to/tmp/json", "glob", - "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin", + "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin", "libclang_rt.*san_osx_dynamic.dylib" ], "infra_step": true, "name": "find xSAN dylibs", "~followup_annotations": [ - "@@@STEP_LOG_LINE@glob@[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.asan_osx_dynamic.dylib@@@", - "@@@STEP_LOG_LINE@glob@[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib@@@", - "@@@STEP_LOG_LINE@glob@[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.ubsan_osx_dynamic.dylib@@@", + "@@@STEP_LOG_LINE@glob@[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib@@@", + "@@@STEP_LOG_LINE@glob@[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib@@@", + "@@@STEP_LOG_LINE@glob@[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.ubsan_osx_dynamic.dylib@@@", "@@@STEP_LOG_END@glob@@@" ] }, @@ -143,7 +160,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.asan_osx_dynamic.dylib", + "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib", "[START_DIR]/[SWARM_OUT_DIR]/out/Debug" ], "infra_step": true, @@ -157,7 +174,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", + "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", "[START_DIR]/[SWARM_OUT_DIR]/out/Debug" ], "infra_step": true, @@ -171,7 +188,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.ubsan_osx_dynamic.dylib", + "[START_DIR]/cache/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.ubsan_osx_dynamic.dylib", "[START_DIR]/[SWARM_OUT_DIR]/out/Debug" ], "infra_step": true, diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json index 6d065e677fc3..e379f0b7d623 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json @@ -3,7 +3,7 @@ "cmd": [], "name": "ensure xcode", "~followup_annotations": [ - "@@@STEP_TEXT@Ensuring Xcode version 10g8 in [START_DIR]/cache/Xcode.app@@@" + "@@@STEP_TEXT@Ensuring Xcode version 11c29 in [START_DIR]/cache/Xcode.app@@@" ] }, { @@ -13,7 +13,7 @@ "-kind", "ios", "-xcode-version", - "10g8", + "11c29", "-output-dir", "[START_DIR]/cache/Xcode.app" ], @@ -74,7 +74,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/cache/work/skia/out/Build-Mac-Clang-x86_64-Debug-CommandBuffer/Debug", - "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=10g8\", \"-O1\"] skia_gl_standard=\"\" target_cpu=\"x86_64\" werror=true" + "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=11c29\", \"-O1\"] skia_gl_standard=\"\" target_cpu=\"x86_64\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-Metal.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-Metal.json index 42930e4f13d5..29aded44c86c 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-Metal.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Debug-Metal.json @@ -3,7 +3,7 @@ "cmd": [], "name": "ensure xcode", "~followup_annotations": [ - "@@@STEP_TEXT@Ensuring Xcode version 10g8 in [START_DIR]/cache/Xcode.app@@@" + "@@@STEP_TEXT@Ensuring Xcode version 11c29 in [START_DIR]/cache/Xcode.app@@@" ] }, { @@ -13,7 +13,7 @@ "-kind", "ios", "-xcode-version", - "10g8", + "11c29", "-output-dir", "[START_DIR]/cache/Xcode.app" ], @@ -53,7 +53,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/cache/work/skia/out/Build-Mac-Clang-x86_64-Debug-Metal/Debug", - "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=10g8\", \"-O1\"] skia_use_metal=true target_cpu=\"x86_64\" werror=true" + "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=11c29\", \"-O1\"] skia_use_metal=true target_cpu=\"x86_64\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Release-MoltenVK_Vulkan.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Release-MoltenVK_Vulkan.json index 3a2a6ddcce73..0484b8b02d8c 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Release-MoltenVK_Vulkan.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Mac-Clang-x86_64-Release-MoltenVK_Vulkan.json @@ -3,7 +3,7 @@ "cmd": [], "name": "ensure xcode", "~followup_annotations": [ - "@@@STEP_TEXT@Ensuring Xcode version 10g8 in [START_DIR]/cache/Xcode.app@@@" + "@@@STEP_TEXT@Ensuring Xcode version 11c29 in [START_DIR]/cache/Xcode.app@@@" ] }, { @@ -13,7 +13,7 @@ "-kind", "ios", "-xcode-version", - "10g8", + "11c29", "-output-dir", "[START_DIR]/cache/Xcode.app" ], @@ -53,7 +53,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/cache/work/skia/out/Build-Mac-Clang-x86_64-Release-MoltenVK_Vulkan/Release", - "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=10g8\"] is_debug=false skia_enable_vulkan_debug_layers=false skia_moltenvk_path=\"[START_DIR]/moltenvk\" skia_use_vulkan=true target_cpu=\"x86_64\" werror=true" + "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=11c29\"] is_debug=false skia_enable_vulkan_debug_layers=false skia_moltenvk_path=\"[START_DIR]/moltenvk\" skia_use_vulkan=true target_cpu=\"x86_64\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-arm64-Release-Android.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-arm64-Release-Android.json index 2b4878fde629..295a25ce6df7 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-arm64-Release-Android.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-arm64-Release-Android.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get android_ndk_windows VERSION" + "name": "Get android_ndk_windows VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86-Debug-Exceptions.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86-Debug-Exceptions.json index c8eaaf9325c3..7f16b78babd7 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86-Debug-Exceptions.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86-Debug-Exceptions.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_win VERSION" + "name": "Get clang_win VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-Shared.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Debug-ANGLE.json similarity index 70% rename from third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-Shared.json rename to third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Debug-ANGLE.json index 12b83d8244ca..8c9d108ad4eb 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-Shared.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Debug-ANGLE.json @@ -1,29 +1,47 @@ [ + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]\\cache\\work\\skia\\infra\\bots\\assets\\clang_win\\VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get clang_win VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, { "cmd": [ "python", "-u", - "[START_DIR]/cache/work/skia/bin/fetch-gn" + "[START_DIR]\\cache\\work\\skia\\bin\\fetch-gn" ], - "cwd": "[START_DIR]/cache/work/skia", + "cwd": "[START_DIR]\\cache\\work\\skia", "env": { "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" + "PATH": ";RECIPE_REPO[depot_tools]" }, "infra_step": true, "name": "fetch-gn" }, { "cmd": [ - "[START_DIR]/cache/work/skia/bin/gn", + "[START_DIR]\\cache\\work\\skia\\bin\\gn", "gen", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-Shared/Release", - "--args=cc=\"gcc\" cxx=\"g++\" is_component_build=true is_debug=false target_cpu=\"x86_64\" werror=true" + "[START_DIR]\\cache\\work\\skia\\out\\Build-Win-Clang-x86_64-Debug-ANGLE\\Debug_x64", + "--args=cc=\"clang\" clang_win=\"[START_DIR]\\clang_win\" cxx=\"clang++\" extra_cflags=[\"-O1\", \"-DDUMMY_clang_win_version=42\"] skia_use_angle=true target_cpu=\"x86_64\" werror=true win_sdk=\"[START_DIR]\\win_toolchain/win_sdk\" win_vc=\"[START_DIR]\\win_toolchain/VC\"" ], - "cwd": "[START_DIR]/cache/work/skia", + "cwd": "[START_DIR]\\cache\\work\\skia", "env": { "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" + "PATH": ";RECIPE_REPO[depot_tools]" }, "name": "gn gen" }, @@ -31,12 +49,12 @@ "cmd": [ "ninja", "-C", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-Shared/Release" + "[START_DIR]\\cache\\work\\skia\\out\\Build-Win-Clang-x86_64-Debug-ANGLE\\Debug_x64" ], - "cwd": "[START_DIR]/cache/work/skia", + "cwd": "[START_DIR]\\cache\\work\\skia", "env": { "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" + "PATH": ";RECIPE_REPO[depot_tools]" }, "name": "ninja" }, @@ -45,8 +63,8 @@ "python", "-u", "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-Shared/Release", - "[START_DIR]/[SWARM_OUT_DIR]/out/Release" + "[START_DIR]\\cache\\work\\skia\\out\\Build-Win-Clang-x86_64-Debug-ANGLE\\Debug_x64", + "[START_DIR]\\[SWARM_OUT_DIR]\\out\\Debug_x64" ], "infra_step": true, "name": "copy build products", diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Debug-OpenCL.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Debug-OpenCL.json index e6eba0694ade..a7c3fecdf183 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Debug-OpenCL.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Debug-OpenCL.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_win VERSION" + "name": "Get clang_win VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-ANGLE.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Release-Shared.json similarity index 69% rename from third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-ANGLE.json rename to third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Release-Shared.json index b54d262d053e..92433944099c 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-GCC-x86_64-Release-ANGLE.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Release-Shared.json @@ -1,29 +1,47 @@ [ + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]\\cache\\work\\skia\\infra\\bots\\assets\\clang_win\\VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get clang_win VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, { "cmd": [ "python", "-u", - "[START_DIR]/cache/work/skia/bin/fetch-gn" + "[START_DIR]\\cache\\work\\skia\\bin\\fetch-gn" ], - "cwd": "[START_DIR]/cache/work/skia", + "cwd": "[START_DIR]\\cache\\work\\skia", "env": { "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" + "PATH": ";RECIPE_REPO[depot_tools]" }, "infra_step": true, "name": "fetch-gn" }, { "cmd": [ - "[START_DIR]/cache/work/skia/bin/gn", + "[START_DIR]\\cache\\work\\skia\\bin\\gn", "gen", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-ANGLE/Release", - "--args=cc=\"gcc\" cxx=\"g++\" is_debug=false skia_use_angle=true target_cpu=\"x86_64\" werror=true" + "[START_DIR]\\cache\\work\\skia\\out\\Build-Win-Clang-x86_64-Release-Shared\\Release_x64", + "--args=cc=\"clang\" clang_win=\"[START_DIR]\\clang_win\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_clang_win_version=42\"] is_component_build=true is_debug=false target_cpu=\"x86_64\" werror=true win_sdk=\"[START_DIR]\\win_toolchain/win_sdk\" win_vc=\"[START_DIR]\\win_toolchain/VC\"" ], - "cwd": "[START_DIR]/cache/work/skia", + "cwd": "[START_DIR]\\cache\\work\\skia", "env": { "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" + "PATH": ";RECIPE_REPO[depot_tools]" }, "name": "gn gen" }, @@ -31,12 +49,12 @@ "cmd": [ "ninja", "-C", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-ANGLE/Release" + "[START_DIR]\\cache\\work\\skia\\out\\Build-Win-Clang-x86_64-Release-Shared\\Release_x64" ], - "cwd": "[START_DIR]/cache/work/skia", + "cwd": "[START_DIR]\\cache\\work\\skia", "env": { "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" + "PATH": ";RECIPE_REPO[depot_tools]" }, "name": "ninja" }, @@ -45,8 +63,8 @@ "python", "-u", "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", - "[START_DIR]/cache/work/skia/out/Build-Debian9-GCC-x86_64-Release-ANGLE/Release", - "[START_DIR]/[SWARM_OUT_DIR]/out/Release" + "[START_DIR]\\cache\\work\\skia\\out\\Build-Win-Clang-x86_64-Release-Shared\\Release_x64", + "[START_DIR]\\[SWARM_OUT_DIR]\\out\\Release_x64" ], "infra_step": true, "name": "copy build products", diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Release-Vulkan.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Release-Vulkan.json index a200fcfb505f..6024779e9d9f 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Release-Vulkan.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Build-Win-Clang-x86_64-Release-Vulkan.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_win VERSION" + "name": "Get clang_win VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Housekeeper-PerCommit-CheckGeneratedFiles.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Housekeeper-PerCommit-CheckGeneratedFiles.json index 6cde17cbbcc7..d7f379820e6b 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Housekeeper-PerCommit-CheckGeneratedFiles.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Housekeeper-PerCommit-CheckGeneratedFiles.json @@ -1,4 +1,22 @@ [ + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/cache/work/skia/infra/bots/assets/clang_linux/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, { "cmd": [ "python", @@ -32,7 +50,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/cache/work/skia/out/Housekeeper-PerCommit-CheckGeneratedFiles/Release", - "--args=is_debug=false skia_compile_processors=true skia_generate_workarounds=true werror=true" + "--args=cc=\"[START_DIR]/clang_linux/bin/clang\" cxx=\"[START_DIR]/clang_linux/bin/clang++\" extra_cflags=[\"-B[START_DIR]/clang_linux/bin\", \"-DDUMMY_clang_linux_version=42\"] extra_ldflags=[\"-B[START_DIR]/clang_linux/bin\", \"-fuse-ld=lld\"] is_debug=false skia_compile_processors=true skia_generate_workarounds=true werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-universal-devrel-All-Android_SKQP.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-universal-devrel-All-Android_SKQP.json index 869ce08a7fc5..5027d9db47a0 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-universal-devrel-All-Android_SKQP.json +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-universal-devrel-All-Android_SKQP.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get android_ndk_linux VERSION" + "name": "Get android_ndk_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/unknown-docker-image.json b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/unknown-docker-image.json new file mode 100644 index 000000000000..413799b3841d --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.expected/unknown-docker-image.json @@ -0,0 +1,35 @@ +[ + { + "cmd": [], + "name": "RECIPE CRASH (Uncaught exception)", + "~followup_annotations": [ + "@@@STEP_EXCEPTION@@@", + "The recipe has crashed at point 'Uncaught exception'!", + "", + "Traceback (most recent call last):", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/engine.py\", in run_steps", + " raw_result = recipe_obj.run_steps(api, engine)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/recipe_deps.py\", in run_steps", + " properties_def, api=api)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/property_invoker.py\", in invoke_with_properties", + " arg_names, **additional_args)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/property_invoker.py\", in _invoke_with_properties", + " return callable_obj(*props, **additional_args)", + " File \"RECIPE_REPO[skia]/infra/bots/recipe_modules/build/examples/full.py\", line 22, in RunSteps", + " api.build(checkout_root=checkout_root, out_dir=out_dir)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/recipe_api.py\", in _inner", + " return func(*a, **kw)", + " File \"RECIPE_REPO[skia]/infra/bots/recipe_modules/build/api.py\", line 61, in __call__", + " self.compile_fn(self.m, checkout_root, out_dir)", + " File \"RECIPE_REPO[skia]/infra/bots/recipe_modules/build/docker.py\", line 78, in compile_fn", + " raise Exception('Not implemented: ' + api.vars.builder_name)", + "Exception: Not implemented: Build-Unix-GCC-x86_64-Release-Docker" + ] + }, + { + "failure": { + "humanReason": "Uncaught Exception: Exception('Not implemented: Build-Unix-GCC-x86_64-Release-Docker',)" + }, + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/build/examples/full.py b/third_party/skia/infra/bots/recipe_modules/build/examples/full.py index 32f922f5b14f..7a3f4288aa9b 100644 --- a/third_party/skia/infra/bots/recipe_modules/build/examples/full.py +++ b/third_party/skia/infra/bots/recipe_modules/build/examples/full.py @@ -26,10 +26,17 @@ def RunSteps(api): TEST_BUILDERS = [ + 'Build-Debian10-GCC-loongson3a-Release-Docker', + 'Build-Debian10-GCC-x86-Debug-Docker', + 'Build-Debian10-GCC-x86_64-Debug-Docker', + 'Build-Debian10-GCC-x86_64-Release-NoGPU_Docker', + 'Build-Debian10-GCC-x86_64-Release-Shared_Docker', 'Build-Debian9-Clang-arm-Release-Android_API26', 'Build-Debian9-Clang-arm-Release-Android_ASAN', 'Build-Debian9-Clang-arm-Release-Chromebook_GLES', + 'Build-Debian9-Clang-arm-Release-Chromecast', 'Build-Debian9-Clang-arm-Release-Flutter_Android', + 'Build-Debian9-Clang-arm64-Release-Android_Wuffs', 'Build-Debian9-Clang-x86-devrel-Android_SKQP', 'Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES', 'Build-Debian9-Clang-x86_64-Debug-Coverage', @@ -40,6 +47,7 @@ def RunSteps(api): 'Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN', 'Build-Debian9-Clang-x86_64-Debug-Tidy', 'Build-Debian9-Clang-x86_64-Debug-Wuffs', + 'Build-Debian9-Clang-x86_64-Release-ANGLE', 'Build-Debian9-Clang-x86_64-Release-ASAN', 'Build-Debian9-Clang-x86_64-Release-CMake', 'Build-Debian9-Clang-x86_64-Release-Fast', @@ -53,11 +61,6 @@ def RunSteps(api): 'Build-Debian9-EMCC-wasm-Debug-PathKit', 'Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU', 'Build-Debian9-EMCC-wasm-Release-PathKit', - 'Build-Debian9-GCC-arm-Release-Chromecast', - 'Build-Debian9-GCC-loongson3a-Release', - 'Build-Debian9-GCC-x86_64-Release-ANGLE', - 'Build-Debian9-GCC-x86_64-Release-NoGPU', - 'Build-Debian9-GCC-x86_64-Release-Shared', 'Build-Mac-Clang-arm-Debug-iOS', 'Build-Mac-Clang-arm64-Debug-Android_Vulkan', 'Build-Mac-Clang-arm64-Debug-iOS', @@ -67,7 +70,9 @@ def RunSteps(api): 'Build-Mac-Clang-x86_64-Release-MoltenVK_Vulkan', 'Build-Win-Clang-arm64-Release-Android', 'Build-Win-Clang-x86-Debug-Exceptions', + 'Build-Win-Clang-x86_64-Debug-ANGLE', 'Build-Win-Clang-x86_64-Debug-OpenCL', + 'Build-Win-Clang-x86_64-Release-Shared', 'Build-Win-Clang-x86_64-Release-Vulkan', 'Test-Debian9-Clang-GCE-CPU-AVX2-universal-devrel-All-Android_SKQP', 'Housekeeper-PerCommit-CheckGeneratedFiles', @@ -92,3 +97,9 @@ def GenTests(api): if 'Win' in buildername and not 'LenovoYogaC630' in buildername: test += api.platform('win', 64) yield test + + yield ( + api.test('unknown-docker-image') + + api.properties(**defaultProps('Build-Unix-GCC-x86_64-Release-Docker')) + + api.expect_exception('Exception') + ) diff --git a/third_party/skia/infra/bots/recipe_modules/build/resources/docker-compile.sh b/third_party/skia/infra/bots/recipe_modules/build/resources/docker-compile.sh new file mode 100755 index 000000000000..57c9a66c6944 --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/build/resources/docker-compile.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright 2019 Google LLC +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This assumes it is being run inside a docker container with the following +# mounts: +# /SRC: Swarming start dir +# /OUT: output directory for gn and ninja + +set -e +set -x + +export PATH="/SRC/recipe_bundle/depot_tools:${PATH}" + +cd /SRC/skia +./bin/fetch-gn +./bin/gn gen /OUT "--args=$1" +ninja -C /OUT diff --git a/third_party/skia/infra/bots/recipe_modules/builder_name_schema/api.py b/third_party/skia/infra/bots/recipe_modules/builder_name_schema/api.py index 8686111c84d8..b0d67b16d628 100644 --- a/third_party/skia/infra/bots/recipe_modules/builder_name_schema/api.py +++ b/third_party/skia/infra/bots/recipe_modules/builder_name_schema/api.py @@ -24,7 +24,6 @@ def __init__(self, *args, **kwargs): self.BUILDER_ROLE_INFRA = builder_name_schema.BUILDER_ROLE_INFRA self.BUILDER_ROLE_PERF = builder_name_schema.BUILDER_ROLE_PERF self.BUILDER_ROLE_TEST = builder_name_schema.BUILDER_ROLE_TEST - self.BUILDER_ROLE_CALMBENCH = builder_name_schema.BUILDER_ROLE_CALMBENCH self.BUILDER_ROLES = builder_name_schema.BUILDER_ROLES def MakeBuilderName(self, **kwargs): diff --git a/third_party/skia/infra/bots/recipe_modules/builder_name_schema/builder_name_schema.json b/third_party/skia/infra/bots/recipe_modules/builder_name_schema/builder_name_schema.json index 18777e4f6edc..6958b16666b7 100644 --- a/third_party/skia/infra/bots/recipe_modules/builder_name_schema/builder_name_schema.json +++ b/third_party/skia/infra/bots/recipe_modules/builder_name_schema/builder_name_schema.json @@ -22,21 +22,6 @@ "extra_config" ] }, - "Calmbench": { - "keys": [ - "os", - "compiler", - "model", - "cpu_or_gpu", - "cpu_or_gpu_value", - "arch", - "configuration", - "test_filter" - ], - "optional_keys": [ - "extra_config" - ] - }, "Housekeeper": { "keys": [ "frequency" @@ -87,7 +72,6 @@ "recurse_roles": [ "Build", "BuildStats", - "Calmbench", "Perf", "Test" ] diff --git a/third_party/skia/infra/bots/recipe_modules/builder_name_schema/builder_name_schema.py b/third_party/skia/infra/bots/recipe_modules/builder_name_schema/builder_name_schema.py index a596be84ca80..fff45e922e5a 100644 --- a/third_party/skia/infra/bots/recipe_modules/builder_name_schema/builder_name_schema.py +++ b/third_party/skia/infra/bots/recipe_modules/builder_name_schema/builder_name_schema.py @@ -22,7 +22,6 @@ # Builder roles. BUILDER_ROLE_BUILD = 'Build' BUILDER_ROLE_BUILDSTATS = 'BuildStats' -BUILDER_ROLE_CALMBENCH = 'Calmbench' BUILDER_ROLE_HOUSEKEEPER = 'Housekeeper' BUILDER_ROLE_INFRA = 'Infra' BUILDER_ROLE_PERF = 'Perf' @@ -30,7 +29,6 @@ BUILDER_ROLE_UPLOAD = 'Upload' BUILDER_ROLES = (BUILDER_ROLE_BUILD, BUILDER_ROLE_BUILDSTATS, - BUILDER_ROLE_CALMBENCH, BUILDER_ROLE_HOUSEKEEPER, BUILDER_ROLE_INFRA, BUILDER_ROLE_PERF, diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/api.py b/third_party/skia/infra/bots/recipe_modules/checkout/api.py index 0d2f3bd987c1..48ea07267835 100644 --- a/third_party/skia/infra/bots/recipe_modules/checkout/api.py +++ b/third_party/skia/infra/bots/recipe_modules/checkout/api.py @@ -17,8 +17,23 @@ def default_checkout_root(self): """The default location for cached persistent checkouts.""" return self.m.vars.cache_dir.join('work') + def assert_git_is_from_cipd(self): + """Fail if git is not obtained from CIPD.""" + self.m.run(self.m.python.inline, 'Assert that Git is from CIPD', program=''' +import subprocess +import sys + +which = 'where' if sys.platform == 'win32' else 'which' +git = subprocess.check_output([which, 'git']) +print 'git was found at %s' % git +if 'cipd_bin_packages' not in git: + print >> sys.stderr, 'Git must be obtained through CIPD.' + sys.exit(1) +''') + def git(self, checkout_root): """Run the steps to perform a pure-git checkout without DEPS.""" + self.assert_git_is_from_cipd() skia_dir = checkout_root.join('skia') self.m.git.checkout( self.m.properties['repository'], dir_path=skia_dir, @@ -31,7 +46,7 @@ def git(self, checkout_root): def bot_update(self, checkout_root, gclient_cache=None, checkout_chromium=False, checkout_flutter=False, - extra_gclient_env=None, parent_rev=False, + extra_gclient_env=None, flutter_android=False): """Run the steps to obtain a checkout using bot_update. @@ -44,11 +59,9 @@ def bot_update(self, checkout_root, gclient_cache=None, primary repo. extra_gclient_env: Map of extra environment variable names to their values to supply while running gclient. - parent_rev: If True, checks out the parent of the specified revision, - rather than the revision itself, ie. HEAD^ for normal jobs and HEAD - (no patch) for try jobs. flutter_android: Indicates that we're checking out flutter for Android. """ + self.assert_git_is_from_cipd() if not gclient_cache: gclient_cache = self.m.vars.cache_dir.join('git') if not extra_gclient_env: @@ -119,9 +132,6 @@ def bot_update(self, checkout_root, gclient_cache=None, entries_file) # Run bot_update. - if not self.m.vars.is_trybot and parent_rev: - main.revision = main.revision + '^' - patch_refs = None patch_ref = self.m.properties.get('patch_ref') if patch_ref: @@ -136,8 +146,8 @@ def bot_update(self, checkout_root, gclient_cache=None, # The logic in ensure_checkout for this arg is fairly naive, so if # patch=False, we'll see "... (without patch)" in the step names, even # for non-trybot runs, which is misleading and confusing. Therefore, - # always specify patch=True for non-trybot runs. - patch=not (self.m.vars.is_trybot and parent_rev), + # always specify patch=True. + patch=True, patch_refs=patch_refs, ) diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Debian9-Clang-x86_64-Release-NoDEPS.json b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Debian9-Clang-x86_64-Release-NoDEPS.json index 67c4c85aaa09..795bb61d9564 100644 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Debian9-Clang-x86_64-Release-NoDEPS.json +++ b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Debian9-Clang-x86_64-Release-NoDEPS.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "python", diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json index 2ee4c7df20fb..ecc183571b8e 100644 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json +++ b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Win-Clang-x86_64-Release-ParentRevision.json b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Win-Clang-x86_64-Release-ParentRevision.json deleted file mode 100644 index 8879ec4ab310..000000000000 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Build-Win-Clang-x86_64-Release-ParentRevision.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]\\cache\\work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]\\cache\\work\\.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]\\cache\\work\\.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]\\resources\\bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]\\\\cache\\\\git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]\\cache\\git", - "--cleanup-dir", - "[CLEANUP]\\bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123^" - ], - "cwd": "[START_DIR]\\cache\\work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123^\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]\\tmp" - ], - "infra_step": true, - "name": "makedirs tmp_dir" - }, - { - "name": "$result" - } -] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Housekeeper-Weekly-RecreateSKPs.json b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Housekeeper-Weekly-RecreateSKPs.json index 8714270614ae..efe1171a5fae 100644 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Housekeeper-Weekly-RecreateSKPs.json +++ b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/Housekeeper-Weekly-RecreateSKPs.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/cross_repo_trybot.json b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/cross_repo_trybot.json index c32533553645..579b384ae6a0 100644 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/cross_repo_trybot.json +++ b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/cross_repo_trybot.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/flutter_trybot.json b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/flutter_trybot.json index 27ba3862ed1f..1435099049ff 100644 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/flutter_trybot.json +++ b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/flutter_trybot.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/parent_revision_trybot.json b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/parent_revision_trybot.json deleted file mode 100644 index 8d8ae6e8a342..000000000000 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/parent_revision_trybot.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]\\cache\\work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]\\cache\\work\\.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]\\cache\\work\\.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]\\resources\\bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]\\\\cache\\\\git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]\\cache\\git", - "--cleanup-dir", - "[CLEANUP]\\bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]\\cache\\work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update (without patch)", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]\\tmp" - ], - "infra_step": true, - "name": "makedirs tmp_dir" - }, - { - "name": "$result" - } -] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/trybot.json b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/trybot.json index e577cb69145e..d1587c4c58c2 100644 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/trybot.json +++ b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.expected/trybot.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.py b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.py index 3d8a1e0bada0..5cb0aafd4f1f 100644 --- a/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.py +++ b/third_party/skia/infra/bots/recipe_modules/checkout/examples/full.py @@ -26,7 +26,6 @@ def RunSteps(api): checkout_flutter = False extra_gclient_env = {} flutter_android = False - parent_rev = False if 'CommandBuffer' in api.vars.builder_name: checkout_chromium = True if 'RecreateSKPs' in api.vars.builder_name: @@ -38,8 +37,6 @@ def RunSteps(api): checkout_flutter = True if 'Android' in api.vars.builder_name: flutter_android = True - if 'ParentRevision' in api.vars.builder_name: - parent_rev = True if bot_update: api.checkout.bot_update( @@ -47,15 +44,13 @@ def RunSteps(api): checkout_chromium=checkout_chromium, checkout_flutter=checkout_flutter, extra_gclient_env=extra_gclient_env, - flutter_android=flutter_android, - parent_rev=parent_rev) + flutter_android=flutter_android) else: api.checkout.git(checkout_root=api.path['start_dir']) api.file.ensure_directory('makedirs tmp_dir', api.vars.tmp_dir) TEST_BUILDERS = [ - 'Build-Win-Clang-x86_64-Release-ParentRevision', 'Build-Mac-Clang-x86_64-Debug-CommandBuffer', 'Housekeeper-Weekly-RecreateSKPs', ] @@ -71,26 +66,8 @@ def GenTests(api): path_config='kitchen', swarm_out_dir='[SWARM_OUT_DIR]') ) - if 'Win' in buildername and not 'LenovoYogaC630' in buildername: - test += api.platform('win', 64) yield test - buildername = 'Build-Win-Clang-x86_64-Release-ParentRevision' - yield ( - api.test('parent_revision_trybot') + - api.properties(buildername=buildername, - repository='https://skia.googlesource.com/skia.git', - revision='abc123', - path_config='kitchen', - swarm_out_dir='[SWARM_OUT_DIR]', - patch_issue=456789, - patch_set=12, - patch_ref='refs/changes/89/456789/12', - patch_repo='https://skia.googlesource.com/skia.git', - patch_storage='gerrit') + - api.platform('win', 64) - ) - buildername = 'Build-Debian9-Clang-arm-Release-Flutter_Android' yield ( api.test('flutter_trybot') + @@ -126,7 +103,7 @@ def GenTests(api): api.path.exists(api.path['start_dir'].join('skp_output')) ) - buildername = 'Build-Debian9-GCC-x86_64-Release' + buildername = 'Build-Debian9-Clang-x86_64-Release' yield ( api.test('cross_repo_trybot') + api.properties( diff --git a/third_party/skia/infra/bots/recipe_modules/docker/__init__.py b/third_party/skia/infra/bots/recipe_modules/docker/__init__.py new file mode 100644 index 000000000000..5c7475541f14 --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/docker/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2019 Google LLC +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +DEPS = [ + 'env', + 'recipe_engine/file', + 'recipe_engine/path', + 'recipe_engine/step', + 'run', +] diff --git a/third_party/skia/infra/bots/recipe_modules/docker/api.py b/third_party/skia/infra/bots/recipe_modules/docker/api.py new file mode 100644 index 000000000000..8426676bcaec --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/docker/api.py @@ -0,0 +1,78 @@ +# Copyright 2019 Google LLC +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import os +from recipe_engine import recipe_api + + +MOUNT_SRC = '/SRC' +MOUNT_OUT = '/OUT' + + +class DockerApi(recipe_api.RecipeApi): + def _chmod(self, filepath, mode, recursive=False): + cmd = ['chmod'] + if recursive: + cmd.append('-R') + cmd.extend([mode, filepath]) + name = ' '.join([str(elem) for elem in cmd]) + self.m.step(name, cmd=cmd, infra_step=True) + + def mount_src(self): + return MOUNT_SRC + + def mount_out(self): + return MOUNT_OUT + + def run(self, name, docker_image, src_dir, out_dir, script, args=None, docker_args=None, copies=None, recursive_read=None, attempts=1): + # Setup. Docker runs as a different user, so we need to give it access to + # read, write, and execute certain files. + with self.m.step.nest('Docker setup'): + # Make sure out_dir exists, otherwise mounting will fail. + # (Note that the docker --mount option, unlike the --volume option, does + # not create this dir as root if it doesn't exist.) + self.m.file.ensure_directory('mkdirs out_dir', out_dir, mode=0777) + # ensure_directory won't change the permissions if the dir already exists, + # so we need to do that explicitly. + self._chmod(out_dir, '777') + + # chmod the src_dir, but not recursively; Swarming writes some files which + # we can't access, so "chmod -R" will fail if this is the root workdir. + self._chmod(src_dir, '755') + + # Need to make the script executable, or Docker can't run it. + self._chmod(script, '0755') + + # Copy any requested files. + if copies: + for src, dest in copies.iteritems(): + dirname = self.m.path.dirname(dest) + self.m.file.ensure_directory( + 'mkdirs %s' % dirname, dirname, mode=0777) + self.m.file.copy('cp %s %s' % (src, dest), src, dest) + self._chmod(dest, '644') + + # Recursive chmod any requested directories. + if recursive_read: + for elem in recursive_read: + self._chmod(elem, 'a+r', recursive=True) + + # Run. + cmd = [ + 'docker', 'run', '--shm-size=2gb', '--rm', + '--mount', 'type=bind,source=%s,target=%s' % (src_dir, MOUNT_SRC), + '--mount', 'type=bind,source=%s,target=%s' % (out_dir, MOUNT_OUT), + ] + if docker_args: + cmd.extend(docker_args) + script_rel = os.path.relpath(str(script), str(self.m.path['start_dir'])) + cmd.extend([docker_image, MOUNT_SRC + '/' + script_rel]) + if args: + cmd.extend(args) + + env = {'DOCKER_CONFIG': '/home/chrome-bot/.docker'} + with self.m.env(env): + self.m.run.with_retry(self.m.step, name, attempts, cmd=cmd) diff --git a/third_party/skia/infra/bots/recipe_modules/docker/examples/full.expected/test.json b/third_party/skia/infra/bots/recipe_modules/docker/examples/full.expected/test.json new file mode 100644 index 000000000000..d26a16e1176f --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/docker/examples/full.expected/test.json @@ -0,0 +1,149 @@ +[ + { + "cmd": [], + "name": "Docker setup" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "/host-out" + ], + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "/host-out" + ], + "infra_step": true, + "name": "Docker setup.chmod 777 /host-out", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "/host-src" + ], + "infra_step": true, + "name": "Docker setup.chmod 755 /host-src", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "./do-stuff.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 ./do-stuff.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "/copy-dst" + ], + "infra_step": true, + "name": "Docker setup.mkdirs /copy-dst", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "/copy-src/myfile", + "/copy-dst/myfile" + ], + "infra_step": true, + "name": "Docker setup.cp /copy-src/myfile /copy-dst/myfile", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "/copy-dst/myfile" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 /copy-dst/myfile", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "/host-src" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r /host-src", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=/host-src,target=/SRC", + "--mount", + "type=bind,source=/host-out,target=/OUT", + "--cpus", + "2", + "my.docker.image", + "/SRC/../do-stuff.sh", + "--src", + "/SRC", + "--out", + "/OUT" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "do Docker stuff" + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/docker/examples/full.py b/third_party/skia/infra/bots/recipe_modules/docker/examples/full.py new file mode 100644 index 000000000000..390ea943934a --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/docker/examples/full.py @@ -0,0 +1,38 @@ +# Copyright 2017 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. + + +DEPS = [ + 'docker', + 'recipe_engine/context', + 'recipe_engine/properties', + 'recipe_engine/step', + 'vars', +] + + +def RunSteps(api): + api.vars.setup() + api.docker.run( + name='do Docker stuff', + docker_image='my.docker.image', + src_dir='/host-src', + out_dir='/host-out', + script='./do-stuff.sh', + args=['--src', api.docker.mount_src(), '--out', api.docker.mount_out()], + docker_args=['--cpus', '2'], + copies={'/copy-src/myfile': '/copy-dst/myfile'}, + recursive_read=['/host-src'], + ) + +def GenTests(api): + yield (api.test('test') + + api.properties(buildername='Test-Debian9-EMCC-GCE-GPU-WEBGL1-wasm-Debug-All-CanvasKit', + buildbucket_build_id='123454321', + revision='abc123', + path_config='kitchen', + gold_hashes_url='https://example.com/hashes.txt', + swarm_out_dir='[SWARM_OUT_DIR]', + task_id='task_12345') + ) diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/__init__.py b/third_party/skia/infra/bots/recipe_modules/flavor/__init__.py index 28b3d9bacba7..9e6c0b006725 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/__init__.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/__init__.py @@ -8,6 +8,7 @@ 'depot_tools/cipd', 'depot_tools/gclient', 'depot_tools/git', + 'docker', 'env', 'infra', 'recipe_engine/context', diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/android.py b/third_party/skia/infra/bots/recipe_modules/flavor/android.py index e4944a67af30..2cb7631d045e 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/android.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/android.py @@ -26,16 +26,17 @@ def __init__(self, m): # Data should go in android_data_dir, which may be preserved across runs. android_data_dir = '/sdcard/revenge_of_the_skiabot/' self.device_dirs = default.DeviceDirs( - bin_dir = '/data/local/tmp/', - dm_dir = android_data_dir + 'dm_out', - perf_data_dir = android_data_dir + 'perf', - resource_dir = android_data_dir + 'resources', - images_dir = android_data_dir + 'images', - lotties_dir = android_data_dir + 'lotties', - skp_dir = android_data_dir + 'skps', - svg_dir = android_data_dir + 'svgs', - mskp_dir = android_data_dir + 'mskp', - tmp_dir = android_data_dir) + bin_dir = '/data/local/tmp/', + dm_dir = android_data_dir + 'dm_out', + perf_data_dir = android_data_dir + 'perf', + resource_dir = android_data_dir + 'resources', + images_dir = android_data_dir + 'images', + lotties_dir = android_data_dir + 'lotties', + skp_dir = android_data_dir + 'skps', + svg_dir = android_data_dir + 'svgs', + mskp_dir = android_data_dir + 'mskp', + tmp_dir = android_data_dir, + texttraces_dir = android_data_dir + 'text_blob_traces') # A list of devices we can't root. If rooting fails and a device is not # on the list, we fail the task to avoid perf inconsistencies. @@ -130,8 +131,8 @@ def _scale_for_dm(self): # AndroidOne doesn't support ondemand governor. hotplug is similar. if device == 'AndroidOne': self._set_governor(i, 'hotplug') - elif device == 'Pixel3a': - # Pixel3a has userspace powersave performance schedutil. + elif device in ['Pixel3a', 'Pixel4']: + # Pixel3a/4 have userspace powersave performance schedutil. # performance seems like a reasonable choice. self._set_governor(i, 'performance') else: diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/api.py b/third_party/skia/infra/bots/recipe_modules/flavor/api.py index 9f4df02b940f..dc89baf834e3 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/api.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/api.py @@ -12,6 +12,7 @@ from . import chromebook from . import chromecast from . import default +from . import docker from . import ios from . import valgrind from . import win_ssh @@ -34,6 +35,7 @@ VERSION_FILE_SKP = 'SKP_VERSION' VERSION_FILE_SVG = 'SVG_VERSION' VERSION_FILE_MSKP = 'MSKP_VERSION' +VERSION_FILE_TEXTTRACES = 'TEXTTRACES_VERSION' VERSION_NONE = -1 @@ -49,6 +51,9 @@ def is_chromebook(vars_api): return ('Chromebook' in vars_api.extra_tokens or 'ChromeOS' in vars_api.builder_cfg.get('os', '')) +def is_docker(vars_api): + return 'Docker' in vars_api.extra_tokens + def is_ios(vars_api): return ('iOS' in vars_api.extra_tokens or 'iOS' == vars_api.builder_cfg.get('os', '')) @@ -73,6 +78,8 @@ def get_flavor(self, vars_api): return chromebook.ChromebookFlavor(self) if is_android(vars_api) and not is_test_skqp(vars_api): return android.AndroidFlavor(self) + elif is_docker(vars_api): + return docker.DockerFlavor(self) elif is_ios(vars_api): return ios.iOSFlavor(self) elif is_valgrind(vars_api): @@ -116,9 +123,11 @@ def remove_file_on_device(self, path): return self._f.remove_file_on_device(path) def install(self, skps=False, images=False, lotties=False, svgs=False, - resources=False, mskps=False): + resources=False, mskps=False, texttraces=False): self._f.install() + if texttraces: + self._copy_texttraces() # TODO(borenet): Only copy files which have changed. if resources: self.copy_directory_contents_to_device( @@ -229,3 +238,17 @@ def _copy_mskps(self): self.host_dirs.mskp_dir, self.device_dirs.mskp_dir) return version + + def _copy_texttraces(self): + """Copy the text traces if needed.""" + version = self.m.run.asset_version('text_blob_traces', self._skia_dir) + self.m.run.writefile( + self.m.path.join(self.m.vars.tmp_dir, VERSION_FILE_TEXTTRACES), + version) + self._copy_dir( + version, + VERSION_FILE_TEXTTRACES, + self.m.vars.tmp_dir, + self.host_dirs.texttraces_dir, + self.device_dirs.texttraces_dir) + return version diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/chromebook.py b/third_party/skia/infra/bots/recipe_modules/flavor/chromebook.py index 116b6fd53164..b24624c174d7 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/chromebook.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/chromebook.py @@ -18,16 +18,17 @@ def __init__(self, m): super(ChromebookFlavor, self).__init__(m) self.chromeos_homedir = '/home/chronos/user/' self.device_dirs = default.DeviceDirs( - bin_dir = self.chromeos_homedir + 'bin', - dm_dir = self.chromeos_homedir + 'dm_out', - perf_data_dir = self.chromeos_homedir + 'perf', - resource_dir = self.chromeos_homedir + 'resources', - images_dir = self.chromeos_homedir + 'images', - lotties_dir = self.chromeos_homedir + 'lotties', - skp_dir = self.chromeos_homedir + 'skps', - svg_dir = self.chromeos_homedir + 'svgs', - mskp_dir = self.chromeos_homedir + 'mskp', - tmp_dir = self.chromeos_homedir) + bin_dir = self.chromeos_homedir + 'bin', + dm_dir = self.chromeos_homedir + 'dm_out', + perf_data_dir = self.chromeos_homedir + 'perf', + resource_dir = self.chromeos_homedir + 'resources', + images_dir = self.chromeos_homedir + 'images', + lotties_dir = self.chromeos_homedir + 'lotties', + skp_dir = self.chromeos_homedir + 'skps', + svg_dir = self.chromeos_homedir + 'svgs', + mskp_dir = self.chromeos_homedir + 'mskp', + tmp_dir = self.chromeos_homedir, + texttraces_dir = '') def install(self): super(ChromebookFlavor, self).install() diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/chromecast.py b/third_party/skia/infra/bots/recipe_modules/flavor/chromecast.py index e0bbfb12d6f1..501a1da70530 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/chromecast.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/chromecast.py @@ -23,16 +23,17 @@ def __init__(self, m): # on the tempfs (i.e. RAM) /dev/shm. (which is about 140M) data_dir = '/cache/skia/' self.device_dirs = default.DeviceDirs( - bin_dir = '/cache/skia/bin', - dm_dir = '/dev/shm/skia/dm_out', - perf_data_dir = data_dir + 'perf', - resource_dir = data_dir + 'resources', - images_dir = data_dir + 'images', - lotties_dir = data_dir + 'lotties', - skp_dir = data_dir + 'skps', - svg_dir = data_dir + 'svgs', - mskp_dir = data_dir + 'mskp', - tmp_dir = data_dir) + bin_dir = '/cache/skia/bin', + dm_dir = '/dev/shm/skia/dm_out', + perf_data_dir = data_dir + 'perf', + resource_dir = data_dir + 'resources', + images_dir = data_dir + 'images', + lotties_dir = data_dir + 'lotties', + skp_dir = data_dir + 'skps', + svg_dir = data_dir + 'svgs', + mskp_dir = data_dir + 'mskp', + tmp_dir = data_dir, + texttraces_dir = '') @property def user_ip_host(self): diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/default.py b/third_party/skia/infra/bots/recipe_modules/flavor/default.py index 827c3d525209..ee29f8f96ef0 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/default.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/default.py @@ -9,73 +9,18 @@ """Default flavor, used for running code on desktop machines.""" +import collections + + WIN_TOOLCHAIN_DIR = 't' -class DeviceDirs(object): - def __init__(self, - bin_dir, - dm_dir, - perf_data_dir, - resource_dir, - images_dir, - lotties_dir, - skp_dir, - svg_dir, - mskp_dir, - tmp_dir): - self._bin_dir = bin_dir - self._dm_dir = dm_dir - self._perf_data_dir = perf_data_dir - self._resource_dir = resource_dir - self._images_dir = images_dir - self._lotties_dir = lotties_dir - self._skp_dir = skp_dir - self._svg_dir = svg_dir - self._mskp_dir = mskp_dir - self._tmp_dir = tmp_dir - - @property - def bin_dir(self): - return self._bin_dir - - @property - def dm_dir(self): - """Where DM writes.""" - return self._dm_dir - - @property - def perf_data_dir(self): - return self._perf_data_dir - - @property - def resource_dir(self): - return self._resource_dir - - @property - def images_dir(self): - return self._images_dir - - @property - def lotties_dir(self): - return self._lotties_dir - - @property - def skp_dir(self): - """Holds SKP files that are consumed by RenderSKPs and BenchPictures.""" - return self._skp_dir - - @property - def svg_dir(self): - return self._svg_dir - - @property - def mskp_dir(self): - return self._mskp_dir - - @property - def tmp_dir(self): - return self._tmp_dir +# Notes: +# dm_dir: Where DM writes. +# skp_dir: Holds SKP files that are consumed by RenderSKPs and BenchPictures. +DeviceDirs = collections.namedtuple( + 'DeviceDirs', ['bin_dir', 'dm_dir', 'perf_data_dir', 'resource_dir', 'images_dir', + 'lotties_dir', 'skp_dir', 'svg_dir', 'mskp_dir', 'tmp_dir', 'texttraces_dir']) class DefaultFlavor(object): @@ -99,7 +44,8 @@ def __init__(self, module): skp_dir=self.m.path['start_dir'].join('skp'), svg_dir=self.m.path['start_dir'].join('svg'), mskp_dir=self.m.path['start_dir'].join('mskp'), - tmp_dir=self.m.vars.tmp_dir) + tmp_dir=self.m.vars.tmp_dir, + texttraces_dir=self.m.path['start_dir'].join('text_blob_traces')) self.host_dirs = self.device_dirs def device_path_join(self, *args): diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/docker.py b/third_party/skia/infra/bots/recipe_modules/flavor/docker.py new file mode 100644 index 000000000000..60cf5f6e6a68 --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/flavor/docker.py @@ -0,0 +1,69 @@ +# Copyright 2014 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. + + +from . import default + +"""Docker flavor, used for running inside a Docker container.""" + + +# TODO(dogben): Move this mapping to a machine-editable file. +# TODO(dogben): Use images without extra packages installed. +IMAGES = { + 'gcc-debian10': ( + 'gcr.io/skia-public/gcc-debian10@sha256:' + '89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c'), + 'gcc-debian10-x86': ( + 'gcr.io/skia-public/gcc-debian10-x86@sha256:' + 'b1ec55403ac66d9500d033d6ffd7663894d32335711fbbb0fb4c67dfce812203'), +} + + +class DockerFlavor(default.DefaultFlavor): + def __init__(self, m): + super(DockerFlavor, self).__init__(m) + + def _map_host_path_to_docker(self, path): + """Returns the path in the Docker container mapped to the given path. + + Returns None if the path is not mapped into the Docker container. + """ + path = str(path) + for (docker_dir, host_dir) in [ + (self.m.docker.mount_out(), str(self.m.vars.swarming_out_dir)), + (self.m.docker.mount_src(), str(self.m.path['start_dir'])), + ]: + if path.startswith(host_dir): + return docker_dir + path[len(host_dir):] + return None + + def step(self, name, cmd, **unused_kwargs): + extra_tokens = self.m.vars.extra_tokens + extra_tokens.remove('Docker') + os = self.m.vars.builder_cfg.get('os', '') + model = self.m.vars.builder_cfg.get('model', '') + cpu_or_gpu = self.m.vars.builder_cfg.get('cpu_or_gpu', '') + arch = self.m.vars.builder_cfg.get('arch', '') + + image_name = None + if (os == 'Debian10' and model == 'GCE' and cpu_or_gpu == 'CPU' and + not extra_tokens): + if arch == 'x86_64': + image_name = 'gcc-debian10' + elif arch == 'x86': + image_name = 'gcc-debian10-x86' + + if not image_name: # pragma: nocover + raise Exception('Not implemented: ' + self.m.vars.builder_name) + + image_hash = IMAGES[image_name] + + # TODO(dogben): Currently Linux-specific. + app = self._map_host_path_to_docker(self.device_dirs.bin_dir.join(cmd[0])) + args = [self.m.docker.mount_src(), 'catchsegv', app] + [ + self._map_host_path_to_docker(x) or x for x in cmd[1:]] + self.m.docker.run('symbolized %s in Docker' % name, image_hash, + self.m.path['start_dir'], self.m.vars.swarming_out_dir, + self.module.resource('symbolize_stack_trace.py'), + args=args) diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json index 372cb4e7fc8f..66dd774d83b5 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json index bd7c834504b4..278fcdf598cf 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/internal_bot_2.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android.json similarity index 78% rename from third_party/skia/infra/bots/recipes/test.expected/internal_bot_2.json rename to third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android.json index ed5f8970cdce..c36fc2293655 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/internal_bot_2.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android.json @@ -1,4 +1,79 @@ [ + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "push", + "file.txt", + "file.txt" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push file.txt file.txt" + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "shell", + "cat", + "file.txt" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "read file.txt" + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "shell", + "rm", + "-f", + "file.txt" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm file.txt" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "rmtree", + "results_dir" + ], + "infra_step": true, + "name": "rmtree results_dir" + }, { "cmd": [ "vpython", @@ -9,31 +84,155 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/tmp" + "results_dir" ], "infra_step": true, - "name": "makedirs tmp_dir" + "name": "makedirs results_dir" }, { "cmd": [ - "python", + "/opt/infra-android/tools/adb", + "shell", + "rm", + "-rf", + "device_results_dir" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm device_results_dir" + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "shell", + "mkdir", + "-p", + "device_results_dir" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "mkdir device_results_dir" + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "shell", + "mkdir", + "-p", + "/sdcard/revenge_of_the_skiabot/resources" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "mkdir /sdcard/revenge_of_the_skiabot/resources" + }, + { + "cmd": [ + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/text_blob_traces/VERSION", + "/path/to/tmp/" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Get text_blob_traces VERSION", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/TEXTTRACES_VERSION" + ], + "infra_step": true, + "name": "write TEXTTRACES_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@TEXTTRACES_VERSION@42@@@", + "@@@STEP_LOG_END@TEXTTRACES_VERSION@@@" ] }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "shell", + "cat", + "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "read /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "shell", + "rm", + "-f", + "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "shell", + "rm", + "-rf", + "/sdcard/revenge_of_the_skiabot/text_blob_traces" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/text_blob_traces" + }, { "cmd": [ "/opt/infra-android/tools/adb", "shell", "mkdir", "-p", - "/sdcard/revenge_of_the_skiabot/resources" + "/sdcard/revenge_of_the_skiabot/text_blob_traces" ], "cwd": "[START_DIR]/skia", "env": { @@ -42,7 +241,106 @@ "PATH": ":RECIPE_REPO[depot_tools]" }, "infra_step": true, - "name": "mkdir /sdcard/revenge_of_the_skiabot/resources" + "name": "mkdir /sdcard/revenge_of_the_skiabot/text_blob_traces" + }, + { + "cmd": [], + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "listdir", + "[START_DIR]/text_blob_traces", + "--recursive" + ], + "infra_step": true, + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces.list [START_DIR]/text_blob_traces", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/text_blob_traces/.file3@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/text_blob_traces/.ignore/file4@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/text_blob_traces/file1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/text_blob_traces/subdir/file2@@@", + "@@@STEP_LOG_END@listdir@@@" + ] + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "push", + "[START_DIR]/text_blob_traces/.file3", + "/sdcard/revenge_of_the_skiabot/text_blob_traces/.file3" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces.push [START_DIR]/text_blob_traces/.file3", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "push", + "[START_DIR]/text_blob_traces/file1", + "/sdcard/revenge_of_the_skiabot/text_blob_traces/file1" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces.push [START_DIR]/text_blob_traces/file1", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "push", + "[START_DIR]/text_blob_traces/subdir/file2", + "/sdcard/revenge_of_the_skiabot/text_blob_traces/subdir/file2" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces.push [START_DIR]/text_blob_traces/subdir/file2", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/opt/infra-android/tools/adb", + "push", + "[START_DIR]/tmp/TEXTTRACES_VERSION", + "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/tmp/TEXTTRACES_VERSION /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" }, { "cmd": [], @@ -139,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +841,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -721,163 +1031,11 @@ "infra_step": true, "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION" }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "rmtree", - "[START_DIR]/test" - ], - "infra_step": true, - "name": "rmtree test" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/test" - ], - "infra_step": true, - "name": "makedirs test" - }, - { - "cmd": [ - "/opt/infra-android/tools/adb", - "shell", - "rm", - "-rf", - "/sdcard/revenge_of_the_skiabot/dm_out" - ], - "cwd": "[START_DIR]/skia", - "env": { - "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "infra_step": true, - "name": "rm /sdcard/revenge_of_the_skiabot/dm_out" - }, - { - "cmd": [ - "/opt/infra-android/tools/adb", - "shell", - "mkdir", - "-p", - "/sdcard/revenge_of_the_skiabot/dm_out" - ], - "cwd": "[START_DIR]/skia", - "env": { - "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "infra_step": true, - "name": "mkdir /sdcard/revenge_of_the_skiabot/dm_out" - }, - { - "cmd": [ - "python", - "-u", - "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = sys.argv[1]\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[2], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", - "https://example.com/hashes.txt", - "[START_DIR]/tmp/uninteresting_hashes.txt" - ], - "env": { - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "infra_step": true, - "name": "get uninteresting hashes", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", - "@@@STEP_LOG_LINE@python.inline@import math@@@", - "@@@STEP_LOG_LINE@python.inline@import socket@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@import time@@@", - "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", - "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", - "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", - "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", - "@@@STEP_LOG_LINE@python.inline@ try:@@@", - "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", - "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", - "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", - "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[2], 'w') as f:@@@", - "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", - "@@@STEP_LOG_LINE@python.inline@ break@@@", - "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", - "@@@STEP_LOG_LINE@python.inline@ print e@@@", - "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", - "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", - "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", - "@@@STEP_LOG_END@python.inline@@@" - ] - }, - { - "cmd": [ - "/opt/infra-android/tools/adb", - "push", - "[START_DIR]/tmp/uninteresting_hashes.txt", - "/sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt" - ], - "cwd": "[START_DIR]/skia", - "env": { - "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey", - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "infra_step": true, - "name": "push [START_DIR]/tmp/uninteresting_hashes.txt /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt" - }, - { - "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" - ], - "name": "get swarming bot id (2)", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" - ] - }, - { - "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" - ], - "name": "get swarming task id", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" - ] - }, { "cmd": [ "/opt/infra-android/tools/adb", "push", - "[START_DIR]/build/dm", + "[START_DIR]/build/nanobench", "/data/local/tmp/" ], "cwd": "[START_DIR]/skia", @@ -887,7 +1045,7 @@ "PATH": ":RECIPE_REPO[depot_tools]" }, "infra_step": true, - "name": "push dm" + "name": "push nanobench" }, { "cmd": [ @@ -897,25 +1055,21 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --threads 0 --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ gm _ savelayer_clipmask _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ test _ SRGBReadWritePixels _ test _ SRGBMipMap _ test _ CharacterizationBackendAllocationTest _ test _ ColorTypeBackendAllocationTest _ test _ GLBackendAllocationTest _ test _ VKBackendAllocationTest _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", - "[START_DIR]/tmp/dm.sh" + "set -x; /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc", + "[START_DIR]/tmp/nanobench.sh" ], - "env": { - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, "infra_step": true, - "name": "write dm.sh", + "name": "write nanobench.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --threads 0 --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ gm _ savelayer_clipmask _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ test _ SRGBReadWritePixels _ test _ SRGBMipMap _ test _ CharacterizationBackendAllocationTest _ test _ ColorTypeBackendAllocationTest _ test _ GLBackendAllocationTest _ test _ VKBackendAllocationTest _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", - "@@@STEP_LOG_END@dm.sh@@@" + "@@@STEP_LOG_LINE@nanobench.sh@set -x; /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_END@nanobench.sh@@@" ] }, { "cmd": [ "/opt/infra-android/tools/adb", "push", - "[START_DIR]/tmp/dm.sh", + "[START_DIR]/tmp/nanobench.sh", "/data/local/tmp/" ], "cwd": "[START_DIR]/skia", @@ -925,7 +1079,7 @@ "PATH": ":RECIPE_REPO[depot_tools]" }, "infra_step": true, - "name": "push dm.sh" + "name": "push nanobench.sh" }, { "cmd": [ @@ -948,13 +1102,9 @@ "-u", "\nimport subprocess\nimport sys\nbin_dir = sys.argv[1]\nsh = sys.argv[2]\nsubprocess.check_call(['/opt/infra-android/tools/adb', 'shell', 'sh', bin_dir + sh])\ntry:\n sys.exit(int(subprocess.check_output(['/opt/infra-android/tools/adb', 'shell', 'cat',\n bin_dir + 'rc'])))\nexcept ValueError:\n print \"Couldn't read the return code. Probably killed for OOM.\"\n sys.exit(1)\n", "/data/local/tmp/", - "dm.sh" + "nanobench.sh" ], - "env": { - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "name": "dm", + "name": "nanobench", "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", @@ -979,7 +1129,7 @@ "cmd": [ "/opt/infra-android/tools/adb", "pull", - "/sdcard/revenge_of_the_skiabot/dm_out", + "/sdcard/revenge_of_the_skiabot/perf", "[CLEANUP]/adb_pull_tmp_1" ], "cwd": "[START_DIR]/skia", @@ -989,7 +1139,7 @@ "PATH": ":RECIPE_REPO[depot_tools]" }, "infra_step": true, - "name": "adb pull.pull /sdcard/revenge_of_the_skiabot/dm_out", + "name": "adb pull.pull /sdcard/revenge_of_the_skiabot/perf", "~followup_annotations": [ "@@@STEP_NEST_LEVEL@1@@@" ] @@ -1003,7 +1153,7 @@ "/path/to/tmp/json", "glob", "[CLEANUP]/adb_pull_tmp_1", - "dm_out/*" + "perf/*" ], "infra_step": true, "name": "adb pull.list pulled files", diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json index 378e2fdf70a6..40065adf870f 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json index 7c768d7ac9ef..acf2a378f892 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json @@ -152,7 +152,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get mskp VERSION" + "name": "Get mskp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All.json index 931b3cfa98a7..eaa5c818fe24 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read ssh_machine.json" + "name": "read ssh_machine.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@ssh_machine.json@{\"user_ip\": \"foo@127.0.0.1\"}@@@", + "@@@STEP_LOG_END@ssh_machine.json@@@" + ] }, { "cmd": [ @@ -240,7 +244,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -380,7 +388,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -520,7 +532,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json index d0efb680a1b0..aab78e06de14 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json @@ -232,7 +232,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -378,7 +382,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -524,7 +532,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN.json index 5d72402f9810..bf8a9ce9d539 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN.json index 33436e095b5f..4ae4d3cc98cb 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN.json index e8df83ee3214..d515f9e7fce8 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json index 639800974665..a8a4bf94139d 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json index a7da2e5f3beb..565896178619 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json index 06609f72c9ba..8c35de61ffd0 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json index a2dbb245545f..3fa0196b380d 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json @@ -325,7 +325,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -523,7 +527,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -721,7 +729,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan.json index 860d9f1c9b12..b3cda5bc2c5d 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All.json index bf4ae714fa3f..58a3877e3caa 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read ssh_machine.json" + "name": "read ssh_machine.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@ssh_machine.json@{\"user_ip\": \"foo@127.0.0.1\"}@@@", + "@@@STEP_LOG_END@ssh_machine.json@@@" + ] }, { "cmd": [ @@ -240,7 +244,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -380,7 +388,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -520,7 +532,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker.json new file mode 100644 index 000000000000..0b7a600150de --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker.json @@ -0,0 +1,281 @@ +[ + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "file.txt", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "remove", + "file.txt" + ], + "infra_step": true, + "name": "remove file.txt" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "rmtree", + "results_dir" + ], + "infra_step": true, + "name": "rmtree results_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "results_dir" + ], + "infra_step": true, + "name": "makedirs results_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "rmtree", + "device_results_dir" + ], + "infra_step": true, + "name": "rmtree device_results_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "device_results_dir" + ], + "infra_step": true, + "name": "makedirs device_results_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SKP_VERSION" + ], + "infra_step": true, + "name": "write SKP_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", + "@@@STEP_LOG_END@SKP_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SK_IMAGE_VERSION" + ], + "infra_step": true, + "name": "write SK_IMAGE_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@", + "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/svg/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SVG_VERSION" + ], + "infra_step": true, + "name": "write SVG_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", + "@@@STEP_LOG_END@SVG_VERSION@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, + { + "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", + "RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/gcc-debian10-x86@sha256:b1ec55403ac66d9500d033d6ffd7663894d32335711fbbb0fb4c67dfce812203", + "/SRC/../RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py", + "/SRC", + "catchsegv", + "/SRC/build/dm", + "--some-flag" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "symbolized dm in Docker" + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker.json new file mode 100644 index 000000000000..bb855cd74d47 --- /dev/null +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker.json @@ -0,0 +1,281 @@ +[ + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "file.txt", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "remove", + "file.txt" + ], + "infra_step": true, + "name": "remove file.txt" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "rmtree", + "results_dir" + ], + "infra_step": true, + "name": "rmtree results_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "results_dir" + ], + "infra_step": true, + "name": "makedirs results_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "rmtree", + "device_results_dir" + ], + "infra_step": true, + "name": "rmtree device_results_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "device_results_dir" + ], + "infra_step": true, + "name": "makedirs device_results_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SKP_VERSION" + ], + "infra_step": true, + "name": "write SKP_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", + "@@@STEP_LOG_END@SKP_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SK_IMAGE_VERSION" + ], + "infra_step": true, + "name": "write SK_IMAGE_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@", + "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/svg/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SVG_VERSION" + ], + "infra_step": true, + "name": "write SVG_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", + "@@@STEP_LOG_END@SVG_VERSION@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, + { + "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", + "RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/gcc-debian10@sha256:89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c", + "/SRC/../RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py", + "/SRC", + "catchsegv", + "/SRC/build/dm", + "--some-flag" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "symbolized dm in Docker" + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Coverage.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Coverage.json index abd35fbfeca2..bc2c72c6b6ec 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Coverage.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Coverage.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie.json index c472881ee2c0..baa6cd3c6e10 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get lottie-samples VERSION" + "name": "Get lottie-samples VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN.json index e206d296baf4..570f6794189f 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader.json index aef4a06e5964..ccedf1a093d4 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL.json index c3fde7fef1c6..9284aaaa5d8f 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan.json index bb11ed7c0c25..86ea6669ca29 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN.json index 0d0ca2ac05c8..09c58b4a7a24 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json similarity index 89% rename from third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json rename to third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json index 8672bbecc3d1..4fc94c9064ee 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump.json index 6aadb474ba12..1b4148d5a10d 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump.json @@ -11,7 +11,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read file.txt" + "name": "read file.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@file.txt@@@" + ] }, { "cmd": [ @@ -94,7 +97,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -126,7 +133,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -158,7 +169,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE.json index ecf963158264..b8a67ebddfba 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read ssh_machine.json" + "name": "read ssh_machine.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@ssh_machine.json@{\"user_ip\": \"foo@127.0.0.1\"}@@@", + "@@@STEP_LOG_END@ssh_machine.json@@@" + ] }, { "cmd": [ @@ -60,7 +64,8 @@ "infra_step": true, "name": "read file.txt.read file.txt", "~followup_annotations": [ - "@@@STEP_NEST_LEVEL@1@@@" + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_END@file.txt@@@" ] }, { @@ -274,7 +279,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -328,7 +337,8 @@ "infra_step": true, "name": "read C:\\Users\\chrome-bot\\botdata\\SKP_VERSION.read SKP_VERSION", "~followup_annotations": [ - "@@@STEP_NEST_LEVEL@1@@@" + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_END@SKP_VERSION@@@" ] }, { @@ -447,7 +457,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -501,7 +515,8 @@ "infra_step": true, "name": "read C:\\Users\\chrome-bot\\botdata\\SK_IMAGE_VERSION.read SK_IMAGE_VERSION", "~followup_annotations": [ - "@@@STEP_NEST_LEVEL@1@@@" + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" ] }, { @@ -620,7 +635,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -674,7 +693,8 @@ "infra_step": true, "name": "read C:\\Users\\chrome-bot\\botdata\\SVG_VERSION.read SVG_VERSION", "~followup_annotations": [ - "@@@STEP_NEST_LEVEL@1@@@" + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_END@SVG_VERSION@@@" ] }, { diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed.json index 7e900028c034..1fd855e7993c 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_golo.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_golo.json index 794c19d63d84..a9fafadd7ad6 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_golo.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_golo.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_once.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_once.json index c427fa988cc6..cb16ba6fd597 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_once.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_once.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json index 042bbeb78408..63ed42772e8c 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -631,7 +639,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json index 57fd36026435..32b242be1cdb 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json @@ -235,7 +235,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -433,7 +437,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -680,7 +688,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json index 5bca9a198925..9ecfd7cb1d14 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json @@ -285,7 +285,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -483,7 +487,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -681,7 +689,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/retry_ios_install.json b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/retry_ios_install.json index 6516d9e6444a..963a8ec50f5f 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/retry_ios_install.json +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.expected/retry_ios_install.json @@ -179,7 +179,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -285,7 +289,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -391,7 +399,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.py b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.py index 0ebaefb7636a..737492692f14 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/examples/full.py @@ -46,6 +46,8 @@ def RunSteps(api): api.flavor.install(lotties=True) elif 'Mskp' in api.properties['buildername']: api.flavor.install(mskps=True) + elif all(v in api.properties['buildername'] for v in ['Perf', 'Android', 'CPU']): + api.flavor.install(skps=True, images=True, svgs=True, resources=True, texttraces=True) else: api.flavor.install(skps=True, images=True, lotties=False, svgs=True, resources=True) @@ -69,6 +71,7 @@ def RunSteps(api): TEST_BUILDERS = [ 'Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing', 'Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android', + 'Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android', 'Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android', 'Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp', 'Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All', @@ -82,6 +85,8 @@ def RunSteps(api): 'Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN', 'Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan', 'Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All', + 'Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker', + 'Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker', 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Coverage', 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie', 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN', @@ -89,7 +94,7 @@ def RunSteps(api): 'Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL', 'Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan', 'Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN', - ('Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All' + ('Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All' '-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41'), 'Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump', 'Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE', @@ -119,7 +124,7 @@ def GenTests(api): stdout=api.raw_io.output('192.168.1.2:5555')) yield test - builder = 'Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-All' + builder = 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All' yield ( api.test('exceptions') + api.properties(buildername=builder, diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/ios.py b/third_party/skia/infra/bots/recipe_modules/flavor/ios.py index e56d08973ca9..c329fa75f060 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/ios.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/ios.py @@ -25,7 +25,8 @@ def __init__(self, m): skp_dir='skps', svg_dir='svgs', mskp_dir='mskp', - tmp_dir='tmp') + tmp_dir='tmp', + texttraces_dir='') def install(self): # Set up the device diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/resources/win_ssh_cmd.py b/third_party/skia/infra/bots/recipe_modules/flavor/resources/win_ssh_cmd.py old mode 100644 new mode 100755 diff --git a/third_party/skia/infra/bots/recipe_modules/flavor/win_ssh.py b/third_party/skia/infra/bots/recipe_modules/flavor/win_ssh.py index 0db04291bbec..8ac273c87408 100644 --- a/third_party/skia/infra/bots/recipe_modules/flavor/win_ssh.py +++ b/third_party/skia/infra/bots/recipe_modules/flavor/win_ssh.py @@ -23,16 +23,17 @@ def __init__(self, m): super(WinSSHFlavor, self).__init__(m) self.remote_homedir = 'C:\\Users\\chrome-bot\\botdata\\' self.device_dirs = default.DeviceDirs( - bin_dir = self.device_path_join(self.remote_homedir, 'bin'), - dm_dir = self.device_path_join(self.remote_homedir, 'dm_out'), - perf_data_dir = self.device_path_join(self.remote_homedir, 'perf'), - resource_dir = self.device_path_join(self.remote_homedir, 'resources'), - images_dir = self.device_path_join(self.remote_homedir, 'images'), - lotties_dir = self.device_path_join(self.remote_homedir, 'lotties'), - skp_dir = self.device_path_join(self.remote_homedir, 'skps'), - svg_dir = self.device_path_join(self.remote_homedir, 'svgs'), - mskp_dir = self.device_path_join(self.remote_homedir, 'mskp'), - tmp_dir = self.remote_homedir) + bin_dir = self.device_path_join(self.remote_homedir, 'bin'), + dm_dir = self.device_path_join(self.remote_homedir, 'dm_out'), + perf_data_dir = self.device_path_join(self.remote_homedir, 'perf'), + resource_dir = self.device_path_join(self.remote_homedir, 'resources'), + images_dir = self.device_path_join(self.remote_homedir, 'images'), + lotties_dir = self.device_path_join(self.remote_homedir, 'lotties'), + skp_dir = self.device_path_join(self.remote_homedir, 'skps'), + svg_dir = self.device_path_join(self.remote_homedir, 'svgs'), + mskp_dir = self.device_path_join(self.remote_homedir, 'mskp'), + tmp_dir = self.remote_homedir, + texttraces_dir = '') self._empty_dir = self.device_path_join(self.remote_homedir, 'empty') diff --git a/third_party/skia/infra/bots/recipe_modules/run/examples/full.expected/test.json b/third_party/skia/infra/bots/recipe_modules/run/examples/full.expected/test.json index 162abfdf9d74..9b446df2526c 100644 --- a/third_party/skia/infra/bots/recipe_modules/run/examples/full.expected/test.json +++ b/third_party/skia/infra/bots/recipe_modules/run/examples/full.expected/test.json @@ -59,7 +59,10 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read myfile.txt" + "name": "read myfile.txt", + "~followup_annotations": [ + "@@@STEP_LOG_END@myfile.txt@@@" + ] }, { "cmd": [ @@ -104,7 +107,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get my_asset VERSION" + "name": "Get my_asset VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipe_modules/vars/api.py b/third_party/skia/infra/bots/recipe_modules/vars/api.py index a23b326166c7..182864a28cfa 100644 --- a/third_party/skia/infra/bots/recipe_modules/vars/api.py +++ b/third_party/skia/infra/bots/recipe_modules/vars/api.py @@ -17,6 +17,13 @@ class SkiaVarsApi(recipe_api.RecipeApi): def setup(self): """Prepare the variables.""" + # Hack start_dir to remove the "k" directory which is added by Kitchen. + # Otherwise, we can't get to the CIPD packages, caches, and isolates which + # were put into the task workdir. + if self.m.path.c.base_paths['start_dir'][-1] == 'k': # pragma: nocover + self.m.path.c.base_paths['start_dir'] = ( + self.m.path.c.base_paths['start_dir'][:-1]) + # Setup self.builder_name = self.m.properties['buildername'] @@ -41,8 +48,7 @@ def setup(self): self.builder_cfg = self.m.builder_name_schema.DictForBuilderName( self.builder_name) self.role = self.builder_cfg['role'] - if self.role in [self.m.builder_name_schema.BUILDER_ROLE_HOUSEKEEPER, - self.m.builder_name_schema.BUILDER_ROLE_CALMBENCH]: + if self.role == self.m.builder_name_schema.BUILDER_ROLE_HOUSEKEEPER: self.configuration = CONFIG_RELEASE else: self.configuration = self.builder_cfg.get('configuration', CONFIG_DEBUG) @@ -81,7 +87,11 @@ def setup(self): @property def is_linux(self): - return 'Ubuntu' in self.builder_name or 'Debian' in self.builder_name + return ( + 'Ubuntu' in self.builder_name + or 'Debian' in self.builder_name + or 'Housekeeper' in self.builder_name + ) @property def swarming_bot_id(self): diff --git a/third_party/skia/infra/bots/recipe_modules/vars/examples/full.expected/Housekeeper-Weekly-RecreateSKPs.json b/third_party/skia/infra/bots/recipe_modules/vars/examples/full.expected/Housekeeper-Weekly-RecreateSKPs.json index 1ac76506aa45..09c14c8c5a07 100644 --- a/third_party/skia/infra/bots/recipe_modules/vars/examples/full.expected/Housekeeper-Weekly-RecreateSKPs.json +++ b/third_party/skia/infra/bots/recipe_modules/vars/examples/full.expected/Housekeeper-Weekly-RecreateSKPs.json @@ -37,7 +37,7 @@ "@@@SET_BUILD_PROPERTY@extra_tokens@\"['RecreateSKPs']\"@@@", "@@@SET_BUILD_PROPERTY@internal_hardware_label@\"None\"@@@", "@@@SET_BUILD_PROPERTY@is_internal_bot@\"False\"@@@", - "@@@SET_BUILD_PROPERTY@is_linux@\"False\"@@@", + "@@@SET_BUILD_PROPERTY@is_linux@\"True\"@@@", "@@@SET_BUILD_PROPERTY@is_trybot@\"False\"@@@", "@@@SET_BUILD_PROPERTY@issue@\"None\"@@@", "@@@SET_BUILD_PROPERTY@patch_storage@\"gerrit\"@@@", diff --git a/third_party/skia/infra/bots/recipe_modules/vars/examples/full.expected/integer_issue.json b/third_party/skia/infra/bots/recipe_modules/vars/examples/full.expected/integer_issue.json index 87c23d46993e..06e20782b2fc 100644 --- a/third_party/skia/infra/bots/recipe_modules/vars/examples/full.expected/integer_issue.json +++ b/third_party/skia/infra/bots/recipe_modules/vars/examples/full.expected/integer_issue.json @@ -30,8 +30,8 @@ "name": "show", "~followup_annotations": [ "@@@SET_BUILD_PROPERTY@build_dir@\"[START_DIR]/build\"@@@", - "@@@SET_BUILD_PROPERTY@builder_cfg@\"{'extra_config': 'ASAN_Vulkan', 'cpu_or_gpu_value': 'AVX2', 'arch': 'x86_64', 'test_filter': 'All', 'sub-role-1': 'Test', 'cpu_or_gpu': 'CPU', 'role': 'Upload', 'model': 'GCE', 'configuration': 'Debug', 'os': 'Debian9', 'compiler': 'GCC'}\"@@@", - "@@@SET_BUILD_PROPERTY@builder_name@\"Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_Vulkan\"@@@", + "@@@SET_BUILD_PROPERTY@builder_cfg@\"{'extra_config': 'ASAN_Vulkan', 'cpu_or_gpu_value': 'AVX2', 'arch': 'x86_64', 'test_filter': 'All', 'sub-role-1': 'Test', 'cpu_or_gpu': 'CPU', 'role': 'Upload', 'model': 'GCE', 'configuration': 'Debug', 'os': 'Debian9', 'compiler': 'Clang'}\"@@@", + "@@@SET_BUILD_PROPERTY@builder_name@\"Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_Vulkan\"@@@", "@@@SET_BUILD_PROPERTY@cache_dir@\"[START_DIR]/cache\"@@@", "@@@SET_BUILD_PROPERTY@default_env@\"{'PATH': '%(PATH)s:RECIPE_REPO[depot_tools]', 'CHROME_HEADLESS': '1'}\"@@@", "@@@SET_BUILD_PROPERTY@extra_tokens@\"['ASAN', 'Vulkan']\"@@@", diff --git a/third_party/skia/infra/bots/recipe_modules/vars/examples/full.py b/third_party/skia/infra/bots/recipe_modules/vars/examples/full.py index 1fded69ad6ee..01d8efd73b6b 100644 --- a/third_party/skia/infra/bots/recipe_modules/vars/examples/full.py +++ b/third_party/skia/infra/bots/recipe_modules/vars/examples/full.py @@ -77,7 +77,7 @@ def GenTests(api): ) ) - buildername = 'Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_Vulkan' + buildername = 'Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_Vulkan' yield ( api.test('integer_issue') + api.properties(buildername=buildername, diff --git a/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_nontrybot.json b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_nontrybot.json new file mode 100644 index 000000000000..c75f72050da7 --- /dev/null +++ b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_nontrybot.json @@ -0,0 +1,29 @@ +[ + { + "cmd": [], + "name": "RECIPE CRASH (Uncaught exception)", + "~followup_annotations": [ + "@@@STEP_EXCEPTION@@@", + "The recipe has crashed at point 'Uncaught exception'!", + "", + "Traceback (most recent call last):", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/engine.py\", in run_steps", + " raw_result = recipe_obj.run_steps(api, engine)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/recipe_deps.py\", in run_steps", + " properties_def, api=api)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/property_invoker.py\", in invoke_with_properties", + " arg_names, **additional_args)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/property_invoker.py\", in _invoke_with_properties", + " return callable_obj(*props, **additional_args)", + " File \"RECIPE_REPO[skia]/infra/bots/recipes/android_compile.py\", line 37, in RunSteps", + " raise Exception('%s can only be run as a trybot.' % api.vars.builder_name)", + "Exception: Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework can only be run as a trybot." + ] + }, + { + "failure": { + "humanReason": "Uncaught Exception: Exception('Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework can only be run as a trybot.',)" + }, + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_sdk_trybot.json b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_sdk_trybot.json new file mode 100644 index 000000000000..5b3729bb343d --- /dev/null +++ b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_sdk_trybot.json @@ -0,0 +1,27 @@ +[ + { + "cmd": [ + "python", + "[START_DIR]/skia/infra/bots/android_compile/trigger_wait_ac_task.py", + "--lunch_target", + "sdk", + "--mmma_targets", + "external/skia", + "--issue", + "456789", + "--patchset", + "12", + "--builder_name", + "Build-Debian9-Clang-host-sdk-Android_Framework" + ], + "cwd": "[START_DIR]/skia", + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Trigger and wait for task on android compile server" + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_trybot.json b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_trybot.json new file mode 100644 index 000000000000..a01d93322575 --- /dev/null +++ b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_trybot.json @@ -0,0 +1,27 @@ +[ + { + "cmd": [ + "python", + "[START_DIR]/skia/infra/bots/android_compile/trigger_wait_ac_task.py", + "--lunch_target", + "cf_x86_phone-eng", + "--mmma_targets", + "frameworks/base/core/jni,frameworks/base/libs/hwui,external/skia", + "--issue", + "456789", + "--patchset", + "12", + "--builder_name", + "Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework" + ], + "cwd": "[START_DIR]/skia", + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Trigger and wait for task on android compile server" + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_trybot_failure.json b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_trybot_failure.json new file mode 100644 index 000000000000..7e9255dcbc79 --- /dev/null +++ b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_trybot_failure.json @@ -0,0 +1,52 @@ +[ + { + "cmd": [ + "python", + "[START_DIR]/skia/infra/bots/android_compile/trigger_wait_ac_task.py", + "--lunch_target", + "cf_x86_phone-eng", + "--mmma_targets", + "frameworks/base/core/jni,frameworks/base/libs/hwui,external/skia", + "--issue", + "456789", + "--patchset", + "12", + "--builder_name", + "Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework" + ], + "cwd": "[START_DIR]/skia", + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Trigger and wait for task on android compile server", + "~followup_annotations": [ + "@@@STEP_FAILURE@@@" + ] + }, + { + "cmd": [ + "gsutil", + "cat", + "gs://android-compile-tasks/cf_x86_phone-eng-456789-12.json" + ], + "name": "Get task log links", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"nopatch_log\": \"link2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"withpatch_log\": \"link1\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@withpatch compilation log link@link1@@@", + "@@@STEP_LINK@nopatch compilation log link@link2@@@", + "@@@STEP_LINK@force sync link@https://skia-android-compile.corp.goog/@@@" + ] + }, + { + "failure": { + "failure": {}, + "humanReason": "Step('Trigger and wait for task on android compile server') (retcode: 1)" + }, + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_unrecognized_target.json b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_unrecognized_target.json new file mode 100644 index 000000000000..e08ba3f26488 --- /dev/null +++ b/third_party/skia/infra/bots/recipes/android_compile.expected/android_compile_unrecognized_target.json @@ -0,0 +1,29 @@ +[ + { + "cmd": [], + "name": "RECIPE CRASH (Uncaught exception)", + "~followup_annotations": [ + "@@@STEP_EXCEPTION@@@", + "The recipe has crashed at point 'Uncaught exception'!", + "", + "Traceback (most recent call last):", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/engine.py\", in run_steps", + " raw_result = recipe_obj.run_steps(api, engine)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/recipe_deps.py\", in run_steps", + " properties_def, api=api)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/property_invoker.py\", in invoke_with_properties", + " arg_names, **additional_args)", + " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/property_invoker.py\", in _invoke_with_properties", + " return callable_obj(*props, **additional_args)", + " File \"RECIPE_REPO[skia]/infra/bots/recipes/android_compile.py\", line 47, in RunSteps", + " api.vars.builder_name)", + "Exception: Lunch target in Build-Debian9-Clang-unrecognized-Android_Framework is not recognized." + ] + }, + { + "failure": { + "humanReason": "Uncaught Exception: Exception('Lunch target in Build-Debian9-Clang-unrecognized-Android_Framework is not recognized.',)" + }, + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/android_compile.py b/third_party/skia/infra/bots/recipes/android_compile.py new file mode 100644 index 000000000000..fb643bc0a844 --- /dev/null +++ b/third_party/skia/infra/bots/recipes/android_compile.py @@ -0,0 +1,158 @@ +# Copyright 2018 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. + + +import math + + +DEPS = [ + 'recipe_engine/context', + 'recipe_engine/json', + 'recipe_engine/path', + 'recipe_engine/properties', + 'recipe_engine/raw_io', + 'recipe_engine/step', + 'run', + 'vars', +] + +CF_X86_PHONE_ENG_LUNCH_TARGET = 'cf_x86_phone-eng' +SDK_LUNCH_TARGET = 'sdk' + +LUNCH_TARGET_TO_MMMA_TARGETS = { + CF_X86_PHONE_ENG_LUNCH_TARGET: ( + 'frameworks/base/core/jni,frameworks/base/libs/hwui,external/skia'), + SDK_LUNCH_TARGET: 'external/skia', +} + + +def RunSteps(api): + api.vars.setup() + if not api.vars.is_trybot: + # This bot currently only supports trybot runs because: + # Non-trybot runs could fail if the Android tree is red. We mitigate this + # for trybot runs by verifying that runs without the patch succeed. We do + # not currently have a way to do the same for non-trybot runs. + raise Exception('%s can only be run as a trybot.' % api.vars.builder_name) + + if CF_X86_PHONE_ENG_LUNCH_TARGET in api.vars.builder_name: + lunch_target = CF_X86_PHONE_ENG_LUNCH_TARGET + mmma_targets = LUNCH_TARGET_TO_MMMA_TARGETS[lunch_target] + elif SDK_LUNCH_TARGET in api.vars.builder_name: + lunch_target = SDK_LUNCH_TARGET + mmma_targets = LUNCH_TARGET_TO_MMMA_TARGETS[SDK_LUNCH_TARGET] + else: + raise Exception('Lunch target in %s is not recognized.' % + api.vars.builder_name) + + infrabots_dir = api.path['start_dir'].join('skia', 'infra', 'bots') + trigger_wait_ac_script = infrabots_dir.join('android_compile', + 'trigger_wait_ac_task.py') + + # Trigger a compile task on the android compile server and wait for it to + # complete. + cmd = ['python', trigger_wait_ac_script, + '--lunch_target', lunch_target, + '--mmma_targets', mmma_targets, + '--issue', api.vars.issue, + '--patchset', api.vars.patchset, + '--builder_name', api.vars.builder_name, + ] + try: + with api.context(cwd=api.path['start_dir'].join('skia')): + api.run(api.step, 'Trigger and wait for task on android compile server', cmd=cmd) + except api.step.StepFailure as e: + # Add withpatch and nopatch logs as links (if they exist). + gs_file = 'gs://android-compile-tasks/%s-%s-%s.json' % ( + lunch_target, api.vars.issue, api.vars.patchset) + step_result = api.step('Get task log links', + ['gsutil', 'cat', gs_file], + stdout=api.json.output()) + task_json = step_result.stdout + if task_json.get('withpatch_log'): + api.step.active_result.presentation.links[ + 'withpatch compilation log link'] = task_json['withpatch_log'] + if task_json.get('nopatch_log'): + api.step.active_result.presentation.links[ + 'nopatch compilation log link'] = task_json['nopatch_log'] + # Add link to force sync of the Android checkout. + api.step.active_result.presentation.links['force sync link'] = ( + 'https://skia-android-compile.corp.goog/') + raise e + + +def GenTests(api): + yield( + api.test('android_compile_trybot') + + api.properties.tryserver( + gerrit_project='skia', + gerrit_url='https://skia-review.googlesource.com/', + ) + + api.properties( + buildername='Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]', + repository='https://skia.googlesource.com/skia.git', + ) + ) + + yield( + api.test('android_compile_sdk_trybot') + + api.properties.tryserver( + gerrit_project='skia', + gerrit_url='https://skia-review.googlesource.com/', + ) + + api.properties( + buildername='Build-Debian9-Clang-host-sdk-Android_Framework', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]', + repository='https://skia.googlesource.com/skia.git', + ) + ) + + yield( + api.test('android_compile_unrecognized_target') + + api.properties.tryserver( + gerrit_project='skia', + gerrit_url='https://skia-review.googlesource.com/', + ) + + api.properties( + buildername='Build-Debian9-Clang-unrecognized-Android_Framework', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]', + repository='https://skia.googlesource.com/skia.git', + ) + + api.expect_exception('Exception') + ) + + yield( + api.test('android_compile_trybot_failure') + + api.properties.tryserver( + gerrit_project='skia', + gerrit_url='https://skia-review.googlesource.com/', + ) + + api.properties( + buildername='Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]', + repository='https://skia.googlesource.com/skia.git', + ) + + api.step_data('Trigger and wait for task on android compile server', + retcode=1) + + api.step_data('Get task log links', + stdout=api.raw_io.output( + '{"withpatch_log":"link1", "nopatch_log":"link2"}')) + ) + + yield( + api.test('android_compile_nontrybot') + + api.properties( + buildername='Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]', + repository='https://skia.googlesource.com/skia.git', + revision='abc123', + ) + + api.expect_exception('Exception') + ) diff --git a/third_party/skia/infra/bots/recipes/calmbench.expected/Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All.json b/third_party/skia/infra/bots/recipes/calmbench.expected/Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All.json deleted file mode 100644 index 8271346af4d6..000000000000 --- a/third_party/skia/infra/bots/recipes/calmbench.expected/Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All.json +++ /dev/null @@ -1,139 +0,0 @@ -[ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/tmp" - ], - "infra_step": true, - "name": "makedirs tmp_dir" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "[START_DIR]/skia/infra/bots/assets/skp/VERSION", - "/path/to/tmp/" - ], - "infra_step": true, - "name": "Get skp VERSION" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "42", - "[START_DIR]/tmp/SKP_VERSION" - ], - "infra_step": true, - "name": "write SKP_VERSION", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", - "@@@STEP_LOG_END@SKP_VERSION@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "[START_DIR]/skia/infra/bots/assets/svg/VERSION", - "/path/to/tmp/" - ], - "infra_step": true, - "name": "Get svg VERSION" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "42", - "[START_DIR]/tmp/SVG_VERSION" - ], - "infra_step": true, - "name": "write SVG_VERSION", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", - "@@@STEP_LOG_END@SVG_VERSION@@@" - ] - }, - { - "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": "makedirs perf" - }, - { - "cmd": [ - "python", - "[START_DIR]/skia/tools/calmbench/ab.py", - "[START_DIR]/[SWARM_OUT_DIR]", - "modified", - "master", - "[START_DIR]/build/nanobench", - "[START_DIR]/build/ParentRevision/nanobench", - "--svgs [START_DIR]/svg --skps [START_DIR]/skp --mpd false", - "--svgs [START_DIR]/svg --skps [START_DIR]/skp --mpd false", - "2", - "false", - "8888", - "-1", - "false", - "--githash", - "abc123", - "--concise", - "--keys", - "arch", - "x86_64", - "compiler", - "Clang", - "cpu_or_gpu", - "CPU", - "cpu_or_gpu_value", - "AVX2", - "model", - "GCE", - "os", - "Debian9" - ], - "cwd": "[START_DIR]/skia", - "env": { - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "name": "Run calmbench" - }, - { - "name": "$result" - } -] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/calmbench.expected/Calmbench-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Release-All.json b/third_party/skia/infra/bots/recipes/calmbench.expected/Calmbench-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Release-All.json deleted file mode 100644 index 25056fac1229..000000000000 --- a/third_party/skia/infra/bots/recipes/calmbench.expected/Calmbench-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Release-All.json +++ /dev/null @@ -1,139 +0,0 @@ -[ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/tmp" - ], - "infra_step": true, - "name": "makedirs tmp_dir" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "[START_DIR]/skia/infra/bots/assets/skp/VERSION", - "/path/to/tmp/" - ], - "infra_step": true, - "name": "Get skp VERSION" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "42", - "[START_DIR]/tmp/SKP_VERSION" - ], - "infra_step": true, - "name": "write SKP_VERSION", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", - "@@@STEP_LOG_END@SKP_VERSION@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "[START_DIR]/skia/infra/bots/assets/svg/VERSION", - "/path/to/tmp/" - ], - "infra_step": true, - "name": "Get svg VERSION" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "42", - "[START_DIR]/tmp/SVG_VERSION" - ], - "infra_step": true, - "name": "write SVG_VERSION", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", - "@@@STEP_LOG_END@SVG_VERSION@@@" - ] - }, - { - "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": "makedirs perf" - }, - { - "cmd": [ - "python", - "[START_DIR]/skia/tools/calmbench/ab.py", - "[START_DIR]/[SWARM_OUT_DIR]", - "modified", - "master", - "[START_DIR]/build/nanobench", - "[START_DIR]/build/ParentRevision/nanobench", - "--svgs [START_DIR]/svg --skps [START_DIR]/skp", - "--svgs [START_DIR]/svg --skps [START_DIR]/skp", - "2", - "false", - "gl", - "-1", - "false", - "--githash", - "abc123", - "--concise", - "--keys", - "arch", - "x86_64", - "compiler", - "Clang", - "cpu_or_gpu", - "GPU", - "cpu_or_gpu_value", - "QuadroP400", - "model", - "Golo", - "os", - "Ubuntu17" - ], - "cwd": "[START_DIR]/skia", - "env": { - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "name": "Run calmbench" - }, - { - "name": "$result" - } -] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/calmbench.py b/third_party/skia/infra/bots/recipes/calmbench.py deleted file mode 100644 index c96a082ea5da..000000000000 --- a/third_party/skia/infra/bots/recipes/calmbench.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright 2016 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. - - -# Recipe module for Skia Swarming calmbench. - -DEPS = [ - 'flavor', - 'recipe_engine/context', - 'recipe_engine/file', - 'recipe_engine/path', - 'recipe_engine/properties', - 'recipe_engine/python', - 'recipe_engine/raw_io', - 'recipe_engine/step', - 'recipe_engine/time', - 'run', - 'vars', -] - -def RunSteps(api): - api.vars.setup() - api.file.ensure_directory('makedirs tmp_dir', api.vars.tmp_dir) - api.flavor.setup() - - api.flavor.install(skps=True, svgs=True) - api.file.ensure_directory('makedirs perf', api.vars.swarming_out_dir) - - skia_dir = api.path['start_dir'].join('skia') - with api.context(cwd=skia_dir): - extra_arg = '--svgs %s --skps %s' % (api.flavor.device_dirs.svg_dir, - api.flavor.device_dirs.skp_dir) - - # measuring multi-picture-draw in our multi-threaded CPU test is inaccurate - if api.vars.builder_cfg.get('cpu_or_gpu') == 'CPU': - extra_arg += ' --mpd false' - config = "8888" - else: - config = "gl" - - command = [ - 'python', - skia_dir.join('tools', 'calmbench', 'ab.py'), - api.vars.swarming_out_dir, - 'modified', 'master', - api.vars.build_dir.join('nanobench'), - api.vars.build_dir.join('ParentRevision', 'nanobench'), - extra_arg, extra_arg, - 2, # reps - "false", # skipbase - config, - -1, # threads; let ab.py decide the threads - "false", # noinit - "--githash", api.properties['revision'], - "--concise" - ] - - keys_blacklist = ['configuration', 'role', 'test_filter'] - command.append('--keys') - for k in sorted(api.vars.builder_cfg.keys()): - if not k in keys_blacklist: - command.extend([k, api.vars.builder_cfg[k]]) - - api.run(api.step, 'Run calmbench', cmd=command) - api.run.check_failure() - -def GenTests(api): - builders = [ - "Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All", - "Calmbench-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Release-All", - ] - - for builder in builders: - test = ( - api.test(builder) + - api.properties(buildername=builder, - repository='https://skia.googlesource.com/skia.git', - revision='abc123', - path_config='kitchen', - swarm_out_dir='[SWARM_OUT_DIR]') + - api.path.exists( - api.path['start_dir'].join('skia'), - api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', - 'svg', 'VERSION'), - api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', - 'skp', 'VERSION'), - ) - ) - - yield test diff --git a/third_party/skia/infra/bots/recipes/check_generated_files.expected/Housekeeper-PerCommit-CheckGeneratedFiles.json b/third_party/skia/infra/bots/recipes/check_generated_files.expected/Housekeeper-PerCommit-CheckGeneratedFiles.json index 93e85695bdce..5672fbced19e 100644 --- a/third_party/skia/infra/bots/recipes/check_generated_files.expected/Housekeeper-PerCommit-CheckGeneratedFiles.json +++ b/third_party/skia/infra/bots/recipes/check_generated_files.expected/Housekeeper-PerCommit-CheckGeneratedFiles.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", @@ -229,6 +254,25 @@ "@@@STEP_LOG_END@python.inline@@@" ] }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/cache/work/skia/infra/bots/assets/clang_linux/VERSION", + "/path/to/tmp/" + ], + "cwd": "[START_DIR]/cache/work/skia", + "infra_step": true, + "name": "Get clang_linux VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, { "cmd": [ "python", @@ -262,7 +306,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/build/out/Release", - "--args=is_debug=false skia_compile_processors=true skia_generate_workarounds=true werror=true" + "--args=cc=\"[START_DIR]/clang_linux/bin/clang\" cxx=\"[START_DIR]/clang_linux/bin/clang++\" extra_cflags=[\"-B[START_DIR]/clang_linux/bin\", \"-DDUMMY_clang_linux_version=42\"] extra_ldflags=[\"-B[START_DIR]/clang_linux/bin\", \"-fuse-ld=lld\"] is_debug=false skia_compile_processors=true skia_generate_workarounds=true werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { diff --git a/third_party/skia/infra/bots/recipes/compile.expected/Build-Win-Clang-x86-Debug.json b/third_party/skia/infra/bots/recipes/compile.expected/Build-Win-Clang-x86-Debug.json index 0e33dbe5bb0e..bb73f32398a0 100644 --- a/third_party/skia/infra/bots/recipes/compile.expected/Build-Win-Clang-x86-Debug.json +++ b/third_party/skia/infra/bots/recipes/compile.expected/Build-Win-Clang-x86-Debug.json @@ -11,7 +11,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_win VERSION" + "name": "Get clang_win VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/compute_buildstats.expected/normal_bot.json b/third_party/skia/infra/bots/recipes/compute_buildstats.expected/normal_bot.json index d934e0dc05a5..1637d863315e 100644 --- a/third_party/skia/infra/bots/recipes/compute_buildstats.expected/normal_bot.json +++ b/third_party/skia/infra/bots/recipes/compute_buildstats.expected/normal_bot.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipes/compute_buildstats.expected/trybot.json b/third_party/skia/infra/bots/recipes/compute_buildstats.expected/trybot.json index 45ce1a0416f2..b8a891701ae6 100644 --- a/third_party/skia/infra/bots/recipes/compute_buildstats.expected/trybot.json +++ b/third_party/skia/infra/bots/recipes/compute_buildstats.expected/trybot.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", @@ -29,7 +54,7 @@ }, { "cmd": [ - "python", + "vpython", "-u", "RECIPE_REPO[depot_tools]/gerrit_client.py", "changes", diff --git a/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_nontrybot.json b/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_nontrybot.json index e2442c83f31c..45e39d0a296e 100644 --- a/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_nontrybot.json +++ b/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_nontrybot.json @@ -15,7 +15,7 @@ " arg_names, **additional_args)", " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/property_invoker.py\", in _invoke_with_properties", " return callable_obj(*props, **additional_args)", - " File \"RECIPE_REPO[skia]/infra/bots/recipes/g3_compile.py\", line 20, in RunSteps", + " File \"RECIPE_REPO[skia]/infra/bots/recipes/g3_compile.py\", line 22, in RunSteps", " raise Exception('%s can only be run as a trybot.' % api.vars.builder_name)", "Exception: Build-Debian9-Clang-TAP-Presubmit-G3_Framework can only be run as a trybot." ] diff --git a/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_trybot.json b/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_trybot.json index 8562d5640c4c..22d8846b94d4 100644 --- a/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_trybot.json +++ b/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_trybot.json @@ -8,8 +8,15 @@ "--patchset", "12", "--output_file", - "[CLEANUP]/g3_try_tmp_1/output_file" + "[CLEANUP]/g3_try_tmp_1/output_file", + "--builder_name", + "Build-Debian9-Clang-TAP-Presubmit-G3_Framework" ], + "cwd": "[START_DIR]/skia", + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, "name": "Trigger and wait for g3 compile task" }, { diff --git a/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_trybot_failure.json b/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_trybot_failure.json index 8d1586154749..dd97c86c1ec4 100644 --- a/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_trybot_failure.json +++ b/third_party/skia/infra/bots/recipes/g3_compile.expected/g3_compile_trybot_failure.json @@ -8,8 +8,15 @@ "--patchset", "12", "--output_file", - "[CLEANUP]/g3_try_tmp_1/output_file" + "[CLEANUP]/g3_try_tmp_1/output_file", + "--builder_name", + "Build-Debian9-Clang-TAP-Presubmit-G3_Framework" ], + "cwd": "[START_DIR]/skia", + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, "name": "Trigger and wait for g3 compile task", "~followup_annotations": [ "@@@STEP_FAILURE@@@" @@ -29,6 +36,8 @@ "infra_step": true, "name": "Read task json", "~followup_annotations": [ + "@@@STEP_LOG_LINE@output_file@{\"cl\": 12345}@@@", + "@@@STEP_LOG_END@output_file@@@", "@@@STEP_LINK@CL link@http://cl/12345@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/g3_compile.py b/third_party/skia/infra/bots/recipes/g3_compile.py index 1c320b6b9517..b7256d351be4 100644 --- a/third_party/skia/infra/bots/recipes/g3_compile.py +++ b/third_party/skia/infra/bots/recipes/g3_compile.py @@ -4,12 +4,14 @@ DEPS = [ + 'recipe_engine/context', 'recipe_engine/file', 'recipe_engine/json', 'recipe_engine/path', 'recipe_engine/properties', 'recipe_engine/raw_io', 'recipe_engine/step', + 'run', 'vars', ] @@ -30,9 +32,11 @@ def RunSteps(api): '--issue', api.vars.issue, '--patchset', api.vars.patchset, '--output_file', output_file, + '--builder_name', api.vars.builder_name, ] try: - api.step('Trigger and wait for g3 compile task', cmd=cmd) + with api.context(cwd=api.path['start_dir'].join('skia')): + api.run(api.step, 'Trigger and wait for g3 compile task', cmd=cmd) except api.step.StepFailure as e: # Add CL link if it exists in the output_file. task_json = api.file.read_json( diff --git a/third_party/skia/infra/bots/recipes/housekeeper.expected/Housekeeper-PerCommit-Trybot.json b/third_party/skia/infra/bots/recipes/housekeeper.expected/Housekeeper-PerCommit-Trybot.json index e577cb69145e..d1587c4c58c2 100644 --- a/third_party/skia/infra/bots/recipes/housekeeper.expected/Housekeeper-PerCommit-Trybot.json +++ b/third_party/skia/infra/bots/recipes/housekeeper.expected/Housekeeper-PerCommit-Trybot.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipes/housekeeper.expected/Housekeeper-PerCommit.json b/third_party/skia/infra/bots/recipes/housekeeper.expected/Housekeeper-PerCommit.json index 0183395edd3b..d7e6558fa17a 100644 --- a/third_party/skia/infra/bots/recipes/housekeeper.expected/Housekeeper-PerCommit.json +++ b/third_party/skia/infra/bots/recipes/housekeeper.expected/Housekeeper-PerCommit.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android.json index 4ad1b5671099..0cf8bd522578 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android.json index 1d9e20eda8ad..4090391efcbc 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_NoGPUThreads.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_NoGPUThreads.json index a325df3fc1ec..373abeb3b015 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_NoGPUThreads.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_NoGPUThreads.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json index 989cef71a91a..b5248c6e983a 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json @@ -44,6 +44,208 @@ "infra_step": true, "name": "mkdir /sdcard/revenge_of_the_skiabot/resources" }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/text_blob_traces/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get text_blob_traces VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/TEXTTRACES_VERSION" + ], + "infra_step": true, + "name": "write TEXTTRACES_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@TEXTTRACES_VERSION@42@@@", + "@@@STEP_LOG_END@TEXTTRACES_VERSION@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "cat", + "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "read /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-f", + "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-rf", + "/sdcard/revenge_of_the_skiabot/text_blob_traces" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/text_blob_traces" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "mkdir", + "-p", + "/sdcard/revenge_of_the_skiabot/text_blob_traces" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "mkdir /sdcard/revenge_of_the_skiabot/text_blob_traces" + }, + { + "cmd": [], + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "listdir", + "[START_DIR]/text_blob_traces", + "--recursive" + ], + "infra_step": true, + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces.list [START_DIR]/text_blob_traces", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/text_blob_traces/.file3@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/text_blob_traces/.ignore/file4@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/text_blob_traces/file1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/text_blob_traces/subdir/file2@@@", + "@@@STEP_LOG_END@listdir@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/text_blob_traces/.file3", + "/sdcard/revenge_of_the_skiabot/text_blob_traces/.file3" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces.push [START_DIR]/text_blob_traces/.file3", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/text_blob_traces/file1", + "/sdcard/revenge_of_the_skiabot/text_blob_traces/file1" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces.push [START_DIR]/text_blob_traces/file1", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/text_blob_traces/subdir/file2", + "/sdcard/revenge_of_the_skiabot/text_blob_traces/subdir/file2" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces.push [START_DIR]/text_blob_traces/subdir/file2", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/tmp/TEXTTRACES_VERSION", + "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/tmp/TEXTTRACES_VERSION /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION" + }, { "cmd": [], "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources" @@ -139,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +745,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -874,7 +1088,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --scales 1.0 1.1 --nogpu --purgeBetweenBenches --config 8888 nonrendering --loops 1 --samples 1 --keepAlive true --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; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --scales 1.0 1.1 --nogpu --purgeBetweenBenches --texttraces /sdcard/revenge_of_the_skiabot/text_blob_traces --config 8888 nonrendering --loops 1 --samples 1 --keepAlive true --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; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/nanobench.sh" ], "env": { @@ -884,7 +1098,7 @@ "infra_step": true, "name": "write nanobench.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@nanobench.sh@set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --scales 1.0 1.1 --nogpu --purgeBetweenBenches --config 8888 nonrendering --loops 1 --samples 1 --keepAlive true --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; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@nanobench.sh@set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --scales 1.0 1.1 --nogpu --purgeBetweenBenches --texttraces /sdcard/revenge_of_the_skiabot/text_blob_traces --config 8888 nonrendering --loops 1 --samples 1 --keepAlive true --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; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@nanobench.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan.json index 6e6d3b0d774d..5efcffc5d0e5 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android.json index ae87cc6c3608..709f31528aff 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -908,7 +920,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --images --gpuStatsDump true --scales 1.0 1.1 --nocpu --config gles glessrgb glesmsaa4 --match ~blurroundrect ~patch_grid ~desk_carsvg ~^path_text$ ~^path_text_clipped_uncached$ ~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 --outResultsFile /sdcard/revenge_of_the_skiabot/perf/nanobench_abc123_1337000001.json --properties gitHash abc123 swarming_bot_id skia-bot-123 swarming_task_id 123456 --key arch arm64 compiler Clang cpu_or_gpu GPU cpu_or_gpu_value Adreno615 extra_config Android model Pixel3a os Android; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --images --gpuStatsDump true --scales 1.0 1.1 --nocpu --config gles glessrgb --match ~blurroundrect ~patch_grid ~desk_carsvg ~^path_text$ ~^path_text_clipped_uncached$ ~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 --outResultsFile /sdcard/revenge_of_the_skiabot/perf/nanobench_abc123_1337000001.json --properties gitHash abc123 swarming_bot_id skia-bot-123 swarming_task_id 123456 --key arch arm64 compiler Clang cpu_or_gpu GPU cpu_or_gpu_value Adreno615 extra_config Android model Pixel3a os Android; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/nanobench.sh" ], "env": { @@ -918,7 +930,7 @@ "infra_step": true, "name": "write nanobench.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@nanobench.sh@set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --images --gpuStatsDump true --scales 1.0 1.1 --nocpu --config gles glessrgb glesmsaa4 --match ~blurroundrect ~patch_grid ~desk_carsvg ~^path_text$ ~^path_text_clipped_uncached$ ~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 --outResultsFile /sdcard/revenge_of_the_skiabot/perf/nanobench_abc123_1337000001.json --properties gitHash abc123 swarming_bot_id skia-bot-123 swarming_task_id 123456 --key arch arm64 compiler Clang cpu_or_gpu GPU cpu_or_gpu_value Adreno615 extra_config Android model Pixel3a os Android; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@nanobench.sh@set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --images --gpuStatsDump true --scales 1.0 1.1 --nocpu --config gles glessrgb --match ~blurroundrect ~patch_grid ~desk_carsvg ~^path_text$ ~^path_text_clipped_uncached$ ~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 --outResultsFile /sdcard/revenge_of_the_skiabot/perf/nanobench_abc123_1337000001.json --properties gitHash abc123 swarming_bot_id skia-bot-123 swarming_task_id 123456 --key arch arm64 compiler Clang cpu_or_gpu GPU cpu_or_gpu_value Adreno615 extra_config Android model Pixel3a os Android; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@nanobench.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All.json index 98b370fae188..530bc1d7d88f 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read ssh_machine.json" + "name": "read ssh_machine.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@ssh_machine.json@{\"user_ip\": \"foo@127.0.0.1\"}@@@", + "@@@STEP_LOG_END@ssh_machine.json@@@" + ] }, { "cmd": [ @@ -139,7 +143,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -279,7 +287,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -419,7 +431,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All.json index ee7747bc0a69..ccc9b70774c7 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read ssh_machine.json" + "name": "read ssh_machine.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@ssh_machine.json@{\"user_ip\": \"foo@127.0.0.1\"}@@@", + "@@@STEP_LOG_END@ssh_machine.json@@@" + ] }, { "cmd": [ @@ -139,7 +143,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -279,7 +287,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -419,7 +431,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All.json index 2da595db3a6d..cf75e8d661e4 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All.json @@ -141,7 +141,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -332,6 +336,7 @@ "~^path_text_clipped", "~shapes_rrect_inner_rrect_50_500x500", "~compositing_images", + "~bulkrect", "--loops", "1" ], diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json index e88635b4a11a..72c3c90fa5be 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json @@ -141,7 +141,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -364,6 +368,7 @@ "~^path_text_clipped", "~shapes_rrect_inner_rrect_50_500x500", "~compositing_images", + "~bulkrect", "--outResultsFile", "/cache/skia/perf/nanobench_abc123_1337000001.json", "--properties", diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN.json index cd4ef4ad4c6c..376875f3dc05 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All.json index 0ca2e1c83c91..53871df26db1 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs.json index b9edf82de2dd..1dc19f3b4fac 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan.json index e718d602ea6f..aab6ba563579 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All.json index 943dc3d764c7..ab99aad9fe00 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer.json index dd4ff4645bb8..57f4c950f0cd 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal.json index edb116121cb1..b3cfb50eb878 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer.json index e8398fa3b8c4..c79923b9a868 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41.json similarity index 91% rename from third_party/skia/infra/bots/recipes/perf.expected/Perf-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41.json rename to third_party/skia/infra/bots/recipes/perf.expected/Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41.json index e89dbe45ba7a..d4c6f4280f77 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE.json index a1b36febdc7c..639b2aebc159 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan.json index 8dd085dfd28e..9d49d995dfa6 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All.json index ccf548c7ab59..e8bbf546d382 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All.json @@ -88,7 +88,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -214,7 +218,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -340,7 +348,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal.json b/third_party/skia/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal.json index 0552f9fdaae1..1b49b8b0b94f 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal.json @@ -88,7 +88,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -214,7 +218,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -340,7 +348,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.expected/trybot.json b/third_party/skia/infra/bots/recipes/perf.expected/trybot.json index b80794ad7863..6d612f9e94fe 100644 --- a/third_party/skia/infra/bots/recipes/perf.expected/trybot.json +++ b/third_party/skia/infra/bots/recipes/perf.expected/trybot.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/perf.py b/third_party/skia/infra/bots/recipes/perf.py index aa516e50e00f..74b9f1befb8d 100644 --- a/third_party/skia/infra/bots/recipes/perf.py +++ b/third_party/skia/infra/bots/recipes/perf.py @@ -72,6 +72,10 @@ def nanobench_flags(api, bot): if 'Nexus7' in bot: args.append('--purgeBetweenBenches') # Debugging skia:8929 + if 'Android' in bot: + assert api.flavor.device_dirs.texttraces_dir + args.extend(['--texttraces', api.flavor.device_dirs.texttraces_dir]) + elif api.vars.builder_cfg.get('cpu_or_gpu') == 'GPU': args.append('--nocpu') @@ -85,8 +89,10 @@ def nanobench_flags(api, bot): gl_prefix = 'gles' # iOS crashes with MSAA (skia:6399) # Nexus7 (Tegra3) does not support MSAA. + # MSAA is disabled on Pixel3a (https://b.corp.google.com/issues/143074513). if ('iOS' in bot or - 'Nexus7' in bot): + 'Nexus7' in bot or + 'Pixel3a' in bot): sample_count = '' elif 'Intel' in bot: # MSAA doesn't work well on Intel GPUs chromium:527565, chromium:983926 @@ -312,6 +318,7 @@ def perf_steps(api): '~^path_text_clipped', # Bot times out; skia:7190 '~shapes_rrect_inner_rrect_50_500x500', # skia:7551 '~compositing_images', + '~bulkrect' ]) if 'Debug' in api.vars.builder_name: args.extend(['--loops', '1']) @@ -357,6 +364,8 @@ def RunSteps(api): try: if 'Chromecast' in api.vars.builder_name: api.flavor.install(resources=True, skps=True) + elif all(v in api.vars.builder_name for v in ['Android', 'CPU']): + api.flavor.install(skps=True, images=True, svgs=True, resources=True, texttraces=True) else: api.flavor.install(skps=True, images=True, svgs=True, resources=True) perf_steps(api) @@ -388,8 +397,8 @@ def RunSteps(api): 'Metal'), ('Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-' 'CommandBuffer'), - ('Perf-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-' - 'Valgrind_SK_CPU_LIMIT_SSE41'), + ('Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All' + '-Valgrind_SK_CPU_LIMIT_SSE41'), 'Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE', 'Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan', 'Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All', diff --git a/third_party/skia/infra/bots/recipes/perf_canvaskit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit.json b/third_party/skia/infra/bots/recipes/perf_canvaskit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit.json index e8798ca253c6..db7a4ce1dc43 100644 --- a/third_party/skia/infra/bots/recipes/perf_canvaskit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit.json +++ b/third_party/skia/infra/bots/recipes/perf_canvaskit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit.json @@ -1,4 +1,34 @@ [ + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, { "cmd": [ "vpython", @@ -9,10 +39,49 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[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": "makedirs checkout_path" + "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/canvaskit/perf_canvaskit.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/canvaskit/perf_canvaskit.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ @@ -21,76 +90,44 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/canvaskit/canvaskit/bin", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", "/path/to/tmp/json", - "--revision", - "skia@abc123" + "copy", + "[START_DIR]/build/canvaskit.wasm", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm" + ], + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/canvaskit.wasm [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -103,89 +140,54 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/canvaskit/canvaskit/bin (2)", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/)\ndest = os.path.join(copy_dest, 'canvaskit.js')\nshutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/canvaskit/canvaskit/bin", - "[START_DIR]/build", - "canvaskit.wasm", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/canvaskit.js", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/canvaskit.js [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'canvaskit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "chmod", + "644", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -194,11 +196,11 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "gcr.io/skia-public/perf-karma-chrome-tests:72.0.3626.121_v1", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/perf-karma-chrome-tests:77.0.3865.120_v1", "/SRC/skia/infra/canvaskit/perf_canvaskit.sh", "--builder", "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit", @@ -222,7 +224,7 @@ "DOCKER_CONFIG": "/home/chrome-bot/.docker", "PATH": ":RECIPE_REPO[depot_tools]" }, - "name": "Performance tests of canvaskit with Docker" + "name": "Performance tests of CanvasKit with Docker" }, { "name": "$result" diff --git a/third_party/skia/infra/bots/recipes/perf_canvaskit.expected/pathkit_trybot.json b/third_party/skia/infra/bots/recipes/perf_canvaskit.expected/pathkit_trybot.json index 69e4eb1ebdc3..62744f591f5e 100644 --- a/third_party/skia/infra/bots/recipes/perf_canvaskit.expected/pathkit_trybot.json +++ b/third_party/skia/infra/bots/recipes/perf_canvaskit.expected/pathkit_trybot.json @@ -1,4 +1,34 @@ [ + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, { "cmd": [ "vpython", @@ -9,10 +39,49 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[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": "makedirs checkout_path" + "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/canvaskit/perf_canvaskit.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/canvaskit/perf_canvaskit.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ @@ -21,78 +90,44 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/canvaskit/canvaskit/bin", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", "/path/to/tmp/json", - "--patch_ref", - "https://skia.googlesource.com/skia.git@abc123:89/456789/12", - "--revision", - "skia@abc123" + "copy", + "[START_DIR]/build/canvaskit.wasm", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm" + ], + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/canvaskit.wasm [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -105,89 +140,54 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/canvaskit/canvaskit/bin (2)", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/)\ndest = os.path.join(copy_dest, 'canvaskit.js')\nshutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/canvaskit/canvaskit/bin", - "[START_DIR]/build", - "canvaskit.wasm", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/canvaskit.js", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/canvaskit.js [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'canvaskit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "chmod", + "644", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -196,11 +196,11 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "gcr.io/skia-public/perf-karma-chrome-tests:72.0.3626.121_v1", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/perf-karma-chrome-tests:77.0.3865.120_v1", "/SRC/skia/infra/canvaskit/perf_canvaskit.sh", "--builder", "Perf-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit", @@ -221,16 +221,14 @@ "--issue", "1234", "--patchset", - "7", - "--patch_storage", - "gerrit" + "7" ], "env": { "CHROME_HEADLESS": "1", "DOCKER_CONFIG": "/home/chrome-bot/.docker", "PATH": ":RECIPE_REPO[depot_tools]" }, - "name": "Performance tests of canvaskit with Docker" + "name": "Performance tests of CanvasKit with Docker" }, { "name": "$result" diff --git a/third_party/skia/infra/bots/recipes/perf_canvaskit.py b/third_party/skia/infra/bots/recipes/perf_canvaskit.py index 8ad59df6bff9..dcb7bed2af80 100644 --- a/third_party/skia/infra/bots/recipes/perf_canvaskit.py +++ b/third_party/skia/infra/bots/recipes/perf_canvaskit.py @@ -2,10 +2,11 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# Recipe which runs the PathKit tests using docker +# Recipe which runs the Canvaskit tests using docker DEPS = [ 'checkout', + 'docker', 'env', 'infra', 'recipe_engine/file', @@ -18,103 +19,54 @@ ] -DOCKER_IMAGE = 'gcr.io/skia-public/perf-karma-chrome-tests:72.0.3626.121_v1' -INNER_KARMA_SCRIPT = '/SRC/skia/infra/canvaskit/perf_canvaskit.sh' +DOCKER_IMAGE = 'gcr.io/skia-public/perf-karma-chrome-tests:77.0.3865.120_v1' +INNER_KARMA_SCRIPT = 'skia/infra/canvaskit/perf_canvaskit.sh' def RunSteps(api): api.vars.setup() - checkout_root = api.checkout.default_checkout_root + checkout_root = api.path['start_dir'] out_dir = api.vars.swarming_out_dir - api.checkout.bot_update(checkout_root=checkout_root) - - # Make sure this exists, otherwise Docker will make it with root permissions. - api.file.ensure_directory('mkdirs out_dir', out_dir, mode=0777) # The karma script is configured to look in ./canvaskit/bin/ for # the test files to load, so we must copy them there (see Set up for docker). copy_dest = checkout_root.join('skia', 'modules', 'canvaskit', 'canvaskit', 'bin') - base_dir = api.vars.build_dir - bundle_name = 'canvaskit.wasm' - - api.python.inline( - name='Set up for docker', - program='''import errno -import os -import shutil -import sys - -copy_dest = sys.argv[1] -base_dir = sys.argv[2] -bundle_name = sys.argv[3] -out_dir = sys.argv[4] - -# Clean out old binaries (if any) -try: - shutil.rmtree(copy_dest) -except OSError as e: - if e.errno != errno.ENOENT: - raise - -# Make folder -try: - os.makedirs(copy_dest) -except OSError as e: - if e.errno != errno.EEXIST: - raise - -# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests -# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/) -dest = os.path.join(copy_dest, 'canvaskit.js') -shutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest) -os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read. + copies = { + base_dir.join('canvaskit.js'): copy_dest.join('canvaskit.js'), + base_dir.join('canvaskit.wasm'): copy_dest.join('canvaskit.wasm'), + } + recursive_read = [checkout_root.join('skia')] -if bundle_name: - dest = os.path.join(copy_dest, bundle_name) - shutil.copyfile(os.path.join(base_dir, bundle_name), dest) - os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read. - -# Prepare output folder, api.file.ensure_directory doesn't touch -# the permissions of the out directory if it already exists. -os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write. -''', - args=[copy_dest, base_dir, bundle_name, out_dir], - infra_step=True) - - - cmd = ['docker', 'run', '--shm-size=2gb', '--rm', - '--volume', '%s:/SRC' % checkout_root, - '--volume', '%s:/OUT' % out_dir] - - cmd.extend([ - DOCKER_IMAGE, INNER_KARMA_SCRIPT, + args = [ '--builder', api.vars.builder_name, '--git_hash', api.properties['revision'], - '--buildbucket_build_id', api.properties.get('buildbucket_build_id', - ''), + '--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, '--source_type', 'canvaskit', - ]) - + ] 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, - 'Performance tests of canvaskit with Docker', - cmd=cmd) + api.docker.run( + name='Performance tests of CanvasKit with Docker', + docker_image=DOCKER_IMAGE, + src_dir=checkout_root, + out_dir=out_dir, + script=checkout_root.join(INNER_KARMA_SCRIPT), + args=args, + docker_args=None, + copies=copies, + recursive_read=recursive_read, + attempts=3, + ) def GenTests(api): diff --git a/third_party/skia/infra/bots/recipes/perf_pathkit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit.json b/third_party/skia/infra/bots/recipes/perf_pathkit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit.json index e9f6509993e6..60fbd6f097a0 100644 --- a/third_party/skia/infra/bots/recipes/perf_pathkit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit.json +++ b/third_party/skia/infra/bots/recipes/perf_pathkit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit.json @@ -9,10 +9,40 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "makedirs checkout_path" + "name": "mkdirs out_dir" + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" }, { "cmd": [ @@ -21,76 +51,51 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" + "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/pathkit/perf_pathkit.sh" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/pathkit/perf_pathkit.sh", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -103,89 +108,101 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-asmjs/bin", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/)\ndest = os.path.join(copy_dest, 'pathkit.js')\nshutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/pathkit/npm-asmjs/bin", - "[START_DIR]/build", - "pathkit.js.mem", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.js.mem", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/pathkit.js.mem" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/pathkit.js.mem [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/pathkit.js.mem", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'pathkit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/pathkit.js.mem" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/pathkit.js.mem", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-asmjs/bin (2)", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.js", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/pathkit.js" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/pathkit.js [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/pathkit.js" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/pathkit.js", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -194,13 +211,13 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", "--env", "ASM_JS=1", - "gcr.io/skia-public/perf-karma-chrome-tests:72.0.3626.121_v1", + "gcr.io/skia-public/perf-karma-chrome-tests:77.0.3865.120_v1", "/SRC/skia/infra/pathkit/perf_pathkit.sh", "--builder", "Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit", diff --git a/third_party/skia/infra/bots/recipes/perf_pathkit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit.json b/third_party/skia/infra/bots/recipes/perf_pathkit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit.json index bd9e3f881e64..68894aeff723 100644 --- a/third_party/skia/infra/bots/recipes/perf_pathkit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit.json +++ b/third_party/skia/infra/bots/recipes/perf_pathkit.expected/Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit.json @@ -9,10 +9,40 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "makedirs checkout_path" + "name": "mkdirs out_dir" + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" }, { "cmd": [ @@ -21,76 +51,51 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" + "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/pathkit/perf_pathkit.sh" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/pathkit/perf_pathkit.sh", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -103,89 +108,101 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-wasm/bin", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/)\ndest = os.path.join(copy_dest, 'pathkit.js')\nshutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/pathkit/npm-wasm/bin", - "[START_DIR]/build", - "pathkit.wasm", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.wasm", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.wasm" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/pathkit.wasm [START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.wasm", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'pathkit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.wasm" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.wasm", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-wasm/bin (2)", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.js", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.js" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/pathkit.js [START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.js" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.js", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -194,11 +211,11 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "gcr.io/skia-public/perf-karma-chrome-tests:72.0.3626.121_v1", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/perf-karma-chrome-tests:77.0.3865.120_v1", "/SRC/skia/infra/pathkit/perf_pathkit.sh", "--builder", "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit", diff --git a/third_party/skia/infra/bots/recipes/perf_pathkit.expected/pathkit_trybot.json b/third_party/skia/infra/bots/recipes/perf_pathkit.expected/pathkit_trybot.json index 717db762f5fa..a93a194a1c06 100644 --- a/third_party/skia/infra/bots/recipes/perf_pathkit.expected/pathkit_trybot.json +++ b/third_party/skia/infra/bots/recipes/perf_pathkit.expected/pathkit_trybot.json @@ -9,10 +9,40 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "makedirs checkout_path" + "name": "mkdirs out_dir" + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" }, { "cmd": [ @@ -21,78 +51,51 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--patch_ref", - "https://skia.googlesource.com/skia.git@abc123:89/456789/12", - "--revision", - "skia@abc123" + "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/pathkit/perf_pathkit.sh" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/pathkit/perf_pathkit.sh", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -105,89 +108,101 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-wasm/bin", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/)\ndest = os.path.join(copy_dest, 'pathkit.js')\nshutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/pathkit/npm-wasm/bin", - "[START_DIR]/build", - "pathkit.wasm", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.wasm", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.wasm" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/pathkit.wasm [START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.wasm", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'pathkit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.wasm" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.wasm", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-wasm/bin (2)", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.js", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.js" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/pathkit.js [START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.js" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-wasm/bin/pathkit.js", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -196,11 +211,11 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "gcr.io/skia-public/perf-karma-chrome-tests:72.0.3626.121_v1", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/perf-karma-chrome-tests:77.0.3865.120_v1", "/SRC/skia/infra/pathkit/perf_pathkit.sh", "--builder", "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit", @@ -221,9 +236,7 @@ "--issue", "1234", "--patchset", - "7", - "--patch_storage", - "gerrit" + "7" ], "env": { "CHROME_HEADLESS": "1", diff --git a/third_party/skia/infra/bots/recipes/perf_pathkit.py b/third_party/skia/infra/bots/recipes/perf_pathkit.py index d45597b0f41b..d520cc0f5d6c 100644 --- a/third_party/skia/infra/bots/recipes/perf_pathkit.py +++ b/third_party/skia/infra/bots/recipes/perf_pathkit.py @@ -6,6 +6,7 @@ DEPS = [ 'checkout', + 'docker', 'env', 'infra', 'recipe_engine/file', @@ -18,15 +19,14 @@ ] -DOCKER_IMAGE = 'gcr.io/skia-public/perf-karma-chrome-tests:72.0.3626.121_v1' -INNER_KARMA_SCRIPT = '/SRC/skia/infra/pathkit/perf_pathkit.sh' +DOCKER_IMAGE = 'gcr.io/skia-public/perf-karma-chrome-tests:77.0.3865.120_v1' +INNER_KARMA_SCRIPT = 'skia/infra/pathkit/perf_pathkit.sh' def RunSteps(api): api.vars.setup() - checkout_root = api.checkout.default_checkout_root + checkout_root = api.path['start_dir'] out_dir = api.vars.swarming_out_dir - api.checkout.bot_update(checkout_root=checkout_root) # Make sure this exists, otherwise Docker will make it with root permissions. api.file.ensure_directory('mkdirs out_dir', out_dir, mode=0777) @@ -34,97 +34,56 @@ def RunSteps(api): # The karma script is configured to look in ./npm-(asmjs|wasm)/bin/ for # the test files to load, so we must copy them there (see Set up for docker). copy_dest = checkout_root.join('skia', 'modules', 'pathkit', - 'npm-wasm', 'bin') + 'npm-wasm', 'bin') if 'asmjs' in api.vars.builder_name: copy_dest = checkout_root.join('skia', 'modules', 'pathkit', - 'npm-asmjs', 'bin') + 'npm-asmjs', 'bin') base_dir = api.vars.build_dir bundle_name = 'pathkit.wasm' if 'asmjs' in api.vars.builder_name: bundle_name = 'pathkit.js.mem' - api.python.inline( - name='Set up for docker', - program='''import errno -import os -import shutil -import sys - -copy_dest = sys.argv[1] -base_dir = sys.argv[2] -bundle_name = sys.argv[3] -out_dir = sys.argv[4] - -# Clean out old binaries (if any) -try: - shutil.rmtree(copy_dest) -except OSError as e: - if e.errno != errno.ENOENT: - raise - -# Make folder -try: - os.makedirs(copy_dest) -except OSError as e: - if e.errno != errno.EEXIST: - raise - -# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests -# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/) -dest = os.path.join(copy_dest, 'pathkit.js') -shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest) -os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read. - -if bundle_name: - dest = os.path.join(copy_dest, bundle_name) - shutil.copyfile(os.path.join(base_dir, bundle_name), dest) - os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read. - -# Prepare output folder, api.file.ensure_directory doesn't touch -# the permissions of the out directory if it already exists. -os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write. -''', - args=[copy_dest, base_dir, bundle_name, out_dir], - infra_step=True) - - cmd = ['docker', 'run', '--shm-size=2gb', '--rm', - '--volume', '%s:/SRC' % checkout_root, - '--volume', '%s:/OUT' % out_dir] + copies = { + base_dir.join('pathkit.js'): copy_dest.join('pathkit.js'), + base_dir.join(bundle_name): copy_dest.join(bundle_name), + } + recursive_read = [checkout_root.join('skia')] + docker_args = None if 'asmjs' in api.vars.builder_name: - cmd.extend(['--env', 'ASM_JS=1']) - - cmd.extend([ - DOCKER_IMAGE, INNER_KARMA_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, - '--source_type', 'pathkit', - ]) - + docker_args = ['--env', 'ASM_JS=1'] + + 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, + '--source_type', 'pathkit', + ] if 'asmjs' in api.vars.builder_name: - cmd.extend(['--compiled_language', 'asmjs']) # the default is wasm - + args.extend(['--compiled_language', 'asmjs']) # the default is wasm 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, - 'Performance tests of PathKit with Docker', - cmd=cmd) + api.docker.run( + name='Performance tests of PathKit with Docker', + docker_image=DOCKER_IMAGE, + src_dir=checkout_root, + out_dir=out_dir, + script=checkout_root.join(INNER_KARMA_SCRIPT), + args=args, + docker_args=docker_args, + copies=copies, + recursive_read=recursive_read, + attempts=3, + ) def GenTests(api): diff --git a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json index a5675f6b1393..376bb3d26054 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json +++ b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get lottie-samples VERSION" + "name": "Get lottie-samples VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -539,7 +543,7 @@ "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie 3!.json", "/path/to/tmp/json" @@ -572,12 +576,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", @@ -730,7 +730,7 @@ "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie(test)'!2.json", "/path/to/tmp/json" @@ -763,12 +763,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", @@ -921,7 +917,7 @@ "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie1.json", "/path/to/tmp/json" @@ -954,12 +950,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", diff --git a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing.json b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing.json index 0f89ae85f484..0f47d5bf07f4 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing.json +++ b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get lottie-samples VERSION" + "name": "Get lottie-samples VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -139,13 +143,16 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read [START_DIR]/[SWARM_OUT_DIR]/2.json" + "name": "read [START_DIR]/[SWARM_OUT_DIR]/2.json", + "~followup_annotations": [ + "@@@STEP_LOG_END@2.json@@@" + ] }, { "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie 3!.json", "/path/to/tmp/json" @@ -178,12 +185,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", @@ -275,13 +278,16 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read [START_DIR]/[SWARM_OUT_DIR]/3.json" + "name": "read [START_DIR]/[SWARM_OUT_DIR]/3.json", + "~followup_annotations": [ + "@@@STEP_LOG_END@3.json@@@" + ] }, { "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie(test)'!2.json", "/path/to/tmp/json" @@ -314,12 +320,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", @@ -411,13 +413,16 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read [START_DIR]/[SWARM_OUT_DIR]/4.json" + "name": "read [START_DIR]/[SWARM_OUT_DIR]/4.json", + "~followup_annotations": [ + "@@@STEP_LOG_END@4.json@@@" + ] }, { "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie1.json", "/path/to/tmp/json" @@ -450,12 +455,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", diff --git a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing.json b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing.json index c5a7ba99ad14..05b678772015 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing.json +++ b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get lottie-samples VERSION" + "name": "Get lottie-samples VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -142,13 +146,16 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read [START_DIR]/[SWARM_OUT_DIR]/2.json" + "name": "read [START_DIR]/[SWARM_OUT_DIR]/2.json", + "~followup_annotations": [ + "@@@STEP_LOG_END@2.json@@@" + ] }, { "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie 3!.json", "/path/to/tmp/json" @@ -181,12 +188,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", @@ -281,13 +284,16 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read [START_DIR]/[SWARM_OUT_DIR]/3.json" + "name": "read [START_DIR]/[SWARM_OUT_DIR]/3.json", + "~followup_annotations": [ + "@@@STEP_LOG_END@3.json@@@" + ] }, { "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie(test)'!2.json", "/path/to/tmp/json" @@ -320,12 +326,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", @@ -420,13 +422,16 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read [START_DIR]/[SWARM_OUT_DIR]/4.json" + "name": "read [START_DIR]/[SWARM_OUT_DIR]/4.json", + "~followup_annotations": [ + "@@@STEP_LOG_END@4.json@@@" + ] }, { "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie1.json", "/path/to/tmp/json" @@ -459,12 +464,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", diff --git a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/skottietracing_parse_trace_error.json b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/skottietracing_parse_trace_error.json index 98d6685d287d..04a4537963cb 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/skottietracing_parse_trace_error.json +++ b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/skottietracing_parse_trace_error.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get lottie-samples VERSION" + "name": "Get lottie-samples VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -539,7 +543,7 @@ "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie 3!.json", "/path/to/tmp/json" @@ -572,12 +576,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", diff --git a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/skottietracing_trybot.json b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/skottietracing_trybot.json index 65d49e5b4ca6..e3c7ea9193b1 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/skottietracing_trybot.json +++ b/third_party/skia/infra/bots/recipes/perf_skottietrace.expected/skottietracing_trybot.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get lottie-samples VERSION" + "name": "Get lottie-samples VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -539,7 +543,7 @@ "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie 3!.json", "/path/to/tmp/json" @@ -572,12 +576,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", @@ -730,7 +730,7 @@ "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie(test)'!2.json", "/path/to/tmp/json" @@ -763,12 +763,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", @@ -921,7 +917,7 @@ "cmd": [ "python", "-u", - "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nskipped_first_seek = False # Skip the first seek constructor call.\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if not skipped_first_seek:\n skipped_first_seek = True\n continue\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", + "\nimport json\nimport sys\n\ntrace_output = sys.argv[1]\ntrace_json = json.loads(trace_output)\nlottie_filename = sys.argv[2]\noutput_json_file = sys.argv[3]\n\nperf_results = {}\nframe_max = 0\nframe_min = 0\nframe_cumulative = 0\ncurrent_frame_duration = 0\ntotal_frames = 0\nframe_start = False\nfor trace in trace_json:\n if 'skottie::Animation::seek' in trace['name']:\n if frame_start:\n raise Exception('We got consecutive Animation::seek without a ' +\n 'render. Something is wrong.')\n frame_start = True\n current_frame_duration = trace['dur']\n elif 'skottie::Animation::render' in trace['name']:\n if not frame_start:\n raise Exception('We got an Animation::render without a seek first. ' +\n 'Something is wrong.')\n\n current_frame_duration += trace['dur']\n frame_start = False\n total_frames += 1\n frame_max = max(frame_max, current_frame_duration)\n frame_min = (min(frame_min, current_frame_duration)\n if frame_min else current_frame_duration)\n frame_cumulative += current_frame_duration\n\nexpected_dm_frames = 25\nif total_frames != expected_dm_frames:\n raise Exception(\n 'Got ' + str(total_frames) + ' frames instead of ' +\n str(expected_dm_frames))\nperf_results['frame_max_us'] = frame_max\nperf_results['frame_min_us'] = frame_min\nperf_results['frame_avg_us'] = frame_cumulative/total_frames\n\n# Write perf_results to the output json.\nwith open(output_json_file, 'w') as f:\n f.write(json.dumps(perf_results))\n", "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n", "lottie1.json", "/path/to/tmp/json" @@ -954,12 +950,8 @@ "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@", "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@", "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@", - "@@@STEP_LOG_LINE@python.inline@skipped_first_seek = False # Skip the first seek constructor call.@@@", "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@", "@@@STEP_LOG_LINE@python.inline@ if 'skottie::Animation::seek' in trace['name']:@@@", - "@@@STEP_LOG_LINE@python.inline@ if not skipped_first_seek:@@@", - "@@@STEP_LOG_LINE@python.inline@ skipped_first_seek = True@@@", - "@@@STEP_LOG_LINE@python.inline@ continue@@@", "@@@STEP_LOG_LINE@python.inline@ if frame_start:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('We got consecutive Animation::seek without a ' +@@@", "@@@STEP_LOG_LINE@python.inline@ 'render. Something is wrong.')@@@", diff --git a/third_party/skia/infra/bots/recipes/perf_skottietrace.py b/third_party/skia/infra/bots/recipes/perf_skottietrace.py index f65abff23220..5d16f419438c 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottietrace.py +++ b/third_party/skia/infra/bots/recipes/perf_skottietrace.py @@ -180,12 +180,8 @@ def parse_trace(trace_json, lottie_filename, api): current_frame_duration = 0 total_frames = 0 frame_start = False - skipped_first_seek = False # Skip the first seek constructor call. for trace in trace_json: if '%s' in trace['name']: - if not skipped_first_seek: - skipped_first_seek = True - continue if frame_start: raise Exception('We got consecutive Animation::seek without a ' + 'render. Something is wrong.') diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_canvas_perf.json b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_canvas_perf.json index 8bca672b1804..053a3862947f 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_canvas_perf.json +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_canvas_perf.json @@ -1,98 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -118,7 +24,7 @@ "npm", "install" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env_prefixes": { "PATH": [ "[START_DIR]/node/node/bin" @@ -129,7 +35,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "canvas", "--input", @@ -137,7 +43,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie1.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -292,7 +198,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "canvas", "--input", @@ -300,7 +206,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie2.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -455,7 +361,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "canvas", "--input", @@ -463,7 +369,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie3.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_canvas_perf_trybot.json b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_canvas_perf_trybot.json index 19545e99311f..14c656d4633b 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_canvas_perf_trybot.json +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_canvas_perf_trybot.json @@ -1,100 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--patch_ref", - "https://skia.googlesource.com/skia.git@abc123:89/456789/12", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -120,7 +24,7 @@ "npm", "install" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env_prefixes": { "PATH": [ "[START_DIR]/node/node/bin" @@ -131,7 +35,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "canvas", "--input", @@ -139,7 +43,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie1.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -294,7 +198,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "canvas", "--input", @@ -302,7 +206,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie2.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -457,7 +361,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "canvas", "--input", @@ -465,7 +369,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie3.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_perf.json b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_perf.json index 51c9b211e441..02fe698034c7 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_perf.json +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_perf.json @@ -1,98 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -118,7 +24,7 @@ "npm", "install" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env_prefixes": { "PATH": [ "[START_DIR]/node/node/bin" @@ -129,7 +35,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "svg", "--input", @@ -137,7 +43,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie1.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -292,7 +198,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "svg", "--input", @@ -300,7 +206,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie2.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -455,7 +361,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "svg", "--input", @@ -463,7 +369,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie3.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_perf_trybot.json b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_perf_trybot.json index e7737a8f7391..40bf3393b273 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_perf_trybot.json +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/lottie_web_perf_trybot.json @@ -1,100 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--patch_ref", - "https://skia.googlesource.com/skia.git@abc123:89/456789/12", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -120,7 +24,7 @@ "npm", "install" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env_prefixes": { "PATH": [ "[START_DIR]/node/node/bin" @@ -131,7 +35,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "svg", "--input", @@ -139,7 +43,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie1.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -294,7 +198,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "svg", "--input", @@ -302,7 +206,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie2.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -457,7 +361,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/lottie-web-perf/lottie-web-perf.js", + "[START_DIR]/skia/tools/lottie-web-perf/lottie-web-perf.js", "--backend", "svg", "--input", @@ -465,7 +369,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie3.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/lottie-web-perf", + "cwd": "[START_DIR]/skia/tools/lottie-web-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf.json b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf.json index 72d1bf43bf76..5eee3f0d8904 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf.json +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf.json @@ -1,98 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -118,7 +24,7 @@ "npm", "install" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env_prefixes": { "PATH": [ "[START_DIR]/node/node/bin" @@ -129,7 +35,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -139,7 +45,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie1.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -294,7 +200,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -304,7 +210,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie2.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -459,7 +365,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -469,7 +375,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie3.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf_gpu.json b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf_gpu.json index 9bfd54b43afd..78de176acaaf 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf_gpu.json +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf_gpu.json @@ -1,98 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -118,7 +24,7 @@ "npm", "install" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env_prefixes": { "PATH": [ "[START_DIR]/node/node/bin" @@ -129,7 +35,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -140,7 +46,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie1.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -295,7 +201,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -306,7 +212,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie2.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -461,7 +367,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -472,7 +378,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie3.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf_trybot.json b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf_trybot.json index 10b51b3d2b21..56c229f0bf34 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf_trybot.json +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/skottie_wasm_perf_trybot.json @@ -1,100 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--patch_ref", - "https://skia.googlesource.com/skia.git@abc123:89/456789/12", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -120,7 +24,7 @@ "npm", "install" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env_prefixes": { "PATH": [ "[START_DIR]/node/node/bin" @@ -131,7 +35,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -141,7 +45,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie1.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -296,7 +200,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -306,7 +210,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie2.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", @@ -461,7 +365,7 @@ { "cmd": [ "[START_DIR]/node/node/bin/node", - "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", + "[START_DIR]/skia/tools/skottie-wasm-perf/skottie-wasm-perf.js", "--canvaskit_js", "[START_DIR]/build/canvaskit.js", "--canvaskit_wasm", @@ -471,7 +375,7 @@ "--output", "[CLEANUP]/g3_try_tmp_1/lottie3.json" ], - "cwd": "[START_DIR]/cache/work/skia/tools/skottie-wasm-perf", + "cwd": "[START_DIR]/skia/tools/skottie-wasm-perf", "env": { "CHROME_HEADLESS": "1", "DISPLAY": ":0", diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/unrecognized_builder.json b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/unrecognized_builder.json index 37583de9ebb4..80b85caa2e97 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/unrecognized_builder.json +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.expected/unrecognized_builder.json @@ -1,98 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -129,7 +35,7 @@ " arg_names, **additional_args)", " File \"RECIPE_REPO[recipe_engine]/recipe_engine/internal/property_invoker.py\", in _invoke_with_properties", " return callable_obj(*props, **additional_args)", - " File \"RECIPE_REPO[skia]/infra/bots/recipes/perf_skottiewasm_lottieweb.py\", line 129, in RunSteps", + " File \"RECIPE_REPO[skia]/infra/bots/recipes/perf_skottiewasm_lottieweb.py\", line 128, in RunSteps", " raise Exception('Could not recognize the buildername %s' % buildername)", "Exception: Could not recognize the buildername Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-Unrecognized" ] diff --git a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.py b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.py index d061a503564e..e67486eda105 100644 --- a/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.py +++ b/third_party/skia/infra/bots/recipes/perf_skottiewasm_lottieweb.py @@ -83,8 +83,7 @@ def RunSteps(api): api.vars.setup() api.flavor.setup() - checkout_root = api.checkout.default_checkout_root - api.checkout.bot_update(checkout_root=checkout_root) + checkout_root = api.path['start_dir'] buildername = api.properties['buildername'] node_path = api.path['start_dir'].join('node', 'node', 'bin', 'node') lottie_files = api.file.listdir( diff --git a/third_party/skia/infra/bots/recipes/recreate_skps.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json b/third_party/skia/infra/bots/recipes/recreate_skps.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json index 26eff2621ef2..79f530ea33b3 100644 --- a/third_party/skia/infra/bots/recipes/recreate_skps.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json +++ b/third_party/skia/infra/bots/recipes/recreate_skps.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipes/recreate_skps.expected/Housekeeper-Weekly-RecreateSKPs.json b/third_party/skia/infra/bots/recipes/recreate_skps.expected/Housekeeper-Weekly-RecreateSKPs.json index ac43ed94216d..0176280e635c 100644 --- a/third_party/skia/infra/bots/recipes/recreate_skps.expected/Housekeeper-Weekly-RecreateSKPs.json +++ b/third_party/skia/infra/bots/recipes/recreate_skps.expected/Housekeeper-Weekly-RecreateSKPs.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipes/recreate_skps.expected/failed_upload.json b/third_party/skia/infra/bots/recipes/recreate_skps.expected/failed_upload.json index 4c81389d54fb..a50329562d12 100644 --- a/third_party/skia/infra/bots/recipes/recreate_skps.expected/failed_upload.json +++ b/third_party/skia/infra/bots/recipes/recreate_skps.expected/failed_upload.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench.json b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench.json index c409049d4335..834adef1f2d6 100644 --- a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench.json +++ b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench.json @@ -56,7 +56,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json index 09ed82f860a5..07e39e62820c 100644 --- a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json +++ b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json @@ -56,7 +56,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get mskp VERSION" + "name": "Get mskp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench.json b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench.json index 2b8c086ccf0e..f15b8365abb5 100644 --- a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench.json +++ b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLRecord_9x9.json b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLRecord_9x9.json index 90fb82091a76..6d36b87054ab 100644 --- a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLRecord_9x9.json +++ b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLRecord_9x9.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9.json b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9.json index 556f50651f0e..c7aa4e79dded 100644 --- a/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9.json +++ b/third_party/skia/infra/bots/recipes/skpbench.expected/Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/skpbench.expected/trybot.json b/third_party/skia/infra/bots/recipes/skpbench.expected/trybot.json index 8f74c6f102f8..01dc18a0d3d3 100644 --- a/third_party/skia/infra/bots/recipes/skpbench.expected/trybot.json +++ b/third_party/skia/infra/bots/recipes/skpbench.expected/trybot.json @@ -56,7 +56,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-GCC-x86_64-Release-Flutter_Android.json b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-arm-Release-Flutter_Android.json similarity index 89% rename from third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-GCC-x86_64-Release-Flutter_Android.json rename to third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-arm-Release-Flutter_Android.json index dfbd968c9c21..ce40af5ce6a1 100644 --- a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-GCC-x86_64-Release-Flutter_Android.json +++ b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-arm-Release-Flutter_Android.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-universal-devrel-Android_SKQP.json b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-universal-devrel-Android_SKQP.json index 53774b411d33..a964d4c00958 100644 --- a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-universal-devrel-Android_SKQP.json +++ b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-universal-devrel-Android_SKQP.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", diff --git a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-x86_64-Release-ParentRevision.json b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-x86_64-Release-ParentRevision.json deleted file mode 100644 index 82e088bfaa3a..000000000000 --- a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Debian9-Clang-x86_64-Release-ParentRevision.json +++ /dev/null @@ -1,207 +0,0 @@ -[ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123^" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123^\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/tmp" - ], - "infra_step": true, - "name": "makedirs tmp_dir" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "[START_DIR]/cache/work/skia/infra/bots/assets/clang_linux/VERSION", - "/path/to/tmp/" - ], - "infra_step": true, - "name": "Get clang_linux VERSION" - }, - { - "cmd": [ - "python", - "-u", - "[START_DIR]/cache/work/skia/bin/fetch-gn" - ], - "cwd": "[START_DIR]/cache/work/skia", - "env": { - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "infra_step": true, - "name": "fetch-gn" - }, - { - "cmd": [ - "[START_DIR]/cache/work/skia/bin/gn", - "gen", - "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-x86_64-Release-ParentRevision/Release", - "--args=cc=\"[START_DIR]/clang_linux/bin/clang\" cxx=\"[START_DIR]/clang_linux/bin/clang++\" extra_cflags=[\"-B[START_DIR]/clang_linux/bin\", \"-DDUMMY_clang_linux_version=42\"] extra_ldflags=[\"-B[START_DIR]/clang_linux/bin\", \"-fuse-ld=lld\"] is_debug=false target_cpu=\"x86_64\" werror=true" - ], - "cwd": "[START_DIR]/cache/work/skia", - "env": { - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "name": "gn gen" - }, - { - "cmd": [ - "ninja", - "-C", - "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-x86_64-Release-ParentRevision/Release" - ], - "cwd": "[START_DIR]/cache/work/skia", - "env": { - "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" - }, - "name": "ninja" - }, - { - "cmd": [ - "python", - "-u", - "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", - "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-x86_64-Release-ParentRevision/Release", - "[START_DIR]/[SWARM_OUT_DIR]/ParentRevision" - ], - "infra_step": true, - "name": "copy build products", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import glob@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@for pattern in build_products:@@@", - "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", - "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", - "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", - "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", - "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", - "@@@STEP_LOG_END@python.inline@@@" - ] - }, - { - "name": "$result" - } -] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json index 3742c951e773..a58d95c0806d 100644 --- a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json +++ b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "vpython", @@ -131,7 +156,7 @@ "cmd": [], "name": "ensure xcode", "~followup_annotations": [ - "@@@STEP_TEXT@Ensuring Xcode version 10g8 in [START_DIR]/cache/Xcode.app@@@" + "@@@STEP_TEXT@Ensuring Xcode version 11c29 in [START_DIR]/cache/Xcode.app@@@" ] }, { @@ -141,7 +166,7 @@ "-kind", "ios", "-xcode-version", - "10g8", + "11c29", "-output-dir", "[START_DIR]/cache/Xcode.app" ], @@ -202,7 +227,7 @@ "[START_DIR]/cache/work/skia/bin/gn", "gen", "[START_DIR]/cache/work/skia/out/Build-Mac-Clang-x86_64-Debug-CommandBuffer/Debug", - "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=10g8\", \"-O1\"] skia_gl_standard=\"\" target_cpu=\"x86_64\" werror=true" + "--args=cc=\"clang\" cxx=\"clang++\" extra_cflags=[\"-DDUMMY_xcode_build_version=11c29\", \"-O1\"] skia_gl_standard=\"\" target_cpu=\"x86_64\" werror=true" ], "cwd": "[START_DIR]/cache/work/skia", "env": { diff --git a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Win10-Clang-x86_64-Release-NoDEPS.json b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Win10-Clang-x86_64-Release-NoDEPS.json index 2306532c8096..01d8b895c6ac 100644 --- a/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Win10-Clang-x86_64-Release-NoDEPS.json +++ b/third_party/skia/infra/bots/recipes/sync_and_compile.expected/Build-Win10-Clang-x86_64-Release-NoDEPS.json @@ -1,4 +1,29 @@ [ + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\n\nwhich = 'where' if sys.platform == 'win32' else 'which'\ngit = subprocess.check_output([which, 'git'])\nprint 'git was found at %s' % git\nif 'cipd_bin_packages' not in git:\n print >> sys.stderr, 'Git must be obtained through CIPD.'\n sys.exit(1)\n" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ";RECIPE_REPO[depot_tools]" + }, + "name": "Assert that Git is from CIPD", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@which = 'where' if sys.platform == 'win32' else 'which'@@@", + "@@@STEP_LOG_LINE@python.inline@git = subprocess.check_output([which, 'git'])@@@", + "@@@STEP_LOG_LINE@python.inline@print 'git was found at %s' % git@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cipd_bin_packages' not in git:@@@", + "@@@STEP_LOG_LINE@python.inline@ print >> sys.stderr, 'Git must be obtained through CIPD.'@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, { "cmd": [ "python", @@ -89,7 +114,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get clang_win VERSION" + "name": "Get clang_win VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/sync_and_compile.py b/third_party/skia/infra/bots/recipes/sync_and_compile.py index fb3d81e66ed1..03c942d104d5 100644 --- a/third_party/skia/infra/bots/recipes/sync_and_compile.py +++ b/third_party/skia/infra/bots/recipes/sync_and_compile.py @@ -31,7 +31,6 @@ def RunSteps(api): checkout_chromium = False checkout_flutter = False flutter_android = False - parent_rev = False if 'NoDEPS' in api.properties['buildername']: bot_update = False @@ -43,16 +42,13 @@ def RunSteps(api): checkout_flutter = True if 'Android' in api.vars.builder_name: flutter_android = True - if 'ParentRevision' in api.vars.builder_name: - parent_rev = True if bot_update: api.checkout.bot_update( checkout_root=checkout_root, checkout_chromium=checkout_chromium, checkout_flutter=checkout_flutter, - flutter_android=flutter_android, - parent_rev=parent_rev) + flutter_android=flutter_android) else: api.checkout.git(checkout_root=checkout_root) @@ -68,8 +64,6 @@ def RunSteps(api): # TODO(borenet): Move this out of the try/finally. dst = api.vars.swarming_out_dir - if 'ParentRevision' in api.vars.builder_name: - dst = api.vars.swarming_out_dir.join('ParentRevision') api.build.copy_build_products(out_dir=out_dir, dst=dst) if 'SKQP' in api.vars.extra_tokens: wlist = checkout_root.join( @@ -94,8 +88,7 @@ def RunSteps(api): TEST_BUILDERS = [ 'Build-Debian9-Clang-universal-devrel-Android_SKQP', - 'Build-Debian9-Clang-x86_64-Release-ParentRevision', - 'Build-Debian9-GCC-x86_64-Release-Flutter_Android', + 'Build-Debian9-Clang-arm-Release-Flutter_Android', 'Build-Mac-Clang-x86_64-Debug-CommandBuffer', 'Build-Win10-Clang-x86_64-Release-NoDEPS', ] diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json index eb67ee450863..0588c3802d80 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -926,7 +938,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 _ bleed _ gm _ bleed_alpha_bmp _ gm _ bleed_alpha_bmp_shader _ gm _ bleed_alpha_image _ gm _ bleed_alpha_image_shader _ gm _ bleed_image _ 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; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 _ bleed _ gm _ bleed_alpha_bmp _ gm _ bleed_alpha_bmp_shader _ gm _ bleed_alpha_image _ gm _ bleed_alpha_image_shader _ gm _ bleed_image _ 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; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/dm.sh" ], "env": { @@ -936,7 +948,7 @@ "infra_step": true, "name": "write dm.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 _ bleed _ gm _ bleed_alpha_bmp _ gm _ bleed_alpha_bmp_shader _ gm _ bleed_alpha_image _ gm _ bleed_alpha_image_shader _ gm _ bleed_image _ 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; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 _ bleed _ gm _ bleed_alpha_bmp _ gm _ bleed_alpha_bmp_shader _ gm _ bleed_alpha_image _ gm _ bleed_alpha_image_shader _ gm _ bleed_image _ 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; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@dm.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android.json index 71636e2e566b..c7ef51add725 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -884,7 +896,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android model GalaxyS6 os Android style default --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 ~SpecialImage ~skbug6653 --nonativeFonts --verbose; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android model GalaxyS6 os Android style default --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 ~SpecialImage ~skbug6653 --nonativeFonts --verbose; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/dm.sh" ], "env": { @@ -894,7 +906,7 @@ "infra_step": true, "name": "write dm.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android model GalaxyS6 os Android style default --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 ~SpecialImage ~skbug6653 --nonativeFonts --verbose; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android model GalaxyS6 os Android style default --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 ~SpecialImage ~skbug6653 --nonativeFonts --verbose; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@dm.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads.json index caa8cb6ad671..a6d3749a6f7a 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -884,7 +896,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android_NoGPUThreads model GalaxyS6 os Android style default --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --gpuThreads 0 --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 ~SpecialImage ~skbug6653 --nonativeFonts --verbose; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android_NoGPUThreads model GalaxyS6 os Android style default --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --gpuThreads 0 --blacklist _ test _ ProcessorCloneTest _ test _ Programs _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 ~SpecialImage ~skbug6653 --nonativeFonts --verbose; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/dm.sh" ], "env": { @@ -894,7 +906,7 @@ "infra_step": true, "name": "write dm.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android_NoGPUThreads model GalaxyS6 os Android style default --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --gpuThreads 0 --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 ~SpecialImage ~skbug6653 --nonativeFonts --verbose; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android_NoGPUThreads model GalaxyS6 os Android style default --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --gpuThreads 0 --blacklist _ test _ ProcessorCloneTest _ test _ Programs _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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 ~SpecialImage ~skbug6653 --nonativeFonts --verbose; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@dm.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan.json index 7ba31b2f7f5d..936d10599a66 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-MotoG4-CPU-Snapdragon617-arm-Release-All-Android.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-MotoG4-CPU-Snapdragon617-arm-Release-All-Android.json index 342dfc02707f..c52007b47abe 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-MotoG4-CPU-Snapdragon617-arm-Release-All-Android.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-MotoG4-CPU-Snapdragon617-arm-Release-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR.json index 7afc1fbb741b..2457d247bd87 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android.json index 6d4942a6e600..f5e4d928ebf6 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -926,7 +938,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/dm.sh" ], "env": { @@ -936,7 +948,7 @@ "infra_step": true, "name": "write dm.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@dm.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Nexus7-CPU-Tegra3-arm-Release-All-Android.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Nexus7-CPU-Tegra3-arm-Release-All-Android.json index 5b358ad84742..e8ca7e759bd5 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Nexus7-CPU-Tegra3-arm-Release-All-Android.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Nexus7-CPU-Tegra3-arm-Release-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json index a34f3ef0c683..767023ddc4dd 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json @@ -229,7 +229,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -427,7 +431,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -625,7 +633,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan.json index 1bcac91858a5..24ea64290bd6 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android.json index b620390e8fa3..cab9e4edb9cc 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan.json index 04caf499ce5c..8f71f9189a4c 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android.json new file mode 100644 index 000000000000..46728eb74c66 --- /dev/null +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android.json @@ -0,0 +1,1142 @@ +[ + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/tmp" + ], + "infra_step": true, + "name": "makedirs tmp_dir" + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "mkdir", + "-p", + "/sdcard/revenge_of_the_skiabot/resources" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "mkdir /sdcard/revenge_of_the_skiabot/resources" + }, + { + "cmd": [], + "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "listdir", + "[START_DIR]/skia/resources", + "--recursive" + ], + "infra_step": true, + "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources.list [START_DIR]/skia/resources", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skia/resources/.file3@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skia/resources/.ignore/file4@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skia/resources/file1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skia/resources/subdir/file2@@@", + "@@@STEP_LOG_END@listdir@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skia/resources/.file3", + "/sdcard/revenge_of_the_skiabot/resources/.file3" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources.push [START_DIR]/skia/resources/.file3", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skia/resources/file1", + "/sdcard/revenge_of_the_skiabot/resources/file1" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources.push [START_DIR]/skia/resources/file1", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skia/resources/subdir/file2", + "/sdcard/revenge_of_the_skiabot/resources/subdir/file2" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources.push [START_DIR]/skia/resources/subdir/file2", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SKP_VERSION" + ], + "infra_step": true, + "name": "write SKP_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", + "@@@STEP_LOG_END@SKP_VERSION@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "cat", + "/sdcard/revenge_of_the_skiabot/SKP_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-f", + "/sdcard/revenge_of_the_skiabot/SKP_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-rf", + "/sdcard/revenge_of_the_skiabot/skps" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/skps" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "mkdir", + "-p", + "/sdcard/revenge_of_the_skiabot/skps" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "mkdir /sdcard/revenge_of_the_skiabot/skps" + }, + { + "cmd": [], + "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "listdir", + "[START_DIR]/skp", + "--recursive" + ], + "infra_step": true, + "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps.list [START_DIR]/skp", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skp/.file3@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skp/.ignore/file4@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skp/file1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skp/subdir/file2@@@", + "@@@STEP_LOG_END@listdir@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skp/.file3", + "/sdcard/revenge_of_the_skiabot/skps/.file3" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps.push [START_DIR]/skp/.file3", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skp/file1", + "/sdcard/revenge_of_the_skiabot/skps/file1" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps.push [START_DIR]/skp/file1", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skp/subdir/file2", + "/sdcard/revenge_of_the_skiabot/skps/subdir/file2" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps.push [START_DIR]/skp/subdir/file2", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/tmp/SKP_VERSION", + "/sdcard/revenge_of_the_skiabot/SKP_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SK_IMAGE_VERSION" + ], + "infra_step": true, + "name": "write SK_IMAGE_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@", + "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "cat", + "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-f", + "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-rf", + "/sdcard/revenge_of_the_skiabot/images" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/images" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "mkdir", + "-p", + "/sdcard/revenge_of_the_skiabot/images" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "mkdir /sdcard/revenge_of_the_skiabot/images" + }, + { + "cmd": [], + "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "listdir", + "[START_DIR]/skimage", + "--recursive" + ], + "infra_step": true, + "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images.list [START_DIR]/skimage", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skimage/.file3@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skimage/.ignore/file4@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skimage/file1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/skimage/subdir/file2@@@", + "@@@STEP_LOG_END@listdir@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skimage/.file3", + "/sdcard/revenge_of_the_skiabot/images/.file3" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images.push [START_DIR]/skimage/.file3", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skimage/file1", + "/sdcard/revenge_of_the_skiabot/images/file1" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images.push [START_DIR]/skimage/file1", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/skimage/subdir/file2", + "/sdcard/revenge_of_the_skiabot/images/subdir/file2" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images.push [START_DIR]/skimage/subdir/file2", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/tmp/SK_IMAGE_VERSION", + "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/svg/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SVG_VERSION" + ], + "infra_step": true, + "name": "write SVG_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", + "@@@STEP_LOG_END@SVG_VERSION@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "cat", + "/sdcard/revenge_of_the_skiabot/SVG_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-f", + "/sdcard/revenge_of_the_skiabot/SVG_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-rf", + "/sdcard/revenge_of_the_skiabot/svgs" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/svgs" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "mkdir", + "-p", + "/sdcard/revenge_of_the_skiabot/svgs" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs" + }, + { + "cmd": [], + "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "listdir", + "[START_DIR]/svg", + "--recursive" + ], + "infra_step": true, + "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs.list [START_DIR]/svg", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/svg/.file3@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/svg/.ignore/file4@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/svg/file1@@@", + "@@@STEP_LOG_LINE@listdir@[START_DIR]/svg/subdir/file2@@@", + "@@@STEP_LOG_END@listdir@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/svg/.file3", + "/sdcard/revenge_of_the_skiabot/svgs/.file3" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs.push [START_DIR]/svg/.file3", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/svg/file1", + "/sdcard/revenge_of_the_skiabot/svgs/file1" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs.push [START_DIR]/svg/file1", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/svg/subdir/file2", + "/sdcard/revenge_of_the_skiabot/svgs/subdir/file2" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs.push [START_DIR]/svg/subdir/file2", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/tmp/SVG_VERSION", + "/sdcard/revenge_of_the_skiabot/SVG_VERSION" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "rmtree", + "[START_DIR]/test" + ], + "infra_step": true, + "name": "rmtree test" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/test" + ], + "infra_step": true, + "name": "makedirs test" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "rm", + "-rf", + "/sdcard/revenge_of_the_skiabot/dm_out" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "rm /sdcard/revenge_of_the_skiabot/dm_out" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "shell", + "mkdir", + "-p", + "/sdcard/revenge_of_the_skiabot/dm_out" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "mkdir /sdcard/revenge_of_the_skiabot/dm_out" + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = sys.argv[1]\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[2], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "https://example.com/hashes.txt", + "[START_DIR]/tmp/uninteresting_hashes.txt" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[2], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/tmp/uninteresting_hashes.txt", + "/sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push [START_DIR]/tmp/uninteresting_hashes.txt /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt" + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\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\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", + "/usr/bin/adb.1.0.35", + "0", + "performance" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "Set CPU 0's governor to performance", + "timeout": 30, + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", + "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", + "@@@STEP_LOG_LINE@python.inline@print log@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/build/dm", + "/data/local/tmp/" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push dm" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", + "[START_DIR]/tmp/dm.sh" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "write dm.sh", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_END@dm.sh@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "push", + "[START_DIR]/tmp/dm.sh", + "/data/local/tmp/" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "push dm.sh" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "logcat", + "-c" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "clear log" + }, + { + "cmd": [ + "python", + "-u", + "\nimport subprocess\nimport sys\nbin_dir = sys.argv[1]\nsh = sys.argv[2]\nsubprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])\ntry:\n sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', 'shell', 'cat',\n bin_dir + 'rc'])))\nexcept ValueError:\n print \"Couldn't read the return code. Probably killed for OOM.\"\n sys.exit(1)\n", + "/data/local/tmp/", + "dm.sh" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@sh = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', 'shell', 'cat',@@@", + "@@@STEP_LOG_LINE@python.inline@ bin_dir + 'rc'])))@@@", + "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"Couldn't read the return code. Probably killed for OOM.\"@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "adb pull" + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "pull", + "/sdcard/revenge_of_the_skiabot/dm_out", + "[CLEANUP]/adb_pull_tmp_1" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "adb pull.pull /sdcard/revenge_of_the_skiabot/dm_out", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "glob", + "[CLEANUP]/adb_pull_tmp_1", + "dm_out/*" + ], + "infra_step": true, + "name": "adb pull.list pulled files", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/1.png@@@", + "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/2.png@@@", + "@@@STEP_LOG_END@glob@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[CLEANUP]/adb_pull_tmp_1/1.png", + "[START_DIR]/[SWARM_OUT_DIR]" + ], + "infra_step": true, + "name": "adb pull.copy 1.png", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[CLEANUP]/adb_pull_tmp_1/2.png", + "[START_DIR]/[SWARM_OUT_DIR]" + ], + "infra_step": true, + "name": "adb pull.copy 2.png", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport subprocess\nimport sys\nout = sys.argv[1]\nlog = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])\nfor line in log.split('\\n'):\n tokens = line.split()\n if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':\n addr, path = tokens[-2:]\n local = os.path.join(out, os.path.basename(path))\n if os.path.exists(local):\n sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n line = line.replace(addr, addr + ' ' + sym.strip())\n print line\n", + "[START_DIR]/build" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "dump log", + "timeout": 300, + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])@@@", + "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@", + "@@@STEP_LOG_LINE@python.inline@ tokens = line.split()@@@", + "@@@STEP_LOG_LINE@python.inline@ if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@", + "@@@STEP_LOG_LINE@python.inline@ addr, path = tokens[-2:]@@@", + "@@@STEP_LOG_LINE@python.inline@ local = os.path.join(out, os.path.basename(path))@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(local):@@@", + "@@@STEP_LOG_LINE@python.inline@ sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@", + "@@@STEP_LOG_LINE@python.inline@ line = line.replace(addr, addr + ' ' + sym.strip())@@@", + "@@@STEP_LOG_LINE@python.inline@ print line@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb.1.0.35", + "kill-server" + ], + "cwd": "[START_DIR]/skia", + "env": { + "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "kill adb server" + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android.json index 918d097a0852..d11d6cf2142c 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All.json b/third_party/skia/infra/bots/recipes/test.expected/Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All.json index 49266f973ee2..704fe593c954 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read ssh_machine.json" + "name": "read ssh_machine.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@ssh_machine.json@{\"user_ip\": \"foo@127.0.0.1\"}@@@", + "@@@STEP_LOG_END@ssh_machine.json@@@" + ] }, { "cmd": [ @@ -139,7 +143,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -279,7 +287,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -419,7 +431,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json index a7828e8e96c6..00a1e69855a1 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json @@ -141,7 +141,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json index 772d0bc42b27..e6f7ad15a767 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json @@ -141,7 +141,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker.json new file mode 100644 index 000000000000..c2735636f2ba --- /dev/null +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker.json @@ -0,0 +1,392 @@ +[ + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/tmp" + ], + "infra_step": true, + "name": "makedirs tmp_dir" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SKP_VERSION" + ], + "infra_step": true, + "name": "write SKP_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", + "@@@STEP_LOG_END@SKP_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SK_IMAGE_VERSION" + ], + "infra_step": true, + "name": "write SK_IMAGE_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@", + "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/svg/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SVG_VERSION" + ], + "infra_step": true, + "name": "write SVG_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", + "@@@STEP_LOG_END@SVG_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "rmtree", + "[START_DIR]/test" + ], + "infra_step": true, + "name": "rmtree test" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/test" + ], + "infra_step": true, + "name": "makedirs test" + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = sys.argv[1]\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[2], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "https://example.com/hashes.txt", + "[START_DIR]/tmp/uninteresting_hashes.txt" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[2], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, + { + "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]" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "[START_DIR]/[SWARM_OUT_DIR]" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "Docker setup.chmod 777 [START_DIR]/[SWARM_OUT_DIR]", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "[START_DIR]" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "Docker setup.chmod 755 [START_DIR]", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py" + ], + "env": { + "CHROME_HEADLESS": "1", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "infra_step": true, + "name": "Docker setup.chmod 0755 RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "docker", + "run", + "--shm-size=2gb", + "--rm", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/gcc-debian10@sha256:89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c", + "/SRC/../RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py", + "/SRC", + "catchsegv", + "/SRC/build/dm", + "--resourcePath", + "/SRC/skia/resources", + "--skps", + "/SRC/skp", + "--images", + "/SRC/skimage/dm", + "--colorImages", + "/SRC/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "builder", + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker", + "buildbucket_build_id", + "123454321", + "task_id", + "task_12345", + "swarming_bot_id", + "skia-bot-123", + "swarming_task_id", + "123456", + "--svgs", + "/SRC/svg", + "--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", + "--uninterestingHashesFile", + "/SRC/tmp/uninteresting_hashes.txt", + "--writePath", + "/OUT", + "--dont_write", + "pdf", + "--randomProcessorTest", + "--nogpu", + "--config", + "8888", + "--src", + "tests", + "gm", + "image", + "colorImage", + "--blacklist", + "_", + "image", + "gen_platf", + "error", + "--nonativeFonts", + "--verbose" + ], + "env": { + "CHROME_HEADLESS": "1", + "DOCKER_CONFIG": "/home/chrome-bot/.docker", + "PATH": ":RECIPE_REPO[depot_tools]" + }, + "name": "symbolized dm in Docker" + }, + { + "name": "$result" + } +] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN.json index a09cb22310bd..2716abd32bf9 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -196,7 +208,6 @@ "g8", "565", "pic-8888", - "tiles_rt-8888", "serialize-8888", "f16", "srgb", @@ -598,14 +609,6 @@ "gm", "_", "blurrect_compare", - "tiles_rt-8888", - "gm", - "_", - "complexclip4_bw", - "tiles_rt-8888", - "gm", - "_", - "complexclip4_aa", "--nonativeFonts", "--verbose" ], diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs.json index baf22856eb1a..ab0f2ca02505 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -277,7 +289,6 @@ "g8", "565", "pic-8888", - "tiles_rt-8888", "serialize-8888", "f16", "srgb", @@ -674,14 +685,6 @@ "gm", "_", "blurrect_compare", - "tiles_rt-8888", - "gm", - "_", - "complexclip4_bw", - "tiles_rt-8888", - "gm", - "_", - "complexclip4_aa", "--nonativeFonts", "--verbose" ], diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN.json index c0614ce1bc8f..a1004720d264 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -195,7 +207,6 @@ "g8", "565", "pic-8888", - "tiles_rt-8888", "serialize-8888", "f16", "srgb", @@ -592,14 +603,6 @@ "gm", "_", "blurrect_compare", - "tiles_rt-8888", - "gm", - "_", - "complexclip4_bw", - "tiles_rt-8888", - "gm", - "_", - "complexclip4_aa", "--match", "~Once", "~Shared", diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE.json index fb75337f460f..314954017ef5 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-shard_00_10-Coverage.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-shard_00_10-Coverage.json index bc94533bed26..0594443a13b5 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-shard_00_10-Coverage.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-shard_00_10-Coverage.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie.json index a989ae8fb5b8..29b69e94b6c2 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get lottie-samples VERSION" + "name": "Get lottie-samples VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER.json index 9fa3664362c7..85225c8ef05b 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN.json index 713cebb89585..f65e34abad62 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -196,7 +208,6 @@ "g8", "565", "pic-8888", - "tiles_rt-8888", "serialize-8888", "f16", "srgb", @@ -593,14 +604,6 @@ "gm", "_", "blurrect_compare", - "tiles_rt-8888", - "gm", - "_", - "complexclip4_bw", - "tiles_rt-8888", - "gm", - "_", - "complexclip4_aa", "--match", "~ReadWriteAlpha", "~RGBA4444TextureTest", diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader.json index 62c6c5b05ed3..8fba7534830c 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan.json index 4eb806ceb004..aaae0a3e5736 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan.json index b0e363e03c8a..930e53acdce0 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -438,7 +450,7 @@ ".SRW", "--match", "~VkHeapTests", - "~GLPrograms", + "~Programs", "~^SRGBReadWritePixels$", "--nonativeFonts", "--verbose" diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer.json index 7510ac2ccdb0..7993b9c96be4 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -278,7 +290,7 @@ "_", "test", "_", - "GLPrograms", + "Programs", "_", "svg", "_", diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts.json index f5fe7c5f8d74..3fbf28d200fc 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All.json index 87408413ffee..35ddb92286d8 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-Metal.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-Metal.json index 52e7e0839a02..a9bea12cfa60 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-Metal.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-Metal.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer.json index a41ca3bc1ffc..97f50a759c19 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All.json index 81472eb8dd72..abff3d921220 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_Coverage.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_Coverage.json deleted file mode 100644 index 224690b99f02..000000000000 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_Coverage.json +++ /dev/null @@ -1,324 +0,0 @@ -[ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/tmp" - ], - "infra_step": true, - "name": "makedirs tmp_dir" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "[START_DIR]/skia/infra/bots/assets/skp/VERSION", - "/path/to/tmp/" - ], - "infra_step": true, - "name": "Get skp VERSION" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "42", - "[START_DIR]/tmp/SKP_VERSION" - ], - "infra_step": true, - "name": "write SKP_VERSION", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", - "@@@STEP_LOG_END@SKP_VERSION@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", - "/path/to/tmp/" - ], - "infra_step": true, - "name": "Get skimage VERSION" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "42", - "[START_DIR]/tmp/SK_IMAGE_VERSION" - ], - "infra_step": true, - "name": "write SK_IMAGE_VERSION", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@", - "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "[START_DIR]/skia/infra/bots/assets/svg/VERSION", - "/path/to/tmp/" - ], - "infra_step": true, - "name": "Get svg VERSION" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "copy", - "42", - "[START_DIR]/tmp/SVG_VERSION" - ], - "infra_step": true, - "name": "write SVG_VERSION", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", - "@@@STEP_LOG_END@SVG_VERSION@@@" - ] - }, - { - "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" - ], - "name": "get swarming bot id", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" - ] - }, - { - "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" - ], - "name": "get swarming task id", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" - ] - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py", - "[START_DIR]", - "catchsegv", - "[START_DIR]/build/dm", - "--resourcePath", - "[START_DIR]/skia/resources", - "--skps", - "[START_DIR]/skp", - "--images", - "[START_DIR]/skimage/dm", - "--colorImages", - "[START_DIR]/skimage/colorspace", - "--nameByHash", - "--properties", - "gitHash", - "abc123", - "builder", - "Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_Coverage", - "buildbucket_build_id", - "123454321", - "task_id", - "task_12345", - "swarming_bot_id", - "skia-bot-123", - "swarming_task_id", - "123456", - "--svgs", - "[START_DIR]/svg", - "--key", - "arch", - "x86_64", - "compiler", - "Clang", - "configuration", - "Debug", - "cpu_or_gpu", - "GPU", - "cpu_or_gpu_value", - "QuadroP400", - "extra_config", - "Vulkan_Coverage", - "model", - "Golo", - "os", - "Ubuntu17", - "style", - "default", - "--dont_write", - "pdf", - "--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" - ], - "cwd": "[START_DIR]/skia", - "env": { - "CHROME_HEADLESS": "1", - "LD_LIBRARY_PATH": "[START_DIR]/linux_vulkan_sdk/lib", - "LLVM_PROFILE_FILE": "[START_DIR]/[SWARM_OUT_DIR]/All.profraw", - "PATH": ":RECIPE_REPO[depot_tools]:[START_DIR]/linux_vulkan_sdk/bin" - }, - "name": "symbolized dm" - }, - { - "name": "$result" - } -] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1.json similarity index 95% rename from third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1.json rename to third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1.json index 54c48f246555..cd54544ba3d3 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -233,7 +245,7 @@ "gitHash", "abc123", "builder", - "Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1", "buildbucket_build_id", "123454321", "task_id", @@ -260,7 +272,7 @@ "model", "Golo", "os", - "Ubuntu17", + "Ubuntu18", "style", "DDL", "--uninterestingHashesFile", diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3.json similarity index 95% rename from third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3.json rename to third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3.json index 4af4d1f69760..c301cf4e1600 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -233,7 +245,7 @@ "gitHash", "abc123", "builder", - "Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3", "buildbucket_build_id", "123454321", "task_id", @@ -260,7 +272,7 @@ "model", "Golo", "os", - "Ubuntu17", + "Ubuntu18", "style", "DDL", "--uninterestingHashesFile", diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Lottie.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan.json similarity index 76% rename from third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Lottie.json rename to third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan.json index a50d74d30d03..e70d132aa731 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Lottie.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan.json @@ -22,11 +22,87 @@ "--json-output", "/path/to/tmp/json", "copy", - "[START_DIR]/skia/infra/bots/assets/lottie-samples/VERSION", + "[START_DIR]/skia/infra/bots/assets/skp/VERSION", "/path/to/tmp/" ], "infra_step": true, - "name": "Get lottie-samples VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SKP_VERSION" + ], + "infra_step": true, + "name": "write SKP_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", + "@@@STEP_LOG_END@SKP_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "42", + "[START_DIR]/tmp/SK_IMAGE_VERSION" + ], + "infra_step": true, + "name": "write SK_IMAGE_VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@", + "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/skia/infra/bots/assets/svg/VERSION", + "/path/to/tmp/" + ], + "infra_step": true, + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -37,13 +113,13 @@ "/path/to/tmp/json", "copy", "42", - "[START_DIR]/tmp/LOTTIE_VERSION" + "[START_DIR]/tmp/SVG_VERSION" ], "infra_step": true, - "name": "write LOTTIE_VERSION", + "name": "write SVG_VERSION", "~followup_annotations": [ - "@@@STEP_LOG_LINE@LOTTIE_VERSION@42@@@", - "@@@STEP_LOG_END@LOTTIE_VERSION@@@" + "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", + "@@@STEP_LOG_END@SVG_VERSION@@@" ] }, { @@ -169,7 +245,7 @@ "gitHash", "abc123", "builder", - "Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Lottie", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan", "buildbucket_build_id", "123454321", "task_id", @@ -180,9 +256,6 @@ "123456", "--svgs", "[START_DIR]/svg", - "--lotties", - "[START_DIR]/skia/resources/skottie", - "[START_DIR]/lottie-samples", "--key", "arch", "x86_64", @@ -195,13 +268,11 @@ "cpu_or_gpu_value", "QuadroP400", "extra_config", - "Lottie", + "Vulkan", "model", "Golo", "os", - "Ubuntu17", - "renderer", - "skottie", + "Ubuntu18", "style", "default", "--uninterestingHashesFile", @@ -213,50 +284,20 @@ "--randomProcessorTest", "--nocpu", "--config", - "gl", + "vk", + "vkmsaa8", + "vk1010102", "--src", - "lottie", + "tests", + "gm", + "image", + "colorImage", + "svg", "--blacklist", - "gl1010102", + "vk1010102", "image", "_", "_", - "gltestpersistentcache", - "gm", - "_", - "atlastext", - "gltestpersistentcache", - "gm", - "_", - "dftext", - "gltestpersistentcache", - "gm", - "_", - "glyph_pos_h_b", - "gltestglslcache", - "gm", - "_", - "atlastext", - "gltestglslcache", - "gm", - "_", - "dftext", - "gltestglslcache", - "gm", - "_", - "glyph_pos_h_b", - "gltestprecompile", - "gm", - "_", - "atlastext", - "gltestprecompile", - "gm", - "_", - "dftext", - "gltestprecompile", - "gm", - "_", - "glyph_pos_h_b", "_", "svg", "_", @@ -363,7 +404,8 @@ "cwd": "[START_DIR]/skia", "env": { "CHROME_HEADLESS": "1", - "PATH": ":RECIPE_REPO[depot_tools]" + "LD_LIBRARY_PATH": "[START_DIR]/linux_vulkan_sdk/lib", + "PATH": ":RECIPE_REPO[depot_tools]:[START_DIR]/linux_vulkan_sdk/bin" }, "name": "symbolized dm" }, diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json similarity index 92% rename from third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json rename to third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json index c09ec4a9ab20..4e1172e3ccaa 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -159,7 +171,7 @@ "gitHash", "abc123", "builder", - "Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41", "buildbucket_build_id", "123454321", "task_id", @@ -174,7 +186,7 @@ "arch", "x86_64", "compiler", - "GCC", + "Clang", "configuration", "Release", "cpu_or_gpu", @@ -186,7 +198,7 @@ "model", "Golo", "os", - "Ubuntu17", + "Ubuntu18", "style", "default", "--dont_write", diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41.json similarity index 91% rename from third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41.json rename to third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41.json index d9cbf73839da..ea023b0b2002 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -159,7 +171,7 @@ "gitHash", "abc123", "builder", - "Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41", "buildbucket_build_id", "123454321", "task_id", @@ -174,7 +186,7 @@ "arch", "x86_64", "compiler", - "GCC", + "Clang", "configuration", "Release", "cpu_or_gpu", @@ -186,7 +198,7 @@ "model", "Golo", "os", - "Ubuntu17", + "Ubuntu18", "style", "default", "--dont_write", diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR.json index c86e0b808490..6073ae822541 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs.json index a95fad927b56..beae7afe0f90 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext.json index 47249c6255f3..0a4b0da7afbb 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts_GDI.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts_GDI.json index 6947f44c6723..15aa390cb896 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts_GDI.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts_GDI.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE.json index 13c4742d3b49..b7b76bd77407 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE.json index 624ff54b915a..a1c160d6840b 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan.json index 676f2bd16300..438b7bb0e2e0 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan.json index 35589fa9ab54..6f5263f35eee 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE.json index d55f153843ec..e8721fc5eb6c 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE.json index 1ed383badccd..c0e643aec62b 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "read ssh_machine.json" + "name": "read ssh_machine.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@ssh_machine.json@{\"user_ip\": \"foo@127.0.0.1\"}@@@", + "@@@STEP_LOG_END@ssh_machine.json@@@" + ] }, { "cmd": [ @@ -179,7 +183,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -233,7 +241,8 @@ "infra_step": true, "name": "read C:\\Users\\chrome-bot\\botdata\\SKP_VERSION.read SKP_VERSION", "~followup_annotations": [ - "@@@STEP_NEST_LEVEL@1@@@" + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_END@SKP_VERSION@@@" ] }, { @@ -352,7 +361,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -406,7 +419,8 @@ "infra_step": true, "name": "read C:\\Users\\chrome-bot\\botdata\\SK_IMAGE_VERSION.read SK_IMAGE_VERSION", "~followup_annotations": [ - "@@@STEP_NEST_LEVEL@1@@@" + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" ] }, { @@ -525,7 +539,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -579,7 +597,8 @@ "infra_step": true, "name": "read C:\\Users\\chrome-bot\\botdata\\SVG_VERSION.read SVG_VERSION", "~followup_annotations": [ - "@@@STEP_NEST_LEVEL@1@@@" + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_LOG_END@SVG_VERSION@@@" ] }, { @@ -895,7 +914,7 @@ "-u", "RECIPE_MODULE[skia::flavor]/resources/win_ssh_cmd.py", "foo@127.0.0.1", - "powershell -ExecutionPolicy Unrestricted -File C:\\Users\\chrome-bot\\botdata\\bin\\win_run_and_check_log.ps1 C:\\Users\\chrome-bot\\botdata\\bin\\dm --resourcePath C:\\Users\\chrome-bot\\botdata\\resources --skps C:\\Users\\chrome-bot\\botdata\\skps --images C:\\Users\\chrome-bot\\botdata\\images\\dm --colorImages C:\\Users\\chrome-bot\\botdata\\images\\colorspace --nameByHash --properties gitHash abc123 builder Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs C:\\Users\\chrome-bot\\botdata\\svgs --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 --uninterestingHashesFile C:\\Users\\chrome-bot\\botdata\\uninteresting_hashes.txt --writePath C:\\Users\\chrome-bot\\botdata\\dm_out --dont_write pdf --randomProcessorTest --nocpu --config angle_d3d11_es3 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 _ tests _ GLPrograms _ tests _ GrDefaultPathRendererTest _ tests _ PinnedImageTest --match ~BlurMaskBiggerThanDest --nonativeFonts --verbose", + "powershell -ExecutionPolicy Unrestricted -File C:\\Users\\chrome-bot\\botdata\\bin\\win_run_and_check_log.ps1 C:\\Users\\chrome-bot\\botdata\\bin\\dm --resourcePath C:\\Users\\chrome-bot\\botdata\\resources --skps C:\\Users\\chrome-bot\\botdata\\skps --images C:\\Users\\chrome-bot\\botdata\\images\\dm --colorImages C:\\Users\\chrome-bot\\botdata\\images\\colorspace --nameByHash --properties gitHash abc123 builder Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs C:\\Users\\chrome-bot\\botdata\\svgs --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 --uninterestingHashesFile C:\\Users\\chrome-bot\\botdata\\uninteresting_hashes.txt --writePath C:\\Users\\chrome-bot\\botdata\\dm_out --dont_write pdf --randomProcessorTest --nocpu --config angle_d3d11_es3 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 _ tests _ Programs _ tests _ GrDefaultPathRendererTest _ tests _ PinnedImageTest --match ~BlurMaskBiggerThanDest --nonativeFonts --verbose", "1" ], "env": { diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA.json index bda0989ab3ba..87ec6072ab63 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA.json b/third_party/skia/infra/bots/recipes/test.expected/Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA.json index 82ac49662903..098ba8dc567d 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All.json b/third_party/skia/infra/bots/recipes/test.expected/Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All.json index d46fc0923dfa..e601c6e6e8d2 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All.json @@ -88,7 +88,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -214,7 +218,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -340,7 +348,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal.json b/third_party/skia/infra/bots/recipes/test.expected/Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal.json index 0cfd6f744717..d8efd1814e23 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal.json +++ b/third_party/skia/infra/bots/recipes/test.expected/Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal.json @@ -88,7 +88,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -214,7 +218,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -340,7 +348,11 @@ "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice" }, "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.expected/failed_dm.json b/third_party/skia/infra/bots/recipes/test.expected/failed_dm.json index 32a9ff93667b..0cc34e6144a5 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/failed_dm.json +++ b/third_party/skia/infra/bots/recipes/test.expected/failed_dm.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -233,7 +245,7 @@ "gitHash", "abc123", "builder", - "Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All", + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All", "buildbucket_build_id", "123454321", "task_id", @@ -248,7 +260,7 @@ "arch", "x86_64", "compiler", - "GCC", + "Clang", "configuration", "Debug", "cpu_or_gpu", diff --git a/third_party/skia/infra/bots/recipes/test.expected/failed_get_hashes.json b/third_party/skia/infra/bots/recipes/test.expected/failed_get_hashes.json index e3a3841737ee..d170cfc5700f 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/failed_get_hashes.json +++ b/third_party/skia/infra/bots/recipes/test.expected/failed_get_hashes.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -940,7 +952,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --threads 0 --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ gm _ savelayer_clipmask _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/dm.sh" ], "env": { @@ -950,7 +962,7 @@ "infra_step": true, "name": "write dm.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --threads 0 --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ gm _ savelayer_clipmask _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@dm.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/test.expected/failed_pull.json b/third_party/skia/infra/bots/recipes/test.expected/failed_pull.json index 96e5a9bb4a98..8ad4527ebfe5 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/failed_pull.json +++ b/third_party/skia/infra/bots/recipes/test.expected/failed_pull.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -939,7 +951,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --threads 0 --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ gm _ savelayer_clipmask _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/dm.sh" ], "env": { @@ -949,7 +961,7 @@ "infra_step": true, "name": "write dm.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --threads 0 --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ gm _ savelayer_clipmask _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@dm.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/test.expected/internal_bot_5.json b/third_party/skia/infra/bots/recipes/test.expected/internal_bot_5.json index a30335ea8720..89da79932d89 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/internal_bot_5.json +++ b/third_party/skia/infra/bots/recipes/test.expected/internal_bot_5.json @@ -139,7 +139,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -337,7 +341,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -535,7 +543,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -897,7 +909,7 @@ "--json-output", "/path/to/tmp/json", "copy", - "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --threads 0 --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ gm _ savelayer_clipmask _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ test _ SRGBReadWritePixels _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", + "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ test _ SRGBReadWritePixels _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc", "[START_DIR]/tmp/dm.sh" ], "env": { @@ -907,7 +919,7 @@ "infra_step": true, "name": "write dm.sh", "~followup_annotations": [ - "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --threads 0 --nocpu --config gles glesdft glessrgb --src tests gm image colorImage svg --blacklist _ test _ ProcessorCloneTest _ test _ GLPrograms _ test _ ProcessorOptimizationValidationTest _ gm _ savelayer_clipmask _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ test _ SRGBReadWritePixels _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", + "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id \"\" swarming_task_id \"\" --svgs /sdcard/revenge_of_the_skiabot/svgs --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 --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --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 _ GrShape _ test _ SRGBReadWritePixels _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ 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; echo $? >/data/local/tmp/rc@@@", "@@@STEP_LOG_END@dm.sh@@@" ] }, diff --git a/third_party/skia/infra/bots/recipes/test.expected/trybot.json b/third_party/skia/infra/bots/recipes/test.expected/trybot.json index 181c057d0479..5225fb12972a 100644 --- a/third_party/skia/infra/bots/recipes/test.expected/trybot.json +++ b/third_party/skia/infra/bots/recipes/test.expected/trybot.json @@ -26,7 +26,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skp VERSION" + "name": "Get skp VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -58,7 +62,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get skimage VERSION" + "name": "Get skimage VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ @@ -90,7 +98,11 @@ "/path/to/tmp/" ], "infra_step": true, - "name": "Get svg VERSION" + "name": "Get svg VERSION", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@VERSION@42@@@", + "@@@STEP_LOG_END@VERSION@@@" + ] }, { "cmd": [ diff --git a/third_party/skia/infra/bots/recipes/test.py b/third_party/skia/infra/bots/recipes/test.py index 1b70e22b5355..a022c1b097f4 100644 --- a/third_party/skia/infra/bots/recipes/test.py +++ b/third_party/skia/infra/bots/recipes/test.py @@ -110,7 +110,7 @@ def blacklist(quad): configs.extend([ 'pdf', 'g8', '565', - 'pic-8888', 'tiles_rt-8888', 'serialize-8888', + 'pic-8888', 'serialize-8888', 'f16', 'srgb', 'esrgb', 'narrow', 'enarrow', 'p3', 'ep3', 'rec2020', 'erec2020']) @@ -125,6 +125,9 @@ def blacklist(quad): # We want to test the OpenGL config not the GLES config on the Shield if 'NVIDIA_Shield' not in bot: gl_prefix = 'gles' + # MSAA is disabled on Pixel3a (https://b.corp.google.com/issues/143074513). + if ('Pixel3a' in bot): + sample_count = '' elif 'Intel' in bot: # MSAA doesn't work well on Intel GPUs chromium:527565, chromium:983926 sample_count = '' @@ -210,12 +213,12 @@ def blacklist(quad): if 'AndroidOne' in bot or ('Nexus' in bot and 'Nexus5x' not in bot) or 'GalaxyS6' in bot: # skbug.com/9019 blacklist('_ test _ ProcessorCloneTest') - blacklist('_ test _ GLPrograms') + blacklist('_ test _ Programs') blacklist('_ test _ ProcessorOptimizationValidationTest') if 'CommandBuffer' in bot and 'MacBook10.1-' in bot: # skbug.com/9235 - blacklist('_ test _ GLPrograms') + blacklist('_ test _ Programs') # skbug.com/9033 - these devices run out of memory on this test # when opList splitting reduction is enabled @@ -323,9 +326,6 @@ def blacklist(quad): args.extend(['--skpViewportSize', "2048"]) args.extend(['--gpuThreads', "0"]) - if 'Lottie' in bot: - configs = ['gl'] - tf = api.vars.builder_cfg.get('test_filter') if 'All' != tf: # Expected format: shard_XX_YY @@ -483,16 +483,6 @@ def remove_from_args(arg): # Android and iOS. skia:5438 blacklist('_ test _ GrShape') - if api.vars.internal_hardware_label == '2': - # skia:7160 - blacklist('_ test _ SRGBReadWritePixels') - blacklist('_ test _ SRGBMipMap') - # skia:9517 - blacklist('_ test _ CharacterizationBackendAllocationTest') - blacklist('_ test _ ColorTypeBackendAllocationTest') - blacklist('_ test _ GLBackendAllocationTest') - blacklist('_ test _ VKBackendAllocationTest') - if api.vars.internal_hardware_label == '5': # http://b/118312149#comment9 blacklist('_ test _ SRGBReadWritePixels') @@ -599,10 +589,6 @@ def remove_from_args(arg): blacklist([ 'pic-8888', 'gm', '_', "blurrect_compare"]) blacklist(['serialize-8888', 'gm', '_', "blurrect_compare"]) - # GM that not support tiles_rt - for test in ['complexclip4_bw', 'complexclip4_aa']: - blacklist([ 'tiles_rt-8888', 'gm', '_', test]) - # Extensions for RAW images r = ['arw', 'cr2', 'dng', 'nef', 'nrw', 'orf', 'raf', 'rw2', 'pef', 'srw', 'ARW', 'CR2', 'DNG', 'NEF', 'NRW', 'ORF', 'RAF', 'RW2', 'PEF', 'SRW'] @@ -718,7 +704,7 @@ def remove_from_args(arg): match.extend(['~VkHeapTests']) # skia:6245 if api.vars.is_linux and 'IntelIris640' in bot: - match.extend(['~GLPrograms']) # skia:7849 + match.extend(['~Programs']) # skia:7849 if 'IntelIris640' in bot or 'IntelHD615' in bot or 'IntelHDGraphics615' in bot: match.append('~^SRGBReadWritePixels$') # skia:9225 @@ -783,7 +769,7 @@ def remove_from_args(arg): if 'LenovoYogaC630' in bot and 'ANGLE' in api.vars.extra_tokens: # skia:9275 - blacklist(['_', 'tests', '_', 'GLPrograms']) + blacklist(['_', 'tests', '_', 'Programs']) # skia:8976 blacklist(['_', 'tests', '_', 'GrDefaultPathRendererTest']) # https://bugs.chromium.org/p/angleproject/issues/detail?id=3414 @@ -1019,6 +1005,7 @@ def RunSteps(api): 'Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN', 'Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android', 'Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan', + 'Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android', ('Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-' 'arm-Debug-All'), 'Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All', @@ -1036,6 +1023,7 @@ def RunSteps(api): 'Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader', 'Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan', 'Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan', + 'Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker', 'Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal', ('Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All' '-NativeFonts'), @@ -1044,14 +1032,13 @@ def RunSteps(api): ('Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All' '-CommandBuffer'), 'Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All', - 'Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_Coverage', - ('Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All' + 'Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan', + ('Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All' '-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41'), - ('Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All' + ('Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All' '-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41'), - 'Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1', - 'Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3', - 'Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Lottie', + 'Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1', + 'Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3', 'Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs', 'Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR', ('Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All' @@ -1136,7 +1123,7 @@ def GenTests(api): ) ) - builder = 'Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All' + builder = 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All' yield ( api.test('failed_dm') + api.properties(buildername=builder, @@ -1238,28 +1225,6 @@ def GenTests(api): api.step_data(retry_step_name + ' (attempt 3)', retcode=1) ) - yield ( - api.test('internal_bot_2') + - api.properties(buildername=builder, - buildbucket_build_id='123454321', - revision='abc123', - path_config='kitchen', - swarm_out_dir='[SWARM_OUT_DIR]', - gold_hashes_url='https://example.com/hashes.txt', - internal_hardware_label='2', - task_id='task_12345') + - api.path.exists( - api.path['start_dir'].join('skia'), - api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', - 'skimage', 'VERSION'), - api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', - 'skp', 'VERSION'), - api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', - 'svg', 'VERSION'), - api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') - ) - ) - yield ( api.test('internal_bot_5') + api.properties(buildername=builder, diff --git a/third_party/skia/infra/bots/recipes/test_canvaskit.expected/Test-Debian9-EMCC-GCE-GPU-WEBGL1-wasm-Debug-All-CanvasKit.json b/third_party/skia/infra/bots/recipes/test_canvaskit.expected/Test-Debian9-EMCC-GCE-GPU-WEBGL1-wasm-Debug-All-CanvasKit.json index 5659e772e3f4..e382257e462b 100644 --- a/third_party/skia/infra/bots/recipes/test_canvaskit.expected/Test-Debian9-EMCC-GCE-GPU-WEBGL1-wasm-Debug-All-CanvasKit.json +++ b/third_party/skia/infra/bots/recipes/test_canvaskit.expected/Test-Debian9-EMCC-GCE-GPU-WEBGL1-wasm-Debug-All-CanvasKit.json @@ -9,10 +9,40 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], "infra_step": true, - "name": "makedirs checkout_path" + "name": "mkdirs copy_dest" + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" }, { "cmd": [ @@ -21,76 +51,51 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" + "chmod", + "777", + "[START_DIR]/[SWARM_OUT_DIR]" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 777 [START_DIR]/[SWARM_OUT_DIR]", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@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/canvaskit/test_canvaskit.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/canvaskit/test_canvaskit.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -103,89 +108,101 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/canvaskit/canvaskit/bin", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/)\ndest = os.path.join(copy_dest, 'canvaskit.js')\nshutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/canvaskit/canvaskit/bin", - "[START_DIR]/build", - "canvaskit.wasm", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/canvaskit.wasm", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/canvaskit.wasm [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'canvaskit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "chmod", + "644", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/canvaskit/canvaskit/bin (2)", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/canvaskit.js", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/canvaskit.js [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -194,11 +211,11 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "gcr.io/skia-public/gold-karma-chrome-tests:72.0.3626.121_v1", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/gold-karma-chrome-tests:77.0.3865.120_v2", "/SRC/skia/infra/canvaskit/test_canvaskit.sh", "--builder", "Test-Debian9-EMCC-GCE-GPU-WEBGL1-wasm-Debug-All-CanvasKit", diff --git a/third_party/skia/infra/bots/recipes/test_canvaskit.expected/canvaskit_trybot.json b/third_party/skia/infra/bots/recipes/test_canvaskit.expected/canvaskit_trybot.json index 1dc1a0efd78b..3b0202b1be4c 100644 --- a/third_party/skia/infra/bots/recipes/test_canvaskit.expected/canvaskit_trybot.json +++ b/third_party/skia/infra/bots/recipes/test_canvaskit.expected/canvaskit_trybot.json @@ -9,10 +9,40 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], "infra_step": true, - "name": "makedirs checkout_path" + "name": "mkdirs copy_dest" + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" }, { "cmd": [ @@ -21,78 +51,51 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--patch_ref", - "https://skia.googlesource.com/skia.git@abc123:89/456789/12", - "--revision", - "skia@abc123" + "chmod", + "777", + "[START_DIR]/[SWARM_OUT_DIR]" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 777 [START_DIR]/[SWARM_OUT_DIR]", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@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/canvaskit/test_canvaskit.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/canvaskit/test_canvaskit.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -105,89 +108,101 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/canvaskit/canvaskit/bin", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/)\ndest = os.path.join(copy_dest, 'canvaskit.js')\nshutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/canvaskit/canvaskit/bin", - "[START_DIR]/build", - "canvaskit.wasm", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/canvaskit.wasm", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/canvaskit.wasm [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'canvaskit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "chmod", + "644", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.wasm", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/canvaskit/canvaskit/bin (2)", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", + "vpython", "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/canvaskit.js", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/canvaskit.js [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js" + ], + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/canvaskit/canvaskit/bin/canvaskit.js", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -196,11 +211,11 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "gcr.io/skia-public/gold-karma-chrome-tests:72.0.3626.121_v1", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/gold-karma-chrome-tests:77.0.3865.120_v2", "/SRC/skia/infra/canvaskit/test_canvaskit.sh", "--builder", "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-CanvasKit", diff --git a/third_party/skia/infra/bots/recipes/test_canvaskit.py b/third_party/skia/infra/bots/recipes/test_canvaskit.py index 9a1fb2e712fb..956e8967e05c 100644 --- a/third_party/skia/infra/bots/recipes/test_canvaskit.py +++ b/third_party/skia/infra/bots/recipes/test_canvaskit.py @@ -6,6 +6,7 @@ DEPS = [ 'checkout', + 'docker', 'env', 'infra', 'recipe_engine/file', @@ -18,102 +19,55 @@ ] -DOCKER_IMAGE = 'gcr.io/skia-public/gold-karma-chrome-tests:72.0.3626.121_v1' -INNER_KARMA_SCRIPT = '/SRC/skia/infra/canvaskit/test_canvaskit.sh' +DOCKER_IMAGE = 'gcr.io/skia-public/gold-karma-chrome-tests:77.0.3865.120_v2' +INNER_KARMA_SCRIPT = 'skia/infra/canvaskit/test_canvaskit.sh' def RunSteps(api): api.vars.setup() - checkout_root = api.checkout.default_checkout_root + checkout_root = api.path['start_dir'] out_dir = api.vars.swarming_out_dir - api.checkout.bot_update(checkout_root=checkout_root) - - # Make sure this exists, otherwise Docker will make it with root permissions. - api.file.ensure_directory('mkdirs out_dir', out_dir, mode=0777) # The karma script is configured to look in ./canvaskit/bin/ for # the test files to load, so we must copy them there (see Set up for docker). copy_dest = checkout_root.join('skia', 'modules', 'canvaskit', 'canvaskit', 'bin') - + api.file.ensure_directory('mkdirs copy_dest', copy_dest, mode=0777) base_dir = api.vars.build_dir - bundle_name = 'canvaskit.wasm' - - api.python.inline( - name='Set up for docker', - program='''import errno -import os -import shutil -import sys - -copy_dest = sys.argv[1] -base_dir = sys.argv[2] -bundle_name = sys.argv[3] -out_dir = sys.argv[4] - -# Clean out old binaries (if any) -try: - shutil.rmtree(copy_dest) -except OSError as e: - if e.errno != errno.ENOENT: - raise - -# Make folder -try: - os.makedirs(copy_dest) -except OSError as e: - if e.errno != errno.EEXIST: - raise - -# Copy binaries (canvaskit.js and canvaskit.wasm) to where the karma tests -# expect them ($SKIA_ROOT/modules/canvaskit/canvaskit/bin/) -dest = os.path.join(copy_dest, 'canvaskit.js') -shutil.copyfile(os.path.join(base_dir, 'canvaskit.js'), dest) -os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read. - -if bundle_name: - dest = os.path.join(copy_dest, bundle_name) - shutil.copyfile(os.path.join(base_dir, bundle_name), dest) - os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read. - -# Prepare output folder, api.file.ensure_directory doesn't touch -# the permissions of the out directory if it already exists. -os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write. -''', - args=[copy_dest, base_dir, bundle_name, out_dir], - infra_step=True) - - - cmd = ['docker', 'run', '--shm-size=2gb', '--rm', - '--volume', '%s:/SRC' % checkout_root, - '--volume', '%s:/OUT' % out_dir] - - cmd.extend([ - DOCKER_IMAGE, INNER_KARMA_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, - '--source_type', 'canvaskit', - ]) - + copies = { + base_dir.join('canvaskit.js'): copy_dest.join('canvaskit.js'), + base_dir.join('canvaskit.wasm'): copy_dest.join('canvaskit.wasm'), + } + recursive_read = [checkout_root.join('skia')] + + 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, + '--source_type', 'canvaskit', + ] if api.vars.is_trybot: - cmd.extend([ + args.extend([ '--issue', api.vars.issue, '--patchset', api.vars.patchset, ]) - # Override DOCKER_CONFIG set by Kitchen. - env = {'DOCKER_CONFIG': '/home/chrome-bot/.docker'} - with api.env(env): - api.run( - api.step, - 'Test CanvasKit with Docker', - cmd=cmd) + api.docker.run( + name='Test CanvasKit with Docker', + docker_image=DOCKER_IMAGE, + src_dir=checkout_root, + out_dir=out_dir, + script=checkout_root.join(INNER_KARMA_SCRIPT), + args=args, + docker_args=None, + copies=copies, + recursive_read=recursive_read, + attempts=3, + ) def GenTests(api): diff --git a/third_party/skia/infra/bots/recipes/test_lottie_web.expected/Test-Debian9-none-GCE-CPU-AVX2-x86_64-Debug-All-LottieWeb.json b/third_party/skia/infra/bots/recipes/test_lottie_web.expected/Test-Debian9-none-GCE-CPU-AVX2-x86_64-Debug-All-LottieWeb.json index 0453b1f49343..6aaa0fbfb6bb 100644 --- a/third_party/skia/infra/bots/recipes/test_lottie_web.expected/Test-Debian9-none-GCE-CPU-AVX2-x86_64-Debug-All-LottieWeb.json +++ b/third_party/skia/infra/bots/recipes/test_lottie_web.expected/Test-Debian9-none-GCE-CPU-AVX2-x86_64-Debug-All-LottieWeb.json @@ -1,98 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -142,7 +48,7 @@ "\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]/cache/work/lottie/build/player" + "[START_DIR]/lottie/build/player" ], "infra_step": true, "name": "Set up for docker", @@ -200,11 +106,11 @@ "--shm-size=2gb", "--rm", "-v", - "[START_DIR]/cache/work:/SRC", + "[START_DIR]:/SRC", "-v", "[START_DIR]/[SWARM_OUT_DIR]:/OUT", "-v", - "[START_DIR]/cache/work/lottie/build/player:/LOTTIE_BUILD", + "[START_DIR]/lottie/build/player:/LOTTIE_BUILD", "-v", "/tmp/lottie_files:/LOTTIE_FILES", "gcr.io/skia-public/gold-lottie-web-puppeteer:v2", diff --git a/third_party/skia/infra/bots/recipes/test_lottie_web.expected/lottie_web_trybot.json b/third_party/skia/infra/bots/recipes/test_lottie_web.expected/lottie_web_trybot.json index 8ad9f4e201c5..4701c929af3a 100644 --- a/third_party/skia/infra/bots/recipes/test_lottie_web.expected/lottie_web_trybot.json +++ b/third_party/skia/infra/bots/recipes/test_lottie_web.expected/lottie_web_trybot.json @@ -1,100 +1,4 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--patch_ref", - "https://skia.googlesource.com/skia.git@abc123:89/456789/12", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "vpython", @@ -144,7 +48,7 @@ "\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]/cache/work/lottie/build/player" + "[START_DIR]/lottie/build/player" ], "infra_step": true, "name": "Set up for docker", @@ -202,11 +106,11 @@ "--shm-size=2gb", "--rm", "-v", - "[START_DIR]/cache/work:/SRC", + "[START_DIR]:/SRC", "-v", "[START_DIR]/[SWARM_OUT_DIR]:/OUT", "-v", - "[START_DIR]/cache/work/lottie/build/player:/LOTTIE_BUILD", + "[START_DIR]/lottie/build/player:/LOTTIE_BUILD", "-v", "/tmp/lottie_files:/LOTTIE_FILES", "gcr.io/skia-public/gold-lottie-web-puppeteer:v2", diff --git a/third_party/skia/infra/bots/recipes/test_lottie_web.py b/third_party/skia/infra/bots/recipes/test_lottie_web.py index 39df24b0358e..a406a98ede0e 100644 --- a/third_party/skia/infra/bots/recipes/test_lottie_web.py +++ b/third_party/skia/infra/bots/recipes/test_lottie_web.py @@ -24,7 +24,7 @@ def RunSteps(api): api.vars.setup() - checkout_root = api.checkout.default_checkout_root + checkout_root = api.path['start_dir'] out_dir = api.vars.swarming_out_dir lottie_files_src = api.vars.slave_dir.join('lottie-samples') lottie_files_dir = '/tmp/lottie_files' @@ -33,8 +33,6 @@ def RunSteps(api): # the docker image. lottie_build = checkout_root.join('lottie', 'build', 'player') - api.checkout.bot_update(checkout_root=checkout_root) - # Make sure this exists, otherwise Docker will make it with root permissions. api.file.ensure_directory('mkdirs out_dir', out_dir, mode=0777) # When lottie files are brought in via isolate or CIPD, they are just diff --git a/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Debug-All-PathKit.json b/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Debug-All-PathKit.json index d83288cc157a..d8e592c8de39 100644 --- a/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Debug-All-PathKit.json +++ b/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Debug-All-PathKit.json @@ -1,4 +1,34 @@ [ + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, { "cmd": [ "vpython", @@ -9,88 +39,48 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[START_DIR]/[SWARM_OUT_DIR]" ], "infra_step": true, - "name": "makedirs checkout_path" + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "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": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.chmod 755 [START_DIR]", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" + "chmod", + "0755", + "[START_DIR]/skia/infra/pathkit/test_pathkit.sh" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/pathkit/test_pathkit.sh", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -103,89 +93,54 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/)\ndest = os.path.join(copy_dest, 'pathkit.js')\nshutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/pathkit/npm-asmjs/bin/test", - "[START_DIR]/build", - "", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.js", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/pathkit.js [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'pathkit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -194,13 +149,13 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", "--env", "ASM_JS=1", - "gcr.io/skia-public/gold-karma-chrome-tests:72.0.3626.121_v1", + "gcr.io/skia-public/gold-karma-chrome-tests:77.0.3865.120_v2", "/SRC/skia/infra/pathkit/test_pathkit.sh", "--builder", "Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Debug-All-PathKit", diff --git a/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit.json b/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit.json index 73c6f5268304..8bde211fe154 100644 --- a/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit.json +++ b/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit.json @@ -1,4 +1,34 @@ [ + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, { "cmd": [ "vpython", @@ -9,10 +39,49 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[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": "makedirs checkout_path" + "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/pathkit/test_pathkit.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/pathkit/test_pathkit.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ @@ -21,76 +90,44 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", "/path/to/tmp/json", - "--revision", - "skia@abc123" + "copy", + "[START_DIR]/build/pathkit.js.mem", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js.mem" + ], + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/pathkit.js.mem [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js.mem", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js.mem" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js.mem", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -103,89 +140,54 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test (2)", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/)\ndest = os.path.join(copy_dest, 'pathkit.js')\nshutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/pathkit/npm-asmjs/bin/test", - "[START_DIR]/build", - "pathkit.js.mem", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.js", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/pathkit.js [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'pathkit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-asmjs/bin/test/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -194,13 +196,13 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", "--env", "ASM_JS=1", - "gcr.io/skia-public/gold-karma-chrome-tests:72.0.3626.121_v1", + "gcr.io/skia-public/gold-karma-chrome-tests:77.0.3865.120_v2", "/SRC/skia/infra/pathkit/test_pathkit.sh", "--builder", "Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit", diff --git a/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-PathKit.json b/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-PathKit.json index 52baa4fa9ca5..7ecd73daf6fb 100644 --- a/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-PathKit.json +++ b/third_party/skia/infra/bots/recipes/test_pathkit.expected/Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-PathKit.json @@ -1,4 +1,34 @@ [ + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, { "cmd": [ "vpython", @@ -9,10 +39,49 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[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": "makedirs checkout_path" + "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/pathkit/test_pathkit.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/pathkit/test_pathkit.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ @@ -21,76 +90,44 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", "/path/to/tmp/json", - "--revision", - "skia@abc123" + "copy", + "[START_DIR]/build/pathkit.wasm", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.wasm" + ], + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/pathkit.wasm [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.wasm", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.wasm" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.wasm", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -103,89 +140,54 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test (2)", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/)\ndest = os.path.join(copy_dest, 'pathkit.js')\nshutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/pathkit/npm-wasm/bin/test", - "[START_DIR]/build", - "pathkit.wasm", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.js", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.js" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/pathkit.js [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'pathkit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.js" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -194,11 +196,11 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "gcr.io/skia-public/gold-karma-chrome-tests:72.0.3626.121_v1", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/gold-karma-chrome-tests:77.0.3865.120_v2", "/SRC/skia/infra/pathkit/test_pathkit.sh", "--builder", "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-PathKit", diff --git a/third_party/skia/infra/bots/recipes/test_pathkit.expected/pathkit_trybot.json b/third_party/skia/infra/bots/recipes/test_pathkit.expected/pathkit_trybot.json index 9c1c24ceaf0c..4cc3c0e2bca8 100644 --- a/third_party/skia/infra/bots/recipes/test_pathkit.expected/pathkit_trybot.json +++ b/third_party/skia/infra/bots/recipes/test_pathkit.expected/pathkit_trybot.json @@ -1,4 +1,34 @@ [ + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + ], + "name": "get swarming bot id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + ], + "name": "get swarming task id", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [], + "name": "Docker setup" + }, { "cmd": [ "vpython", @@ -9,10 +39,49 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/cache/work" + "[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": "makedirs checkout_path" + "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/pathkit/test_pathkit.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/pathkit/test_pathkit.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ @@ -21,78 +90,44 @@ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", "--json-output", "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test" ], "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", "/path/to/tmp/json", - "--patch_ref", - "https://skia.googlesource.com/skia.git@abc123:89/456789/12", - "--revision", - "skia@abc123" + "copy", + "[START_DIR]/build/pathkit.wasm", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.wasm" + ], + "infra_step": true, + "name": "Docker setup.cp [START_DIR]/build/pathkit.wasm [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.wasm", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.wasm" ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, "infra_step": true, - "name": "bot_update", + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.wasm", "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -105,89 +140,54 @@ "ensure-directory", "--mode", "0777", - "[START_DIR]/[SWARM_OUT_DIR]" + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test" ], "infra_step": true, - "name": "mkdirs out_dir" + "name": "Docker setup.mkdirs [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test (2)", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] }, { "cmd": [ - "python", + "vpython", "-u", - "import errno\nimport os\nimport shutil\nimport sys\n\ncopy_dest = sys.argv[1]\nbase_dir = sys.argv[2]\nbundle_name = sys.argv[3]\nout_dir = sys.argv[4]\n\n# Clean out old binaries (if any)\ntry:\n shutil.rmtree(copy_dest)\nexcept OSError as e:\n if e.errno != errno.ENOENT:\n raise\n\n# Make folder\ntry:\n os.makedirs(copy_dest)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\n# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests\n# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/)\ndest = os.path.join(copy_dest, 'pathkit.js')\nshutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)\nos.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\nif bundle_name:\n dest = os.path.join(copy_dest, bundle_name)\n shutil.copyfile(os.path.join(base_dir, bundle_name), dest)\n os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\nos.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.\n", - "[START_DIR]/cache/work/skia/modules/pathkit/npm-wasm/bin/test", - "[START_DIR]/build", - "pathkit.wasm", - "[START_DIR]/[SWARM_OUT_DIR]" + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[START_DIR]/build/pathkit.js", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.js" ], "infra_step": true, - "name": "Set up for docker", + "name": "Docker setup.cp [START_DIR]/build/pathkit.js [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import errno@@@", - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import shutil@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@copy_dest = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@base_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@bundle_name = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[4]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Clean out old binaries (if any)@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.rmtree(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.ENOENT:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make folder@@@", - "@@@STEP_LOG_LINE@python.inline@try:@@@", - "@@@STEP_LOG_LINE@python.inline@ os.makedirs(copy_dest)@@@", - "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", - "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests@@@", - "@@@STEP_LOG_LINE@python.inline@# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/)@@@", - "@@@STEP_LOG_LINE@python.inline@dest = os.path.join(copy_dest, 'pathkit.js')@@@", - "@@@STEP_LOG_LINE@python.inline@shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@if bundle_name:@@@", - "@@@STEP_LOG_LINE@python.inline@ dest = os.path.join(copy_dest, bundle_name)@@@", - "@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(os.path.join(base_dir, bundle_name), dest)@@@", - "@@@STEP_LOG_LINE@python.inline@ os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read.@@@", - "@@@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@os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write.@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "chmod", + "644", + "[START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.js" ], - "name": "get swarming bot id", + "infra_step": true, + "name": "Docker setup.chmod 644 [START_DIR]/skia/modules/pathkit/npm-wasm/bin/test/pathkit.js", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { "cmd": [ - "python", - "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "chmod", + "-R", + "a+r", + "[START_DIR]/skia" ], - "name": "get swarming task id", + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/skia", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", - "@@@STEP_LOG_END@python.inline@@@" + "@@@STEP_NEST_LEVEL@1@@@" ] }, { @@ -196,11 +196,11 @@ "run", "--shm-size=2gb", "--rm", - "--volume", - "[START_DIR]/cache/work:/SRC", - "--volume", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "gcr.io/skia-public/gold-karma-chrome-tests:72.0.3626.121_v1", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "gcr.io/skia-public/gold-karma-chrome-tests:77.0.3865.120_v2", "/SRC/skia/infra/pathkit/test_pathkit.sh", "--builder", "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-PathKit", diff --git a/third_party/skia/infra/bots/recipes/test_pathkit.py b/third_party/skia/infra/bots/recipes/test_pathkit.py index 2decbd9741dd..a1cfb983d64d 100644 --- a/third_party/skia/infra/bots/recipes/test_pathkit.py +++ b/third_party/skia/infra/bots/recipes/test_pathkit.py @@ -6,6 +6,7 @@ DEPS = [ 'checkout', + 'docker', 'env', 'infra', 'recipe_engine/file', @@ -18,18 +19,14 @@ ] -DOCKER_IMAGE = 'gcr.io/skia-public/gold-karma-chrome-tests:72.0.3626.121_v1' -INNER_KARMA_SCRIPT = '/SRC/skia/infra/pathkit/test_pathkit.sh' +DOCKER_IMAGE = 'gcr.io/skia-public/gold-karma-chrome-tests:77.0.3865.120_v2' +INNER_KARMA_SCRIPT = 'skia/infra/pathkit/test_pathkit.sh' def RunSteps(api): api.vars.setup() - checkout_root = api.checkout.default_checkout_root + checkout_root = api.path['start_dir'] out_dir = api.vars.swarming_out_dir - api.checkout.bot_update(checkout_root=checkout_root) - - # Make sure this exists, otherwise Docker will make it with root permissions. - api.file.ensure_directory('mkdirs out_dir', out_dir, mode=0777) # The karma script is configured to look in ./npm-(asmjs|wasm)/bin/test/ for # the test files to load, so we must copy them there (see Set up for docker). @@ -49,87 +46,47 @@ def RunSteps(api): else: bundle_name = 'pathkit.js.mem' - api.python.inline( - name='Set up for docker', - program='''import errno -import os -import shutil -import sys - -copy_dest = sys.argv[1] -base_dir = sys.argv[2] -bundle_name = sys.argv[3] -out_dir = sys.argv[4] - -# Clean out old binaries (if any) -try: - shutil.rmtree(copy_dest) -except OSError as e: - if e.errno != errno.ENOENT: - raise - -# Make folder -try: - os.makedirs(copy_dest) -except OSError as e: - if e.errno != errno.EEXIST: - raise - -# Copy binaries (pathkit.js and pathkit.wasm) to where the karma tests -# expect them ($SKIA_ROOT/modules/pathkit/npm-wasm/bin/test/) -dest = os.path.join(copy_dest, 'pathkit.js') -shutil.copyfile(os.path.join(base_dir, 'pathkit.js'), dest) -os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read. - -if bundle_name: - dest = os.path.join(copy_dest, bundle_name) - shutil.copyfile(os.path.join(base_dir, bundle_name), dest) - os.chmod(dest, 0o644) # important, otherwise non-privileged docker can't read. - -# Prepare output folder, api.file.ensure_directory doesn't touch -# the permissions of the out directory if it already exists. -os.chmod(out_dir, 0o777) # important, otherwise non-privileged docker can't write. -''', - args=[copy_dest, base_dir, bundle_name, out_dir], - infra_step=True) - - - cmd = ['docker', 'run', '--shm-size=2gb', '--rm', - '--volume', '%s:/SRC' % checkout_root, - '--volume', '%s:/OUT' % out_dir] + copies = { + base_dir.join('pathkit.js'): copy_dest.join('pathkit.js'), + } + if bundle_name: + copies[base_dir.join(bundle_name)] = copy_dest.join(bundle_name) + recursive_read = [checkout_root.join('skia')] + docker_args = None if 'asmjs' in api.vars.builder_name: - cmd.extend(['--env', 'ASM_JS=1']) - - cmd.extend([ - DOCKER_IMAGE, INNER_KARMA_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, - '--source_type', 'pathkit', - ]) - + docker_args = ['--env', 'ASM_JS=1'] + + 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, + '--source_type', 'pathkit', + ] if 'asmjs' in api.vars.builder_name: - cmd.extend(['--compiled_language', 'asmjs']) # the default is wasm - + args.extend(['--compiled_language', 'asmjs']) # the default is wasm if api.vars.is_trybot: - cmd.extend([ + args.extend([ '--issue', api.vars.issue, '--patchset', api.vars.patchset, ]) - # Override DOCKER_CONFIG set by Kitchen. - env = {'DOCKER_CONFIG': '/home/chrome-bot/.docker'} - with api.env(env): - api.run( - api.step, - 'Test PathKit with Docker', - cmd=cmd) + api.docker.run( + name='Test PathKit with Docker', + docker_image=DOCKER_IMAGE, + src_dir=checkout_root, + out_dir=out_dir, + script=checkout_root.join(INNER_KARMA_SCRIPT), + args=args, + docker_args=docker_args, + copies=copies, + recursive_read=recursive_read, + attempts=3, + ) def GenTests(api): diff --git a/third_party/skia/infra/bots/recipes/test_skqp_emulator.expected/Test-Debian9-Clang-GCE-CPU-Emulator-x86-devrel-All-Android_SKQP.json b/third_party/skia/infra/bots/recipes/test_skqp_emulator.expected/Test-Debian9-Clang-GCE-CPU-Emulator-x86-devrel-All-Android_SKQP.json index f444357d9349..2639d3070b57 100644 --- a/third_party/skia/infra/bots/recipes/test_skqp_emulator.expected/Test-Debian9-Clang-GCE-CPU-Emulator-x86-devrel-All-Android_SKQP.json +++ b/third_party/skia/infra/bots/recipes/test_skqp_emulator.expected/Test-Debian9-Clang-GCE-CPU-Emulator-x86-devrel-All-Android_SKQP.json @@ -1,105 +1,11 @@ [ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/cache/work" - ], - "infra_step": true, - "name": "makedirs checkout_path" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "remove", - "[START_DIR]/cache/work/.gclient_entries" - ], - "infra_step": true, - "name": "remove [START_DIR]/cache/work/.gclient_entries" - }, - { - "cmd": [ - "python", - "-u", - "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py", - "--spec-path", - "cache_dir = '[START_DIR]/cache/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]", - "--patch_root", - "skia", - "--revision_mapping_file", - "{\"got_revision\": \"skia\"}", - "--git-cache-dir", - "[START_DIR]/cache/git", - "--cleanup-dir", - "[CLEANUP]/bot_update", - "--output_json", - "/path/to/tmp/json", - "--revision", - "skia@abc123" - ], - "cwd": "[START_DIR]/cache/work", - "env_suffixes": { - "PATH": [ - "RECIPE_REPO[depot_tools]" - ] - }, - "infra_step": true, - "name": "bot_update", - "~followup_annotations": [ - "@@@STEP_TEXT@Some step text@@@", - "@@@STEP_LOG_LINE@json.output@{@@@", - "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@", - "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": \"abc123\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@", - "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"skia\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@", - "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/skia.git\", @@@", - "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@", - "@@@STEP_LOG_LINE@json.output@ }, @@@", - "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@", - "@@@STEP_LOG_LINE@json.output@}@@@", - "@@@STEP_LOG_END@json.output@@@", - "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@", - "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@" - ] - }, { "cmd": [ "python", "-u", "\nimport os\nimport subprocess\nimport sys\n\ncontainer_name = sys.argv[1]\ncheckout_root = sys.argv[2]\napk_location = sys.argv[3]\nDOCKER_IMAGE = sys.argv[4]\n\nMAX_TRIES = 5\n\nstart_cmd = ['docker', 'run', '--privileged', '--rm', '-d', # detached/daemon\n '--name', container_name,\n '--env', 'DEVICE=Samsung Galaxy S6',\n '--volume', '%s:/SRC' % checkout_root,\n '--volume', '%s:/OUT' % apk_location,\n DOCKER_IMAGE]\n\nwait_cmd = ['docker', 'exec', container_name,\n 'timeout', '45', 'adb', 'wait-for-device']\n\nfor t in range(MAX_TRIES):\n print 'Starting Emulator try %d' % t\n try:\n # Start emulator\n print subprocess.check_output(start_cmd)\n # Wait a short time using adb-wait-for-device\n print subprocess.check_output(wait_cmd)\n # if exit code 0, we are good so end loop\n print 'Emulator started'\n sys.exit(0)\n except subprocess.CalledProcessError:\n # else kill docker container\n print 'Killing and trying again'\n print subprocess.check_output(['docker', 'kill', container_name])\nprint 'Could not start emulator'\nsys.exit(1)\n", "android_em", - "[START_DIR]/cache/work", + "[START_DIR]", "[START_DIR]/build", "butomo1989/docker-android-x86-8.1@sha256:ad75c888e373d9ea7a2821fd8f64b53c9a22b5827e6fa516b396739a20b9bb88" ], diff --git a/third_party/skia/infra/bots/recipes/test_skqp_emulator.py b/third_party/skia/infra/bots/recipes/test_skqp_emulator.py index a8915f44226e..d4c0e8be678c 100644 --- a/third_party/skia/infra/bots/recipes/test_skqp_emulator.py +++ b/third_party/skia/infra/bots/recipes/test_skqp_emulator.py @@ -24,8 +24,7 @@ def RunSteps(api): api.vars.setup() - checkout_root = api.checkout.default_checkout_root - api.checkout.bot_update(checkout_root=checkout_root) + checkout_root = api.path['start_dir'] # This is where the APK should be, that is, where Swarming puts the inputs. apk_location = api.vars.build_dir diff --git a/third_party/skia/infra/bots/recipes/upload_calmbench_results.expected/normal_bot.json b/third_party/skia/infra/bots/recipes/upload_calmbench_results.expected/normal_bot.json deleted file mode 100644 index 7b648b163941..000000000000 --- a/third_party/skia/infra/bots/recipes/upload_calmbench_results.expected/normal_bot.json +++ /dev/null @@ -1,80 +0,0 @@ -[ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/tmp" - ], - "infra_step": true, - "name": "makedirs tmp_dir" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "glob", - "[START_DIR]/perf", - "*.json" - ], - "infra_step": true, - "name": "find json results", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@glob@[START_DIR]/perf/bench_modified_master.json@@@", - "@@@STEP_LOG_END@glob@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "glob", - "[START_DIR]/perf", - "*.csv" - ], - "infra_step": true, - "name": "find csv results", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@glob@[START_DIR]/perf/bench_modified_master.csv@@@", - "@@@STEP_LOG_END@glob@@@" - ] - }, - { - "cmd": [ - "gsutil", - "cp", - "-z", - "json", - "[START_DIR]/perf/bench_modified_master.json", - "gs://skia-calmbench/calmbench-v1/2012/05/14/12/Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All/bench_modified_master_abc123_1337000001.json" - ], - "infra_step": true, - "name": "upload json" - }, - { - "cmd": [ - "gsutil", - "cp", - "-z", - "csv", - "[START_DIR]/perf/bench_modified_master.csv", - "gs://skia-calmbench/calmbench-v1/2012/05/14/12/Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All/bench_modified_master_abc123_1337000001.csv" - ], - "infra_step": true, - "name": "upload csv" - }, - { - "name": "$result" - } -] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/upload_calmbench_results.expected/trybot.json b/third_party/skia/infra/bots/recipes/upload_calmbench_results.expected/trybot.json deleted file mode 100644 index 332e9a70aade..000000000000 --- a/third_party/skia/infra/bots/recipes/upload_calmbench_results.expected/trybot.json +++ /dev/null @@ -1,80 +0,0 @@ -[ - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "ensure-directory", - "--mode", - "0777", - "[START_DIR]/tmp" - ], - "infra_step": true, - "name": "makedirs tmp_dir" - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "glob", - "[START_DIR]/perf", - "*.json" - ], - "infra_step": true, - "name": "find json results", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@glob@[START_DIR]/perf/bench_modified_master.json@@@", - "@@@STEP_LOG_END@glob@@@" - ] - }, - { - "cmd": [ - "vpython", - "-u", - "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", - "--json-output", - "/path/to/tmp/json", - "glob", - "[START_DIR]/perf", - "*.csv" - ], - "infra_step": true, - "name": "find csv results", - "~followup_annotations": [ - "@@@STEP_LOG_LINE@glob@[START_DIR]/perf/bench_modified_master.csv@@@", - "@@@STEP_LOG_END@glob@@@" - ] - }, - { - "cmd": [ - "gsutil", - "cp", - "-z", - "json", - "[START_DIR]/perf/bench_modified_master.json", - "gs://skia-calmbench/trybot/calmbench-v1/2012/05/14/12/Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All/456789/12/bench_modified_master_abc123_1337000001.json" - ], - "infra_step": true, - "name": "upload json" - }, - { - "cmd": [ - "gsutil", - "cp", - "-z", - "csv", - "[START_DIR]/perf/bench_modified_master.csv", - "gs://skia-calmbench/trybot/calmbench-v1/2012/05/14/12/Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All/456789/12/bench_modified_master_abc123_1337000001.csv" - ], - "infra_step": true, - "name": "upload csv" - }, - { - "name": "$result" - } -] \ No newline at end of file diff --git a/third_party/skia/infra/bots/recipes/upload_calmbench_results.py b/third_party/skia/infra/bots/recipes/upload_calmbench_results.py deleted file mode 100644 index 050e7555a704..000000000000 --- a/third_party/skia/infra/bots/recipes/upload_calmbench_results.py +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright 2017 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. - - -# Recipe for uploading calmbench results. - - -import calendar - - -DEPS = [ - 'flavor', - 'recipe_engine/context', - 'recipe_engine/file', - 'recipe_engine/path', - 'recipe_engine/properties', - 'recipe_engine/step', - 'recipe_engine/time', - 'run', - 'vars', -] - - -def FindFile(api, suffix): - with api.context(cwd=api.path['start_dir']): - results = api.file.glob_paths( - 'find %s results' % suffix, - api.path['start_dir'].join('perf'), - '*.%s' % suffix, - test_data=['bench_modified_master.%s' % suffix]) - if len(results) != 1: # pragma: nocover - raise Exception('Unable to find the %s file!' % suffix) - return results[0] - - -def RunSteps(api): - api.vars.setup() - api.file.ensure_directory('makedirs tmp_dir', api.vars.tmp_dir) - api.flavor.setup() - - now = api.time.utcnow() - - json_src = FindFile(api, "json") - csv_src = FindFile(api, "csv") - - ts = int(calendar.timegm(now.utctimetuple())) - basename = "bench_modified_master_%s_%d" % (api.properties['revision'], ts) - - gs_path = '/'.join(( - 'calmbench-v1', str(now.year).zfill(4), - str(now.month).zfill(2), str(now.day).zfill(2), str(now.hour).zfill(2), - api.vars.builder_name)) - - if api.vars.is_trybot: - gs_path = '/'.join(('trybot', gs_path, - str(api.vars.issue), str(api.vars.patchset))) - - dst = '/'.join(( - 'gs://%s' % api.properties['gs_bucket'], gs_path, basename)) - - json_dst = dst + ".json" - csv_dst = dst + ".csv" - - api.step( - 'upload json', - cmd=['gsutil', 'cp', '-z', 'json', json_src, json_dst], - infra_step=True) - api.step( - 'upload csv', - cmd=['gsutil', 'cp', '-z', 'csv', csv_src, csv_dst], - infra_step=True) - - -def GenTests(api): - builder = 'Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All' - yield ( - api.test('normal_bot') + - api.properties(buildername=builder, - repository='https://skia.googlesource.com/skia.git', - gs_bucket='skia-calmbench', - swarm_out_dir='[SWARM_OUT_DIR]', - revision='abc123', - path_config='kitchen') - ) - - yield ( - api.test('trybot') + - api.properties.tryserver( - gerrit_project='skia', - gerrit_url='https://skia-review.googlesource.com/', - ) + - api.properties(buildername=builder, - repository='https://skia.googlesource.com/skia.git', - gs_bucket='skia-calmbench', - swarm_out_dir='[SWARM_OUT_DIR]', - revision='abc123', - path_config='kitchen') - ) diff --git a/third_party/skia/infra/bots/recipes/upload_dm_results.expected/alternate_bucket.json b/third_party/skia/infra/bots/recipes/upload_dm_results.expected/alternate_bucket.json index e2d2993fd53d..112ef71601d5 100644 --- a/third_party/skia/infra/bots/recipes/upload_dm_results.expected/alternate_bucket.json +++ b/third_party/skia/infra/bots/recipes/upload_dm_results.expected/alternate_bucket.json @@ -51,7 +51,7 @@ "cp", "-Z", "[START_DIR]/test/dm.json", - "gs://skia-infra-gm-alt/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/dm.json" + "gs://skia-infra-gm-alt/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/dm.json" ], "name": "upload dm.json" }, @@ -79,7 +79,7 @@ "cp", "-Z", "[START_DIR]/test/verbose.log", - "gs://skia-infra-gm-alt/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/verbose.log" + "gs://skia-infra-gm-alt/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/verbose.log" ], "name": "upload verbose.log" }, diff --git a/third_party/skia/infra/bots/recipes/upload_dm_results.expected/failed_once.json b/third_party/skia/infra/bots/recipes/upload_dm_results.expected/failed_once.json index 1c6aca1c48ad..c8d96a4250de 100644 --- a/third_party/skia/infra/bots/recipes/upload_dm_results.expected/failed_once.json +++ b/third_party/skia/infra/bots/recipes/upload_dm_results.expected/failed_once.json @@ -64,7 +64,7 @@ "cp", "-Z", "[START_DIR]/test/dm.json", - "gs://skia-infra-gm/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/dm.json" + "gs://skia-infra-gm/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/dm.json" ], "name": "upload dm.json" }, @@ -92,7 +92,7 @@ "cp", "-Z", "[START_DIR]/test/verbose.log", - "gs://skia-infra-gm/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/verbose.log" + "gs://skia-infra-gm/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/verbose.log" ], "name": "upload verbose.log" }, diff --git a/third_party/skia/infra/bots/recipes/upload_dm_results.expected/normal_bot.json b/third_party/skia/infra/bots/recipes/upload_dm_results.expected/normal_bot.json index 1ebc1e40964d..96f97fda7c51 100644 --- a/third_party/skia/infra/bots/recipes/upload_dm_results.expected/normal_bot.json +++ b/third_party/skia/infra/bots/recipes/upload_dm_results.expected/normal_bot.json @@ -51,7 +51,7 @@ "cp", "-Z", "[START_DIR]/test/dm.json", - "gs://skia-infra-gm/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/dm.json" + "gs://skia-infra-gm/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/dm.json" ], "name": "upload dm.json" }, @@ -79,7 +79,7 @@ "cp", "-Z", "[START_DIR]/test/verbose.log", - "gs://skia-infra-gm/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/verbose.log" + "gs://skia-infra-gm/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/verbose.log" ], "name": "upload verbose.log" }, diff --git a/third_party/skia/infra/bots/recipes/upload_dm_results.expected/trybot.json b/third_party/skia/infra/bots/recipes/upload_dm_results.expected/trybot.json index ff71c92312b3..aa301ad86139 100644 --- a/third_party/skia/infra/bots/recipes/upload_dm_results.expected/trybot.json +++ b/third_party/skia/infra/bots/recipes/upload_dm_results.expected/trybot.json @@ -51,7 +51,7 @@ "cp", "-Z", "[START_DIR]/test/dm.json", - "gs://skia-infra-gm/trybot/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/456789/12/dm.json" + "gs://skia-infra-gm/trybot/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/456789/12/dm.json" ], "name": "upload dm.json" }, @@ -79,7 +79,7 @@ "cp", "-Z", "[START_DIR]/test/verbose.log", - "gs://skia-infra-gm/trybot/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/456789/12/verbose.log" + "gs://skia-infra-gm/trybot/dm-json-v1/2012/05/14/12/abc123/Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All/1337000001/456789/12/verbose.log" ], "name": "upload verbose.log" }, diff --git a/third_party/skia/infra/bots/recipes/upload_dm_results.py b/third_party/skia/infra/bots/recipes/upload_dm_results.py index 3e8bfe447407..34ade3d1aca0 100644 --- a/third_party/skia/infra/bots/recipes/upload_dm_results.py +++ b/third_party/skia/infra/bots/recipes/upload_dm_results.py @@ -81,7 +81,7 @@ def RunSteps(api): def GenTests(api): - builder = 'Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All' + builder = 'Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All' yield ( api.test('normal_bot') + api.properties(buildername=builder, diff --git a/third_party/skia/infra/bots/recipes/upload_nano_results.expected/normal_bot.json b/third_party/skia/infra/bots/recipes/upload_nano_results.expected/normal_bot.json index 93c1e8872db7..ee9532cd1c7f 100644 --- a/third_party/skia/infra/bots/recipes/upload_nano_results.expected/normal_bot.json +++ b/third_party/skia/infra/bots/recipes/upload_nano_results.expected/normal_bot.json @@ -25,7 +25,7 @@ "-z", "json", "[START_DIR]/perf/nanobench_abc123.json", - "gs://skia-perf/nano-json-v1/2012/05/14/12/Perf-Debian9-GCC-GCE-CPU-AVX2-x86_64-All-Debug/nanobench_abc123.json" + "gs://skia-perf/nano-json-v1/2012/05/14/12/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-All-Debug/nanobench_abc123.json" ], "infra_step": true, "name": "upload" diff --git a/third_party/skia/infra/bots/recipes/upload_nano_results.expected/trybot.json b/third_party/skia/infra/bots/recipes/upload_nano_results.expected/trybot.json index bd2e454825aa..fd2f2f008af1 100644 --- a/third_party/skia/infra/bots/recipes/upload_nano_results.expected/trybot.json +++ b/third_party/skia/infra/bots/recipes/upload_nano_results.expected/trybot.json @@ -25,7 +25,7 @@ "-z", "json", "[START_DIR]/perf/nanobench_abc123.json", - "gs://skia-perf/trybot/nano-json-v1/2012/05/14/12/Perf-Debian9-GCC-GCE-CPU-AVX2-x86_64-All-Debug/456789/12/nanobench_abc123.json" + "gs://skia-perf/trybot/nano-json-v1/2012/05/14/12/Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-All-Debug/456789/12/nanobench_abc123.json" ], "infra_step": true, "name": "upload" diff --git a/third_party/skia/infra/bots/recipes/upload_nano_results.py b/third_party/skia/infra/bots/recipes/upload_nano_results.py index 9c108f857649..4ff168db8f7b 100644 --- a/third_party/skia/infra/bots/recipes/upload_nano_results.py +++ b/third_party/skia/infra/bots/recipes/upload_nano_results.py @@ -53,7 +53,7 @@ def RunSteps(api): def GenTests(api): - builder = 'Perf-Debian9-GCC-GCE-CPU-AVX2-x86_64-All-Debug' + builder = 'Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-All-Debug' yield ( api.test('normal_bot') + api.properties(buildername=builder, diff --git a/third_party/skia/infra/bots/run_recipe.py b/third_party/skia/infra/bots/run_recipe.py index 90ffdbeaa4e1..ef56ed13fd2a 100755 --- a/third_party/skia/infra/bots/run_recipe.py +++ b/third_party/skia/infra/bots/run_recipe.py @@ -31,7 +31,6 @@ '-known-gerrit-host', 'llvm.googlesource.com', '-known-gerrit-host', 'skia.googlesource.com', '-known-gerrit-host', 'webrtc.googlesource.com', - '-workdir', '.', '-recipe', sys.argv[2], '-properties', sys.argv[3], '-logdog-annotation-url', logdog_url, diff --git a/third_party/skia/infra/bots/skottie_wasm.isolate b/third_party/skia/infra/bots/skottie_wasm.isolate new file mode 100644 index 000000000000..641e5f5f98dc --- /dev/null +++ b/third_party/skia/infra/bots/skottie_wasm.isolate @@ -0,0 +1,10 @@ +{ + 'includes': [ + 'swarm_recipe.isolate', + ], + 'variables': { + 'files': [ + '../../tools/skottie-wasm-perf', + ], + }, +} diff --git a/third_party/skia/infra/bots/skqp.isolate b/third_party/skia/infra/bots/skqp.isolate new file mode 100644 index 000000000000..aab00002a459 --- /dev/null +++ b/third_party/skia/infra/bots/skqp.isolate @@ -0,0 +1,10 @@ +{ + 'includes': [ + 'swarm_recipe.isolate', + ], + 'variables': { + 'files': [ + '../skqp', + ], + }, +} diff --git a/third_party/skia/infra/bots/tasks.json b/third_party/skia/infra/bots/tasks.json index c8dfd17196d5..319903e3d436 100755 --- a/third_party/skia/infra/bots/tasks.json +++ b/third_party/skia/infra/bots/tasks.json @@ -1,5 +1,60 @@ { "jobs": { + "Build-Debian10-GCC-loongson3a-Debug-Docker": { + "tasks": [ + "Build-Debian10-GCC-loongson3a-Debug-Docker" + ] + }, + "Build-Debian10-GCC-loongson3a-Release-Docker": { + "tasks": [ + "Build-Debian10-GCC-loongson3a-Release-Docker" + ] + }, + "Build-Debian10-GCC-mips64el-Debug-Docker": { + "tasks": [ + "Build-Debian10-GCC-mips64el-Debug-Docker" + ] + }, + "Build-Debian10-GCC-mips64el-Release-Docker": { + "tasks": [ + "Build-Debian10-GCC-mips64el-Release-Docker" + ] + }, + "Build-Debian10-GCC-x86-Debug-Docker": { + "tasks": [ + "Build-Debian10-GCC-x86-Debug-Docker" + ] + }, + "Build-Debian10-GCC-x86-Release-Docker": { + "tasks": [ + "Build-Debian10-GCC-x86-Release-Docker" + ] + }, + "Build-Debian10-GCC-x86_64-Debug-Docker": { + "tasks": [ + "Build-Debian10-GCC-x86_64-Debug-Docker" + ] + }, + "Build-Debian10-GCC-x86_64-Debug-NoGPU_Docker": { + "tasks": [ + "Build-Debian10-GCC-x86_64-Debug-NoGPU_Docker" + ] + }, + "Build-Debian10-GCC-x86_64-Release-Docker": { + "tasks": [ + "Build-Debian10-GCC-x86_64-Release-Docker" + ] + }, + "Build-Debian10-GCC-x86_64-Release-NoGPU_Docker": { + "tasks": [ + "Build-Debian10-GCC-x86_64-Release-NoGPU_Docker" + ] + }, + "Build-Debian10-GCC-x86_64-Release-Shared_Docker": { + "tasks": [ + "Build-Debian10-GCC-x86_64-Release-Shared_Docker" + ] + }, "Build-Debian9-Clang-TAP-Presubmit-G3_Framework": { "tasks": [ "Build-Debian9-Clang-TAP-Presubmit-G3_Framework" @@ -97,6 +152,11 @@ "Build-Debian9-Clang-arm64-Release-Android_Vulkan" ] }, + "Build-Debian9-Clang-arm64-Release-Android_Wuffs": { + "tasks": [ + "Build-Debian9-Clang-arm64-Release-Android_Wuffs" + ] + }, "Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework": { "tasks": [ "Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework" @@ -264,11 +324,6 @@ "Build-Debian9-Clang-x86_64-Release-NoDEPS" ] }, - "Build-Debian9-Clang-x86_64-Release-ParentRevision": { - "tasks": [ - "Build-Debian9-Clang-x86_64-Release-ParentRevision" - ] - }, "Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD": { "tasks": [ "Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD" @@ -289,6 +344,11 @@ "Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER" ] }, + "Build-Debian9-Clang-x86_64-Release-SK_USE_SKVM_BLITTER": { + "tasks": [ + "Build-Debian9-Clang-x86_64-Release-SK_USE_SKVM_BLITTER" + ] + }, "Build-Debian9-Clang-x86_64-Release-Static": { "tasks": [ "Build-Debian9-Clang-x86_64-Release-Static" @@ -359,66 +419,6 @@ "Build-Debian9-EMCC-wasm-Release-PathKit" ] }, - "Build-Debian9-GCC-loongson3a-Debug": { - "tasks": [ - "Build-Debian9-GCC-loongson3a-Debug" - ] - }, - "Build-Debian9-GCC-loongson3a-Release": { - "tasks": [ - "Build-Debian9-GCC-loongson3a-Release" - ] - }, - "Build-Debian9-GCC-mips64el-Debug": { - "tasks": [ - "Build-Debian9-GCC-mips64el-Debug" - ] - }, - "Build-Debian9-GCC-mips64el-Release": { - "tasks": [ - "Build-Debian9-GCC-mips64el-Release" - ] - }, - "Build-Debian9-GCC-x86-Debug": { - "tasks": [ - "Build-Debian9-GCC-x86-Debug" - ] - }, - "Build-Debian9-GCC-x86-Release": { - "tasks": [ - "Build-Debian9-GCC-x86-Release" - ] - }, - "Build-Debian9-GCC-x86_64-Debug": { - "tasks": [ - "Build-Debian9-GCC-x86_64-Debug" - ] - }, - "Build-Debian9-GCC-x86_64-Debug-NoGPU": { - "tasks": [ - "Build-Debian9-GCC-x86_64-Debug-NoGPU" - ] - }, - "Build-Debian9-GCC-x86_64-Release": { - "tasks": [ - "Build-Debian9-GCC-x86_64-Release" - ] - }, - "Build-Debian9-GCC-x86_64-Release-NoGPU": { - "tasks": [ - "Build-Debian9-GCC-x86_64-Release-NoGPU" - ] - }, - "Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41": { - "tasks": [ - "Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41" - ] - }, - "Build-Debian9-GCC-x86_64-Release-Shared": { - "tasks": [ - "Build-Debian9-GCC-x86_64-Release-Shared" - ] - }, "Build-Mac-Clang-arm-Debug-iOS": { "tasks": [ "Build-Mac-Clang-arm-Debug-iOS" @@ -717,16 +717,6 @@ "Upload-BuildStats-Debian9-EMCC-wasm-Release-PathKit" ] }, - "Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { - "tasks": [ - "Upload-Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All" - ] - }, - "Calmbench-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { - "tasks": [ - "Upload-Calmbench-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" - ] - }, "Housekeeper-Nightly-RecreateSKPs_Canary": { "tasks": [ "Housekeeper-Nightly-RecreateSKPs_Canary" @@ -892,6 +882,11 @@ "Upload-Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android" ] }, + "Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs": { + "tasks": [ + "Upload-Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs" + ] + }, "Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { "tasks": [ "Upload-Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" @@ -947,74 +942,39 @@ "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" ] }, - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_CCPR_Skpbench": { - "tasks": [ - "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_CCPR_Skpbench" - ] - }, - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Skpbench": { - "tasks": [ - "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Skpbench" - ] - }, "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { "tasks": [ "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" ] }, - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan_Skpbench": { - "tasks": [ - "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan_Skpbench" - ] - }, "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { "tasks": [ "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android" ] }, - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_CCPR_Skpbench": { - "tasks": [ - "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_CCPR_Skpbench" - ] - }, - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Skpbench": { - "tasks": [ - "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Skpbench" - ] - }, "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { "tasks": [ "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" ] }, - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan_Skpbench": { - "tasks": [ - "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan_Skpbench" - ] - }, "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { "tasks": [ "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" ] }, - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_CCPR_Skpbench": { + "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { "tasks": [ - "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_CCPR_Skpbench" + "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" ] }, - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Skpbench": { + "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { "tasks": [ - "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Skpbench" + "Upload-Perf-Android-Clang-Pixel4-GPU-Adreno640-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_Vulkan": { "tasks": [ - "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" - ] - }, - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan_Skpbench": { - "tasks": [ - "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan_Skpbench" + "Upload-Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan" ] }, "Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { @@ -1162,31 +1122,11 @@ "Upload-Perf-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit" ] }, - "Perf-Debian9-EMCC-NUC7i5BNK-GPU-IntelIris640-wasm-Release-All-SkottieWASM": { - "tasks": [ - "Upload-Perf-Debian9-EMCC-NUC7i5BNK-GPU-IntelIris640-wasm-Release-All-SkottieWASM" - ] - }, "Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb": { "tasks": [ "Upload-Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb" ] }, - "Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb_Canvas": { - "tasks": [ - "Upload-Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb_Canvas" - ] - }, - "Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb": { - "tasks": [ - "Upload-Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb" - ] - }, - "Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb_Canvas": { - "tasks": [ - "Upload-Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb_Canvas" - ] - }, "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { "tasks": [ "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All" @@ -1235,14 +1175,14 @@ ], "trigger": "master" }, - "Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "tasks": [ - "Upload-Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" + "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" ] }, - "Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer": { + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer": { "tasks": [ - "Upload-Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer" + "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer" ], "trigger": "master" }, @@ -1256,15 +1196,25 @@ "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ASAN" ] }, + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { + "priority": 0.085, + "tasks": [ + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41" + ] + }, "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "tasks": [ "Upload-Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ] }, - "Perf-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { - "priority": 0.085, + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM": { + "tasks": [ + "Upload-Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM" + ] + }, + "Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb": { "tasks": [ - "Perf-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41" + "Upload-Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb" ] }, "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { @@ -1427,14 +1377,14 @@ "Upload-Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ] }, - "Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "tasks": [ - "Upload-Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Upload-Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" ] }, - "Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN": { + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN": { "tasks": [ - "Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN" + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN" ] }, "Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All": { @@ -1842,6 +1792,26 @@ "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" ] }, + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android": { + "tasks": [ + "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android" + ] + }, + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { + "tasks": [ + "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan" + ] + }, + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { + "tasks": [ + "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android" + ] + }, + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { + "tasks": [ + "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan" + ] + }, "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android": { "tasks": [ "Upload-Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android" @@ -1932,6 +1902,26 @@ "Upload-Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All" ] }, + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": { + "tasks": [ + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker" + ] + }, + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker": { + "tasks": [ + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker" + ] + }, + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker": { + "tasks": [ + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker" + ] + }, + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker": { + "tasks": [ + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker" + ] + }, "Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All": { "tasks": [ "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All" @@ -2022,6 +2012,11 @@ "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER" ] }, + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_USE_SKVM_BLITTER": { + "tasks": [ + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_USE_SKVM_BLITTER" + ] + }, "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN": { "tasks": [ "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN" @@ -2197,26 +2192,6 @@ "Upload-Test-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit" ] }, - "Test-Debian9-GCC-GCE-CPU-AVX2-x86-Debug-All": { - "tasks": [ - "Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86-Debug-All" - ] - }, - "Test-Debian9-GCC-GCE-CPU-AVX2-x86-Release-All": { - "tasks": [ - "Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86-Release-All" - ] - }, - "Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All": { - "tasks": [ - "Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All" - ] - }, - "Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-All": { - "tasks": [ - "Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-All" - ] - }, "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All": { "tasks": [ "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All" @@ -2370,35 +2345,40 @@ "Upload-Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { + "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "tasks": [ - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All" + "Upload-Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { "tasks": [ - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer" + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All" + ] + }, + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { + "tasks": [ + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer" ], "trigger": "master" }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { "tasks": [ - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal" + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts": { "tasks": [ - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "tasks": [ - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal" + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" ] }, - "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { "tasks": [ - "Upload-Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal" ] }, "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { @@ -2471,27 +2451,27 @@ "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41": { + "priority": 0.085, "tasks": [ - "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41" ] }, - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41": { "priority": 0.085, "tasks": [ - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41" ] }, - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { "priority": 0.085, "tasks": [ - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41" ] }, - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { - "priority": 0.085, + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "tasks": [ - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41" + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ] }, "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All": { @@ -2844,74 +2824,74 @@ "Upload-Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86-Debug-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All": { "tasks": [ - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86-Debug-All" + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86-Release-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All": { "tasks": [ - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86-Release-All" + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { "tasks": [ - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All" + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA": { "tasks": [ - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA" + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA": { "tasks": [ - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA" + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN": { "tasks": [ - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "tasks": [ - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA": { "tasks": [ - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA" + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA": { "tasks": [ - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA" + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN": { "tasks": [ - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN" ] }, - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Debug-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All": { "tasks": [ - "Upload-Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Debug-All" + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All" ] }, - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Release-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All": { "tasks": [ - "Upload-Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Release-All" + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All" ] }, - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { "tasks": [ - "Upload-Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Debug-All" + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All" ] }, - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { "tasks": [ - "Upload-Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Release-All" + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All" ] }, "Test-Win7-Clang-Golo-CPU-AVX-x86-Debug-All": { @@ -3021,36 +3001,40 @@ } }, "tasks": { - "Build-Debian9-Clang-TAP-Presubmit-G3_Framework": { + "Build-Debian10-GCC-loongson3a-Debug-Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "g3_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-TAP-Presubmit-G3_Framework\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-loongson3a-Debug-Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3059,9 +3043,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highmem-2", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3072,42 +3057,45 @@ "cache/vpython" ] }, - "execution_timeout_ns": 10800000000000, + "execution_timeout_ns": 3600000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 10800000000000, - "isolate": "compile_g3_framework.isolate", - "max_attempts": 1, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Debug-Android": { + "Build-Debian10-GCC-loongson3a-Release-Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3115,7 +3103,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-loongson3a-Release-Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3124,9 +3112,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3150,33 +3139,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Debug-Android_Vulkan": { + "Build-Debian10-GCC-mips64el-Debug-Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3184,7 +3172,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-mips64el-Debug-Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3193,9 +3181,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3219,43 +3208,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Debug-Chromebook_GLES": { + "Build-Debian10-GCC-mips64el-Release-Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, - { - "name": "skia/bots/armhf_sysroot", - "path": "armhf_sysroot", - "version": "version:3" - }, - { - "name": "skia/bots/chromebook_arm_gles", - "path": "chromebook_arm_gles", - "version": "version:0" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3263,7 +3241,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Chromebook_GLES\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-mips64el-Release-Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3272,9 +3250,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3298,38 +3277,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Debug-Chromecast": { + "Build-Debian10-GCC-x86-Debug-Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/cast_toolchain", - "path": "cast_toolchain", - "version": "version:8" - }, - { - "name": "skia/bots/chromebook_arm_gles", - "path": "chromebook_arm_gles", - "version": "version:0" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3337,7 +3310,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Chromecast\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-x86-Debug-Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3346,9 +3319,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3372,33 +3346,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Release-Android": { + "Build-Debian10-GCC-x86-Release-Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3406,7 +3379,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-x86-Release-Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3415,9 +3388,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3441,33 +3415,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Release-Android_API26": { + "Build-Debian10-GCC-x86_64-Debug-Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3475,7 +3448,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android_API26\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-x86_64-Debug-Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3484,9 +3457,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3510,33 +3484,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Release-Android_ASAN": { + "Build-Debian10-GCC-x86_64-Debug-NoGPU_Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3544,7 +3517,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android_ASAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-x86_64-Debug-NoGPU_Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3553,9 +3526,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3579,33 +3553,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Release-Android_ASAN_Vulkan": { + "Build-Debian10-GCC-x86_64-Release-Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3613,7 +3586,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android_ASAN_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-x86_64-Release-Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3622,9 +3595,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3648,33 +3622,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Release-Android_Vulkan": { + "Build-Debian10-GCC-x86_64-Release-NoGPU_Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3682,7 +3655,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-x86_64-Release-NoGPU_Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3691,9 +3664,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3717,43 +3691,32 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Release-Chromebook_GLES": { + "Build-Debian10-GCC-x86_64-Release-Shared_Docker": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, - { - "name": "skia/bots/armhf_sysroot", - "path": "armhf_sysroot", - "version": "version:3" - }, - { - "name": "skia/bots/chromebook_arm_gles", - "path": "chromebook_arm_gles", - "version": "version:0" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -3761,7 +3724,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Chromebook_GLES\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian10-GCC-x86_64-Release-Shared_Docker\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3770,9 +3733,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -3796,46 +3760,63 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Release-Chromecast": { + "Build-Debian9-Clang-TAP-Presubmit-G3_Framework": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/cast_toolchain", - "path": "cast_toolchain", - "version": "version:8" + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" }, { - "name": "skia/bots/chromebook_arm_gles", - "path": "chromebook_arm_gles", - "version": "version:0" + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Chromecast\",\"swarm_out_dir\":\"build\"}", + "g3_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-TAP-Presubmit-G3_Framework\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -3844,7 +3825,7 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-highmem-2", "os:Debian-9.8", "pool:Skia" ], @@ -3857,68 +3838,37 @@ "cache/vpython" ] }, - "execution_timeout_ns": 3600000000000, + "execution_timeout_ns": 10800000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", - "max_attempts": 2, - "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "io_timeout_ns": 10800000000000, + "isolate": "compile_g3_framework.isolate", + "max_attempts": 1, + "service_account": "skia-g3-framework-compile@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm-Release-Flutter_Android": { + "Build-Debian9-Clang-arm-Debug-Android": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -3930,8 +3880,8 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "sync_and_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-arm-Release-Flutter_Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -3957,15 +3907,16 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, + "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", + "isolate": "compile.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm64-Debug-Android": { + "Build-Debian9-Clang-arm-Debug-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -3976,17 +3927,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -3999,7 +3950,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Debug-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4034,7 +3985,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm64-Debug-Android_Vulkan": { + "Build-Debian9-Clang-arm-Debug-Chromebook_GLES": { "caches": [ { "name": "vpython", @@ -4045,22 +3996,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/armhf_sysroot", + "path": "armhf_sysroot", + "version": "version:3" + }, + { + "name": "skia/bots/chromebook_arm_gles", + "path": "chromebook_arm_gles", + "version": "version:0" } ], "command": [ @@ -4068,7 +4029,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Debug-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Chromebook_GLES\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4103,7 +4064,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm64-Release-Android": { + "Build-Debian9-Clang-arm-Debug-Chromecast": { "caches": [ { "name": "vpython", @@ -4114,22 +4075,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "name": "skia/bots/cast_toolchain", + "path": "cast_toolchain", + "version": "version:8" + }, + { + "name": "skia/bots/chromebook_arm_gles", + "path": "chromebook_arm_gles", + "version": "version:0" } ], "command": [ @@ -4137,7 +4103,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Chromecast\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4172,7 +4138,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm64-Release-Android_ASAN": { + "Build-Debian9-Clang-arm-Release-Android": { "caches": [ { "name": "vpython", @@ -4183,17 +4149,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -4206,7 +4172,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android_ASAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4241,7 +4207,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm64-Release-Android_ASAN_Vulkan": { + "Build-Debian9-Clang-arm-Release-Android_API26": { "caches": [ { "name": "vpython", @@ -4252,17 +4218,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -4275,7 +4241,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android_ASAN_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android_API26\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4310,7 +4276,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-arm64-Release-Android_Vulkan": { + "Build-Debian9-Clang-arm-Release-Android_ASAN": { "caches": [ { "name": "vpython", @@ -4321,17 +4287,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -4344,7 +4310,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android_ASAN\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4379,7 +4345,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework": { + "Build-Debian9-Clang-arm-Release-Android_ASAN_Vulkan": { "caches": [ { "name": "vpython", @@ -4390,25 +4356,30 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "android_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android_ASAN_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4417,7 +4388,7 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highmem-2", + "machine_type:n1-highcpu-64", "os:Debian-9.8", "pool:Skia" ], @@ -4430,16 +4401,20 @@ "cache/vpython" ] }, - "execution_timeout_ns": 7200000000000, + "execution_timeout_ns": 3600000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 7200000000000, - "isolate": "compile_android_framework.isolate", - "max_attempts": 1, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-host-sdk-Android_Framework": { + "Build-Debian9-Clang-arm-Release-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -4450,25 +4425,30 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "android_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-host-sdk-Android_Framework\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4477,7 +4457,7 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highmem-2", + "machine_type:n1-highcpu-64", "os:Debian-9.8", "pool:Skia" ], @@ -4490,16 +4470,20 @@ "cache/vpython" ] }, - "execution_timeout_ns": 7200000000000, + "execution_timeout_ns": 3600000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 7200000000000, - "isolate": "compile_android_framework.isolate", - "max_attempts": 1, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x64-Debug-Android": { + "Build-Debian9-Clang-arm-Release-Chromebook_GLES": { "caches": [ { "name": "vpython", @@ -4510,22 +4494,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/armhf_sysroot", + "path": "armhf_sysroot", + "version": "version:3" + }, + { + "name": "skia/bots/chromebook_arm_gles", + "path": "chromebook_arm_gles", + "version": "version:0" } ], "command": [ @@ -4533,7 +4527,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x64-Debug-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Chromebook_GLES\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4568,28 +4562,197 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x64-Release-Android": { + "Build-Debian9-Clang-arm-Release-Chromecast": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/cast_toolchain", + "path": "cast_toolchain", + "version": "version:8" + }, + { + "name": "skia/bots/chromebook_arm_gles", + "path": "chromebook_arm_gles", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Chromecast\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-arm-Release-Flutter_Android": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "sync_and_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-arm-Release-Flutter_Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-arm64-Debug-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -4602,7 +4765,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x64-Release-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Debug-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4637,7 +4800,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86-Debug": { + "Build-Debian9-Clang-arm64-Debug-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -4648,22 +4811,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ @@ -4671,7 +4834,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Debug-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4706,7 +4869,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86-Debug-Android": { + "Build-Debian9-Clang-arm64-Release-Android": { "caches": [ { "name": "vpython", @@ -4717,17 +4880,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -4740,7 +4903,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Debug-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4775,7 +4938,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86-Debug-Android_Vulkan": { + "Build-Debian9-Clang-arm64-Release-Android_ASAN": { "caches": [ { "name": "vpython", @@ -4786,17 +4949,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -4809,7 +4972,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Debug-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android_ASAN\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4844,7 +5007,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86-Release-Android": { + "Build-Debian9-Clang-arm64-Release-Android_ASAN_Vulkan": { "caches": [ { "name": "vpython", @@ -4855,17 +5018,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -4878,7 +5041,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Release-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android_ASAN_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4913,7 +5076,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86-Release-Android_Vulkan": { + "Build-Debian9-Clang-arm64-Release-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -4924,17 +5087,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/android_ndk_linux", @@ -4947,7 +5110,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Release-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -4982,7 +5145,76 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86-devrel-Android_SKQP": { + "Build-Debian9-Clang-arm64-Release-Android_Wuffs": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm64-Release-Android_Wuffs\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework": { "caches": [ { "name": "vpython", @@ -4999,50 +5231,46 @@ { "name": "work", "path": "cache/work" - }, - { - "name": "docker", - "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" + "version": "version:2.24.0.chromium16" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "sync_and_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-x86-devrel-Android_SKQP\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", + "android_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-cf_x86_phone-eng-Android_Framework\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -5051,7 +5279,7 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-highmem-2", "os:Debian-9.8", "pool:Skia" ], @@ -5064,53 +5292,72 @@ "cache/vpython" ] }, - "execution_timeout_ns": 3600000000000, + "execution_timeout_ns": 7200000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "io_timeout_ns": 7200000000000, + "isolate": "compile_android_framework.isolate", + "max_attempts": 1, + "service_account": "skia-android-framework-compile@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug": { + "Build-Debian9-Clang-host-sdk-Android_Framework": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", + "android_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-host-sdk-Android_Framework\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -5119,7 +5366,7 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-highmem-2", "os:Debian-9.8", "pool:Skia" ], @@ -5132,20 +5379,16 @@ "cache/vpython" ] }, - "execution_timeout_ns": 3600000000000, + "execution_timeout_ns": 7200000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", - "max_attempts": 2, - "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "io_timeout_ns": 7200000000000, + "isolate": "compile_android_framework.isolate", + "max_attempts": 1, + "service_account": "skia-android-framework-compile@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-ASAN": { + "Build-Debian9-Clang-x64-Debug-Android": { "caches": [ { "name": "vpython", @@ -5156,22 +5399,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ @@ -5179,7 +5422,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-ASAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x64-Debug-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5214,7 +5457,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-ASAN_Vulkan": { + "Build-Debian9-Clang-x64-Release-Android": { "caches": [ { "name": "vpython", @@ -5225,22 +5468,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ @@ -5248,7 +5491,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-ASAN_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x64-Release-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5283,7 +5526,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES": { + "Build-Debian9-Clang-x86-Debug": { "caches": [ { "name": "vpython", @@ -5294,27 +5537,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" - }, - { - "name": "skia/bots/chromebook_x86_64_gles", - "path": "chromebook_x86_64_gles", - "version": "version:2" } ], "command": [ @@ -5322,7 +5560,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Debug\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5357,7 +5595,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-MSAN": { + "Build-Debian9-Clang-x86-Debug-Android": { "caches": [ { "name": "vpython", @@ -5368,22 +5606,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ @@ -5391,7 +5629,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-MSAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Debug-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5426,7 +5664,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-OpenCL": { + "Build-Debian9-Clang-x86-Debug-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -5437,32 +5675,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, - { - "name": "skia/bots/opencl_headers", - "path": "opencl_headers", - "version": "version:0" - }, - { - "name": "skia/bots/opencl_ocl_icd_linux", - "path": "opencl_ocl_icd_linux", - "version": "version:0" + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ @@ -5470,7 +5698,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-OpenCL\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Debug-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5505,7 +5733,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { + "Build-Debian9-Clang-x86-Release-Android": { "caches": [ { "name": "vpython", @@ -5516,22 +5744,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ @@ -5539,7 +5767,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Release-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5574,7 +5802,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-SK_USE_SKVM_BLITTER": { + "Build-Debian9-Clang-x86-Release-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -5585,22 +5813,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], "command": [ @@ -5608,7 +5836,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SK_USE_SKVM_BLITTER\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86-Release-Android_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5643,41 +5871,67 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-SafeStack": { + "Build-Debian9-Clang-x86-devrel-Android_SKQP": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SafeStack\",\"swarm_out_dir\":\"build\"}", + "sync_and_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-x86-devrel-Android_SKQP\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -5703,16 +5957,15 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-Static": { + "Build-Debian9-Clang-x86_64-Debug": { "caches": [ { "name": "vpython", @@ -5723,17 +5976,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -5746,7 +5999,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Static\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5781,7 +6034,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-SwiftShader": { + "Build-Debian9-Clang-x86_64-Debug-ASAN": { "caches": [ { "name": "vpython", @@ -5792,27 +6045,91 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-ASAN\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-x86_64-Debug-ASAN_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/cmake_linux", - "path": "cmake_linux", - "version": "version:0" + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -5820,7 +6137,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SwiftShader\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-ASAN_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5855,7 +6172,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN": { + "Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES": { "caches": [ { "name": "vpython", @@ -5866,17 +6183,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -5884,8 +6201,156 @@ "version": "version:14" }, { - "name": "skia/bots/cmake_linux", - "path": "cmake_linux", + "name": "skia/bots/chromebook_x86_64_gles", + "path": "chromebook_x86_64_gles", + "version": "version:2" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-x86_64-Debug-MSAN": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-MSAN\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-x86_64-Debug-OpenCL": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/opencl_headers", + "path": "opencl_headers", + "version": "version:0" + }, + { + "name": "skia/bots/opencl_ocl_icd_linux", + "path": "opencl_ocl_icd_linux", "version": "version:0" } ], @@ -5894,7 +6359,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-OpenCL\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5929,7 +6394,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-Tidy": { + "Build-Debian9-Clang-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { "caches": [ { "name": "vpython", @@ -5940,17 +6405,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -5963,7 +6428,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Tidy\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -5998,7 +6463,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-Vulkan": { + "Build-Debian9-Clang-x86_64-Debug-SK_USE_SKVM_BLITTER": { "caches": [ { "name": "vpython", @@ -6009,17 +6474,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6032,7 +6497,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SK_USE_SKVM_BLITTER\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6067,7 +6532,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Debug-Wuffs": { + "Build-Debian9-Clang-x86_64-Debug-SafeStack": { "caches": [ { "name": "vpython", @@ -6078,17 +6543,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6101,7 +6566,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Wuffs\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SafeStack\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6136,7 +6601,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release": { + "Build-Debian9-Clang-x86_64-Debug-Static": { "caches": [ { "name": "vpython", @@ -6147,17 +6612,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6170,7 +6635,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Static\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6205,7 +6670,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-ANGLE": { + "Build-Debian9-Clang-x86_64-Debug-SwiftShader": { "caches": [ { "name": "vpython", @@ -6216,22 +6681,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" + }, + { + "name": "skia/bots/cmake_linux", + "path": "cmake_linux", + "version": "version:0" } ], "command": [ @@ -6239,7 +6709,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-ANGLE\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SwiftShader\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6274,7 +6744,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-ASAN": { + "Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN": { "caches": [ { "name": "vpython", @@ -6285,22 +6755,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" + }, + { + "name": "skia/bots/cmake_linux", + "path": "cmake_linux", + "version": "version:0" } ], "command": [ @@ -6308,7 +6783,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-ASAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6343,7 +6818,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-ASAN_Vulkan": { + "Build-Debian9-Clang-x86_64-Debug-Tidy": { "caches": [ { "name": "vpython", @@ -6354,17 +6829,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6377,7 +6852,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-ASAN_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Tidy\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6412,59 +6887,28 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-CMake": { + "Build-Debian9-Clang-x86_64-Debug-Vulkan": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" - }, - { - "name": "docker", - "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6476,8 +6920,8 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "sync_and_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-x86_64-Release-CMake\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6486,10 +6930,9 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-standard-16", + "machine_type:n1-highcpu-64", "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -6504,15 +6947,16 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, + "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", + "isolate": "compile.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES": { + "Build-Debian9-Clang-x86_64-Debug-Wuffs": { "caches": [ { "name": "vpython", @@ -6523,27 +6967,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" - }, - { - "name": "skia/bots/chromebook_x86_64_gles", - "path": "chromebook_x86_64_gles", - "version": "version:2" } ], "command": [ @@ -6551,7 +6990,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Chromebook_GLES\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Debug-Wuffs\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6586,7 +7025,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-Fast": { + "Build-Debian9-Clang-x86_64-Release": { "caches": [ { "name": "vpython", @@ -6597,17 +7036,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6620,7 +7059,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Fast\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6655,51 +7094,28 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-NoDEPS": { + "Build-Debian9-Clang-x86_64-Release-ANGLE": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6711,8 +7127,8 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "sync_and_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-x86_64-Release-NoDEPS\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-ANGLE\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6738,63 +7154,106 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, + "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", + "isolate": "compile.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-ParentRevision": { + "Build-Debian9-Clang-x86_64-Release-ASAN": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-ASAN\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-x86_64-Release-ASAN_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/git/${platform}", + "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci/git-credential-luci/${platform}", + "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6806,8 +7265,8 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "sync_and_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-x86_64-Release-ParentRevision\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-ASAN_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6833,36 +7292,68 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, + "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", + "isolate": "compile.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD": { + "Build-Debian9-Clang-x86_64-Release-CMake": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -6874,8 +7365,8 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD\",\"swarm_out_dir\":\"build\"}", + "sync_and_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-x86_64-Release-CMake\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -6884,9 +7375,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -6901,16 +7393,15 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE2": { + "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES": { "caches": [ { "name": "vpython", @@ -6921,22 +7412,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" + }, + { + "name": "skia/bots/chromebook_x86_64_gles", + "path": "chromebook_x86_64_gles", + "version": "version:2" } ], "command": [ @@ -6944,7 +7440,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE2\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Chromebook_GLES\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -6979,7 +7475,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41": { + "Build-Debian9-Clang-x86_64-Release-Fast": { "caches": [ { "name": "vpython", @@ -6990,17 +7486,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -7013,7 +7509,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Fast\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7048,28 +7544,51 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER": { + "Build-Debian9-Clang-x86_64-Release-NoDEPS": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -7081,8 +7600,8 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"swarm_out_dir\":\"build\"}", + "sync_and_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-Clang-x86_64-Release-NoDEPS\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -7108,16 +7627,15 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-Static": { + "Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD": { "caches": [ { "name": "vpython", @@ -7128,17 +7646,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -7151,7 +7669,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Static\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7186,7 +7704,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-SwiftShader": { + "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE2": { "caches": [ { "name": "vpython", @@ -7197,27 +7715,91 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE2\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/cmake_linux", - "path": "cmake_linux", - "version": "version:0" + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -7225,7 +7807,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SwiftShader\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7260,7 +7842,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-TSAN": { + "Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER": { "caches": [ { "name": "vpython", @@ -7271,17 +7853,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -7294,7 +7876,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-TSAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7329,7 +7911,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan": { + "Build-Debian9-Clang-x86_64-Release-SK_USE_SKVM_BLITTER": { "caches": [ { "name": "vpython", @@ -7340,17 +7922,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -7363,7 +7945,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SK_USE_SKVM_BLITTER\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7398,7 +7980,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-Vulkan": { + "Build-Debian9-Clang-x86_64-Release-Static": { "caches": [ { "name": "vpython", @@ -7409,17 +7991,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", @@ -7432,7 +8014,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Static\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7467,7 +8049,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-Clang-x86_64-Release-Wuffs": { + "Build-Debian9-Clang-x86_64-Release-SwiftShader": { "caches": [ { "name": "vpython", @@ -7478,22 +8060,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" + }, + { + "name": "skia/bots/cmake_linux", + "path": "cmake_linux", + "version": "version:0" } ], "command": [ @@ -7501,7 +8088,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Wuffs\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-SwiftShader\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7536,32 +8123,102 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-EMCC-asmjs-Debug-PathKit": { + "Build-Debian9-Clang-x86_64-Release-TSAN": { "caches": [ { "name": "vpython", "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "docker", - "path": "cache/docker" + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-TSAN\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -7569,7 +8226,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-asmjs-Debug-PathKit\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7578,10 +8235,9 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-standard-16", + "machine_type:n1-highcpu-64", "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -7605,32 +8261,102 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-EMCC-asmjs-Release-PathKit": { + "Build-Debian9-Clang-x86_64-Release-Vulkan": { "caches": [ { "name": "vpython", "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "docker", - "path": "cache/docker" + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Vulkan\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-Clang-x86_64-Release-Wuffs": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -7638,7 +8364,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-asmjs-Release-PathKit\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-x86_64-Release-Wuffs\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7647,10 +8373,9 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-standard-16", + "machine_type:n1-highcpu-64", "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -7674,7 +8399,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-EMCC-wasm-Debug-CanvasKit": { + "Build-Debian9-EMCC-asmjs-Debug-PathKit": { "caches": [ { "name": "vpython", @@ -7689,17 +8414,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -7707,7 +8432,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Debug-CanvasKit\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-asmjs-Debug-PathKit\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7743,7 +8468,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-EMCC-wasm-Debug-CanvasKit_CPU": { + "Build-Debian9-EMCC-asmjs-Release-PathKit": { "caches": [ { "name": "vpython", @@ -7758,17 +8483,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -7776,7 +8501,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Debug-CanvasKit_CPU\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-asmjs-Release-PathKit\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7812,7 +8537,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-EMCC-wasm-Debug-PathKit": { + "Build-Debian9-EMCC-wasm-Debug-CanvasKit": { "caches": [ { "name": "vpython", @@ -7827,17 +8552,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -7845,7 +8570,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Debug-PathKit\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Debug-CanvasKit\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7881,7 +8606,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-EMCC-wasm-Release-CanvasKit": { + "Build-Debian9-EMCC-wasm-Debug-CanvasKit_CPU": { "caches": [ { "name": "vpython", @@ -7896,17 +8621,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -7914,7 +8639,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Release-CanvasKit\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Debug-CanvasKit_CPU\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -7950,7 +8675,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU": { + "Build-Debian9-EMCC-wasm-Debug-PathKit": { "caches": [ { "name": "vpython", @@ -7965,17 +8690,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -7983,7 +8708,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Debug-PathKit\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -8019,7 +8744,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-EMCC-wasm-Release-PathKit": { + "Build-Debian9-EMCC-wasm-Release-CanvasKit": { "caches": [ { "name": "vpython", @@ -8034,17 +8759,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -8052,7 +8777,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Release-PathKit\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Release-CanvasKit\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -8088,33 +8813,101 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-loongson3a-Debug": { + "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" + ], + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Debian9-EMCC-wasm-Release-PathKit": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + }, + { + "name": "docker", + "path": "cache/docker" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/mips64el_toolchain_linux", - "path": "mips64el_toolchain_linux", - "version": "version:6" + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -8122,7 +8915,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-loongson3a-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-EMCC-wasm-Release-PathKit\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -8131,9 +8924,10 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highcpu-64", + "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -8157,33 +8951,42 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-loongson3a-Release": { + "Build-Mac-Clang-arm-Debug-iOS": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" }, { - "name": "skia/bots/mips64el_toolchain_linux", - "path": "mips64el_toolchain_linux", - "version": "version:6" + "name": "skia/bots/provisioning_profile_ios", + "path": "provisioning_profile_ios", + "version": "version:0" } ], "command": [ @@ -8191,17 +8994,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-loongson3a-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm-Debug-iOS\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8226,33 +9028,42 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-mips64el-Debug": { + "Build-Mac-Clang-arm-Release-iOS": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/mips64el_toolchain_linux", - "path": "mips64el_toolchain_linux", - "version": "version:6" + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + }, + { + "name": "skia/bots/provisioning_profile_ios", + "path": "provisioning_profile_ios", + "version": "version:0" } ], "command": [ @@ -8260,17 +9071,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-mips64el-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm-Release-iOS\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8295,7 +9105,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-mips64el-Release": { + "Build-Mac-Clang-arm64-Debug-Android": { "caches": [ { "name": "vpython", @@ -8306,22 +9116,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/mips64el_toolchain_linux", - "path": "mips64el_toolchain_linux", - "version": "version:6" + "name": "skia/bots/android_ndk_darwin", + "path": "android_ndk_darwin", + "version": "version:9" } ], "command": [ @@ -8329,17 +9139,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-mips64el-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Debug-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8364,28 +9173,42 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-x86-Debug": { + "Build-Mac-Clang-arm64-Debug-iOS": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + }, + { + "name": "skia/bots/provisioning_profile_ios", + "path": "provisioning_profile_ios", + "version": "version:0" } ], "command": [ @@ -8393,17 +9216,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-x86-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Debug-iOS\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8428,28 +9250,42 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-x86-Release": { + "Build-Mac-Clang-arm64-Debug-iOS_Metal": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + }, + { + "name": "skia/bots/provisioning_profile_ios", + "path": "provisioning_profile_ios", + "version": "version:0" } ], "command": [ @@ -8457,17 +9293,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-x86-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Debug-iOS_Metal\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8492,28 +9327,42 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-x86_64-Debug": { + "Build-Mac-Clang-arm64-Release-iOS": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + }, + { + "name": "skia/bots/provisioning_profile_ios", + "path": "provisioning_profile_ios", + "version": "version:0" } ], "command": [ @@ -8521,17 +9370,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Release-iOS\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8556,28 +9404,42 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-x86_64-Debug-NoGPU": { + "Build-Mac-Clang-arm64-Release-iOS_Metal": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + }, + { + "name": "skia/bots/provisioning_profile_ios", + "path": "provisioning_profile_ios", + "version": "version:0" } ], "command": [ @@ -8585,17 +9447,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-x86_64-Debug-NoGPU\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Release-iOS_Metal\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8620,28 +9481,42 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-x86_64-Release": { + "Build-Mac-Clang-x64-Release-iOS": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + }, + { + "name": "skia/bots/provisioning_profile_ios", + "path": "provisioning_profile_ios", + "version": "version:0" } ], "command": [ @@ -8649,17 +9524,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-x86_64-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x64-Release-iOS\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8684,28 +9558,37 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-x86_64-Release-NoGPU": { + "Build-Mac-Clang-x86_64-Debug": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" } ], "command": [ @@ -8713,17 +9596,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-x86_64-Release-NoGPU\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8748,92 +9630,37 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41": { + "Build-Mac-Clang-x86_64-Debug-ASAN": { "caches": [ { "name": "vpython", "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" }, { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41\",\"swarm_out_dir\":\"build\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", - "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" - }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", - "max_attempts": 2, - "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Build-Debian9-GCC-x86_64-Release-Shared": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" + "name": "xcode", + "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" } ], "command": [ @@ -8841,17 +9668,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-GCC-x86_64-Release-Shared\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug-ASAN\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", + "cpu:x86-64-E5-2697_v2", "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -8876,7 +9702,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-arm-Debug-iOS": { + "Build-Mac-Clang-x86_64-Debug-ASAN_Metal": { "caches": [ { "name": "vpython", @@ -8891,27 +9717,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", "path": "mac_toolchain", "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" - }, - { - "name": "skia/bots/provisioning_profile_ios", - "path": "provisioning_profile_ios", - "version": "version:0" } ], "command": [ @@ -8919,7 +9740,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm-Debug-iOS\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug-ASAN_Metal\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -8953,12 +9774,24 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-arm-Release-iOS": { + "Build-Mac-Clang-x86_64-Debug-CommandBuffer": { "caches": [ { "name": "vpython", "path": "cache/vpython" }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" + }, { "name": "xcode", "path": "cache/Xcode.app" @@ -8968,103 +9801,45 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/provisioning_profile_ios", - "path": "provisioning_profile_ios", - "version": "version:0" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm-Release-iOS\",\"swarm_out_dir\":\"build\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" - ], - "dimensions": [ - "cpu:x86-64-E5-2697_v2", - "gpu:none", - "os:Mac-10.14.6", - "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" - }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", - "max_attempts": 2, - "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Build-Mac-Clang-arm64-Debug-Android": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" }, { - "name": "infra/tools/luci-auth/${platform}", + "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci/vpython/${platform}", + "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/android_ndk_darwin", - "path": "android_ndk_darwin", - "version": "version:9" + "name": "infra/tools/mac_toolchain/${platform}", + "path": "mac_toolchain", + "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Debug-Android\",\"swarm_out_dir\":\"build\"}", + "sync_and_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Mac-Clang-x86_64-Debug-CommandBuffer\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -9085,20 +9860,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 3600000000000, + "execution_timeout_ns": 7200000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "io_timeout_ns": 7200000000000, + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-arm64-Debug-iOS": { + "Build-Mac-Clang-x86_64-Debug-Metal": { "caches": [ { "name": "vpython", @@ -9113,27 +9887,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", "path": "mac_toolchain", "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" - }, - { - "name": "skia/bots/provisioning_profile_ios", - "path": "provisioning_profile_ios", - "version": "version:0" } ], "command": [ @@ -9141,7 +9910,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Debug-iOS\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug-Metal\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -9175,7 +9944,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-arm64-Debug-iOS_Metal": { + "Build-Mac-Clang-x86_64-Debug-OpenCL": { "caches": [ { "name": "vpython", @@ -9190,27 +9959,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", "path": "mac_toolchain", "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" - }, - { - "name": "skia/bots/provisioning_profile_ios", - "path": "provisioning_profile_ios", - "version": "version:0" } ], "command": [ @@ -9218,7 +9982,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Debug-iOS_Metal\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug-OpenCL\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -9252,7 +10016,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-arm64-Release-iOS": { + "Build-Mac-Clang-x86_64-Release": { "caches": [ { "name": "vpython", @@ -9267,27 +10031,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", "path": "mac_toolchain", "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" - }, - { - "name": "skia/bots/provisioning_profile_ios", - "path": "provisioning_profile_ios", - "version": "version:0" } ], "command": [ @@ -9295,7 +10054,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Release-iOS\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -9329,7 +10088,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-arm64-Release-iOS_Metal": { + "Build-Mac-Clang-x86_64-Release-ASAN_Metal": { "caches": [ { "name": "vpython", @@ -9344,27 +10103,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", "path": "mac_toolchain", "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" - }, - { - "name": "skia/bots/provisioning_profile_ios", - "path": "provisioning_profile_ios", - "version": "version:0" } ], "command": [ @@ -9372,7 +10126,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-arm64-Release-iOS_Metal\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release-ASAN_Metal\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -9406,12 +10160,24 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x64-Release-iOS": { + "Build-Mac-Clang-x86_64-Release-CommandBuffer": { "caches": [ { "name": "vpython", "path": "cache/vpython" }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" + }, { "name": "xcode", "path": "cache/Xcode.app" @@ -9421,35 +10187,45 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", "path": "mac_toolchain", "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" - }, - { - "name": "skia/bots/provisioning_profile_ios", - "path": "provisioning_profile_ios", - "version": "version:0" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x64-Release-iOS\",\"swarm_out_dir\":\"build\"}", + "sync_and_compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Mac-Clang-x86_64-Release-CommandBuffer\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -9470,20 +10246,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 3600000000000, + "execution_timeout_ns": 7200000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "io_timeout_ns": 7200000000000, + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Debug": { + "Build-Mac-Clang-x86_64-Release-Metal": { "caches": [ { "name": "vpython", @@ -9498,17 +10273,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9521,7 +10296,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release-Metal\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -9555,7 +10330,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Debug-ASAN": { + "Build-Mac-Clang-x86_64-Release-TSAN": { "caches": [ { "name": "vpython", @@ -9570,17 +10345,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9593,7 +10368,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug-ASAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release-TSAN\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -9627,7 +10402,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Debug-ASAN_Metal": { + "Build-Mac-Clang-x86_64-Release-TSAN_Metal": { "caches": [ { "name": "vpython", @@ -9642,17 +10417,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9665,7 +10440,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug-ASAN_Metal\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release-TSAN_Metal\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -9699,81 +10474,57 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Debug-CommandBuffer": { + "Build-Win-Clang-arm64-Debug": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci/git-credential-luci/${platform}", + "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "version:2.7.15.chromium14" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "skia/bots/clang_win", + "path": "clang_win", + "version": "version:10" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "sync_and_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Mac-Clang-x86_64-Debug-CommandBuffer\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Debug\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -9785,49 +10536,51 @@ "cache/vpython" ] }, - "execution_timeout_ns": 7200000000000, + "execution_timeout_ns": 3600000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 7200000000000, - "isolate": "swarm_recipe.isolate", + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Debug-Metal": { + "Build-Win-Clang-arm64-Debug-ANGLE": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/clang_win", + "path": "clang_win", + "version": "version:10" } ], "command": [ @@ -9835,16 +10588,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug-Metal\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Debug-ANGLE\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -9869,37 +10624,38 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Debug-OpenCL": { + "Build-Win-Clang-arm64-Release": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/clang_win", + "path": "clang_win", + "version": "version:10" } ], "command": [ @@ -9907,16 +10663,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Debug-OpenCL\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Release\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -9941,37 +10699,38 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Release": { + "Build-Win-Clang-arm64-Release-ANGLE": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/clang_win", + "path": "clang_win", + "version": "version:10" } ], "command": [ @@ -9979,16 +10738,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Release-ANGLE\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10013,37 +10774,38 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Release-ASAN_Metal": { + "Build-Win-Clang-arm64-Release-Android": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/android_ndk_windows", + "path": "n", + "version": "version:10" } ], "command": [ @@ -10051,16 +10813,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release-ASAN_Metal\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Release-Android\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10085,81 +10848,57 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Release-CommandBuffer": { + "Build-Win-Clang-x86-Debug": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", + "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "version:2.7.15.chromium14" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "skia/bots/clang_win", + "path": "clang_win", + "version": "version:10" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "sync_and_compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Mac-Clang-x86_64-Release-CommandBuffer\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\",\"task_id\":\"<(TASK_ID)\"}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86-Debug\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10171,49 +10910,51 @@ "cache/vpython" ] }, - "execution_timeout_ns": 7200000000000, + "execution_timeout_ns": 3600000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 7200000000000, - "isolate": "swarm_recipe.isolate", + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", "max_attempts": 2, "outputs": [ "build" ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Release-Metal": { + "Build-Win-Clang-x86-Debug-Exceptions": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/clang_win", + "path": "clang_win", + "version": "version:10" } ], "command": [ @@ -10221,16 +10962,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release-Metal\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86-Debug-Exceptions\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10255,37 +10998,38 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Release-TSAN": { + "Build-Win-Clang-x86-Release": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/clang_win", + "path": "clang_win", + "version": "version:10" } ], "command": [ @@ -10293,16 +11037,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release-TSAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86-Release\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10327,37 +11073,38 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Mac-Clang-x86_64-Release-TSAN_Metal": { + "Build-Win-Clang-x86_64-Debug": { "caches": [ { "name": "vpython", "path": "cache/vpython" - }, - { - "name": "xcode", - "path": "cache/Xcode.app" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/mac_toolchain/${platform}", - "path": "mac_toolchain", - "version": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/clang_win", + "path": "clang_win", + "version": "version:10" } ], "command": [ @@ -10365,16 +11112,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Mac-Clang-x86_64-Release-TSAN_Metal\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-Haswell_GCE", "gpu:none", - "os:Mac-10.14.6", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10399,7 +11148,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-arm64-Debug": { + "Build-Win-Clang-x86_64-Debug-ANGLE": { "caches": [ { "name": "vpython", @@ -10410,17 +11159,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -10438,7 +11187,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-ANGLE\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -10448,9 +11197,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10475,7 +11223,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-arm64-Debug-ANGLE": { + "Build-Win-Clang-x86_64-Debug-OpenCL": { "caches": [ { "name": "vpython", @@ -10486,17 +11234,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -10507,6 +11255,11 @@ "name": "skia/bots/clang_win", "path": "clang_win", "version": "version:10" + }, + { + "name": "skia/bots/opencl_headers", + "path": "opencl_headers", + "version": "version:0" } ], "command": [ @@ -10514,7 +11267,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Debug-ANGLE\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-OpenCL\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -10524,9 +11277,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10551,7 +11303,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-arm64-Release": { + "Build-Win-Clang-x86_64-Debug-UBSAN": { "caches": [ { "name": "vpython", @@ -10562,17 +11314,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -10590,7 +11342,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-UBSAN\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -10600,9 +11352,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10627,7 +11378,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-arm64-Release-ANGLE": { + "Build-Win-Clang-x86_64-Debug-Vulkan": { "caches": [ { "name": "vpython", @@ -10638,17 +11389,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -10666,7 +11417,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Release-ANGLE\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -10676,9 +11427,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10703,7 +11453,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-arm64-Release-Android": { + "Build-Win-Clang-x86_64-Debug-Wuffs": { "caches": [ { "name": "vpython", @@ -10714,17 +11464,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -10732,8 +11482,8 @@ "version": "version:2.7.15.chromium14" }, { - "name": "skia/bots/android_ndk_windows", - "path": "n", + "name": "skia/bots/clang_win", + "path": "clang_win", "version": "version:10" } ], @@ -10742,18 +11492,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-arm64-Release-Android\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-Wuffs\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10778,7 +11528,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86-Debug": { + "Build-Win-Clang-x86_64-Release": { "caches": [ { "name": "vpython", @@ -10789,17 +11539,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -10817,7 +11567,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -10827,9 +11577,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10854,7 +11603,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86-Debug-Exceptions": { + "Build-Win-Clang-x86_64-Release-ANGLE": { "caches": [ { "name": "vpython", @@ -10865,17 +11614,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -10893,7 +11642,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86-Debug-Exceptions\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release-ANGLE\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -10903,9 +11652,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -10930,7 +11678,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86-Release": { + "Build-Win-Clang-x86_64-Release-Shared": { "caches": [ { "name": "vpython", @@ -10941,17 +11689,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -10969,7 +11717,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release-Shared\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -10979,9 +11727,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11006,7 +11753,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Debug": { + "Build-Win-Clang-x86_64-Release-UBSAN": { "caches": [ { "name": "vpython", @@ -11017,17 +11764,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -11045,7 +11792,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release-UBSAN\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11055,9 +11802,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11082,7 +11828,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Debug-ANGLE": { + "Build-Win-Clang-x86_64-Release-Vulkan": { "caches": [ { "name": "vpython", @@ -11093,17 +11839,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -11121,7 +11867,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-ANGLE\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release-Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11131,9 +11877,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11158,7 +11903,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Debug-OpenCL": { + "Build-Win-MSVC-arm64-Debug": { "caches": [ { "name": "vpython", @@ -11169,32 +11914,92 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-arm64-Debug\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Win-MSVC-arm64-Debug-ANGLE": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/opencl_headers", - "path": "opencl_headers", - "version": "version:0" + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" } ], "command": [ @@ -11202,7 +12007,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-OpenCL\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-arm64-Debug-ANGLE\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11212,9 +12017,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11239,7 +12043,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Debug-UBSAN": { + "Build-Win-MSVC-arm64-Release": { "caches": [ { "name": "vpython", @@ -11250,27 +12054,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" - }, - { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" } ], "command": [ @@ -11278,7 +12077,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-UBSAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-arm64-Release\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11288,9 +12087,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11315,7 +12113,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Debug-Vulkan": { + "Build-Win-MSVC-arm64-Release-ANGLE": { "caches": [ { "name": "vpython", @@ -11326,27 +12124,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" - }, - { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" } ], "command": [ @@ -11354,7 +12147,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-arm64-Release-ANGLE\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11364,9 +12157,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11391,7 +12183,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Debug-Wuffs": { + "Build-Win-MSVC-x86-Debug": { "caches": [ { "name": "vpython", @@ -11402,27 +12194,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" - }, - { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" } ], "command": [ @@ -11430,7 +12217,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Debug-Wuffs\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86-Debug\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11440,9 +12227,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11467,7 +12253,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Release": { + "Build-Win-MSVC-x86-Release": { "caches": [ { "name": "vpython", @@ -11478,27 +12264,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" - }, - { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" } ], "command": [ @@ -11506,7 +12287,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86-Release\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11516,9 +12297,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11543,7 +12323,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Release-ANGLE": { + "Build-Win-MSVC-x86_64-Debug": { "caches": [ { "name": "vpython", @@ -11554,27 +12334,92 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "compile", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateWinToolchain" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Windows-Server-17763", + "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" + }, + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "compile.isolate", + "max_attempts": 2, + "outputs": [ + "build" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Build-Win-MSVC-x86_64-Debug-Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" } ], "command": [ @@ -11582,7 +12427,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release-ANGLE\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Debug-Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11592,9 +12437,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11619,7 +12463,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Release-Shared": { + "Build-Win-MSVC-x86_64-Debug-Wuffs": { "caches": [ { "name": "vpython", @@ -11630,27 +12474,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" - }, - { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" } ], "command": [ @@ -11658,7 +12497,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release-Shared\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Debug-Wuffs\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11668,9 +12507,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11695,7 +12533,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Release-UBSAN": { + "Build-Win-MSVC-x86_64-Release": { "caches": [ { "name": "vpython", @@ -11706,27 +12544,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" - }, - { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" } ], "command": [ @@ -11734,7 +12567,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release-UBSAN\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Release\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11744,9 +12577,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11771,7 +12603,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-Clang-x86_64-Release-Vulkan": { + "Build-Win-MSVC-x86_64-Release-Shared": { "caches": [ { "name": "vpython", @@ -11782,27 +12614,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", "version": "version:2.7.15.chromium14" - }, - { - "name": "skia/bots/clang_win", - "path": "clang_win", - "version": "version:10" } ], "command": [ @@ -11810,7 +12637,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-Clang-x86_64-Release-Vulkan\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Release-Shared\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11820,9 +12647,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11847,7 +12673,7 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-MSVC-arm64-Debug": { + "Build-Win-MSVC-x86_64-Release-Vulkan": { "caches": [ { "name": "vpython", @@ -11858,17 +12684,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -11881,7 +12707,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-arm64-Debug\",\"swarm_out_dir\":\"build\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Release-Vulkan\",\"swarm_out_dir\":\"build\"}", "skia" ], "dependencies": [ @@ -11891,9 +12717,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -11918,54 +12743,81 @@ ], "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-MSVC-arm64-Debug-ANGLE": { + "BuildStats-Debian9-Clang-arm-Release-Flutter_Android": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/bloaty", + "path": "bloaty", + "version": "version:1" + }, + { + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-arm64-Debug-ANGLE\",\"swarm_out_dir\":\"build\"}", + "compute_buildstats", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-Clang-arm-Release-Flutter_Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Build-Debian9-Clang-arm-Release-Flutter_Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -11980,63 +12832,88 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "perf" + ] }, - "Build-Win-MSVC-arm64-Release": { + "BuildStats-Debian9-Clang-x86_64-Release": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/bloaty", + "path": "bloaty", + "version": "version:1" + }, + { + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-arm64-Release\",\"swarm_out_dir\":\"build\"}", + "compute_buildstats", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-Clang-x86_64-Release\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -12051,63 +12928,88 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "perf" + ] }, - "Build-Win-MSVC-arm64-Release-ANGLE": { + "BuildStats-Debian9-EMCC-asmjs-Release-PathKit": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/bloaty", + "path": "bloaty", + "version": "version:1" + }, + { + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-arm64-Release-ANGLE\",\"swarm_out_dir\":\"build\"}", + "compute_buildstats", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-asmjs-Release-PathKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Build-Debian9-EMCC-asmjs-Release-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -12122,63 +13024,88 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "perf" + ] }, - "Build-Win-MSVC-x86-Debug": { + "BuildStats-Debian9-EMCC-wasm-Debug-CanvasKit": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/bloaty", + "path": "bloaty", + "version": "version:1" + }, + { + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86-Debug\",\"swarm_out_dir\":\"build\"}", + "compute_buildstats", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Debug-CanvasKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Build-Debian9-EMCC-wasm-Debug-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -12193,63 +13120,88 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "perf" + ] }, - "Build-Win-MSVC-x86-Release": { + "BuildStats-Debian9-EMCC-wasm-Debug-CanvasKit_CPU": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/bloaty", + "path": "bloaty", + "version": "version:1" + }, + { + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86-Release\",\"swarm_out_dir\":\"build\"}", + "compute_buildstats", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Debug-CanvasKit_CPU\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Build-Debian9-EMCC-wasm-Debug-CanvasKit_CPU" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -12264,63 +13216,88 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "perf" + ] }, - "Build-Win-MSVC-x86_64-Debug": { + "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/bloaty", + "path": "bloaty", + "version": "version:1" + }, + { + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Debug\",\"swarm_out_dir\":\"build\"}", + "compute_buildstats", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Build-Debian9-EMCC-wasm-Release-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -12335,63 +13312,88 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "perf" + ] }, - "Build-Win-MSVC-x86_64-Debug-Vulkan": { + "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit_CPU": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/bloaty", + "path": "bloaty", + "version": "version:1" + }, + { + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Debug-Vulkan\",\"swarm_out_dir\":\"build\"}", + "compute_buildstats", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit_CPU\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -12406,63 +13408,88 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "perf" + ] }, - "Build-Win-MSVC-x86_64-Debug-Wuffs": { + "BuildStats-Debian9-EMCC-wasm-Release-PathKit": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/bloaty", + "path": "bloaty", + "version": "version:1" + }, + { + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Debug-Wuffs\",\"swarm_out_dir\":\"build\"}", + "compute_buildstats", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Release-PathKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Build-Debian9-EMCC-wasm-Release-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -12477,63 +13504,91 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "perf" + ] }, - "Build-Win-MSVC-x86_64-Release": { + "Housekeeper-Nightly-RecreateSKPs_Canary": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" + }, + { + "name": "go_cache", + "path": "cache/go_cache" + }, + { + "name": "gopath", + "path": "cache/gopath" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/go", + "path": "go", + "version": "version:7" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Release\",\"swarm_out_dir\":\"build\"}", + "recreate_skps", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-Nightly-RecreateSKPs_Canary\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "pool:Skia" + "pool:SkiaCT", + "os:Debian-9.8" ], "env_prefixes": { "PATH": [ @@ -12544,1007 +13599,41 @@ "cache/vpython" ] }, - "execution_timeout_ns": 3600000000000, + "execution_timeout_ns": 14400000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", + "io_timeout_ns": 14400000000000, + "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com" }, - "Build-Win-MSVC-x86_64-Release-Shared": { + "Housekeeper-Nightly-UpdateGoDeps": { "caches": [ { - "name": "vpython", - "path": "cache/vpython" + "name": "go_cache", + "path": "cache/go_cache" + }, + { + "name": "gopath", + "path": "cache/gopath" } ], "cipd_packages": [ { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" }, { - "name": "infra/tools/luci-auth/${platform}", + "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci/vpython/${platform}", + "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Release-Shared\",\"swarm_out_dir\":\"build\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "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" - }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", - "max_attempts": 2, - "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Build-Win-MSVC-x86_64-Release-Vulkan": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compile", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Win-MSVC-x86_64-Release-Vulkan\",\"swarm_out_dir\":\"build\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateWinToolchain" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-highcpu-64", - "os:Windows-Server-14393", - "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" - }, - "idempotent": true, - "io_timeout_ns": 3600000000000, - "isolate": "compile.isolate", - "max_attempts": 2, - "outputs": [ - "build" - ], - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" - }, - "BuildStats-Debian9-Clang-arm-Release-Flutter_Android": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/bloaty", - "path": "bloaty", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_buildstats", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-Clang-arm-Release-Flutter_Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Flutter_Android" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" - ], - "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, - "outputs": [ - "perf" - ] - }, - "BuildStats-Debian9-Clang-x86_64-Release": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/bloaty", - "path": "bloaty", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_buildstats", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-Clang-x86_64-Release\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" - ], - "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, - "outputs": [ - "perf" - ] - }, - "BuildStats-Debian9-EMCC-asmjs-Release-PathKit": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/bloaty", - "path": "bloaty", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_buildstats", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-asmjs-Release-PathKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-asmjs-Release-PathKit" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" - ], - "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, - "outputs": [ - "perf" - ] - }, - "BuildStats-Debian9-EMCC-wasm-Debug-CanvasKit": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/bloaty", - "path": "bloaty", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_buildstats", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Debug-CanvasKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Debug-CanvasKit" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" - ], - "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, - "outputs": [ - "perf" - ] - }, - "BuildStats-Debian9-EMCC-wasm-Debug-CanvasKit_CPU": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/bloaty", - "path": "bloaty", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_buildstats", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Debug-CanvasKit_CPU\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Debug-CanvasKit_CPU" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" - ], - "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, - "outputs": [ - "perf" - ] - }, - "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/bloaty", - "path": "bloaty", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_buildstats", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-CanvasKit" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" - ], - "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, - "outputs": [ - "perf" - ] - }, - "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit_CPU": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/bloaty", - "path": "bloaty", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_buildstats", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit_CPU\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" - ], - "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, - "outputs": [ - "perf" - ] - }, - "BuildStats-Debian9-EMCC-wasm-Release-PathKit": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/bloaty", - "path": "bloaty", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_buildstats", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Release-PathKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-PathKit" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" - ], - "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, - "outputs": [ - "perf" - ] - }, - "Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "calmbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release", - "Build-Debian9-Clang-x86_64-Release-ParentRevision", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "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": "calmbench.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] - }, - "Calmbench-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "calmbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Calmbench-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release", - "Build-Debian9-Clang-x86_64-Release-ParentRevision", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG" - ], - "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": 3600000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 3600000000000, - "isolate": "calmbench.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] - }, - "Housekeeper-Nightly-RecreateSKPs_Canary": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - }, - { - "name": "go_cache", - "path": "cache/go_cache" - }, - { - "name": "gopath", - "path": "cache/gopath" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "skia/bots/go", - "path": "go", - "version": "version:7" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "recreate_skps", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-Nightly-RecreateSKPs_Canary\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" - ], - "dimensions": [ - "pool:SkiaCT", - "os:Debian-9.8" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 14400000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 14400000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Housekeeper-Nightly-UpdateGoDeps": { - "caches": [ - { - "name": "go_cache", - "path": "cache/go_cache" - }, - { - "name": "gopath", - "path": "cache/gopath" - } - ], - "cipd_packages": [ - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/go", @@ -13599,365 +13688,13 @@ "PATH": [ "cipd_bin_packages", "cipd_bin_packages/bin", - "go/go/bin" - ] - }, - "isolate": "empty.isolate", - "service_account": "skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Housekeeper-OnDemand-Presubmit": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build", - "path": "recipe_bundle", - "version": "git_revision:617e0fd3186eaae8bcb7521def0d6d3b4a5bcaf1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "run_presubmit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-OnDemand-Presubmit\",\"category\":\"cq\",\"patch_gerrit_url\":\"https://skia-review.googlesource.com\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_project\":\"skia\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"reason\":\"CQ\",\"repo_name\":\"skia\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", - "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": "run_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Housekeeper-PerCommit": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - }, - { - "name": "git", - "path": "cache/git" - }, - { - "name": "git_cache", - "path": "cache/git_cache" - }, - { - "name": "work", - "path": "cache/work" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "housekeeper", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-PerCommit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "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-housekeeper@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Housekeeper-PerCommit-BuildTaskDrivers": { - "caches": [ - { - "name": "go_cache", - "path": "cache/go_cache" - }, - { - "name": "gopath", - "path": "cache/gopath" - } - ], - "cipd_packages": [ - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "skia/bots/go", - "path": "go", - "version": "version:7" - } - ], - "command": [ - "/bin/bash", - "skia/infra/bots/build_task_drivers.sh", - "${ISOLATED_OUTDIR}" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin", - "go/go/bin" - ] - }, - "idempotent": true, - "isolate": "task_drivers.isolate" - }, - "Housekeeper-PerCommit-BundleRecipes": { - "cipd_packages": [ - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - } - ], - "command": [ - "/bin/bash", - "skia/infra/bots/bundle_recipes.sh", - "${ISOLATED_OUTDIR}" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ] - }, - "idempotent": true, - "isolate": "recipes.isolate" - }, - "Housekeeper-PerCommit-CheckGeneratedFiles": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - }, - { - "name": "work", - "path": "cache/work" - }, - { - "name": "go_cache", - "path": "cache/go_cache" - }, - { - "name": "gopath", - "path": "cache/gopath" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/go", - "path": "go", - "version": "version:7" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "check_generated_files", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-PerCommit-CheckGeneratedFiles\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highcpu-64", - "os:Debian-9.8", - "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" + "go/go/bin" + ] }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + "isolate": "empty.isolate", + "service_account": "skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com" }, - "Housekeeper-PerCommit-InfraTests_Linux": { + "Housekeeper-OnDemand-Presubmit": { "caches": [ { "name": "vpython", @@ -13974,73 +13711,57 @@ { "name": "work", "path": "cache/work" - }, - { - "name": "go_cache", - "path": "cache/go_cache" - }, - { - "name": "gopath", - "path": "cache/gopath" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" + "version": "version:2.24.0.chromium16" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/go", - "path": "go", - "version": "version:7" + "name": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build", + "path": "recipe_bundle", + "version": "git_revision:a8bcedad6768e206c4d2bd1718caa849f29cd42d" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "infra", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Housekeeper-PerCommit-InfraTests_Linux\",\"repository\":\"<(REPO)\",\"swarm_out_dir\":\"output_ignored\"}", + "run_presubmit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-OnDemand-Presubmit\",\"category\":\"cq\",\"patch_gerrit_url\":\"https://skia-review.googlesource.com\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_project\":\"skia\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"reason\":\"CQ\",\"repo_name\":\"skia\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" - ], "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-highmem-2", + "machine_type:n1-highcpu-64", "os:Debian-9.8", "pool:Skia" ], @@ -14057,13 +13778,12 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "infra_tests.isolate", + "isolate": "run_recipe.isolate", "max_attempts": 2, "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Housekeeper-PerCommit-InfraTests_Win": { + "Housekeeper-PerCommit": { "caches": [ { "name": "vpython", @@ -14080,69 +13800,46 @@ { "name": "work", "path": "cache/work" - }, - { - "name": "go_cache", - "path": "cache/go_cache" - }, - { - "name": "gopath", - "path": "cache/gopath" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" + "version": "version:2.24.0.chromium16" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "skia/bots/go_win", - "path": "go", - "version": "version:0" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "infra", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Housekeeper-PerCommit-InfraTests_Win\",\"repository\":\"<(REPO)\",\"swarm_out_dir\":\"output_ignored\"}", + "housekeeper", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-PerCommit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -14151,8 +13848,8 @@ "dimensions": [ "cpu:x86-64-Haswell_GCE", "gpu:none", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "machine_type:n1-highmem-2", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -14168,162 +13865,13 @@ "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "idempotent": true, "io_timeout_ns": 3600000000000, - "isolate": "infra_tests.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Housekeeper-PerCommit-IsolateAndroidNDKLinux": { - "cipd_packages": [ - { - "name": "skia/bots/android_ndk_linux", - "path": "android_ndk_linux", - "version": "version:15" - } - ], - "command": [ - "/bin/cp", - "-rL", - "android_ndk_linux", - "${ISOLATED_OUTDIR}" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "pool:Skia" - ], - "idempotent": true, - "isolate": "empty.isolate" - }, - "Housekeeper-PerCommit-IsolateMSKP": { - "cipd_packages": [ - { - "name": "skia/bots/mskp", - "path": "mskp", - "version": "version:2" - } - ], - "command": [ - "/bin/cp", - "-rL", - "mskp", - "${ISOLATED_OUTDIR}" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "pool:Skia" - ], - "idempotent": true, - "isolate": "empty.isolate" - }, - "Housekeeper-PerCommit-IsolateSKP": { - "cipd_packages": [ - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - } - ], - "command": [ - "/bin/cp", - "-rL", - "skp", - "${ISOLATED_OUTDIR}" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "pool:Skia" - ], - "idempotent": true, - "isolate": "empty.isolate" - }, - "Housekeeper-PerCommit-IsolateSVG": { - "cipd_packages": [ - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - } - ], - "command": [ - "/bin/cp", - "-rL", - "svg", - "${ISOLATED_OUTDIR}" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "pool:Skia" - ], - "idempotent": true, - "isolate": "empty.isolate" - }, - "Housekeeper-PerCommit-IsolateSkImage": { - "cipd_packages": [ - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - } - ], - "command": [ - "/bin/cp", - "-rL", - "skimage", - "${ISOLATED_OUTDIR}" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "pool:Skia" - ], - "idempotent": true, - "isolate": "empty.isolate" - }, - "Housekeeper-PerCommit-IsolateWinToolchain": { - "cipd_packages": [ - { - "name": "skia/bots/win_toolchain", - "path": "win_toolchain", - "version": "version:9" - } - ], - "command": [ - "/bin/cp", - "-rL", - "win_toolchain", - "${ISOLATED_OUTDIR}" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "pool:Skia" - ], - "idempotent": true, - "isolate": "empty.isolate" + "service_account": "skia-external-housekeeper@skia-swarming-bots.iam.gserviceaccount.com" }, - "Housekeeper-Weekly-RecreateSKPs": { + "Housekeeper-PerCommit-BuildTaskDrivers": { "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - }, { "name": "go_cache", "path": "cache/go_cache" @@ -14334,35 +13882,20 @@ } ], "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, { "name": "infra/git/${platform}", "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" + "version": "version:2.24.0.chromium16" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/go", @@ -14371,350 +13904,161 @@ } ], "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "recreate_skps", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-Weekly-RecreateSKPs\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "/bin/bash", + "skia/infra/bots/build_task_drivers.sh", + "${ISOLATED_OUTDIR}" ], "dimensions": [ - "pool:SkiaCT", - "os:Debian-9.8" + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "pool:Skia" ], "env_prefixes": { "PATH": [ "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" + "cipd_bin_packages/bin", + "go/go/bin" ] }, - "execution_timeout_ns": 14400000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 14400000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com" + "idempotent": true, + "isolate": "task_drivers.isolate" }, - "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], + "Housekeeper-PerCommit-BundleRecipes": { "cipd_packages": [ { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" }, { - "name": "infra/tools/luci-auth/${platform}", + "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci/vpython/${platform}", + "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" - ], - "dimensions": [ - "device_os:MOB30Q", - "device_type:sprout", - "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": "perf_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] - }, - "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci-auth/${platform}", + "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "version:2.7.15.chromium14" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/lottie-samples", - "path": "lottie-samples", - "version": "version:1" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "perf_skottietrace", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "/bin/bash", + "skia/infra/bots/bundle_recipes.sh", + "${ISOLATED_OUTDIR}" ], "dimensions": [ - "device_os:MOB30Q", - "device_type:sprout", - "os:Android", + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", "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": "perf_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] + "idempotent": true, + "isolate": "recipes.isolate" }, - "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android": { + "Housekeeper-PerCommit-CheckGeneratedFiles": { "caches": [ { "name": "vpython", "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" }, { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "name": "git", + "path": "cache/git" }, { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" - ], - "dimensions": [ - "device_os:NRD90M_G920TUVS6FRC1", - "device_type:zerofltetmo", - "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": "perf_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] - }, - "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "name": "git_cache", + "path": "cache/git_cache" }, { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "name": "work", + "path": "cache/work" }, { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" - ], - "dimensions": [ - "device_os:NRD90M_G920TUVS6FRC1", - "device_type:zerofltetmo", - "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": "perf_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] - }, - "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android": { - "caches": [ + "name": "go_cache", + "path": "cache/go_cache" + }, { - "name": "vpython", - "path": "cache/vpython" + "name": "gopath", + "path": "cache/gopath" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/go", + "path": "go", + "version": "version:7" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "check_generated_files", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-PerCommit-CheckGeneratedFiles\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_os:R16NW_G930FXXS2ERH6", - "device_type:herolte", - "os:Android", + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highcpu-64", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -14726,61 +14070,100 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, + "execution_timeout_ns": 3600000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "outputs": [ - "perf" - ] + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan": { + "Housekeeper-PerCommit-InfraTests_Linux": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" + }, + { + "name": "go_cache", + "path": "cache/go_cache" + }, + { + "name": "gopath", + "path": "cache/gopath" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/go", + "path": "go", + "version": "version:7" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "infra", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Housekeeper-PerCommit-InfraTests_Linux\",\"repository\":\"<(REPO)\",\"swarm_out_dir\":\"output_ignored\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android_Vulkan", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_os:R16NW_G930FXXS2ERH6", - "device_type:herolte", - "os:Android", + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -14792,61 +14175,106 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, + "execution_timeout_ns": 3600000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "infra_tests.isolate", "max_attempts": 2, - "outputs": [ - "perf" - ] + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android": { + "Housekeeper-PerCommit-InfraTests_Win": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" + }, + { + "name": "go_cache", + "path": "cache/go_cache" + }, + { + "name": "gopath", + "path": "cache/gopath" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/go_win", + "path": "go", + "version": "version:0" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "infra", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Housekeeper-PerCommit-InfraTests_Win\",\"repository\":\"<(REPO)\",\"swarm_out_dir\":\"output_ignored\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_os:R16NW_G960FXXU2BRJ8", - "device_type:starlte", - "os:Android", + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -14858,128 +14286,238 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, + "execution_timeout_ns": 3600000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "idempotent": true, + "io_timeout_ns": 3600000000000, + "isolate": "infra_tests.isolate", "max_attempts": 2, - "outputs": [ - "perf" - ] + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" }, - "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan": { - "caches": [ + "Housekeeper-PerCommit-IsolateAndroidNDKLinux": { + "cipd_packages": [ { - "name": "vpython", - "path": "cache/vpython" + "name": "skia/bots/android_ndk_linux", + "path": "android_ndk_linux", + "version": "version:15" } ], + "command": [ + "/bin/cp", + "-rL", + "android_ndk_linux", + "${ISOLATED_OUTDIR}" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "pool:Skia" + ], + "idempotent": true, + "isolate": "empty.isolate" + }, + "Housekeeper-PerCommit-IsolateMSKP": { "cipd_packages": [ { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, + "name": "skia/bots/mskp", + "path": "mskp", + "version": "version:2" + } + ], + "command": [ + "/bin/cp", + "-rL", + "mskp", + "${ISOLATED_OUTDIR}" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "pool:Skia" + ], + "idempotent": true, + "isolate": "empty.isolate" + }, + "Housekeeper-PerCommit-IsolateSKP": { + "cipd_packages": [ { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + } + ], + "command": [ + "/bin/cp", + "-rL", + "skp", + "${ISOLATED_OUTDIR}" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "pool:Skia" + ], + "idempotent": true, + "isolate": "empty.isolate" + }, + "Housekeeper-PerCommit-IsolateSVG": { + "cipd_packages": [ { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" + "/bin/cp", + "-rL", + "svg", + "${ISOLATED_OUTDIR}" ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android_Vulkan", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "pool:Skia" + ], + "idempotent": true, + "isolate": "empty.isolate" + }, + "Housekeeper-PerCommit-IsolateSkImage": { + "cipd_packages": [ + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + } + ], + "command": [ + "/bin/cp", + "-rL", + "skimage", + "${ISOLATED_OUTDIR}" ], "dimensions": [ - "device_os:R16NW_G960FXXU2BRJ8", - "device_type:starlte", - "os:Android", + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", "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": "perf_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] + "idempotent": true, + "isolate": "empty.isolate" }, - "Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android": { + "Housekeeper-PerCommit-IsolateWinToolchain": { + "cipd_packages": [ + { + "name": "skia/bots/win_toolchain", + "path": "win_toolchain", + "version": "version:9" + } + ], + "command": [ + "/bin/cp", + "-rL", + "win_toolchain", + "${ISOLATED_OUTDIR}" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "pool:Skia" + ], + "idempotent": true, + "isolate": "empty.isolate" + }, + "Housekeeper-Weekly-RecreateSKPs": { "caches": [ { "name": "vpython", "path": "cache/vpython" + }, + { + "name": "git", + "path": "cache/git" + }, + { + "name": "git_cache", + "path": "cache/git_cache" + }, + { + "name": "work", + "path": "cache/work" + }, + { + "name": "go_cache", + "path": "cache/go_cache" + }, + { + "name": "gopath", + "path": "cache/gopath" } ], "cipd_packages": [ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/git/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.24.0.chromium16" + }, + { + "name": "infra/tools/git/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/git-credential-luci/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/go", + "path": "go", + "version": "version:7" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-MotoG4-GPU-Adreno405-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "recreate_skps", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Housekeeper-Weekly-RecreateSKPs\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_os:NPJS25.93-14.7-8", - "device_type:athene", - "os:Android", - "pool:Skia" + "pool:SkiaCT", + "os:Debian-9.8" ], "env_prefixes": { "PATH": [ @@ -14991,18 +14529,15 @@ ] }, "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": "perf_skia_bundled.isolate", + "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "outputs": [ - "perf" - ] + "service_account": "skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com" }, - "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android": { + "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -15013,17 +14548,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15031,7 +14566,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-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -15042,8 +14577,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.010_3507953_1441.7411", - "device_type:foster", + "device_os:MOB30Q", + "device_type:sprout", "os:Android", "pool:Skia" ], @@ -15068,7 +14603,7 @@ "perf" ] }, - "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android": { + "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing": { "caches": [ { "name": "vpython", @@ -15079,37 +14614,42 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/lottie-samples", + "path": "lottie-samples", + "version": "version:1" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_skottietrace", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", + "Build-Debian9-Clang-arm-Release-Android", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.010_3507953_1441.7411", - "device_type:foster", + "device_os:MOB30Q", + "device_type:sprout", "os:Android", "pool:Skia" ], @@ -15134,7 +14674,7 @@ "perf" ] }, - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads": { + "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -15145,17 +14685,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15163,19 +14703,19 @@ "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-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android", + "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.010_3507953_1441.7411", - "device_type:foster", + "device_os:NRD90M_G920TUVS6FRC1", + "device_type:zerofltetmo", "os:Android", "pool:Skia" ], @@ -15200,7 +14740,7 @@ "perf" ] }, - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan": { + "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -15211,17 +14751,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15229,19 +14769,19 @@ "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-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android_Vulkan", + "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.010_3507953_1441.7411", - "device_type:foster", + "device_os:NRD90M_G920TUVS6FRC1", + "device_type:zerofltetmo", "os:Android", "pool:Skia" ], @@ -15266,7 +14806,7 @@ "perf" ] }, - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { + "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -15277,17 +14817,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15295,7 +14835,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-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -15306,8 +14846,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.010_3507953_1441.7411", - "device_type:foster", + "device_os:R16NW_G930FXXS2ERH6", + "device_type:herolte", "os:Android", "pool:Skia" ], @@ -15332,7 +14872,7 @@ "perf" ] }, - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { + "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -15343,17 +14883,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15361,7 +14901,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-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -15372,8 +14912,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.010_3507953_1441.7411", - "device_type:foster", + "device_os:R16NW_G930FXXS2ERH6", + "device_type:herolte", "os:Android", "pool:Skia" ], @@ -15398,7 +14938,7 @@ "perf" ] }, - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { + "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -15409,17 +14949,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15427,19 +14967,19 @@ "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-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android_Vulkan", + "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.010_3507953_1441.7411", - "device_type:foster", + "device_os:R16NW_G960FXXU2BRJ8", + "device_type:starlte", "os:Android", "pool:Skia" ], @@ -15464,7 +15004,7 @@ "perf" ] }, - "Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { + "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -15475,17 +15015,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15493,19 +15033,19 @@ "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-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android", + "Build-Debian9-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:M4B30Z_3437181", - "device_type:hammerhead", + "device_os:R16NW_G960FXXU2BRJ8", + "device_type:starlte", "os:Android", "pool:Skia" ], @@ -15530,7 +15070,7 @@ "perf" ] }, - "Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android": { + "Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -15541,17 +15081,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15559,7 +15099,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-Nexus5-GPU-Adreno330-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -15570,8 +15110,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:M4B30Z_3437181", - "device_type:hammerhead", + "device_os:NPJS25.93-14.7-8", + "device_type:athene", "os:Android", "pool:Skia" ], @@ -15596,7 +15136,7 @@ "perf" ] }, - "Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { + "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -15607,17 +15147,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/text_blob_traces", + "path": "text_blob_traces", + "version": "version:0" } ], "command": [ @@ -15625,19 +15170,19 @@ "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-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", + "Build-Debian9-Clang-arm-Release-Android", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.023", - "device_type:bullhead", + "device_os:OPR6.170623.010_3507953_1441.7411", + "device_type:foster", "os:Android", "pool:Skia" ], @@ -15662,7 +15207,7 @@ "perf" ] }, - "Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { + "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -15673,17 +15218,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/text_blob_traces", + "path": "text_blob_traces", + "version": "version:0" } ], "command": [ @@ -15691,19 +15241,19 @@ "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-Nexus7-GPU-Tegra3-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android", + "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:LMY47V_1836172", - "device_type:grouper", + "device_os:OPR6.170623.010_3507953_1441.7411", + "device_type:foster", "os:Android", "pool:Skia" ], @@ -15728,7 +15278,7 @@ "perf" ] }, - "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -15739,22 +15289,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15762,19 +15307,19 @@ "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-P30-GPU-MaliG76-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", + "Build-Debian9-Clang-arm-Release-Android", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:HUAWEIELE-L29", - "device_type:HWELE", + "device_os:OPR6.170623.010_3507953_1441.7411", + "device_type:foster", "os:Android", "pool:Skia" ], @@ -15799,7 +15344,7 @@ "perf" ] }, - "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -15810,22 +15355,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15833,19 +15373,19 @@ "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-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android_Vulkan", + "Build-Debian9-Clang-arm-Release-Android_Vulkan", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:HUAWEIELE-L29", - "device_type:HWELE", + "device_os:OPR6.170623.010_3507953_1441.7411", + "device_type:foster", "os:Android", "pool:Skia" ], @@ -15870,7 +15410,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -15881,17 +15421,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -15899,7 +15439,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-Pixel-GPU-Adreno530-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -15910,8 +15450,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", + "device_os:OPR6.170623.010_3507953_1441.7411", + "device_type:foster", "os:Android", "pool:Skia" ], @@ -15936,7 +15476,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench": { + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -15947,36 +15487,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", + "Build-Debian9-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", + "device_os:OPR6.170623.010_3507953_1441.7411", + "device_type:foster", "os:Android", "pool:Skia" ], @@ -15995,13 +15536,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench": { + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -16012,36 +15553,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", + "Build-Debian9-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", + "device_os:OPR6.170623.010_3507953_1441.7411", + "device_type:foster", "os:Android", "pool:Skia" ], @@ -16060,13 +15602,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench": { + "Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -16077,36 +15619,42 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/text_blob_traces", + "path": "text_blob_traces", + "version": "version:0" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", + "Build-Debian9-Clang-arm-Release-Android", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", + "device_os:M4B30Z_3437181", + "device_type:hammerhead", "os:Android", "pool:Skia" ], @@ -16125,13 +15673,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { + "Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -16142,17 +15690,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -16160,19 +15708,19 @@ "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-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android_Vulkan", + "Build-Debian9-Clang-arm-Release-Android", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", + "device_os:M4B30Z_3437181", + "device_type:hammerhead", "os:Android", "pool:Skia" ], @@ -16197,7 +15745,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench": { + "Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs": { "caches": [ { "name": "vpython", @@ -16208,36 +15756,42 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/text_blob_traces", + "path": "text_blob_traces", + "version": "version:0" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android_Vulkan", + "Build-Debian9-Clang-arm64-Release-Android_Wuffs", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", + "device_os:OPR6.170623.023", + "device_type:bullhead", "os:Android", "pool:Skia" ], @@ -16256,13 +15810,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { + "Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -16273,17 +15827,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -16291,7 +15845,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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -16302,8 +15856,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:taimen", + "device_os:OPR6.170623.023", + "device_type:bullhead", "os:Android", "pool:Skia" ], @@ -16328,7 +15882,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_CCPR_Skpbench": { + "Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -16339,36 +15893,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_CCPR_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", + "Build-Debian9-Clang-arm-Release-Android", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:taimen", + "device_os:LMY47V_1836172", + "device_type:grouper", "os:Android", "pool:Skia" ], @@ -16387,13 +15942,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Skpbench": { + "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -16404,36 +15959,42 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:taimen", + "device_os:HUAWEIELE-L29", + "device_type:HWELE", "os:Android", "pool:Skia" ], @@ -16452,13 +16013,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { + "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -16469,17 +16030,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" } ], "command": [ @@ -16487,7 +16053,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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -16498,8 +16064,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:taimen", + "device_os:HUAWEIELE-L29", + "device_type:HWELE", "os:Android", "pool:Skia" ], @@ -16524,7 +16090,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan_Skpbench": { + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -16535,36 +16101,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android_Vulkan", + "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ "device_os:PPR1.180610.009", - "device_type:taimen", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -16583,13 +16150,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench": { "caches": [ { "name": "vpython", @@ -16600,37 +16167,36 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-Pixel3-GPU-Adreno630-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "skpbench", + "{\"$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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Housekeeper-PerCommit-IsolateMSKP" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -16649,13 +16215,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "isolate": "skpbench_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_CCPR_Skpbench": { + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench": { "caches": [ { "name": "vpython", @@ -16666,17 +16232,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -16684,7 +16250,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_CCPR_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -16694,8 +16260,8 @@ "Housekeeper-PerCommit-IsolateMSKP" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -16720,7 +16286,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Skpbench": { + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench": { "caches": [ { "name": "vpython", @@ -16731,17 +16297,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -16749,7 +16315,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -16759,8 +16325,8 @@ "Housekeeper-PerCommit-IsolateMSKP" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -16785,7 +16351,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -16796,17 +16362,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -16814,7 +16380,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-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -16825,8 +16391,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -16851,7 +16417,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan_Skpbench": { + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench": { "caches": [ { "name": "vpython", @@ -16862,17 +16428,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -16880,7 +16446,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -16890,8 +16456,8 @@ "Housekeeper-PerCommit-IsolateMSKP" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -16916,7 +16482,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { + "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -16927,17 +16493,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -16945,7 +16511,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-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -16956,8 +16522,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QP1A.190711.020", - "device_type:sargo", + "device_os:PPR1.180610.009", + "device_type:taimen", "os:Android", "pool:Skia" ], @@ -16982,7 +16548,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_CCPR_Skpbench": { + "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -16993,36 +16559,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_CCPR_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android", + "Build-Debian9-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QP1A.190711.020", - "device_type:sargo", + "device_os:PPR1.180610.009", + "device_type:taimen", "os:Android", "pool:Skia" ], @@ -17041,13 +16608,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Skpbench": { + "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -17058,36 +16625,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "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" ], @@ -17106,13 +16674,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { + "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -17123,17 +16691,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17141,7 +16709,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-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -17152,8 +16720,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" ], @@ -17178,7 +16746,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan_Skpbench": { + "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -17189,32 +16757,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "skpbench", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan_Skpbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm64-Release-Android_Vulkan", + "Build-Debian9-Clang-arm64-Release-Android", "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateMSKP" + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ "device_os:QP1A.190711.020", @@ -17237,13 +16806,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "skpbench_skia_bundled.isolate", + "isolate": "perf_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { + "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -17254,17 +16823,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17272,19 +16841,19 @@ "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-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android", + "Build-Debian9-Clang-arm64-Release-Android_Vulkan", "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" ], @@ -17309,7 +16878,7 @@ "perf" ] }, - "Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { + "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -17320,17 +16889,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17338,21 +16907,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Build-Debian9-Clang-arm64-Release-Android", "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:flame", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -17375,7 +16944,7 @@ "perf" ] }, - "Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { + "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -17386,17 +16955,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17404,21 +16973,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Build-Debian9-Clang-arm64-Release-Android_Vulkan", "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:flame", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -17441,7 +17010,7 @@ "perf" ] }, - "Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { + "Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -17452,17 +17021,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17470,21 +17039,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Build-Debian9-Clang-arm-Release-Android", "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": [ @@ -17507,7 +17076,7 @@ "perf" ] }, - "Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { + "Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { "caches": [ { "name": "vpython", @@ -17518,17 +17087,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17536,18 +17105,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES", + "Build-Debian9-Clang-arm-Release-Chromebook_GLES", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:IntelHDGraphics615", + "gpu:MaliT764", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -17573,7 +17142,7 @@ "perf" ] }, - "Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { + "Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { "caches": [ { "name": "vpython", @@ -17584,17 +17153,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17602,7 +17171,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -17613,7 +17182,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT604", + "gpu:TegraK1", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -17639,7 +17208,7 @@ "perf" ] }, - "Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { + "Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { "caches": [ { "name": "vpython", @@ -17650,17 +17219,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17668,7 +17237,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -17679,7 +17248,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT860", + "gpu:PowerVRGX6250", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -17705,7 +17274,7 @@ "perf" ] }, - "Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All": { + "Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -17716,17 +17285,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17734,19 +17303,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromecast", - "Housekeeper-PerCommit-IsolateSKP" + "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:1.30_109591", - "device_type:chorizo", - "os:Android", - "pool:Skia" + "gpu:IntelHDGraphics615", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -17769,7 +17340,7 @@ "perf" ] }, - "Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": { + "Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { "caches": [ { "name": "vpython", @@ -17780,17 +17351,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17798,19 +17369,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromecast", - "Housekeeper-PerCommit-IsolateSKP" + "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:1.30_109591", - "device_type:chorizo", - "os:Android", - "pool:Skia" + "gpu:MaliT604", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -17833,7 +17406,7 @@ "perf" ] }, - "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { "caches": [ { "name": "vpython", @@ -17844,32 +17417,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17877,18 +17435,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia" + "gpu:MaliT860", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -17911,7 +17472,7 @@ "perf" ] }, - "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN": { + "Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All": { "caches": [ { "name": "vpython", @@ -17922,37 +17483,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -17960,17 +17501,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-ASAN" + "Build-Debian9-Clang-arm-Release-Chromecast", + "Housekeeper-PerCommit-IsolateSKP" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "device_os:1.30_109591", + "device_type:chorizo", + "os:Android", "pool:Skia" ], "env_prefixes": { @@ -17989,12 +17531,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "perf_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { + "Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": { "caches": [ { "name": "vpython", @@ -18005,32 +17547,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -18038,17 +17565,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-arm-Release-Chromecast", + "Housekeeper-PerCommit-IsolateSKP" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "device_os:1.30_109591", + "device_type:chorizo", + "os:Android", "pool:Skia" ], "env_prefixes": { @@ -18072,7 +17600,7 @@ "perf" ] }, - "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { + "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -18083,27 +17611,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -18116,12 +17644,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Fast" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -18150,7 +17678,7 @@ "perf" ] }, - "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { + "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN": { "caches": [ { "name": "vpython", @@ -18161,32 +17689,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -18194,12 +17727,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER" + "Build-Debian9-Clang-x86_64-Release-ASAN" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -18223,12 +17756,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "perf_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "perf" ] }, - "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing": { + "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -18239,45 +17772,40 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/lottie-samples", - "path": "lottie-samples", - "version": "version:1" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_skottietrace", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -18311,7 +17839,7 @@ "perf" ] }, - "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs": { + "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { "caches": [ { "name": "vpython", @@ -18322,27 +17850,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -18355,12 +17883,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Wuffs" + "Build-Debian9-Clang-x86_64-Release-Fast" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -18389,7 +17917,7 @@ "perf" ] }, - "Perf-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All": { + "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { "caches": [ { "name": "vpython", @@ -18400,27 +17928,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -18433,15 +17961,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER" ], "dimensions": [ - "cpu:x86-64-Skylake_GCE", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", "os:Debian-9.8", "pool:Skia" ], @@ -18466,7 +17995,7 @@ "perf" ] }, - "Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { + "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing": { "caches": [ { "name": "vpython", @@ -18477,27 +18006,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -18505,17 +18034,17 @@ "version": "version:9" }, { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" + "name": "skia/bots/lottie-samples", + "path": "lottie-samples", + "version": "version:1" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_skottietrace", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -18523,8 +18052,9 @@ "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:22b1", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -18548,7 +18078,7 @@ "perf" ] }, - "Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { + "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs": { "caches": [ { "name": "vpython", @@ -18559,42 +18089,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -18602,16 +18122,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Vulkan" + "Build-Debian9-Clang-x86_64-Release-Wuffs" ], "dimensions": [ - "gpu:8086:22b1", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -18635,7 +18156,7 @@ "perf" ] }, - "Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { + "Perf-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -18646,37 +18167,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -18684,94 +18200,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" - ], - "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", - "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": "perf_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] - }, - "Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" - }, - { - "name": "skia/bots/lottie-samples", - "path": "lottie-samples", - "version": "version:1" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "perf_skottietrace", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -18779,95 +18208,8 @@ "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", - "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": "perf_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "perf" - ] - }, - "Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Vulkan" - ], - "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Skylake_GCE", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -18891,7 +18233,7 @@ "perf" ] }, - "Perf-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { + "Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -18902,27 +18244,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -18940,7 +18282,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -18948,7 +18290,7 @@ "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:0f31", + "gpu:8086:22b1", "os:Debian-9.4", "pool:Skia" ], @@ -18973,7 +18315,7 @@ "perf" ] }, - "Perf-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { + "Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -18984,33 +18326,38 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -19022,15 +18369,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:8086:0102", + "gpu:8086:22b1", "os:Debian-9.4", "pool:Skia" ], @@ -19055,7 +18402,7 @@ "perf" ] }, - "Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { + "Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -19066,35 +18413,54 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_pathkit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-asmjs-Release-PathKit" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -19118,7 +18484,7 @@ "perf" ] }, - "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { + "Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing": { "caches": [ { "name": "vpython", @@ -19129,35 +18495,59 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" + }, + { + "name": "skia/bots/lottie-samples", + "path": "lottie-samples", + "version": "version:1" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_canvaskit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_skottietrace", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -19181,7 +18571,7 @@ "perf" ] }, - "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { + "Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -19192,35 +18582,59 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_pathkit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-PathKit" + "Build-Debian9-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -19244,7 +18658,7 @@ "perf" ] }, - "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM": { + "Perf-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -19255,27 +18669,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -19283,47 +18697,26 @@ "version": "version:9" }, { - "name": "skia/bots/node", - "path": "node", - "version": "version:1" - }, - { - "name": "skia/bots/lottie-samples", - "path": "lottie-samples", - "version": "version:1" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_skottiewasm_lottieweb", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:0f31", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -19347,7 +18740,7 @@ "perf" ] }, - "Perf-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { + "Perf-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -19358,38 +18751,55 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_canvaskit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-CanvasKit" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" + "gpu:8086:0102", + "os:Debian-9.4", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -19412,7 +18822,7 @@ "perf" ] }, - "Perf-Debian9-EMCC-NUC7i5BNK-GPU-IntelIris640-wasm-Release-All-SkottieWASM": { + "Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -19423,79 +18833,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" - }, - { - "name": "skia/bots/node", - "path": "node", - "version": "version:1" - }, - { - "name": "skia/bots/lottie-samples", - "path": "lottie-samples", - "version": "version:1" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_skottiewasm_lottieweb", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-NUC7i5BNK-GPU-IntelIris640-wasm-Release-All-SkottieWASM\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_pathkit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-CanvasKit" + "Build-Debian9-EMCC-asmjs-Release-PathKit" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -19513,13 +18879,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "isolate": "pathkit.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb": { + "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -19530,69 +18896,30 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - }, - { - "name": "skia/bots/node", - "path": "node", - "version": "version:1" - }, - { - "name": "skia/bots/lottie-samples", - "path": "lottie-samples", - "version": "version:1" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_skottiewasm_lottieweb", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_canvaskit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -19615,13 +18942,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "isolate": "canvaskit.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb_Canvas": { + "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -19632,69 +18959,30 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - }, - { - "name": "skia/bots/node", - "path": "node", - "version": "version:1" - }, - { - "name": "skia/bots/lottie-samples", - "path": "lottie-samples", - "version": "version:1" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_skottiewasm_lottieweb", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb_Canvas\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_pathkit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-EMCC-wasm-Release-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -19717,13 +19005,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "isolate": "pathkit.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb": { + "Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM": { "caches": [ { "name": "vpython", @@ -19734,38 +19022,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" - }, { "name": "skia/bots/node", "path": "node", @@ -19775,38 +19058,90 @@ "name": "skia/bots/lottie-samples", "path": "lottie-samples", "version": "version:1" - }, + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "perf_skottiewasm_lottieweb", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", + "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": "skottie_wasm.isolate", + "max_attempts": 2, + "outputs": [ + "perf" + ] + }, + "Perf-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { + "caches": [ { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/git/${platform}", + "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci/git-credential-luci/${platform}", + "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf_skottiewasm_lottieweb", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_canvaskit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-EMCC-wasm-Release-CanvasKit" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", - "pool:Skia" + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -19823,13 +19158,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "isolate": "canvaskit.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb_Canvas": { + "Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb": { "caches": [ { "name": "vpython", @@ -19840,38 +19175,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" - }, { "name": "skia/bots/node", "path": "node", @@ -19881,21 +19211,6 @@ "name": "skia/bots/lottie-samples", "path": "lottie-samples", "version": "version:1" - }, - { - "name": "infra/git/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.17.1.chromium15" - }, - { - "name": "infra/tools/git/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:c9c8a52bfeaf8bc00ece22fdfd447822c8fcad77" - }, - { - "name": "infra/tools/luci/git-credential-luci/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" } ], "command": [ @@ -19903,15 +19218,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf_skottiewasm_lottieweb", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb_Canvas\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -19929,7 +19245,7 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "isolate": "lottie_web.isolate", "max_attempts": 2, "outputs": [ "perf" @@ -19946,27 +19262,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20023,27 +19339,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20100,27 +19416,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20177,27 +19493,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20254,27 +19570,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20331,27 +19647,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20408,27 +19724,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20485,27 +19801,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20563,27 +19879,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20630,7 +19946,7 @@ "perf" ] }, - "Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -20641,27 +19957,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20674,7 +19990,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -20683,7 +19999,7 @@ ], "dimensions": [ "gpu:8086:1626", - "os:Mac-10.14.3", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -20707,7 +20023,7 @@ "perf" ] }, - "Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer": { + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -20718,27 +20034,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20751,7 +20067,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -20760,7 +20076,7 @@ ], "dimensions": [ "gpu:8086:1626", - "os:Mac-10.14.3", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -20795,27 +20111,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20872,27 +20188,192 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ASAN\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-Clang-x86_64-Release-ASAN" + ], + "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": "perf_skia_bundled.isolate", + "max_attempts": 1, + "outputs": [ + "perf" + ] + }, + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/valgrind", + "path": "valgrind", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "perf", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41" + ], + "dimensions": [ + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia", + "valgrind:1" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 32400000000000, + "expiration_ns": 172800000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 32400000000000, + "isolate": "perf_skia_bundled.isolate", + "max_attempts": 1, + "outputs": [ + "perf" + ] + }, + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20900,9 +20381,9 @@ "version": "version:9" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" } ], "command": [ @@ -20910,12 +20391,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ASAN\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-ASAN" + "Build-Debian9-Clang-x86_64-Release-Vulkan" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -20938,12 +20419,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "perf_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM": { "caches": [ { "name": "vpython", @@ -20954,27 +20435,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -20982,22 +20463,27 @@ "version": "version:9" }, { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" + "name": "skia/bots/node", + "path": "node", + "version": "version:1" + }, + { + "name": "skia/bots/lottie-samples", + "path": "lottie-samples", + "version": "version:1" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_skottiewasm_lottieweb", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Vulkan" + "Build-Debian9-EMCC-wasm-Release-CanvasKit" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -21019,13 +20505,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "perf_skia_bundled.isolate", + "isolate": "skottie_wasm.isolate", "max_attempts": 2, "outputs": [ "perf" ] }, - "Perf-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { + "Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb": { "caches": [ { "name": "vpython", @@ -21036,27 +20522,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21064,28 +20550,31 @@ "version": "version:9" }, { - "name": "skia/bots/valgrind", - "path": "valgrind", - "version": "version:7" + "name": "skia/bots/node", + "path": "node", + "version": "version:1" + }, + { + "name": "skia/bots/lottie-samples", + "path": "lottie-samples", + "version": "version:1" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "perf_skottiewasm_lottieweb", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41" + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ "gpu:10de:1cb3-430.14", "os:Ubuntu-18.04", - "pool:Skia", - "valgrind:1" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -21096,14 +20585,14 @@ "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, - "isolate": "perf_skia_bundled.isolate", - "max_attempts": 1, + "io_timeout_ns": 14400000000000, + "isolate": "lottie_web.isolate", + "max_attempts": 2, "outputs": [ "perf" ] @@ -21119,17 +20608,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21139,12 +20628,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21165,8 +20654,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -21201,17 +20690,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21221,12 +20710,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21247,8 +20736,8 @@ "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -21283,17 +20772,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21303,12 +20792,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21329,8 +20818,8 @@ "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -21365,17 +20854,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21385,12 +20874,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21447,17 +20936,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21467,12 +20956,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21529,17 +21018,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21549,12 +21038,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21611,17 +21100,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21631,12 +21120,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21693,17 +21182,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21713,12 +21202,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -21775,17 +21264,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21844,17 +21333,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21913,17 +21402,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -21982,17 +21471,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22002,12 +21491,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22029,7 +21518,7 @@ ], "dimensions": [ "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18362", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22064,17 +21553,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22084,12 +21573,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22111,7 +21600,7 @@ ], "dimensions": [ "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18362", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22146,17 +21635,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22166,12 +21655,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22192,8 +21681,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22228,17 +21717,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22248,12 +21737,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22274,8 +21763,8 @@ "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22310,17 +21799,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22330,12 +21819,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22356,8 +21845,8 @@ "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22392,17 +21881,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22412,12 +21901,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22438,8 +21927,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22474,17 +21963,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22494,12 +21983,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22520,8 +22009,8 @@ "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22556,17 +22045,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22576,12 +22065,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22602,8 +22091,8 @@ "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22638,17 +22127,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22658,12 +22147,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22685,7 +22174,7 @@ ], "dimensions": [ "gpu:8086:0a16-20.19.15.4963", - "os:Windows-10-18362", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22720,17 +22209,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22740,12 +22229,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22767,7 +22256,7 @@ ], "dimensions": [ "gpu:8086:0a16-20.19.15.4963", - "os:Windows-10-18362", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22802,17 +22291,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22822,12 +22311,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22848,8 +22337,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22884,17 +22373,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22904,12 +22393,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -22930,8 +22419,8 @@ "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -22966,17 +22455,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -22986,12 +22475,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23012,8 +22501,8 @@ "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -23048,17 +22537,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23068,12 +22557,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23094,8 +22583,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -23130,17 +22619,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23150,12 +22639,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23176,8 +22665,8 @@ "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -23212,17 +22701,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23232,12 +22721,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23258,8 +22747,8 @@ "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -23294,17 +22783,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23314,12 +22803,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23340,8 +22829,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -23376,17 +22865,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23396,12 +22885,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23422,8 +22911,8 @@ "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -23458,17 +22947,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23478,12 +22967,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23504,8 +22993,8 @@ "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -23540,17 +23029,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23560,12 +23049,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23622,17 +23111,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23642,12 +23131,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23693,7 +23182,7 @@ "perf" ] }, - "Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -23704,17 +23193,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23724,12 +23213,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23742,7 +23231,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -23751,9 +23240,8 @@ ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -23777,7 +23265,7 @@ "perf" ] }, - "Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN": { + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN": { "caches": [ { "name": "vpython", @@ -23788,17 +23276,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -23808,12 +23296,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -23826,7 +23314,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"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-UBSAN\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -23835,9 +23323,8 @@ ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -23872,17 +23359,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -23937,17 +23424,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24002,17 +23489,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24067,17 +23554,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24132,17 +23619,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24197,17 +23684,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24262,17 +23749,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24327,17 +23814,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24393,17 +23880,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24459,17 +23946,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24525,17 +24012,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24591,17 +24078,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24657,17 +24144,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24723,17 +24210,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24789,17 +24276,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24855,17 +24342,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24921,17 +24408,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -24987,17 +24474,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25053,17 +24540,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25119,17 +24606,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25185,17 +24672,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25251,17 +24738,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25317,17 +24804,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25383,17 +24870,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25449,17 +24936,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25515,17 +25002,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25581,17 +25068,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25647,17 +25134,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25713,17 +25200,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25779,17 +25266,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25845,17 +25332,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25911,17 +25398,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -25977,17 +25464,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26043,17 +25530,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26109,17 +25596,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26175,17 +25662,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26241,17 +25728,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26307,17 +25794,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26373,17 +25860,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26439,17 +25926,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26505,17 +25992,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26571,17 +26058,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26637,17 +26124,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26703,17 +26190,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26769,17 +26256,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26835,17 +26322,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26901,17 +26388,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -26967,17 +26454,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27033,17 +26520,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -27104,17 +26591,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -27175,17 +26662,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -27246,17 +26733,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -27317,17 +26804,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -27388,17 +26875,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -27459,17 +26946,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27526,17 +27013,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27593,17 +27080,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27660,17 +27147,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27727,17 +27214,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27793,17 +27280,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27859,17 +27346,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27925,17 +27412,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -27991,17 +27478,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28058,17 +27545,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28125,17 +27612,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28191,17 +27678,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28257,17 +27744,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28323,17 +27810,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28389,17 +27876,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28455,17 +27942,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28521,17 +28008,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28587,17 +28074,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28653,17 +28140,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28719,17 +28206,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28785,17 +28272,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28851,17 +28338,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28917,17 +28404,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -28983,17 +28470,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29049,17 +28536,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29115,17 +28602,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29181,17 +28668,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29236,7 +28723,7 @@ "test" ] }, - "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android": { + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -29247,17 +28734,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29265,19 +28752,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Debug-Android", + "Build-Debian9-Clang-arm64-Debug-Android", "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:flame", "os:Android", "pool:Skia" ], @@ -29302,7 +28789,7 @@ "test" ] }, - "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -29313,17 +28800,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29331,19 +28818,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Android", + "Build-Debian9-Clang-arm64-Debug-Android_Vulkan", "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:flame", "os:Android", "pool:Skia" ], @@ -29368,7 +28855,7 @@ "test" ] }, - "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All": { + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -29379,17 +28866,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29397,21 +28884,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Debug-Chromebook_GLES", + "Build-Debian9-Clang-arm64-Release-Android", "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:flame", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -29434,7 +28921,7 @@ "test" ] }, - "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -29445,17 +28932,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29463,21 +28950,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Build-Debian9-Clang-arm64-Release-Android_Vulkan", "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:flame", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -29500,7 +28987,7 @@ "test" ] }, - "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All": { + "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -29511,17 +28998,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29529,21 +29016,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Debug-Chromebook_GLES", + "Build-Debian9-Clang-arm-Debug-Android", "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": [ @@ -29566,7 +29053,7 @@ "test" ] }, - "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { + "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -29577,17 +29064,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29595,21 +29082,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Build-Debian9-Clang-arm-Release-Android", "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": [ @@ -29632,7 +29119,7 @@ "test" ] }, - "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All": { + "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -29643,17 +29130,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29661,7 +29148,7 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All\",\"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": [ @@ -29672,7 +29159,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:PowerVRGX6250", + "gpu:MaliT764", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -29698,7 +29185,7 @@ "test" ] }, - "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { + "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { "caches": [ { "name": "vpython", @@ -29709,17 +29196,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29727,7 +29214,7 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\",\"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": [ @@ -29738,139 +29225,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:PowerVRGX6250", - "os:ChromeOS", - "pool:Skia", - "release_version:10575.22.0" - ], - "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-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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\",\"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": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" - ], - "dimensions": [ - "gpu:IntelHDGraphics615", - "os:ChromeOS", - "pool:Skia", - "release_version:10575.22.0" - ], - "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-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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\",\"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": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" - ], - "dimensions": [ - "gpu:IntelHDGraphics615", + "gpu:MaliT764", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -29896,7 +29251,7 @@ "test" ] }, - "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All": { + "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -29907,17 +29262,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29925,7 +29280,7 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All\",\"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": [ @@ -29936,7 +29291,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT604", + "gpu:TegraK1", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -29962,7 +29317,7 @@ "test" ] }, - "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { + "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { "caches": [ { "name": "vpython", @@ -29973,17 +29328,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -29991,7 +29346,7 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\",\"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": [ @@ -30002,7 +29357,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT604", + "gpu:TegraK1", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -30028,7 +29383,7 @@ "test" ] }, - "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All": { + "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -30039,17 +29394,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30057,7 +29412,7 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All\",\"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": [ @@ -30068,7 +29423,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT860", + "gpu:PowerVRGX6250", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -30094,7 +29449,7 @@ "test" ] }, - "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { + "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { "caches": [ { "name": "vpython", @@ -30105,17 +29460,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30123,7 +29478,7 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\",\"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": [ @@ -30134,7 +29489,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT860", + "gpu:PowerVRGX6250", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -30160,7 +29515,7 @@ "test" ] }, - "Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All": { + "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -30171,17 +29526,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30189,19 +29544,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Debug-Chromecast", - "Housekeeper-PerCommit-IsolateSKP" + "Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:1.30_109591", - "device_type:chorizo", - "os:Android", - "pool:Skia" + "gpu:IntelHDGraphics615", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -30224,7 +29581,7 @@ "test" ] }, - "Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All": { + "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -30235,17 +29592,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30253,19 +29610,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromecast", - "Housekeeper-PerCommit-IsolateSKP" + "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:1.30_109591", - "device_type:chorizo", - "os:Android", - "pool:Skia" + "gpu:IntelHDGraphics615", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -30288,7 +29647,7 @@ "test" ] }, - "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All": { + "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -30299,17 +29658,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30317,19 +29676,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Debug-Chromecast", - "Housekeeper-PerCommit-IsolateSKP" + "Build-Debian9-Clang-arm-Debug-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:1.30_109591", - "device_type:chorizo", - "os:Android", - "pool:Skia" + "gpu:MaliT604", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -30352,7 +29713,7 @@ "test" ] }, - "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": { + "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { "caches": [ { "name": "vpython", @@ -30363,17 +29724,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30381,19 +29742,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-arm-Release-Chromecast", - "Housekeeper-PerCommit-IsolateSKP" + "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:1.30_109591", - "device_type:chorizo", - "os:Android", - "pool:Skia" + "gpu:MaliT604", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -30416,85 +29779,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"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": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86-Debug" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 21600000000000, - "expiration_ns": 72000000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 21600000000000, - "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "test" - ] - }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { + "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -30505,32 +29790,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30538,18 +29808,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian9-Clang-arm-Debug-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia" + "gpu:MaliT860", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -30572,7 +29845,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN": { + "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { "caches": [ { "name": "vpython", @@ -30583,37 +29856,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30621,18 +29874,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-ASAN" + "Build-Debian9-Clang-arm-Release-Chromebook_GLES", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia" + "gpu:MaliT860", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -30650,12 +29906,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs": { + "Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -30666,32 +29922,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30699,17 +29940,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian9-Clang-arm-Debug-Chromecast", + "Housekeeper-PerCommit-IsolateSKP" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "device_os:1.30_109591", + "device_type:chorizo", + "os:Android", "pool:Skia" ], "env_prefixes": { @@ -30733,7 +29975,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN": { + "Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All": { "caches": [ { "name": "vpython", @@ -30744,37 +29986,145 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All\",\"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": [ + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-Clang-arm-Release-Chromecast", + "Housekeeper-PerCommit-IsolateSKP" + ], + "dimensions": [ + "device_os:1.30_109591", + "device_type:chorizo", + "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-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All\",\"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": [ + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-Clang-arm-Debug-Chromecast", + "Housekeeper-PerCommit-IsolateSKP" + ], + "dimensions": [ + "device_os:1.30_109591", + "device_type:chorizo", + "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-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -30782,17 +30132,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-MSAN" + "Build-Debian9-Clang-arm-Release-Chromecast", + "Housekeeper-PerCommit-IsolateSKP" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "device_os:1.30_109591", + "device_type:chorizo", + "os:Android", "pool:Skia" ], "env_prefixes": { @@ -30804,19 +30155,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 32400000000000, + "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, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": { "caches": [ { "name": "vpython", @@ -30827,27 +30178,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -30860,18 +30211,20 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian10-GCC-x86-Debug-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", + "gpu:none", "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -30882,19 +30235,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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker": { "caches": [ { "name": "vpython", @@ -30905,27 +30258,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -30938,18 +30291,20 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE" + "Build-Debian10-GCC-x86-Release-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", + "gpu:none", "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -30972,7 +30327,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER": { + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker": { "caches": [ { "name": "vpython", @@ -30983,27 +30338,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31016,18 +30371,20 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-SK_USE_SKVM_BLITTER" + "Build-Debian10-GCC-x86_64-Debug-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", + "gpu:none", "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -31050,7 +30407,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack": { + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker": { "caches": [ { "name": "vpython", @@ -31061,27 +30418,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31094,18 +30451,20 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-SafeStack" + "Build-Debian10-GCC-x86_64-Release-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", + "gpu:none", "machine_type:n1-standard-16", "os:Debian-9.8", - "pool:Skia" + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -31128,7 +30487,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -31139,27 +30498,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31172,12 +30531,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Wuffs" + "Build-Debian9-Clang-x86-Debug" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31194,19 +30553,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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -31217,27 +30576,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31250,12 +30609,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31284,7 +30643,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN": { "caches": [ { "name": "vpython", @@ -31295,27 +30654,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31333,12 +30692,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-ASAN" + "Build-Debian9-Clang-x86_64-Debug-ASAN" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31367,7 +30726,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -31378,27 +30737,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31411,12 +30770,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31445,7 +30804,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN": { "caches": [ { "name": "vpython", @@ -31456,32 +30815,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -31489,12 +30853,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Fast" + "Build-Debian9-Clang-x86_64-Debug-MSAN" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31511,19 +30875,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, + "execution_timeout_ns": 32400000000000, "expiration_ns": 72000000000000, "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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -31534,27 +30898,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31567,12 +30931,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31601,7 +30965,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { "caches": [ { "name": "vpython", @@ -31612,27 +30976,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31645,12 +31009,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE2" + "Build-Debian9-Clang-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31679,7 +31043,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER": { "caches": [ { "name": "vpython", @@ -31690,27 +31054,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31723,12 +31087,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41" + "Build-Debian9-Clang-x86_64-Debug-SK_USE_SKVM_BLITTER" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31757,7 +31121,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack": { "caches": [ { "name": "vpython", @@ -31768,27 +31132,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31801,12 +31165,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER" + "Build-Debian9-Clang-x86_64-Debug-SafeStack" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31835,7 +31199,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs": { "caches": [ { "name": "vpython", @@ -31846,37 +31210,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" } ], "command": [ @@ -31884,12 +31243,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-TSAN" + "Build-Debian9-Clang-x86_64-Debug-Wuffs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -31913,12 +31272,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -31929,27 +31288,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -31962,15 +31321,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-Skylake_GCE", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", "os:Debian-9.8", "pool:Skia" ], @@ -31995,7 +31355,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN": { "caches": [ { "name": "vpython", @@ -32006,32 +31366,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -32039,15 +31404,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Release-ASAN" ], "dimensions": [ - "cpu:x86-64-Skylake_GCE", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", "os:Debian-9.8", "pool:Skia" ], @@ -32067,12 +31433,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -32083,27 +31449,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -32116,16 +31482,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-SwiftShader" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "machine_type:n1-highmem-2", + "machine_type:n1-standard-16", "os:Debian-9.8", "pool:Skia" ], @@ -32150,7 +31516,7 @@ "test" ] }, - "Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader_MSAN": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { "caches": [ { "name": "vpython", @@ -32161,37 +31527,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" } ], "command": [ @@ -32199,16 +31560,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader_MSAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN" + "Build-Debian9-Clang-x86_64-Release-Fast" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "machine_type:n1-highmem-2", + "machine_type:n1-standard-16", "os:Debian-9.8", "pool:Skia" ], @@ -32221,19 +31582,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 32400000000000, + "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, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD": { "caches": [ { "name": "vpython", @@ -32244,27 +31605,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -32277,16 +31638,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-SwiftShader" + "Build-Debian9-Clang-x86_64-Release-SKNX_NO_SIMD" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "machine_type:n1-highmem-2", + "machine_type:n1-standard-16", "os:Debian-9.8", "pool:Skia" ], @@ -32311,7 +31672,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2": { "caches": [ { "name": "vpython", @@ -32322,37 +31683,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -32360,16 +31716,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE2" ], "dimensions": [ - "gpu:8086:22b1", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -32393,7 +31750,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -32404,42 +31761,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -32447,16 +31794,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Vulkan" + "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41" ], "dimensions": [ - "gpu:8086:22b1", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -32480,7 +31828,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { "caches": [ { "name": "vpython", @@ -32491,37 +31839,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -32529,16 +31872,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Release-SK_FORCE_RASTER_PIPELINE_BLITTER" ], "dimensions": [ - "gpu:8086:22b1", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -32562,7 +31906,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_USE_SKVM_BLITTER": { "caches": [ { "name": "vpython", @@ -32573,42 +31917,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -32616,16 +31950,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_USE_SKVM_BLITTER\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Vulkan" + "Build-Debian9-Clang-x86_64-Release-SK_USE_SKVM_BLITTER" ], "dimensions": [ - "gpu:8086:22b1", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -32649,86 +31984,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-CPU-Emulator-x86-devrel-All-Android_SKQP": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "test_skqp_emulator", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-CPU-Emulator-x86-devrel-All-Android_SKQP\",\"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": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86-devrel-Android_SKQP" - ], - "dimensions": [ - "cpu:x86-64-i5-7260U", - "docker_installed:true", - "kvm:1", - "os:Debian-9.4", - "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": "swarm_recipe.isolate", - "max_attempts": 2, - "outputs": [ - "test" - ] - }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All": { + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN": { "caches": [ { "name": "vpython", @@ -32739,27 +31995,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -32767,9 +32023,9 @@ "version": "version:9" }, { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -32777,16 +32033,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Release-TSAN" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -32805,12 +32062,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1": { + "Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -32821,37 +32078,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -32859,7 +32111,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All\",\"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": [ @@ -32867,8 +32119,8 @@ "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Skylake_GCE", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -32892,7 +32144,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan": { + "Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -32903,42 +32155,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -32946,16 +32188,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Vulkan" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Skylake_GCE", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -32979,7 +32221,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3": { + "Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader": { "caches": [ { "name": "vpython", @@ -32990,37 +32232,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -33028,16 +32265,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Debug-SwiftShader" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-highmem-2", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -33061,7 +32299,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN": { + "Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader_MSAN": { "caches": [ { "name": "vpython", @@ -33072,27 +32310,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -33103,11 +32341,6 @@ "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -33115,16 +32348,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader_MSAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-ASAN" + "Build-Debian9-Clang-x86_64-Debug-SwiftShader_MSAN" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-highmem-2", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -33136,19 +32370,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, + "execution_timeout_ns": 32400000000000, "expiration_ns": 72000000000000, "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": 1, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN_Vulkan": { + "Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader": { "caches": [ { "name": "vpython", @@ -33159,47 +32393,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ @@ -33207,16 +32426,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN_Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-ASAN_Vulkan" + "Build-Debian9-Clang-x86_64-Release-SwiftShader" ], "dimensions": [ - "gpu:8086:5926", - "os:Debian-9.4", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-highmem-2", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -33235,12 +32455,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_Vulkan": { + "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -33251,38 +32471,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -33294,15 +32509,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Vulkan" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:5926", + "gpu:8086:22b1", "os:Debian-9.4", "pool:Skia" ], @@ -33327,7 +32542,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL": { + "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -33338,63 +32553,58 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", "version": "version:5" - }, - { - "name": "skia/bots/opencl_ocl_icd_linux", - "path": "opencl_ocl_icd_linux", - "version": "version:0" - }, - { - "name": "skia/bots/opencl_intel_neo_linux", - "path": "opencl_intel_neo_linux", - "version": "version:1" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compute_test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-OpenCL" + "Build-Debian9-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "gpu:8086:5926", + "gpu:8086:22b1", "os:Debian-9.4", "pool:Skia" ], @@ -33419,7 +32629,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan": { + "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -33430,38 +32640,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -33473,15 +32678,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Vulkan" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:5926", + "gpu:8086:22b1", "os:Debian-9.4", "pool:Skia" ], @@ -33506,7 +32711,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { + "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -33517,33 +32722,38 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -33555,15 +32765,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:8086:5926", + "gpu:8086:22b1", "os:Debian-9.4", "pool:Skia" ], @@ -33588,7 +32798,7 @@ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_ASAN": { + "Test-Debian9-Clang-NUC7i5BNK-CPU-Emulator-x86-devrel-All-Android_SKQP": { "caches": [ { "name": "vpython", @@ -33599,58 +32809,50 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_ASAN\",\"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_skqp_emulator", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-CPU-Emulator-x86-devrel-All-Android_SKQP\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-ASAN" + "Build-Debian9-Clang-x86-devrel-Android_SKQP" ], "dimensions": [ - "gpu:8086:5926", + "cpu:x86-64-i5-7260U", + "docker_installed:true", + "kvm:1", "os:Debian-9.4", "pool:Skia" ], @@ -33669,13 +32871,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "isolate": "skqp.isolate", + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_ASAN_Vulkan": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -33686,43 +32888,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" - }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -33734,12 +32926,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_ASAN_Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-ASAN_Vulkan" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ "gpu:8086:5926", @@ -33762,12 +32954,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1": { "caches": [ { "name": "vpython", @@ -33778,38 +32970,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -33821,12 +33008,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-TSAN" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ "gpu:8086:5926", @@ -33849,12 +33036,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -33865,38 +33052,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", @@ -33913,12 +33095,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan" + "Build-Debian9-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ "gpu:8086:5926", @@ -33941,12 +33123,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3": { "caches": [ { "name": "vpython", @@ -33957,38 +33139,33 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" - }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -34000,12 +33177,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-TSAN" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ "gpu:8086:5926", @@ -34028,12 +33205,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN": { "caches": [ { "name": "vpython", @@ -34044,27 +33221,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -34072,9 +33249,9 @@ "version": "version:9" }, { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -34087,12 +33264,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Vulkan" + "Build-Debian9-Clang-x86_64-Debug-ASAN" ], "dimensions": [ "gpu:8086:5926", @@ -34115,12 +33292,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN_Vulkan": { "caches": [ { "name": "vpython", @@ -34131,33 +33308,43 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -34169,15 +33356,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN_Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Debug-ASAN_Vulkan" ], "dimensions": [ - "gpu:8086:0f31", + "gpu:8086:5926", "os:Debian-9.4", "pool:Skia" ], @@ -34197,12 +33384,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -34213,33 +33400,38 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -34251,15 +33443,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "gpu:8086:0f31", + "gpu:8086:5926", "os:Debian-9.4", "pool:Skia" ], @@ -34284,7 +33476,7 @@ "test" ] }, - "Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL": { "caches": [ { "name": "vpython", @@ -34295,27 +33487,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -34326,22 +33518,32 @@ "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", "version": "version:5" + }, + { + "name": "skia/bots/opencl_ocl_icd_linux", + "path": "opencl_ocl_icd_linux", + "version": "version:0" + }, + { + "name": "skia/bots/opencl_intel_neo_linux", + "path": "opencl_intel_neo_linux", + "version": "version:1" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All\",\"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)\"}", + "compute_test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Debug-OpenCL" ], "dimensions": [ - "gpu:8086:0102", + "gpu:8086:5926", "os:Debian-9.4", "pool:Skia" ], @@ -34366,7 +33568,7 @@ "test" ] }, - "Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -34377,33 +33579,38 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -34415,15 +33622,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "gpu:8086:0102", + "gpu:8086:5926", "os:Debian-9.4", "pool:Skia" ], @@ -34448,7 +33655,7 @@ "test" ] }, - "Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -34459,35 +33666,54 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test_pathkit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-asmjs-Release-PathKit" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -34505,13 +33731,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "swarm_recipe.isolate", + "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_ASAN": { "caches": [ { "name": "vpython", @@ -34522,35 +33748,59 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test_canvaskit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_ASAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU" + "Build-Debian9-Clang-x86_64-Release-ASAN" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -34568,13 +33818,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_ASAN_Vulkan": { "caches": [ { "name": "vpython", @@ -34585,35 +33835,64 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test_pathkit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_ASAN_Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-PathKit" + "Build-Debian9-Clang-x86_64-Release-ASAN_Vulkan" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -34631,13 +33910,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN": { "caches": [ { "name": "vpython", @@ -34648,38 +33927,60 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test_canvaskit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-EMCC-wasm-Release-CanvasKit" + "Build-Debian9-Clang-x86_64-Release-TSAN" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "pool:Skia", - "docker_installed:true" + "gpu:8086:5926", + "os:Debian-9.4", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -34696,13 +33997,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-GCC-GCE-CPU-AVX2-x86-Debug-All": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan": { "caches": [ { "name": "vpython", @@ -34713,32 +34014,47 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ @@ -34746,17 +34062,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-GCC-GCE-CPU-AVX2-x86-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-GCC-x86-Debug" + "Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -34768,19 +34083,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, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-GCC-GCE-CPU-AVX2-x86-Release-All": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN": { "caches": [ { "name": "vpython", @@ -34791,32 +34106,42 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ @@ -34824,17 +34149,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-GCC-GCE-CPU-AVX2-x86-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-GCC-x86-Release" + "Build-Debian9-Clang-x86_64-Release-TSAN" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -34853,12 +34177,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All": { + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -34869,32 +34193,42 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ @@ -34902,17 +34236,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-GCC-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", + "gpu:8086:5926", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -34936,7 +34269,7 @@ "test" ] }, - "Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -34947,110 +34280,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-All\",\"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": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-GCC-x86_64-Release" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-9.8", - "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.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" }, { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ @@ -35058,16 +34318,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-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", + "gpu:8086:0f31", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -35091,7 +34351,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer": { + "Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -35102,32 +34362,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ @@ -35135,16 +34400,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-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-CommandBuffer" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", + "gpu:8086:0f31", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -35168,7 +34433,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal": { + "Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -35179,32 +34444,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ @@ -35212,16 +34482,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-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-Metal" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", + "gpu:8086:0102", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -35245,7 +34515,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal": { + "Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -35256,32 +34526,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:5" } ], "command": [ @@ -35289,16 +34564,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-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-Metal" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", + "gpu:8086:0102", + "os:Debian-9.4", "pool:Skia" ], "env_prefixes": { @@ -35322,7 +34597,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal": { + "Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -35333,49 +34608,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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\",\"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_pathkit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-Metal" + "Build-Debian9-EMCC-asmjs-Release-PathKit" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -35393,13 +34654,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "test_skia_bundled.isolate", + "isolate": "pathkit.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { + "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -35410,49 +34671,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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\",\"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_canvaskit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release" + "Build-Debian9-EMCC-wasm-Release-CanvasKit_CPU" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -35470,13 +34717,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-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal": { + "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -35487,49 +34734,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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\",\"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_pathkit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-Metal" + "Build-Debian9-EMCC-wasm-Release-PathKit" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-9.8", "pool:Skia" ], "env_prefixes": { @@ -35547,13 +34780,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "test_skia_bundled.isolate", + "isolate": "pathkit.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal": { + "Test-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -35564,50 +34797,38 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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\",\"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_canvaskit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-Metal" + "Build-Debian9-EMCC-wasm-Release-CanvasKit" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", - "pool:Skia" + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-standard-16", + "os:Debian-9.8", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -35624,13 +34845,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-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -35641,27 +34862,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -35674,12 +34895,12 @@ "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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-Metal" + "Build-Mac-Clang-x86_64-Debug" ], "dimensions": [ "gpu:8086:591e", @@ -35707,7 +34928,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-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -35718,27 +34939,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -35751,12 +34972,12 @@ "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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release" + "Build-Mac-Clang-x86_64-Debug-CommandBuffer" ], "dimensions": [ "gpu:8086:591e", @@ -35784,7 +35005,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal": { "caches": [ { "name": "vpython", @@ -35795,27 +35016,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -35828,15 +35049,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Debug-Metal" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -35861,7 +35082,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-Debug-All-DDL3_Metal": { "caches": [ { "name": "vpython", @@ -35872,27 +35093,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -35905,15 +35126,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-ASAN" + "Build-Mac-Clang-x86_64-Debug-Metal" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -35933,12 +35154,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-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -35949,27 +35170,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -35982,15 +35203,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Debug-Metal" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -36015,7 +35236,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": { "caches": [ { "name": "vpython", @@ -36026,27 +35247,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36059,7 +35280,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\",\"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)\"}", + "{\"$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\",\"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": [ @@ -36067,7 +35288,7 @@ "Build-Mac-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -36092,7 +35313,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-DDL1_Metal": { "caches": [ { "name": "vpython", @@ -36103,27 +35324,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36136,15 +35357,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-TSAN" + "Build-Mac-Clang-x86_64-Release-Metal" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -36164,12 +35385,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": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal": { "caches": [ { "name": "vpython", @@ -36180,27 +35401,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36213,15 +35434,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Release-Metal" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -36246,7 +35467,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN_Metal": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -36257,27 +35478,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36290,15 +35511,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-ASAN_Metal" + "Build-Mac-Clang-x86_64-Release-Metal" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -36318,12 +35539,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-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -36334,27 +35555,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36367,15 +35588,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-CommandBuffer" + "Build-Mac-Clang-x86_64-Release" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -36400,7 +35621,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-Metal": { + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -36411,27 +35632,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36444,15 +35665,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-Metal\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-Metal" + "Build-Mac-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -36477,7 +35698,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-Debug-All-ASAN": { "caches": [ { "name": "vpython", @@ -36488,27 +35709,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36520,16 +35741,93 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-Debug-All-ASAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-OpenCL" + "Build-Mac-Clang-x86_64-Debug-ASAN" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", + "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-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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\",\"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": [ + "Housekeeper-PerCommit-BundleRecipes", + "Build-Mac-Clang-x86_64-Debug" + ], + "dimensions": [ + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -36554,7 +35852,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": { "caches": [ { "name": "vpython", @@ -36565,27 +35863,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36598,7 +35896,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-Release-All\",\"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)\"}", + "{\"$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\",\"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": [ @@ -36606,7 +35904,7 @@ "Build-Mac-Clang-x86_64-Release" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -36631,7 +35929,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-ASAN_Metal": { + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All-TSAN": { "caches": [ { "name": "vpython", @@ -36642,27 +35940,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36675,15 +35973,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-ASAN_Metal\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-ASAN_Metal" + "Build-Mac-Clang-x86_64-Release-TSAN" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -36708,7 +36006,7 @@ "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": { "caches": [ { "name": "vpython", @@ -36719,27 +36017,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36752,12 +36050,12 @@ "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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-Metal" + "Build-Mac-Clang-x86_64-Debug" ], "dimensions": [ "gpu:1002:6821-4.0.20-3.2.8", @@ -36785,7 +36083,7 @@ "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", @@ -36796,27 +36094,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36829,12 +36127,12 @@ "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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-TSAN" + "Build-Mac-Clang-x86_64-Debug-ASAN_Metal" ], "dimensions": [ "gpu:1002:6821-4.0.20-3.2.8", @@ -36862,7 +36160,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", @@ -36873,27 +36171,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36906,12 +36204,12 @@ "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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-TSAN_Metal" + "Build-Mac-Clang-x86_64-Debug-CommandBuffer" ], "dimensions": [ "gpu:1002:6821-4.0.20-3.2.8", @@ -36934,12 +36232,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-Metal": { "caches": [ { "name": "vpython", @@ -36950,27 +36248,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -36983,16 +36281,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\",\"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)\"}", + "{\"$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-Metal\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Debug-Metal" ], "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" ], @@ -37017,7 +36314,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-Debug-All-OpenCL": { "caches": [ { "name": "vpython", @@ -37028,27 +36325,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37060,17 +36357,16 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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\",\"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)\"}", + "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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-CommandBuffer" + "Build-Mac-Clang-x86_64-Debug-OpenCL" ], "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" ], @@ -37095,7 +36391,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": { "caches": [ { "name": "vpython", @@ -37106,27 +36402,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37139,7 +36435,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-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\",\"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)\"}", + "{\"$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\",\"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": [ @@ -37147,8 +36443,7 @@ "Build-Mac-Clang-x86_64-Release" ], "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" ], @@ -37173,7 +36468,7 @@ "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-ASAN_Metal": { "caches": [ { "name": "vpython", @@ -37184,27 +36479,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37217,16 +36512,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-Metal\",\"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)\"}", + "{\"$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-ASAN_Metal\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-Metal" + "Build-Mac-Clang-x86_64-Release-ASAN_Metal" ], "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" ], @@ -37246,12 +36540,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -37262,27 +36556,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37295,15 +36589,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-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Release-Metal" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "gpu:1002:6821-4.0.20-3.2.8", "os:Mac-10.13.6", "pool:Skia" ], @@ -37328,7 +36622,7 @@ "test" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN": { "caches": [ { "name": "vpython", @@ -37339,27 +36633,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37372,16 +36666,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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Release-TSAN" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.14.3", + "gpu:1002:6821-4.0.20-3.2.8", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -37400,12 +36694,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN_Metal": { "caches": [ { "name": "vpython", @@ -37416,27 +36710,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37449,16 +36743,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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-CommandBuffer" + "Build-Mac-Clang-x86_64-Release-TSAN_Metal" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.14.3", + "gpu:1002:6821-4.0.20-3.2.8", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -37477,12 +36771,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -37493,27 +36787,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37526,16 +36820,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-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug-Metal" + "Build-Mac-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.14.3", + "cpu:x86-64-i7-4578U", + "gpu:8086:0a2e", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -37559,7 +36854,7 @@ "test" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -37570,27 +36865,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37603,16 +36898,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-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release" + "Build-Mac-Clang-x86_64-Debug-CommandBuffer" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.14.3", + "cpu:x86-64-i7-4578U", + "gpu:8086:0a2e", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -37636,7 +36932,7 @@ "test" ] }, - "Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -37647,27 +36943,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37680,16 +36976,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-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Release-Metal" + "Build-Mac-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.14.3", + "cpu:x86-64-i7-4578U", + "gpu:8086:0a2e", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -37713,7 +37010,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-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -37724,27 +37021,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37757,16 +37054,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Release-Metal" ], "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": { @@ -37790,7 +37088,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { + "Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -37801,27 +37099,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37834,16 +37132,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "cpu:x86-64-E5-2697_v2", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -37867,7 +37165,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN": { + "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -37878,37 +37176,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" } ], "command": [ @@ -37916,16 +37209,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-ASAN" + "Build-Mac-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "cpu:x86-64-E5-2697_v2", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -37944,12 +37237,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-Debug-All": { "caches": [ { "name": "vpython", @@ -37960,27 +37253,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -37993,16 +37286,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "gpu:8086:1626", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -38026,7 +37319,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -38037,37 +37330,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" } ], "command": [ @@ -38075,16 +37363,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Vulkan" + "Build-Mac-Clang-x86_64-Debug-CommandBuffer" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "gpu:8086:1626", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -38108,7 +37396,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -38119,27 +37407,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -38152,16 +37440,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-DDL3\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug" + "Build-Mac-Clang-x86_64-Debug-Metal" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "gpu:8086:1626", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -38185,7 +37473,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -38196,37 +37484,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" } ], "command": [ @@ -38234,16 +37517,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-DDL3_ASAN\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-ASAN" + "Build-Mac-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "gpu:8086:1626", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -38262,12 +37545,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-DDL3_Vulkan": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -38278,37 +37561,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" } ], "command": [ @@ -38316,16 +37594,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-DDL3_Vulkan\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Vulkan" + "Build-Mac-Clang-x86_64-Release" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "gpu:8086:1626", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -38349,7 +37627,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -38360,37 +37638,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" } ], "command": [ @@ -38398,16 +37671,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-Vulkan\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Debug-Vulkan" + "Build-Mac-Clang-x86_64-Release-Metal" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "gpu:8086:1626", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -38431,7 +37704,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -38442,27 +37715,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -38475,12 +37748,12 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -38508,7 +37781,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ASAN": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN": { "caches": [ { "name": "vpython", @@ -38519,27 +37792,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -38557,12 +37830,12 @@ "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-ASAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-ASAN" + "Build-Debian9-Clang-x86_64-Debug-ASAN" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -38590,7 +37863,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_ASAN": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1": { "caches": [ { "name": "vpython", @@ -38601,37 +37874,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" } ], "command": [ @@ -38639,12 +37907,12 @@ "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_ASAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-ASAN" + "Build-Debian9-Clang-x86_64-Debug" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -38667,12 +37935,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": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -38683,27 +37951,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -38711,9 +37979,9 @@ "version": "version:9" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:14" + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" } ], "command": [ @@ -38721,12 +37989,12 @@ "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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-TSAN" + "Build-Debian9-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -38749,12 +38017,89 @@ }, "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-DDL3": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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\",\"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": [ + "Housekeeper-PerCommit-BundleRecipes", + "Build-Debian9-Clang-x86_64-Debug" + ], + "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-DDL3_ASAN": { "caches": [ { "name": "vpython", @@ -38765,27 +38110,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -38796,11 +38141,6 @@ "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:14" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:2" } ], "command": [ @@ -38808,12 +38148,12 @@ "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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan" + "Build-Debian9-Clang-x86_64-Debug-ASAN" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -38841,7 +38181,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -38852,32 +38192,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" } ], "command": [ @@ -38885,12 +38230,12 @@ "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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -38918,7 +38263,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -38929,27 +38274,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -38967,12 +38312,12 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-Clang-x86_64-Release-Vulkan" + "Build-Debian9-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ "gpu:10de:1cb3-430.14", @@ -39000,7 +38345,7 @@ "test" ] }, - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -39011,37 +38356,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/valgrind", - "path": "valgrind", - "version": "version:7" } ], "command": [ @@ -39049,18 +38389,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-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ "gpu:10de:1cb3-430.14", "os:Ubuntu-18.04", - "pool:Skia", - "valgrind:1" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -39071,19 +38410,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, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Ubuntu18-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ASAN": { "caches": [ { "name": "vpython", @@ -39094,27 +38433,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -39122,9 +38461,9 @@ "version": "version:9" }, { - "name": "skia/bots/valgrind", - "path": "valgrind", - "version": "version:7" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -39132,18 +38471,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-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ASAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41" + "Build-Debian9-Clang-x86_64-Release-ASAN" ], "dimensions": [ "gpu:10de:1cb3-430.14", "os:Ubuntu-18.04", - "pool:Skia", - "valgrind:1" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -39154,19 +38492,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-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_ASAN": { "caches": [ { "name": "vpython", @@ -39177,27 +38515,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -39205,9 +38543,9 @@ "version": "version:9" }, { - "name": "skia/bots/valgrind", - "path": "valgrind", - "version": "version:7" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -39215,18 +38553,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-GCC-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_ASAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Debian9-GCC-x86_64-Release-SK_CPU_LIMIT_SSE41" + "Build-Debian9-Clang-x86_64-Release-ASAN" ], "dimensions": [ "gpu:10de:1cb3-430.14", "os:Ubuntu-18.04", - "pool:Skia", - "valgrind:1" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -39237,19 +38574,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-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN": { "caches": [ { "name": "vpython", @@ -39260,37 +38597,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" } ], "command": [ @@ -39298,16 +38635,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Release-TSAN" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", "pool:Skia" ], "env_prefixes": { @@ -39326,12 +38663,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-ANGLE": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan": { "caches": [ { "name": "vpython", @@ -39342,37 +38679,42 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:14" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" } ], "command": [ @@ -39380,16 +38722,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" + "Build-Debian9-Clang-x86_64-Release-TSAN_Vulkan" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", "pool:Skia" ], "env_prefixes": { @@ -39408,12 +38750,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-PreAbandonGpuContext": { "caches": [ { "name": "vpython", @@ -39424,32 +38766,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -39462,16 +38799,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-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-Vulkan" + "Build-Debian9-Clang-x86_64-Release" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", "pool:Skia" ], "env_prefixes": { @@ -39495,7 +38832,7 @@ "test" ] }, - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -39506,37 +38843,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/valgrind", + "path": "valgrind", + "version": "version:9" } ], "command": [ @@ -39544,17 +38881,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", - "pool:Skia" + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia", + "valgrind:1" ], "env_prefixes": { "PATH": [ @@ -39565,19 +38903,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_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -39588,37 +38926,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/valgrind", + "path": "valgrind", + "version": "version:9" } ], "command": [ @@ -39626,17 +38964,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", - "pool:Skia" + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia", + "valgrind:1" ], "env_prefixes": { "PATH": [ @@ -39647,19 +38986,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-Valgrind_SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -39670,37 +39009,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/valgrind", + "path": "valgrind", + "version": "version:9" } ], "command": [ @@ -39708,17 +39047,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-Vulkan\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-Vulkan" + "Build-Debian9-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41" ], "dimensions": [ - "gpu:1002:6646-24.20.13001.1010", - "os:Windows-10-18362", - "pool:Skia" + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia", + "valgrind:1" ], "env_prefixes": { "PATH": [ @@ -39729,19 +39069,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-Golo-GPU-GT610-x86_64-Debug-All": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -39752,37 +39092,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:2" } ], "command": [ @@ -39790,16 +39130,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-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Debian9-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:10de:104a-23.21.13.9101", - "os:Windows-10-16299", + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", "pool:Skia" ], "env_prefixes": { @@ -39823,7 +39163,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -39834,17 +39174,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -39854,12 +39194,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -39872,16 +39212,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-Debug-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" + "Build-Win-Clang-x86_64-Debug" ], "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": { @@ -39905,7 +39245,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -39916,17 +39256,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -39936,12 +39276,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -39954,16 +39294,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "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": { @@ -39987,7 +39327,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -39998,17 +39338,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40018,12 +39358,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40036,16 +39376,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Win-Clang-x86_64-Debug-Vulkan" ], "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": { @@ -40069,7 +39409,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -40080,17 +39420,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40100,12 +39440,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40118,16 +39458,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release" ], "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": { @@ -40151,7 +39491,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -40162,17 +39502,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40182,12 +39522,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40200,16 +39540,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "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": { @@ -40233,7 +39573,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -40244,17 +39584,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40264,12 +39604,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40282,16 +39622,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-BonusConfigs\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release-Vulkan" ], "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": { @@ -40315,7 +39655,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR": { + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -40326,17 +39666,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40346,12 +39686,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40364,7 +39704,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-NonNVPR\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All\",\"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": [ @@ -40372,7 +39712,7 @@ "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", + "gpu:10de:104a-23.21.13.9101", "os:Windows-10-16299", "pool:Skia" ], @@ -40397,7 +39737,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -40408,17 +39748,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40428,12 +39768,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40446,15 +39786,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-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-Vulkan" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", + "gpu:10de:104a-23.21.13.9101", "os:Windows-10-16299", "pool:Skia" ], @@ -40479,7 +39819,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump": { + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -40490,17 +39830,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40510,22 +39850,17 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/procdump_win", - "path": "procdump_win", - "version": "version:0" } ], "command": [ @@ -40533,15 +39868,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-Vulkan_ProcDump\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-Vulkan" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", + "gpu:10de:104a-23.21.13.9101", "os:Windows-10-16299", "pool:Skia" ], @@ -40566,7 +39901,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -40577,17 +39912,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40597,12 +39932,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40615,15 +39950,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-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", + "gpu:10de:104a-23.21.13.9101", "os:Windows-10-16299", "pool:Skia" ], @@ -40648,7 +39983,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -40659,17 +39994,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40679,12 +40014,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40697,12 +40032,12 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ "gpu:10de:1cb3-25.21.14.1678", @@ -40730,7 +40065,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -40741,17 +40076,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40761,12 +40096,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40779,12 +40114,12 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "dimensions": [ "gpu:10de:1cb3-25.21.14.1678", @@ -40812,7 +40147,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -40823,17 +40158,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40843,12 +40178,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40861,12 +40196,12 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ "gpu:10de:1cb3-25.21.14.1678", @@ -40894,7 +40229,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR": { "caches": [ { "name": "vpython", @@ -40905,17 +40240,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -40925,12 +40260,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -40943,12 +40278,12 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-Vulkan" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ "gpu:10de:1cb3-25.21.14.1678", @@ -40976,7 +40311,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": { "caches": [ { "name": "vpython", @@ -40987,17 +40322,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41007,22 +40342,17 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/procdump_win", - "path": "procdump_win", - "version": "version:0" } ], "command": [ @@ -41030,12 +40360,12 @@ "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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-Vulkan" + "Build-Win-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ "gpu:10de:1cb3-25.21.14.1678", @@ -41063,7 +40393,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump": { "caches": [ { "name": "vpython", @@ -41074,17 +40404,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41094,17 +40424,22 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/procdump_win", + "path": "procdump_win", + "version": "version:0" } ], "command": [ @@ -41112,16 +40447,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\",\"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)\"}", + "{\"$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\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "cpu:x86-64-i7-5557U", - "os:Windows-10-18362", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -41145,7 +40480,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -41156,17 +40491,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41176,12 +40511,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -41194,16 +40529,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18362", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -41227,7 +40562,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -41238,17 +40573,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41258,12 +40593,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -41276,16 +40611,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18362", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -41309,7 +40644,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -41320,17 +40655,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41340,12 +40675,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -41358,7 +40693,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs\",\"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": [ @@ -41366,8 +40701,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18362", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -41391,7 +40726,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext": { "caches": [ { "name": "vpython", @@ -41402,17 +40737,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41422,12 +40757,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -41440,16 +40775,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18362", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -41473,7 +40808,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -41484,17 +40819,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41504,12 +40839,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -41522,16 +40857,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -41555,7 +40890,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump": { "caches": [ { "name": "vpython", @@ -41566,17 +40901,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41586,116 +40921,39 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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\",\"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": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" - ], - "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", - "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-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-OpenCL": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" }, { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "name": "skia/bots/procdump_win", + "path": "procdump_win", + "version": "version:0" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-OpenCL" + "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -41719,7 +40977,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -41730,17 +40988,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41750,12 +41008,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -41768,16 +41026,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-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-Vulkan" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "cpu:x86-64-i7-5557U", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -41801,7 +41059,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All": { + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -41812,17 +41070,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41832,12 +41090,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -41850,16 +41108,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-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:162b-20.19.15.4963", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -41883,7 +41141,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -41894,17 +41152,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41914,12 +41172,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -41932,16 +41190,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-Release-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:162b-20.19.15.4963", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -41965,7 +41223,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts": { + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -41976,17 +41234,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -41996,12 +41254,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42014,7 +41272,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-NativeFonts\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\",\"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": [ @@ -42022,8 +41280,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:162b-20.19.15.4963", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42047,7 +41305,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -42058,17 +41316,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42078,12 +41336,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42096,16 +41354,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-Release-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-Vulkan" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:8086:1926-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:162b-20.19.15.4963", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42129,7 +41387,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -42140,17 +41398,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42160,12 +41418,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42178,7 +41436,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-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All\",\"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": [ @@ -42186,8 +41444,8 @@ "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42211,7 +41469,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -42222,17 +41480,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42242,12 +41500,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42260,7 +41518,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-Debug-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE\",\"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": [ @@ -42268,8 +41526,8 @@ "Build-Win-Clang-x86_64-Debug-ANGLE" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42293,7 +41551,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-OpenCL": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-OpenCL": { "caches": [ { "name": "vpython", @@ -42304,17 +41562,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42324,12 +41582,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42342,7 +41600,7 @@ "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)\"}", + "{\"$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": [ @@ -42350,8 +41608,8 @@ "Build-Win-Clang-x86_64-Debug-OpenCL" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42375,7 +41633,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -42386,17 +41644,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42406,12 +41664,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42424,7 +41682,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-Debug-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan\",\"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": [ @@ -42432,8 +41690,8 @@ "Build-Win-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42457,7 +41715,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -42468,17 +41726,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42488,12 +41746,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42506,7 +41764,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\",\"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": [ @@ -42514,8 +41772,8 @@ "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42539,7 +41797,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -42550,17 +41808,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42570,12 +41828,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42588,7 +41846,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-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\",\"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": [ @@ -42596,8 +41854,8 @@ "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42621,7 +41879,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -42632,17 +41890,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42652,12 +41910,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42670,16 +41928,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-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-Vulkan" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:8086:3ea5-25.20.100.6519", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42703,7 +41961,7 @@ "test" ] }, - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -42714,17 +41972,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42734,12 +41992,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42752,16 +42010,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-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:8086:0a16-20.19.15.4963", - "os:Windows-10-18362", + "gpu:8086:1926-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42785,7 +42043,7 @@ "test" ] }, - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -42796,17 +42054,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42816,12 +42074,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42834,16 +42092,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-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:8086:0a16-20.19.15.4963", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42867,7 +42125,7 @@ "test" ] }, - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -42878,17 +42136,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42898,12 +42156,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42916,16 +42174,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-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "dimensions": [ - "gpu:8086:0a16-20.19.15.4963", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -42949,7 +42207,7 @@ "test" ] }, - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-OpenCL": { "caches": [ { "name": "vpython", @@ -42960,17 +42218,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -42980,12 +42238,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -42997,17 +42255,17 @@ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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\",\"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)\"}", + "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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Win-Clang-x86_64-Debug-OpenCL" ], "dimensions": [ - "gpu:8086:0a16-20.19.15.4963", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43031,7 +42289,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -43042,17 +42300,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43062,12 +42320,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43080,16 +42338,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-ShuttleA-GPU-GTX660-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43113,7 +42371,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -43124,17 +42382,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43144,12 +42402,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43162,16 +42420,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-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43195,7 +42453,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -43206,17 +42464,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43226,12 +42484,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43244,16 +42502,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-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-Vulkan" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43277,7 +42535,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -43288,17 +42546,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43308,12 +42566,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43326,16 +42584,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-ShuttleA-GPU-GTX660-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:8086:3ea5-26.20.100.7463", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43359,7 +42617,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -43370,17 +42628,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43390,12 +42648,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43408,16 +42666,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-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:8086:0a16-20.19.15.4963", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43441,7 +42699,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -43452,17 +42710,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43472,12 +42730,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43490,16 +42748,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-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-Vulkan" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "dimensions": [ - "gpu:10de:11c0-25.21.14.1634", - "os:Windows-10-18362", + "gpu:8086:0a16-20.19.15.4963", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43523,7 +42781,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All": { + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -43534,17 +42792,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43554,12 +42812,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43572,16 +42830,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-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:8086:0a16-20.19.15.4963", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43605,7 +42863,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -43616,17 +42874,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43636,12 +42894,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43654,16 +42912,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-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:8086:0a16-20.19.15.4963", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43687,7 +42945,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -43698,17 +42956,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43718,12 +42976,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43736,16 +42994,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-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-Vulkan" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43769,7 +43027,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -43780,17 +43038,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43800,12 +43058,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43818,16 +43076,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-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43851,7 +43109,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -43862,17 +43120,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43882,12 +43140,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43900,16 +43158,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-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Win-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43933,7 +43191,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -43944,17 +43202,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -43964,12 +43222,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -43982,16 +43240,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-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-Vulkan" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:1002:683d-24.20.13001.1010", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -44015,7 +43273,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -44026,17 +43284,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44046,12 +43304,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44064,16 +43322,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-ShuttleC-GPU-GTX960-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -44097,7 +43355,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -44108,17 +43366,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44128,12 +43386,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44146,16 +43404,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-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-ANGLE" + "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:10de:11c0-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -44179,7 +43437,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -44190,17 +43448,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44210,12 +43468,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44228,16 +43486,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-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-Vulkan" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -44261,7 +43519,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -44272,17 +43530,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44292,12 +43550,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44310,16 +43568,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-ShuttleC-GPU-GTX960-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -44343,7 +43601,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -44354,17 +43612,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44374,12 +43632,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44392,16 +43650,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-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-ANGLE" + "Build-Win-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -44425,7 +43683,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -44436,17 +43694,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44456,12 +43714,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44474,16 +43732,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-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-Vulkan" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "gpu:10de:1401-25.21.14.1634", - "os:Windows-10-18362", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -44507,7 +43765,7 @@ "test" ] }, - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -44518,17 +43776,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44538,12 +43796,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44556,16 +43814,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-x86_64-Debug" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "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": { @@ -44589,7 +43847,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", @@ -44600,17 +43858,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44620,12 +43878,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44638,16 +43896,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-x86_64-Debug-Vulkan" + "Build-Win-Clang-x86_64-Release-Vulkan" ], "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": { @@ -44671,7 +43929,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", @@ -44682,17 +43940,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44702,12 +43960,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44720,16 +43978,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-x86_64-Release" + "Build-Win-Clang-x86_64-Debug" ], "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": { @@ -44753,7 +44011,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", @@ -44764,17 +44022,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -44784,12 +44042,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44802,16 +44060,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-x86_64-Release-Vulkan" + "Build-Win-Clang-x86_64-Debug-ANGLE" ], "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": { @@ -44835,7 +44093,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", @@ -44846,104 +44104,32 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:39" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:209" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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\",\"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": [ - "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-arm64-Debug" - ], - "dimensions": [ - "cpu:arm64-64-Snapdragon850", - "os:Windows-10", - "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-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci/vpython/${platform}", + "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "version:2.7.15.chromium14" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -44956,16 +44142,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-arm64-Debug-ANGLE" + "Build-Win-Clang-x86_64-Debug-Vulkan" ], "dimensions": [ - "gpu:Adreno630", - "os:Windows-10", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -44989,7 +44175,7 @@ "test" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86-Debug-All": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -45000,17 +44186,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45020,12 +44206,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45038,18 +44224,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86-Debug" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -45061,19 +44245,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-Win2016-Clang-GCE-CPU-AVX2-x86-Release-All": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -45084,17 +44268,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45104,12 +44288,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45122,18 +44306,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86-Release" + "Build-Win-Clang-x86_64-Release-ANGLE" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -45157,7 +44339,7 @@ "test" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -45168,17 +44350,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45188,12 +44370,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45206,18 +44388,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release-Vulkan" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -45241,7 +44421,7 @@ "test" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -45252,17 +44432,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45272,12 +44452,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45290,18 +44470,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-MSVC-x86_64-Debug" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45325,7 +44503,7 @@ "test" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -45336,17 +44514,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45356,12 +44534,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45374,18 +44552,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-MSVC-x86_64-Debug-Vulkan" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45409,7 +44585,7 @@ "test" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -45420,17 +44596,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45440,12 +44616,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45458,18 +44634,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug-UBSAN" + "Build-Win-MSVC-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45488,12 +44662,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -45504,17 +44678,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45524,12 +44698,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45542,18 +44716,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-MSVC-x86_64-Release-Vulkan" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45577,7 +44749,7 @@ "test" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA": { + "Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -45588,32 +44760,104 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/python/cpython/${platform}", + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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\",\"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": [ + "Housekeeper-PerCommit-BundleRecipes", + "Build-Win-MSVC-arm64-Debug" + ], + "dimensions": [ + "cpu:arm64-64-Snapdragon850", + "os:Windows-10", + "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-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45626,18 +44870,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-MSVC-arm64-Debug-ANGLE" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", - "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "gpu:Adreno630", + "os:Windows-10", "pool:Skia" ], "env_prefixes": { @@ -45661,7 +44903,7 @@ "test" ] }, - "Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -45672,17 +44914,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45692,12 +44934,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45710,18 +44952,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86-Debug" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -45733,19 +44974,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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All": { "caches": [ { "name": "vpython", @@ -45756,17 +44997,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45776,12 +45017,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45794,18 +45035,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release-UBSAN" + "Build-Win-Clang-x86-Release" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -45824,12 +45064,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Debug-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -45840,17 +45080,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45860,12 +45100,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45878,18 +45118,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-x86-Debug" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -45901,19 +45140,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-Win2016-MSVC-GCE-CPU-AVX2-x86-Release-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA": { "caches": [ { "name": "vpython", @@ -45924,17 +45163,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -45944,12 +45183,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -45962,18 +45201,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-x86-Release" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -45997,7 +45235,7 @@ "test" ] }, - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA": { "caches": [ { "name": "vpython", @@ -46008,17 +45246,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46028,12 +45266,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46046,18 +45284,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-x86_64-Debug" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46081,7 +45318,7 @@ "test" ] }, - "Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN": { "caches": [ { "name": "vpython", @@ -46092,17 +45329,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46112,12 +45349,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46130,18 +45367,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-UBSAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-MSVC-x86_64-Release" + "Build-Win-Clang-x86_64-Debug-UBSAN" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", - "image:windows-server-2016-dc-v20190108", "machine_type:n1-standard-16", - "os:Windows-Server-14393", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46160,12 +45396,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX-x86-Debug-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -46176,17 +45412,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46196,12 +45432,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46214,16 +45450,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-AVX-x86-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86-Debug" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-E5-2670", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46235,19 +45472,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-AVX-x86-Release-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA": { "caches": [ { "name": "vpython", @@ -46258,17 +45495,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46278,12 +45515,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46296,16 +45533,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-AVX-x86-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86-Release" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-E5-2670", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46329,7 +45567,7 @@ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA": { "caches": [ { "name": "vpython", @@ -46340,17 +45578,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46360,12 +45598,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46378,16 +45616,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-AVX-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-E5-2670", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46411,7 +45650,7 @@ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN": { "caches": [ { "name": "vpython", @@ -46422,17 +45661,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46442,12 +45681,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46460,16 +45699,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-AVX-x86_64-Debug-All-NativeFonts\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-UBSAN\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86_64-Release-UBSAN" ], "dimensions": [ - "cpu:x86-64-E5-2670", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46488,12 +45728,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All-NativeFonts_GDI": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -46504,17 +45744,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46524,12 +45764,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46542,16 +45782,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-AVX-x86_64-Debug-All-NativeFonts_GDI\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-MSVC-x86-Debug" ], "dimensions": [ - "cpu:x86-64-E5-2670", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46563,19 +45804,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-AVX-x86_64-Release-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All": { "caches": [ { "name": "vpython", @@ -46586,17 +45827,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46606,12 +45847,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46624,16 +45865,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-AVX-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-MSVC-x86-Release" ], "dimensions": [ - "cpu:x86-64-E5-2670", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46657,7 +45899,7 @@ "test" ] }, - "Test-Win8-Clang-Golo-CPU-AVX-x86-Debug-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -46668,17 +45910,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46688,12 +45930,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46706,16 +45948,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-AVX-x86-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86-Debug" + "Build-Win-MSVC-x86_64-Debug" ], "dimensions": [ - "cpu:x86-64-E5-2670", - "os:Windows-8.1-SP0", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46727,19 +45970,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-AVX-x86-Release-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -46750,17 +45993,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46770,12 +46013,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46788,16 +46031,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-AVX-x86-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86-Release" + "Build-Win-MSVC-x86_64-Release" ], "dimensions": [ - "cpu:x86-64-E5-2670", - "os:Windows-8.1-SP0", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -46821,7 +46065,7 @@ "test" ] }, - "Test-Win8-Clang-Golo-CPU-AVX-x86_64-Debug-All": { + "Test-Win7-Clang-Golo-CPU-AVX-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -46832,17 +46076,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46852,12 +46096,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46870,16 +46114,16 @@ "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-AVX-x86_64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX-x86-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Debug" + "Build-Win-Clang-x86-Debug" ], "dimensions": [ "cpu:x86-64-E5-2670", - "os:Windows-8.1-SP0", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -46891,19 +46135,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-AVX-x86_64-Release-All": { + "Test-Win7-Clang-Golo-CPU-AVX-x86-Release-All": { "caches": [ { "name": "vpython", @@ -46914,17 +46158,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -46934,12 +46178,12 @@ { "name": "skia/bots/skimage", "path": "skimage", - "version": "version:39" + "version": "version:40" }, { "name": "skia/bots/skp", "path": "skp", - "version": "version:209" + "version": "version:215" }, { "name": "skia/bots/svg", @@ -46952,16 +46196,16 @@ "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-AVX-x86_64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX-x86-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Win-Clang-x86_64-Release" + "Build-Win-Clang-x86-Release" ], "dimensions": [ "cpu:x86-64-E5-2670", - "os:Windows-8.1-SP0", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -46985,7 +46229,7 @@ "test" ] }, - "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All": { + "Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -46996,17 +46240,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -47014,19 +46278,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-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Debug-iOS", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "device_type:iPad6,3", - "os:iOS-11.4.1", + "cpu:x86-64-E5-2670", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -47050,7 +46311,7 @@ "test" ] }, - "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All": { + "Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -47061,17 +46322,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -47079,19 +46360,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-iPadPro-GPU-PowerVRGT7800-arm64-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Release-iOS", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "device_type:iPad6,3", - "os:iOS-11.4.1", + "cpu:x86-64-E5-2670", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -47115,7 +46393,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All": { + "Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All-NativeFonts_GDI": { "caches": [ { "name": "vpython", @@ -47126,17 +46404,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -47144,19 +46442,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All-NativeFonts_GDI\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Debug-iOS", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "device_type:iPhone7,2", - "os:iOS-11.4.1", + "cpu:x86-64-E5-2670", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -47180,7 +46475,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All": { + "Test-Win7-Clang-Golo-CPU-AVX-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -47191,17 +46486,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -47209,19 +46524,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Release-iOS", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "device_type:iPhone7,2", - "os:iOS-11.4.1", + "cpu:x86-64-E5-2670", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -47245,7 +46557,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal": { + "Test-Win8-Clang-Golo-CPU-AVX-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -47256,17 +46568,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -47274,19 +46606,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX-x86-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Release-iOS_Metal", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86-Debug" ], "dimensions": [ - "device_type:iPhone7,2", - "os:iOS-11.4.1", + "cpu:x86-64-E5-2670", + "os:Windows-8.1-SP0", "pool:Skia" ], "env_prefixes": { @@ -47298,19 +46627,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-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All": { + "Test-Win8-Clang-Golo-CPU-AVX-x86-Release-All": { "caches": [ { "name": "vpython", @@ -47321,17 +46650,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -47339,19 +46688,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX-x86-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Debug-iOS", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86-Release" ], "dimensions": [ - "device_type:iPhone9,1", - "os:iOS-11.4.1", + "cpu:x86-64-E5-2670", + "os:Windows-8.1-SP0", "pool:Skia" ], "env_prefixes": { @@ -47375,7 +46721,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal": { + "Test-Win8-Clang-Golo-CPU-AVX-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -47386,17 +46732,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -47404,19 +46770,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX-x86_64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Debug-iOS_Metal", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Debug" ], "dimensions": [ - "device_type:iPhone9,1", - "os:iOS-11.4.1", + "cpu:x86-64-E5-2670", + "os:Windows-8.1-SP0", "pool:Skia" ], "env_prefixes": { @@ -47440,7 +46803,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All": { + "Test-Win8-Clang-Golo-CPU-AVX-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -47451,17 +46814,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:215" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -47469,19 +46852,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-Release-All\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX-x86_64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Release-iOS", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Release" ], "dimensions": [ - "device_type:iPhone9,1", - "os:iOS-11.4.1", + "cpu:x86-64-E5-2670", + "os:Windows-8.1-SP0", "pool:Skia" ], "env_prefixes": { @@ -47505,7 +46885,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All": { + "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -47516,17 +46896,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -47534,7 +46914,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All\",\"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": [ @@ -47545,7 +46925,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone10,1", + "device_type:iPad6,3", "os:iOS-11.4.1", "pool:Skia" ], @@ -47570,7 +46950,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All": { + "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -47581,17 +46961,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -47599,7 +46979,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\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All\",\"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": [ @@ -47610,7 +46990,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone10,1", + "device_type:iPad6,3", "os:iOS-11.4.1", "pool:Skia" ], @@ -47635,7 +47015,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal": { + "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -47646,17 +47026,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ @@ -47664,18 +47044,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-iPhone8-GPU-AppleA11-arm64-Release-All-Metal\",\"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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Build-Mac-Clang-arm64-Release-iOS_Metal", + "Build-Mac-Clang-arm64-Debug-iOS", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone10,1", + "device_type:iPhone7,2", "os:iOS-11.4.1", "pool:Skia" ], @@ -47700,7 +47080,7 @@ "test" ] }, - "Upload-BuildStats-Debian9-Clang-arm-Release-Flutter_Android": { + "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -47711,41 +47091,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_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-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "BuildStats-Debian9-Clang-arm-Release-Flutter_Android" + "Build-Mac-Clang-arm64-Release-iOS", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", + "device_type:iPhone7,2", + "os:iOS-11.4.1", "pool:Skia" ], "env_prefixes": { @@ -47757,16 +47133,19 @@ "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-Debian9-EMCC-asmjs-Release-PathKit": { + "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -47777,41 +47156,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-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-Release-All-Metal\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "BuildStats-Debian9-EMCC-asmjs-Release-PathKit" + "Build-Mac-Clang-arm64-Release-iOS_Metal", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", + "device_type:iPhone7,2", + "os:iOS-11.4.1", "pool:Skia" ], "env_prefixes": { @@ -47823,16 +47198,19 @@ "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-Debian9-EMCC-wasm-Release-CanvasKit": { + "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -47843,41 +47221,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-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)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit" + "Build-Mac-Clang-arm64-Debug-iOS", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", + "device_type:iPhone9,1", + "os:iOS-11.4.1", "pool:Skia" ], "env_prefixes": { @@ -47889,16 +47263,19 @@ "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-Debian9-EMCC-wasm-Release-CanvasKit_CPU": { + "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -47909,41 +47286,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-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)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit_CPU" + "Build-Mac-Clang-arm64-Debug-iOS_Metal", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", + "device_type:iPhone9,1", + "os:iOS-11.4.1", "pool:Skia" ], "env_prefixes": { @@ -47955,16 +47328,19 @@ "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-Debian9-EMCC-wasm-Release-PathKit": { + "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -47975,41 +47351,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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-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)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "BuildStats-Debian9-EMCC-wasm-Release-PathKit" + "Build-Mac-Clang-arm64-Release-iOS", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", + "device_type:iPhone9,1", + "os:iOS-11.4.1", "pool:Skia" ], "env_prefixes": { @@ -48021,16 +47393,19 @@ "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-Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -48041,41 +47416,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_calmbench_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-calmbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_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-iPhone8-GPU-AppleA11-arm64-Debug-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Build-Mac-Clang-arm64-Debug-iOS", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", + "device_type:iPhone10,1", + "os:iOS-11.4.1", "pool:Skia" ], "env_prefixes": { @@ -48087,16 +47458,19 @@ "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-calmbench-upload@skia-swarming-bots.iam.gserviceaccount.com" + "outputs": [ + "test" + ] }, - "Upload-Calmbench-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -48107,41 +47481,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_calmbench_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Calmbench-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-calmbench\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_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-iPhone8-GPU-AppleA11-arm64-Release-All\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Calmbench-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" + "Build-Mac-Clang-arm64-Release-iOS", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", + "device_type:iPhone10,1", + "os:iOS-11.4.1", "pool:Skia" ], "env_prefixes": { @@ -48153,16 +47523,19 @@ "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-calmbench-upload@skia-swarming-bots.iam.gserviceaccount.com" + "outputs": [ + "test" + ] }, - "Upload-Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android": { + "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -48173,41 +47546,37 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal\",\"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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android" + "Build-Mac-Clang-arm64-Release-iOS_Metal", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", + "device_type:iPhone10,1", + "os:iOS-11.4.1", "pool:Skia" ], "env_prefixes": { @@ -48219,16 +47588,19 @@ "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-Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing": { + "Upload-BuildStats-Debian9-Clang-arm-Release-Flutter_Android": { "caches": [ { "name": "vpython", @@ -48239,35 +47611,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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)\"}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-Clang-arm-Release-Flutter_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" + "BuildStats-Debian9-Clang-arm-Release-Flutter_Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48294,7 +47666,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-BuildStats-Debian9-EMCC-asmjs-Release-PathKit": { "caches": [ { "name": "vpython", @@ -48305,35 +47677,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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)\"}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android" + "BuildStats-Debian9-EMCC-asmjs-Release-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48360,7 +47732,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-BuildStats-Debian9-EMCC-wasm-Release-CanvasKit": { "caches": [ { "name": "vpython", @@ -48371,35 +47743,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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)\"}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads" + "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48426,7 +47798,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-BuildStats-Debian9-EMCC-wasm-Release-CanvasKit_CPU": { "caches": [ { "name": "vpython", @@ -48437,35 +47809,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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)\"}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android" + "BuildStats-Debian9-EMCC-wasm-Release-CanvasKit_CPU" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48492,7 +47864,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-BuildStats-Debian9-EMCC-wasm-Release-PathKit": { "caches": [ { "name": "vpython", @@ -48503,35 +47875,35 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", "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)\"}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan" + "BuildStats-Debian9-EMCC-wasm-Release-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48558,7 +47930,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-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -48569,22 +47941,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -48592,12 +47964,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-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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android" + "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48624,7 +47996,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-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing": { "caches": [ { "name": "vpython", @@ -48635,22 +48007,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -48658,12 +48030,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-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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48690,7 +48062,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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -48701,22 +48073,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -48724,12 +48096,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-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-MotoG4-GPU-Adreno405-arm-Release-All-Android" + "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48756,7 +48128,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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -48767,22 +48139,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -48790,12 +48162,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-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-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android" + "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48822,7 +48194,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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -48833,22 +48205,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -48856,12 +48228,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-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-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android" + "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48888,7 +48260,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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -48899,22 +48271,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -48922,12 +48294,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-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads" + "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -48954,7 +48326,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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -48965,22 +48337,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -48988,12 +48360,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-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan" + "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49020,7 +48392,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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -49031,22 +48403,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49054,12 +48426,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-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android" + "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49086,7 +48458,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-MotoG4-GPU-Adreno405-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49097,22 +48469,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49120,12 +48492,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-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": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49152,7 +48524,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-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49163,22 +48535,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49186,12 +48558,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-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-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads" + "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49218,7 +48590,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-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49229,22 +48601,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49252,12 +48624,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-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-Nexus5-CPU-Snapdragon800-arm-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49284,7 +48656,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-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -49295,22 +48667,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49318,12 +48690,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-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-Nexus5-GPU-Adreno330-arm-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49350,7 +48722,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-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -49361,22 +48733,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49384,12 +48756,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-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-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49416,7 +48788,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-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49427,22 +48799,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49450,12 +48822,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-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-Nexus7-GPU-Tegra3-arm-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49482,7 +48854,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-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -49493,27 +48865,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49521,12 +48888,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-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-P30-GPU-MaliG76-arm64-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49553,7 +48920,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-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -49564,27 +48931,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49592,12 +48954,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-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-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49624,7 +48986,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-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49635,22 +48997,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49658,12 +49020,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-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-Pixel-GPU-Adreno530-arm64-Release-All-Android" + "Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49690,7 +49052,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-Nexus5-GPU-Adreno330-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49701,22 +49063,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49724,12 +49086,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-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-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench" + "Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49756,7 +49118,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-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs": { "caches": [ { "name": "vpython", @@ -49767,22 +49129,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49790,12 +49152,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-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-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench" + "Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49822,7 +49184,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-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49833,22 +49195,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49856,12 +49218,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-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-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench" + "Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49888,7 +49250,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-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49899,22 +49261,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -49922,12 +49284,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-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-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -49954,7 +49316,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-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -49965,88 +49327,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "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": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { - "name": "infra/tools/luci/vpython/${platform}", + "name": "infra/python/cpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "version:2.7.15.chromium14" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50054,12 +49355,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-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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" + "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50086,7 +49387,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_CCPR_Skpbench": { + "Upload-Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -50097,22 +49398,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50120,12 +49426,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_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-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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_CCPR_Skpbench" + "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50152,7 +49458,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_Skpbench": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -50163,22 +49469,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50186,12 +49492,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_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-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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Skpbench" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50218,7 +49524,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-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench": { "caches": [ { "name": "vpython", @@ -50229,22 +49535,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50252,12 +49558,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-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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50284,7 +49590,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_Skpbench": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench": { "caches": [ { "name": "vpython", @@ -50295,22 +49601,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50318,12 +49624,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_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-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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan_Skpbench" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50350,7 +49656,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-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench": { "caches": [ { "name": "vpython", @@ -50361,22 +49667,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50384,12 +49690,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-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-Pixel3-GPU-Adreno630-arm64-Release-All-Android" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50416,7 +49722,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_CCPR_Skpbench": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -50427,22 +49733,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50450,12 +49756,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_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-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-Pixel3-GPU-Adreno630-arm64-Release-All-Android_CCPR_Skpbench" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50482,7 +49788,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_Skpbench": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench": { "caches": [ { "name": "vpython", @@ -50493,22 +49799,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50516,12 +49822,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_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-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-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Skpbench" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50548,7 +49854,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-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -50559,22 +49865,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50582,12 +49888,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-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-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50614,7 +49920,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_Skpbench": { + "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -50625,22 +49931,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50648,12 +49954,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_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-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-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan_Skpbench" + "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50680,7 +49986,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-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -50691,22 +49997,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50714,12 +50020,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-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-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" + "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50746,7 +50052,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_CCPR_Skpbench": { + "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -50757,22 +50063,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50780,12 +50086,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_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-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-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_CCPR_Skpbench" + "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50812,7 +50118,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_Skpbench": { + "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -50823,22 +50129,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50846,12 +50152,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_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-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-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Skpbench" + "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -50889,22 +50195,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50944,7 +50250,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_Skpbench": { + "Upload-Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -50955,22 +50261,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -50978,12 +50284,78 @@ "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_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-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)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan_Skpbench" + "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "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-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -51021,22 +50393,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51087,22 +50459,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51153,22 +50525,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51219,22 +50591,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51285,22 +50657,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51351,22 +50723,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51417,22 +50789,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51483,22 +50855,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51549,22 +50921,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51615,22 +50987,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51681,22 +51053,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51747,22 +51119,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51813,22 +51185,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51879,22 +51251,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -51945,22 +51317,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52011,22 +51383,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52077,22 +51449,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52143,22 +51515,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52209,22 +51581,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52275,22 +51647,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52341,22 +51713,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52407,22 +51779,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52473,22 +51845,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52539,22 +51911,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52605,22 +51977,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52671,22 +52043,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52737,22 +52109,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52803,22 +52175,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52858,72 +52230,6 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian9-EMCC-NUC7i5BNK-GPU-IntelIris640-wasm-Release-All-SkottieWASM": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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-Debian9-EMCC-NUC7i5BNK-GPU-IntelIris640-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-Debian9-EMCC-NUC7i5BNK-GPU-IntelIris640-wasm-Release-All-SkottieWASM" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "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-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb": { "caches": [ { @@ -52935,22 +52241,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -52990,73 +52296,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb_Canvas": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.28" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "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-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb_Canvas\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(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-Debian9-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb_Canvas" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-9.8", - "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-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb": { + "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -53067,22 +52307,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53090,12 +52330,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-Debian9-none-NUC7i5BNK-GPU-IntelIris640-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.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-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb" + "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53122,7 +52362,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb_Canvas": { + "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -53133,22 +52373,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53156,12 +52396,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-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb_Canvas\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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-Debian9-none-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-LottieWeb_Canvas" + "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53188,7 +52428,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.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -53199,22 +52439,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53222,12 +52462,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.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-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All" + "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53254,7 +52494,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-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -53265,22 +52505,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53288,12 +52528,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-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-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer" + "Perf-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53320,7 +52560,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-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -53331,22 +52571,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53354,12 +52594,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-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-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal" + "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53386,7 +52626,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-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -53397,22 +52637,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53420,12 +52660,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-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-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All" + "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53452,7 +52692,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-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -53463,22 +52703,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53486,12 +52726,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-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-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All" + "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53518,7 +52758,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-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -53529,22 +52769,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53552,12 +52792,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-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-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer" + "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53584,7 +52824,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-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -53595,22 +52835,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53618,12 +52858,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-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-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal" + "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53650,7 +52890,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-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -53661,22 +52901,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53684,12 +52924,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\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All" + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53716,7 +52956,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-CommandBuffer": { + "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -53727,22 +52967,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53750,12 +52990,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-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.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer" + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53782,7 +53022,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { + "Upload-Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -53793,22 +53033,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53816,12 +53056,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.14-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-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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53848,7 +53088,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer": { + "Upload-Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -53859,22 +53099,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53882,12 +53122,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.14-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)\"}", + "{\"$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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer" + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53914,7 +53154,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-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM": { "caches": [ { "name": "vpython", @@ -53925,22 +53165,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -53948,12 +53188,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-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-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53980,7 +53220,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-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb": { "caches": [ { "name": "vpython", @@ -53991,22 +53231,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54014,12 +53254,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-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-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" + "Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54057,17 +53297,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54077,7 +53317,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54128,17 +53368,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54148,7 +53388,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54199,17 +53439,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54219,7 +53459,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54270,17 +53510,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54290,7 +53530,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54341,17 +53581,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54361,7 +53601,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54412,17 +53652,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54432,7 +53672,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54483,17 +53723,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54503,7 +53743,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54554,17 +53794,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54574,7 +53814,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54625,17 +53865,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54645,7 +53885,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54696,17 +53936,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54716,7 +53956,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54767,17 +54007,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54787,7 +54027,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54838,17 +54078,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54858,7 +54098,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54909,17 +54149,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -54929,7 +54169,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -54980,17 +54220,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55000,7 +54240,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55051,17 +54291,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55071,7 +54311,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55122,17 +54362,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55142,7 +54382,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55193,17 +54433,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55213,7 +54453,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55264,17 +54504,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55284,7 +54524,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55335,17 +54575,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55355,7 +54595,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55406,17 +54646,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55426,7 +54666,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55477,17 +54717,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55497,7 +54737,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55548,17 +54788,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55568,7 +54808,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55619,17 +54859,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55639,7 +54879,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55690,17 +54930,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55710,7 +54950,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55761,17 +55001,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55781,7 +55021,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55832,17 +55072,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55852,7 +55092,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55903,17 +55143,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55923,7 +55163,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -55974,17 +55214,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -55994,7 +55234,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56045,17 +55285,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -56065,7 +55305,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56116,17 +55356,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -56136,7 +55376,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56187,17 +55427,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -56207,7 +55447,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56258,17 +55498,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -56278,7 +55518,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56318,7 +55558,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -56329,17 +55569,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -56349,7 +55589,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56357,12 +55597,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-Win2016-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-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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56400,22 +55640,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56466,22 +55706,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56532,22 +55772,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56598,22 +55838,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56664,22 +55904,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56730,22 +55970,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56796,22 +56036,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56862,22 +56102,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56928,22 +56168,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -56994,22 +56234,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57060,22 +56300,286 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-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-9.8", + "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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57083,12 +56587,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-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-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads" + "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57115,7 +56619,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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -57126,22 +56630,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57149,12 +56653,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-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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android" + "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57181,7 +56685,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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -57192,22 +56696,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57215,12 +56719,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-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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts" + "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57247,7 +56751,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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -57258,22 +56762,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57281,12 +56785,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-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-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads" + "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57313,7 +56817,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-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -57324,22 +56828,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57347,12 +56851,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-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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android" + "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57379,7 +56883,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-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -57390,22 +56894,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57413,12 +56917,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-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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57445,7 +56949,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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -57456,22 +56960,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57479,12 +56983,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-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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android" + "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57511,7 +57015,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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -57522,22 +57026,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57545,12 +57049,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-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-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57577,7 +57081,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-MotoG4-GPU-Adreno405-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -57588,22 +57092,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57611,12 +57115,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-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-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android" + "Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57643,7 +57147,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-MotoG4-GPU-Adreno405-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -57654,22 +57158,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57677,12 +57181,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-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-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57709,7 +57213,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-CPU-TegraX1-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -57720,22 +57224,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57743,12 +57247,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-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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57775,7 +57279,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-CPU-TegraX1-arm-Debug-All-Android_NativeFonts": { "caches": [ { "name": "vpython", @@ -57786,22 +57290,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57809,12 +57313,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-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-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android_NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57841,7 +57345,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-CPU-TegraX1-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -57852,22 +57356,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57875,12 +57379,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-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-MotoG4-GPU-Adreno405-arm-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57907,7 +57411,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-CPU-TegraX1-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -57918,22 +57422,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -57941,12 +57445,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-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-MotoG4-GPU-Adreno405-arm-Release-All-Android" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57973,7 +57477,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-CPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -57984,22 +57488,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58007,12 +57511,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-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-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58039,7 +57543,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-arm-Debug-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -58050,22 +57554,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58073,12 +57577,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-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-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android_NativeFonts" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58105,7 +57609,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-arm-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -58116,22 +57620,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58139,12 +57643,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-arm-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-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58171,7 +57675,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-arm-Release-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -58182,22 +57686,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58205,12 +57709,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-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-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-NVIDIA_Shield-CPU-TegraX1-arm64-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58237,7 +57741,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-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -58248,22 +57752,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58271,12 +57775,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-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-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58303,7 +57807,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-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -58314,22 +57818,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58337,12 +57841,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-NVIDIA_Shield-GPU-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-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_NoGPUThreads" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58369,7 +57873,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_Vulkan": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR": { "caches": [ { "name": "vpython", @@ -58380,22 +57884,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58403,12 +57907,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_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-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-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_Vulkan" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58435,7 +57939,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-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -58446,22 +57950,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58469,12 +57973,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-NVIDIA_Shield-GPU-TegraX1-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-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58501,7 +58005,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-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -58512,22 +58016,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58535,12 +58039,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-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-GPU-TegraX1-arm-Release-All-Android_Vulkan" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58567,7 +58071,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": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -58578,22 +58082,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58601,12 +58105,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\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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-GPU-TegraX1-arm64-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58633,7 +58137,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-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -58644,22 +58148,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58667,12 +58171,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-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-Debug-All-Android_CCPR" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58699,7 +58203,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": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -58710,22 +58214,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58733,12 +58237,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\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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_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-Debug-All-Android_Vulkan" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58765,7 +58269,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-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -58776,22 +58280,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58799,12 +58303,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-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-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads" + "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58831,7 +58335,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-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -58842,22 +58346,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58865,12 +58369,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-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-arm64-Release-All-Android" + "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58897,7 +58401,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-Nexus5-GPU-Adreno330-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -58908,22 +58412,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58931,12 +58435,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-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-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58963,7 +58467,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-Nexus5-GPU-Adreno330-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -58974,22 +58478,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -58997,12 +58501,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-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-arm64-Release-All-Android_Vulkan_NoGPUThreads" + "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59029,7 +58533,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-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -59040,22 +58544,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59063,12 +58567,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-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-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android" + "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59095,7 +58599,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-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -59106,22 +58610,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59129,12 +58633,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-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-Nexus5-CPU-Snapdragon800-arm-Release-All-Android" + "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59161,7 +58665,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-Nexus7-GPU-Tegra3-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -59172,22 +58676,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59195,12 +58699,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-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-Nexus5-GPU-Adreno330-arm-Debug-All-Android" + "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59227,7 +58731,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-Nexus7-GPU-Tegra3-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -59238,22 +58742,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59261,12 +58765,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-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-Nexus5-GPU-Adreno330-arm-Release-All-Android" + "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59293,7 +58797,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-P30-GPU-MaliG76-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -59304,22 +58808,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59327,12 +58836,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-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-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59359,7 +58868,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-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -59370,22 +58879,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59393,12 +58907,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-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-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59425,7 +58939,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-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -59436,22 +58950,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59459,12 +58978,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-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-Nexus7-GPU-Tegra3-arm-Debug-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59491,7 +59010,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-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -59502,22 +59021,27 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/python/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.15.chromium14" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59525,12 +59049,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-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-Nexus7-GPU-Tegra3-arm-Release-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59557,7 +59081,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-P30-GPU-MaliG76-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -59568,17 +59092,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -59588,7 +59112,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59596,12 +59120,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-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-P30-GPU-MaliG76-arm64-Debug-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59628,7 +59152,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-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -59639,17 +59163,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -59659,7 +59183,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59667,12 +59191,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-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-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59699,7 +59223,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-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -59710,27 +59234,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59738,12 +59257,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_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-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-Debug-All-Android_DDL3_Vulkan" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59770,7 +59289,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-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR": { "caches": [ { "name": "vpython", @@ -59781,27 +59300,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59809,12 +59323,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-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-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59841,7 +59355,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-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -59852,27 +59366,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59880,12 +59389,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-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-Release-All-Android" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59912,7 +59421,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-Pixel-GPU-Adreno530-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -59923,27 +59432,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" - }, - { - "name": "infra/python/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.15.chromium14" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -59951,12 +59455,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-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-Release-All-Android_Vulkan" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59983,7 +59487,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-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -59994,22 +59498,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60017,12 +59521,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-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-Pixel-GPU-Adreno530-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60049,7 +59553,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-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -60060,22 +59564,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60083,12 +59587,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-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-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR" + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60115,7 +59619,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-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -60126,22 +59630,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60149,12 +59653,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-Pixel2XL-GPU-Adreno540-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-GPU-Adreno530-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60181,7 +59685,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-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -60192,22 +59696,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60215,12 +59719,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-Pixel2XL-GPU-Adreno540-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-GPU-Adreno530-arm64-Release-All-Android" + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_DDL3_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60247,7 +59751,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-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -60258,22 +59762,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60281,12 +59785,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-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-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60313,7 +59817,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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -60324,22 +59828,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60347,12 +59851,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-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-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60379,7 +59883,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_DDL1_Vulkan": { + "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -60390,22 +59894,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60413,12 +59917,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_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-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-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_DDL1_Vulkan" + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60445,7 +59949,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_DDL3_Vulkan": { + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -60456,22 +59960,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60479,12 +59983,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_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-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-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_DDL3_Vulkan" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60511,7 +60015,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-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -60522,22 +60026,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60545,12 +60049,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-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-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60577,7 +60081,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-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -60588,22 +60092,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60611,12 +60115,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-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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60643,7 +60147,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-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -60654,22 +60158,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60677,12 +60181,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-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-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60709,7 +60213,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-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -60720,22 +60224,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60743,12 +60247,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-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-Pixel3-GPU-Adreno630-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60775,7 +60279,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-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -60786,22 +60290,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60809,12 +60313,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-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-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60841,7 +60345,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-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -60852,22 +60356,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60875,12 +60379,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-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-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan" + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60907,7 +60411,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-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -60918,22 +60422,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -60941,12 +60445,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-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-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60973,7 +60477,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-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -60984,22 +60488,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61007,12 +60511,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-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-Pixel3-GPU-Adreno630-arm64-Release-All-Android" + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61039,7 +60543,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-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -61050,22 +60554,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61073,12 +60577,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-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-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61105,7 +60609,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-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -61116,22 +60620,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61139,12 +60643,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-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)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61171,7 +60675,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-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -61182,22 +60686,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61205,12 +60709,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-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)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61237,7 +60741,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-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -61248,22 +60752,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61271,12 +60775,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-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)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61303,7 +60807,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-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -61314,22 +60818,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61337,12 +60841,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-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)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61380,22 +60884,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61446,22 +60950,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61512,22 +61016,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61578,22 +61082,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61644,22 +61148,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61710,22 +61214,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61776,22 +61280,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61842,22 +61346,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61908,22 +61412,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -61974,22 +61478,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62040,22 +61544,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62106,22 +61610,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62172,22 +61676,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62238,22 +61742,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62304,22 +61808,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62370,22 +61874,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62436,22 +61940,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62502,22 +62006,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62557,7 +62061,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All": { + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": { "caches": [ { "name": "vpython", @@ -62568,22 +62072,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62591,12 +62095,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-Debian9-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-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-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All" + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62623,7 +62127,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker": { "caches": [ { "name": "vpython", @@ -62634,22 +62138,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62657,12 +62161,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-Debian9-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-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All" + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62689,7 +62193,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs": { + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker": { "caches": [ { "name": "vpython", @@ -62700,22 +62204,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62723,12 +62227,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-Debian9-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-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs" + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62755,7 +62259,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker": { "caches": [ { "name": "vpython", @@ -62766,22 +62270,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62789,12 +62293,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-Debian9-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-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts" + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62821,7 +62325,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -62832,22 +62336,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62855,12 +62359,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62887,7 +62391,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -62898,22 +62402,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62921,12 +62425,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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62953,7 +62457,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -62964,22 +62468,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -62987,12 +62491,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63019,7 +62523,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -63030,22 +62534,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63053,12 +62557,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63085,7 +62589,73 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER": { "caches": [ { "name": "vpython", @@ -63096,22 +62666,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63119,12 +62689,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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_SKVM_BLITTER" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63151,7 +62721,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack": { "caches": [ { "name": "vpython", @@ -63162,22 +62732,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63185,12 +62755,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63217,7 +62787,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs": { "caches": [ { "name": "vpython", @@ -63228,22 +62798,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63251,12 +62821,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63283,7 +62853,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -63294,22 +62864,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63317,12 +62887,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63349,7 +62919,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -63360,22 +62930,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63383,12 +62953,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63415,7 +62985,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { "caches": [ { "name": "vpython", @@ -63426,22 +62996,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63449,12 +63019,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63481,7 +63051,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD": { "caches": [ { "name": "vpython", @@ -63492,22 +63062,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63515,12 +63085,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63547,7 +63117,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2": { "caches": [ { "name": "vpython", @@ -63558,22 +63128,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63581,12 +63151,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63613,7 +63183,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -63624,22 +63194,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63647,12 +63217,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63679,7 +63249,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { "caches": [ { "name": "vpython", @@ -63690,22 +63260,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63713,12 +63283,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-Debian9-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-Debian9-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-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63745,7 +63315,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_USE_SKVM_BLITTER": { "caches": [ { "name": "vpython", @@ -63756,22 +63326,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63779,12 +63349,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-Debian9-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-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_USE_SKVM_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-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader" + "Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_USE_SKVM_BLITTER" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63811,7 +63381,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -63822,22 +63392,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63845,12 +63415,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-Debian9-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-Debian9-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-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All" + "Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63877,7 +63447,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan": { + "Upload-Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -63888,22 +63458,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63911,12 +63481,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-Debian9-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-Debian9-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-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan" + "Test-Debian9-Clang-GCE-CPU-AVX512-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63943,7 +63513,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { + "Upload-Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader": { "caches": [ { "name": "vpython", @@ -63954,22 +63524,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -63977,12 +63547,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-Debian9-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-Debian9-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-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All" + "Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64009,7 +63579,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { + "Upload-Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader": { "caches": [ { "name": "vpython", @@ -64020,22 +63590,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64043,12 +63613,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-Debian9-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-Debian9-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-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan" + "Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64075,7 +63645,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All": { + "Upload-Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -64086,22 +63656,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64109,12 +63679,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-Debian9-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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All" + "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64141,7 +63711,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1": { + "Upload-Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -64152,22 +63722,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64175,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-Debian9-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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1" + "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64207,7 +63777,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan": { + "Upload-Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -64218,22 +63788,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64241,12 +63811,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-Debian9-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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan" + "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64273,7 +63843,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3": { + "Upload-Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -64284,22 +63854,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64307,12 +63877,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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3" + "Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64339,7 +63909,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_Vulkan": { + "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -64350,22 +63920,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64373,12 +63943,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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_Vulkan" + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64405,7 +63975,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan": { + "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1": { "caches": [ { "name": "vpython", @@ -64416,22 +63986,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64439,12 +64009,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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan" + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64471,7 +64041,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { + "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -64482,22 +64052,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64505,12 +64075,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-Debian9-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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All" + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64537,7 +64107,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { + "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3": { "caches": [ { "name": "vpython", @@ -64548,22 +64118,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64571,12 +64141,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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan" + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64603,7 +64173,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All": { + "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -64614,22 +64184,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64637,12 +64207,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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-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-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All" + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64669,7 +64239,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { + "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -64680,22 +64250,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64703,12 +64273,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-Debian9-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-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-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-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All" + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64735,7 +64305,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All": { + "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -64746,22 +64316,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64769,12 +64339,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-Debian9-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-Debian9-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-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All" + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64801,7 +64371,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { + "Upload-Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -64812,22 +64382,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64835,12 +64405,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-Debian9-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-Debian9-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-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All" + "Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64867,7 +64437,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { + "Upload-Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -64878,22 +64448,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64901,12 +64471,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-Debian9-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-Debian9-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-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit" + "Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64933,7 +64503,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { + "Upload-Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -64944,22 +64514,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -64967,12 +64537,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-Debian9-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-Debian9-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-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit" + "Test-Debian9-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64999,7 +64569,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { + "Upload-Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -65010,22 +64580,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65033,12 +64603,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-Debian9-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-Debian9-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-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit" + "Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65065,7 +64635,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { + "Upload-Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -65076,22 +64646,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65099,12 +64669,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-Debian9-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)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian9-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-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit" + "Test-Debian9-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65131,7 +64701,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86-Debug-All": { + "Upload-Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -65142,22 +64712,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65165,12 +64735,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-Debian9-GCC-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-Debian9-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-Debian9-GCC-GCE-CPU-AVX2-x86-Debug-All" + "Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65197,7 +64767,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86-Release-All": { + "Upload-Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -65208,22 +64778,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65231,12 +64801,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-Debian9-GCC-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-Debian9-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-Debian9-GCC-GCE-CPU-AVX2-x86-Release-All" + "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65263,7 +64833,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All": { + "Upload-Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -65274,22 +64844,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65297,12 +64867,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-Debian9-GCC-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-Debian9-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-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All" + "Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65329,7 +64899,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Test-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -65340,22 +64910,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65363,12 +64933,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-Debian9-GCC-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-Debian9-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-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-All" + "Test-Debian9-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65406,22 +64976,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65472,22 +65042,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65538,22 +65108,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65604,22 +65174,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65670,22 +65240,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65736,22 +65306,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65802,22 +65372,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65868,22 +65438,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -65934,22 +65504,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66000,22 +65570,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66066,22 +65636,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66132,22 +65702,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66198,22 +65768,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66264,22 +65834,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66330,22 +65900,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66396,22 +65966,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66462,22 +66032,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66528,22 +66098,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66594,22 +66164,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66660,22 +66230,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66726,22 +66296,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66792,22 +66362,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66858,22 +66428,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66913,7 +66483,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { + "Upload-Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -66924,22 +66494,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -66947,12 +66517,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-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-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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All" + "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66979,7 +66549,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -66990,22 +66560,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67013,12 +66583,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-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-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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67045,7 +66615,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -67056,22 +66626,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67079,12 +66649,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-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-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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67111,7 +66681,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -67122,22 +66692,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67145,12 +66715,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-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-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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67177,7 +66747,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -67188,22 +66758,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67211,12 +66781,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-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-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.14-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67243,7 +66813,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-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -67254,22 +66824,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67277,12 +66847,78 @@ "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-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.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-9.8", + "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.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "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)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67320,22 +66956,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67386,22 +67022,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67452,22 +67088,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67518,22 +67154,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67584,22 +67220,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67650,22 +67286,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67716,22 +67352,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67782,22 +67418,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67848,17 +67484,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -67868,7 +67504,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67919,17 +67555,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -67939,7 +67575,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -67990,17 +67626,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68010,7 +67646,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68061,17 +67697,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68081,7 +67717,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68132,17 +67768,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68152,7 +67788,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68203,17 +67839,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68223,7 +67859,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68274,17 +67910,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68294,7 +67930,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68345,17 +67981,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68365,7 +68001,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68416,17 +68052,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68436,7 +68072,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68487,17 +68123,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68507,7 +68143,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68558,17 +68194,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68578,7 +68214,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68629,17 +68265,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68649,7 +68285,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68700,17 +68336,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68720,7 +68356,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68771,17 +68407,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68791,7 +68427,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68842,17 +68478,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68862,7 +68498,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68913,17 +68549,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -68933,7 +68569,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -68984,17 +68620,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69004,7 +68640,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69055,17 +68691,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69075,7 +68711,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69126,17 +68762,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69146,7 +68782,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69197,17 +68833,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69217,7 +68853,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69268,17 +68904,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69288,7 +68924,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69339,17 +68975,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69359,7 +68995,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69410,17 +69046,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69430,7 +69066,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69481,17 +69117,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69501,7 +69137,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69552,17 +69188,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69572,7 +69208,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69623,17 +69259,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69643,7 +69279,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69694,17 +69330,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69714,7 +69350,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69765,17 +69401,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69785,7 +69421,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69836,17 +69472,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69856,7 +69492,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69907,17 +69543,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69927,7 +69563,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -69978,17 +69614,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -69998,7 +69634,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70049,17 +69685,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70069,7 +69705,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70120,17 +69756,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70140,7 +69776,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70191,17 +69827,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70211,7 +69847,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70262,17 +69898,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70282,7 +69918,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70333,17 +69969,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70353,7 +69989,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70404,17 +70040,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70424,7 +70060,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70475,17 +70111,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70495,7 +70131,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70546,17 +70182,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70566,7 +70202,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70617,17 +70253,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70637,7 +70273,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70688,17 +70324,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70708,7 +70344,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70759,17 +70395,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70779,7 +70415,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70830,17 +70466,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70850,7 +70486,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70901,17 +70537,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70921,7 +70557,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -70972,17 +70608,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -70992,7 +70628,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71043,17 +70679,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71063,7 +70699,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71114,17 +70750,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71134,7 +70770,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71185,17 +70821,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71205,7 +70841,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71256,17 +70892,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71276,7 +70912,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71327,17 +70963,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71347,7 +70983,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71398,17 +71034,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71418,7 +71054,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71469,17 +71105,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71489,7 +71125,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71540,17 +71176,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71560,7 +71196,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71611,17 +71247,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71631,7 +71267,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71682,17 +71318,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71702,7 +71338,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71753,17 +71389,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71773,7 +71409,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71824,17 +71460,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71844,7 +71480,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71895,17 +71531,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71915,7 +71551,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -71966,17 +71602,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -71986,7 +71622,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72037,17 +71673,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72057,7 +71693,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72108,17 +71744,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72128,7 +71764,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72179,17 +71815,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72199,7 +71835,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72250,17 +71886,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72270,7 +71906,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72321,17 +71957,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72341,7 +71977,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72392,17 +72028,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72412,7 +72048,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72463,22 +72099,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72529,22 +72165,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72584,7 +72220,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86-Debug-All": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -72595,17 +72231,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72615,7 +72251,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72623,12 +72259,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-Win2016-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-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-Win2016-Clang-GCE-CPU-AVX2-x86-Debug-All" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72655,7 +72291,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86-Release-All": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All": { "caches": [ { "name": "vpython", @@ -72666,17 +72302,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72686,7 +72322,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72694,12 +72330,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-Win2016-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-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-Win2016-Clang-GCE-CPU-AVX2-x86-Release-All" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72726,7 +72362,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -72737,17 +72373,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72757,7 +72393,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72765,12 +72401,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-Win2016-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-Win2019-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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72797,7 +72433,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA": { "caches": [ { "name": "vpython", @@ -72808,17 +72444,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72828,7 +72464,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72836,12 +72472,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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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-FAAA\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72868,7 +72504,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA": { "caches": [ { "name": "vpython", @@ -72879,17 +72515,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72899,7 +72535,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72907,12 +72543,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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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-FSAA\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72939,7 +72575,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -72950,17 +72586,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -72970,7 +72606,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -72978,12 +72614,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-Win2016-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-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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73010,7 +72646,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA": { "caches": [ { "name": "vpython", @@ -73021,17 +72657,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73041,7 +72677,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73049,12 +72685,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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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-FAAA\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FAAA" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73081,7 +72717,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA": { "caches": [ { "name": "vpython", @@ -73092,17 +72728,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73112,7 +72748,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73120,12 +72756,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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"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-FSAA\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(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-Win2016-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-FSAA" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73152,7 +72788,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Debug-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -73163,17 +72799,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73183,7 +72819,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73191,12 +72827,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-Win2016-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-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-Win2016-MSVC-GCE-CPU-AVX2-x86-Debug-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73223,7 +72859,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-MSVC-GCE-CPU-AVX2-x86-Release-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All": { "caches": [ { "name": "vpython", @@ -73234,17 +72870,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73254,7 +72890,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73262,12 +72898,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-Win2016-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-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-Win2016-MSVC-GCE-CPU-AVX2-x86-Release-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73294,7 +72930,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -73305,17 +72941,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73325,7 +72961,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73333,12 +72969,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-Win2016-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-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-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Debug-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73365,7 +73001,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -73376,17 +73012,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73396,7 +73032,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73404,12 +73040,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-Win2016-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\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(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-Win2016-MSVC-GCE-CPU-AVX2-x86_64-Release-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73447,17 +73083,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73467,7 +73103,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73518,17 +73154,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73538,7 +73174,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73589,17 +73225,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73609,7 +73245,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73660,17 +73296,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73680,7 +73316,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73731,17 +73367,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73751,7 +73387,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73802,17 +73438,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73822,7 +73458,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73873,17 +73509,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73893,7 +73529,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -73944,17 +73580,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -73964,7 +73600,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74015,17 +73651,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -74035,7 +73671,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74086,17 +73722,17 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/python/cpython/${platform}", @@ -74106,7 +73742,7 @@ { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74157,22 +73793,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74223,22 +73859,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74289,22 +73925,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74355,22 +73991,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74421,22 +74057,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74487,22 +74123,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74553,22 +74189,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74619,22 +74255,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74685,22 +74321,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74751,22 +74387,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ @@ -74817,22 +74453,22 @@ { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:d8f38ca9494b5af249942631f9cee45927f6b4bc" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:2c805f1c716f6c5ad2126b27ec88b8585a09481e" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:f96db4b66034c859090be3c47eb38227277f228b" + "version": "git_revision:af7d2ebd14e9bdad51ff1afacbf37f49815ad27b" }, { "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:4.28" + "version": "version:4.46" } ], "command": [ diff --git a/third_party/skia/infra/bots/test_utils.py b/third_party/skia/infra/bots/test_utils.py old mode 100644 new mode 100755 diff --git a/third_party/skia/infra/bots/update_meta_config.py b/third_party/skia/infra/bots/update_meta_config.py index 8688e785ae4c..c470e122ed41 100644 --- a/third_party/skia/infra/bots/update_meta_config.py +++ b/third_party/skia/infra/bots/update_meta_config.py @@ -17,53 +17,14 @@ SKIA_REPO_TEMPLATE = 'https://skia.googlesource.com/%s.git' -CQ_INCLUDE_CHROMIUM_TRYBOTS = [ - ('luci.chromium.try', [ - 'android_optional_gpu_tests_rel', - 'linux-blink-rel', - 'linux_chromium_compile_dbg_ng', - 'linux_chromium_dbg_ng', - 'linux_chromium_rel_ng', - 'linux_optional_gpu_tests_rel', - 'mac10.10-blink-rel', - 'mac10.11-blink-rel', - 'mac10.12-blink-rel', - 'mac10.13-blink-rel', - 'mac10.13_retina-blink-rel', - 'mac_chromium_compile_dbg_ng', - 'mac_chromium_compile_rel_ng', - 'mac_chromium_dbg_ng', - 'mac_chromium_rel_ng', - 'mac_optional_gpu_tests_rel', - 'win10-blink-rel', - 'win7-blink-rel', - 'win_chromium_compile_dbg_ng', - 'win_chromium_dbg_ng', - 'win_optional_gpu_tests_rel', - ]), - ('master.tryserver.chromium.linux', [ - 'linux_chromium_compile_rel_ng', - ]), - ('master.tryserver.chromium.win', [ - 'win_chromium_compile_rel_ng', - 'win7_chromium_rel_ng', - 'win10_chromium_x64_rel_ng', - ]), - ('master.tryserver.chromium.android', [ - 'android_blink_rel', - 'android_compile_dbg', - 'android_compile_rel', - 'android_n5x_swarming_dbg', - 'android_n5x_swarming_rel', - ]) +CQ_INCLUDE_CHROMIUM_BUCKETS = [ + 'luci.chromium.try', ] -def addChromiumTrybots(f): - for master, bots in CQ_INCLUDE_CHROMIUM_TRYBOTS: - f.write('[bucket "%s"]\n' % master) - for bot in bots: - f.write('\tbuilder = %s\n' % bot) +def addChromiumBuckets(f): + for bucket in CQ_INCLUDE_CHROMIUM_BUCKETS: + f.write('[bucket "%s"]\n' % bucket) def main(): @@ -92,7 +53,7 @@ def main(): with open(buildbucket_config, 'w') as f: if args.repo_name == 'skia': - addChromiumTrybots(f) + addChromiumBuckets(f) # Adding all Skia jobs. f.write('[bucket "skia.primary"]\n') diff --git a/third_party/skia/infra/bots/upload_skps.py b/third_party/skia/infra/bots/upload_skps.py index c5b7ac30d0ae..8d9fd6761be4 100644 --- a/third_party/skia/infra/bots/upload_skps.py +++ b/third_party/skia/infra/bots/upload_skps.py @@ -12,6 +12,7 @@ import urllib2 import git_utils +import utils COMMIT_MSG = '''Update SKP version @@ -21,7 +22,6 @@ TBR=rmistry@google.com NO_MERGE_BUILDS ''' -SKIA_REPO = 'https://skia.googlesource.com/skia.git' def main(target_dir): @@ -32,7 +32,7 @@ def main(target_dir): skp_dir = os.path.join(infrabots_dir, 'assets', 'skp') upload_py = os.path.join(skp_dir, 'upload.py') - with git_utils.NewGitCheckout(repository=SKIA_REPO): + with git_utils.NewGitCheckout(repository=utils.SKIA_REPO): # First verify that there are no gen_tasks diffs. tmp_infrabots_dir = os.path.join(os.getcwd(), 'infra', 'bots') tmp_gen_tasks = os.path.join(tmp_infrabots_dir, 'gen_tasks.go') diff --git a/third_party/skia/infra/bots/utils.py b/third_party/skia/infra/bots/utils.py old mode 100644 new mode 100755 index 8b08aec6de01..42c1ced7451a --- a/third_party/skia/infra/bots/utils.py +++ b/third_party/skia/infra/bots/utils.py @@ -17,6 +17,8 @@ import uuid +SKIA_REPO = 'https://skia.googlesource.com/skia.git' + GCLIENT = 'gclient.bat' if sys.platform == 'win32' else 'gclient' WHICH = 'where' if sys.platform == 'win32' else 'which' GIT = subprocess.check_output([WHICH, 'git']).splitlines()[0] diff --git a/third_party/skia/infra/bots/zip_utils.py b/third_party/skia/infra/bots/zip_utils.py old mode 100644 new mode 100755 diff --git a/third_party/skia/infra/bots/zip_utils_test.py b/third_party/skia/infra/bots/zip_utils_test.py old mode 100644 new mode 100755 diff --git a/third_party/skia/infra/cmake/build_skia.sh b/third_party/skia/infra/cmake/build_skia.sh index dbd50dcf13b9..cb88147470ae 100755 --- a/third_party/skia/infra/cmake/build_skia.sh +++ b/third_party/skia/infra/cmake/build_skia.sh @@ -16,21 +16,21 @@ set -xe #BASE_DIR is the dir this script is in ($SKIA_ROOT/infra/cmake) BASE_DIR=`cd $(dirname ${BASH_SOURCE[0]}) && pwd` -SKIA_DIR=`cd $BASE_DIR/../.. && pwd` +SKIA_DIR=`cd ${BASE_DIR}/../.. && pwd` -# Delete everything to do a clean build -rm -rf $SKIA_DIR/out/CMAKE -mkdir --mode=0777 -p $SKIA_DIR/out/CMAKE +OUT="$(mktemp -d)/CMAKE" -cd $SKIA_DIR +cd ${SKIA_DIR} ./bin/fetch-gn -gn gen out/CMAKE --args='is_debug=false' --ide=json --json-ide-script=../../gn/gn_to_cmake.py +gn gen ${OUT} --args='is_debug=false' --ide=json --json-ide-script=$SKIA_DIR/gn/gn_to_cmake.py -cd $SKIA_DIR/out/CMAKE +cd ${OUT} +export CC=/usr/local/bin/clang +export CXX=/usr/local/bin/clang++ cmake -G"CodeBlocks - Unix Makefiles" . cmake --build . --parallel 8 # Copy build products, ignoring the warning # for not copying directories. -cp $SKIA_DIR/out/CMAKE/* /OUT || true +cp ${OUT}/* /OUT || true chmod +rw /OUT/* diff --git a/third_party/skia/infra/config/recipes.cfg b/third_party/skia/infra/config/recipes.cfg index feef8a5098f3..e86db0c536e4 100644 --- a/third_party/skia/infra/config/recipes.cfg +++ b/third_party/skia/infra/config/recipes.cfg @@ -14,12 +14,12 @@ "deps": { "depot_tools": { "branch": "master", - "revision": "2cbae8a8b9f61ad88e51f3b9fa30f97824db614b", + "revision": "9212599f6aacbdbecd378814e63e236660ab42aa", "url": "https://chromium.googlesource.com/chromium/tools/depot_tools.git" }, "recipe_engine": { "branch": "master", - "revision": "1ed55ef713b18458deaf7553399db7ff38cddeb2", + "revision": "3f4fe7e32cfe34f02d0244ba6cb73cc5ba58c9be", "url": "https://chromium.googlesource.com/infra/luci/recipes-py.git" } }, diff --git a/third_party/skia/infra/cts/run_testlab.go b/third_party/skia/infra/cts/run_testlab.go index 134c2303d749..3e1c9d6ed105 100644 --- a/third_party/skia/infra/cts/run_testlab.go +++ b/third_party/skia/infra/cts/run_testlab.go @@ -26,6 +26,7 @@ import ( "go.skia.org/infra/go/gcs" "go.skia.org/infra/go/httputils" + "go.skia.org/infra/go/skerr" "cloud.google.com/go/storage" "google.golang.org/api/option" @@ -142,14 +143,14 @@ func getAvailableDevices() ([]*DeviceVersions, DeviceList, error) { cmd.Stdout = &buf cmd.Stderr = io.MultiWriter(os.Stdout, &errBuf) if err := cmd.Run(); err != nil { - return nil, nil, sklog.FmtErrorf("Error running: %s\nError:%s\nStdErr:%s", CMD_AVAILABLE_DEVICES, err, errBuf) + return nil, nil, skerr.Wrapf(err, "Error running: %s\nStdErr:%s", CMD_AVAILABLE_DEVICES, errBuf) } // Unmarshal the result. foundDevices := []*DeviceVersions{} bufBytes := buf.Bytes() if err := json.Unmarshal(bufBytes, &foundDevices); err != nil { - return nil, nil, sklog.FmtErrorf("Unmarshal of device information failed: %s \nJSON Input: %s\n", err, string(bufBytes)) + return nil, nil, skerr.Wrapf(err, "Unmarshal of device information failed: \nJSON Input: %s\n", string(bufBytes)) } // Filter the devices and copy them to device list. @@ -261,7 +262,7 @@ func runTests(apk_path string, devices, ignoredDevices []*DeviceVersions, client // Exit code 10 means triggering on Testlab succeeded, but but some of the // runs on devices failed. We consider it a success for this script. if exitCode != 10 { - return sklog.FmtErrorf("Error running: %s\nError:%s\nStdErr:%s", cmdStr, err, errBuf) + return skerr.Wrapf(err, "Error running: %s\nStdErr:%s", cmdStr, errBuf) } } @@ -311,7 +312,7 @@ func splitProperties(propStr string) (map[string]string, error) { for _, oneProp := range splitProps { kv := strings.Split(oneProp, "=") if len(kv) != 2 { - return nil, sklog.FmtErrorf("Inavlid porperties format. Unable to parse '%s'", propStr) + return nil, skerr.Fmt("Invalid properties format. Unable to parse '%s'", propStr) } properties[strings.TrimSpace(kv[0])] = strings.TrimSpace(kv[1]) } @@ -358,11 +359,11 @@ func (d DeviceList) find(id string) *DevInfo { func writeDeviceList(fileName string, devList DeviceList) error { jsonBytes, err := json.MarshalIndent(devList, "", " ") if err != nil { - return sklog.FmtErrorf("Unable to encode JSON: %s", err) + return skerr.Wrapf(err, "Unable to encode JSON") } if err := ioutil.WriteFile(fileName, jsonBytes, 0644); err != nil { - sklog.FmtErrorf("Unable to write file '%s': %s", fileName, err) + skerr.Wrapf(err, "Unable to write file '%s'", fileName) } return nil } @@ -370,13 +371,13 @@ func writeDeviceList(fileName string, devList DeviceList) error { func readDeviceList(fileName string) (DeviceList, error) { inFile, err := os.Open(fileName) if err != nil { - return nil, sklog.FmtErrorf("Unable to open file '%s': %s", fileName, err) + return nil, skerr.Wrapf(err, "Unable to open file '%s'", fileName) } defer util.Close(inFile) var devList DeviceList if err := json.NewDecoder(inFile).Decode(&devList); err != nil { - return nil, sklog.FmtErrorf("Unable to decode JSON from '%s': %s", fileName, err) + return nil, skerr.Wrapf(err, "Unable to decode JSON from '%s'", fileName) } return devList, nil } diff --git a/third_party/skia/infra/gcc/Debian10-mips64el/Dockerfile b/third_party/skia/infra/gcc/Debian10-mips64el/Dockerfile new file mode 100644 index 000000000000..24719a50d07c --- /dev/null +++ b/third_party/skia/infra/gcc/Debian10-mips64el/Dockerfile @@ -0,0 +1,11 @@ +FROM debian:10-slim + +RUN dpkg --add-architecture mips64el && \ + apt-get update && apt-get upgrade -y && apt-get install -y \ + build-essential \ + ca-certificates \ + g++-multilib-mips64el-linux-gnuabi64 \ + libfontconfig-dev:mips64el \ + libglu-dev:mips64el \ + python \ + && rm -rf /var/lib/apt/lists/* diff --git a/third_party/skia/infra/gcc/Debian10-x86/Dockerfile b/third_party/skia/infra/gcc/Debian10-x86/Dockerfile new file mode 100644 index 000000000000..ac63a72185af --- /dev/null +++ b/third_party/skia/infra/gcc/Debian10-x86/Dockerfile @@ -0,0 +1,11 @@ +FROM debian:10-slim + +RUN dpkg --add-architecture i386 && \ + apt-get update && apt-get upgrade -y && apt-get install -y \ + build-essential \ + ca-certificates \ + g++-multilib \ + libfontconfig-dev:i386 \ + libglu-dev:i386 \ + python \ + && rm -rf /var/lib/apt/lists/* diff --git a/third_party/skia/infra/gcc/Debian10/Dockerfile b/third_party/skia/infra/gcc/Debian10/Dockerfile new file mode 100644 index 000000000000..2800ca585efb --- /dev/null +++ b/third_party/skia/infra/gcc/Debian10/Dockerfile @@ -0,0 +1,9 @@ +FROM debian:10-slim + +RUN apt-get update && apt-get upgrade -y && apt-get install -y \ + build-essential \ + ca-certificates \ + libfontconfig-dev \ + libglu-dev \ + python \ + && rm -rf /var/lib/apt/lists/* diff --git a/third_party/skia/infra/gcc/Makefile b/third_party/skia/infra/gcc/Makefile new file mode 100644 index 000000000000..91e58b451239 --- /dev/null +++ b/third_party/skia/infra/gcc/Makefile @@ -0,0 +1,16 @@ + +publish_Debian10: + docker build -t gcc-debian10 ./Debian10/ + docker tag gcc-debian10 gcr.io/skia-public/gcc-debian10 + docker push gcr.io/skia-public/gcc-debian10 + +publish_Debian10-x86: + docker build -t gcc-debian10-x86 ./Debian10-x86/ + docker tag gcc-debian10-x86 gcr.io/skia-public/gcc-debian10-x86 + docker push gcr.io/skia-public/gcc-debian10-x86 + +publish_Debian10-mips64el: + docker build -t gcc-debian10-mips64el ./Debian10-mips64el/ + docker tag gcc-debian10-mips64el gcr.io/skia-public/gcc-debian10-mips64el + docker push gcr.io/skia-public/gcc-debian10-mips64el + diff --git a/third_party/skia/infra/wasm-common/Makefile b/third_party/skia/infra/wasm-common/Makefile index 8ca5de9ac65d..73669b4584ca 100644 --- a/third_party/skia/infra/wasm-common/Makefile +++ b/third_party/skia/infra/wasm-common/Makefile @@ -16,7 +16,7 @@ aggregator: # Can check CHROME_VERSION with # docker run karma-chrome-tests /usr/bin/google-chrome-stable --version -CHROME_VERSION=72.0.3626.121_v1 +CHROME_VERSION=77.0.3865.120_v2 publish_gold_karma_chrome_tests: gold_docker_image docker tag gold-karma-chrome-tests gcr.io/skia-public/gold-karma-chrome-tests:${CHROME_VERSION} diff --git a/third_party/skia/infra/wasm-common/docker/Makefile b/third_party/skia/infra/wasm-common/docker/Makefile index cbdddc8f2519..4f75f21017e4 100644 --- a/third_party/skia/infra/wasm-common/docker/Makefile +++ b/third_party/skia/infra/wasm-common/docker/Makefile @@ -2,7 +2,7 @@ EMSDK_VERSION=1.38.47_v1 # Can check CHROME_VERSION with # docker run karma-chrome-tests /usr/bin/google-chrome-stable --version -CHROME_VERSION=72.0.3626.121_v1 +CHROME_VERSION=77.0.3865.120_v1 publish_emsdk_base: docker build --no-cache -t emsdk-base ./emsdk-base/ diff --git a/third_party/skia/infra/wasm-common/docker/gold-karma-chrome-tests/Dockerfile b/third_party/skia/infra/wasm-common/docker/gold-karma-chrome-tests/Dockerfile index 32f50d6a8ca3..b859f31970eb 100644 --- a/third_party/skia/infra/wasm-common/docker/gold-karma-chrome-tests/Dockerfile +++ b/third_party/skia/infra/wasm-common/docker/gold-karma-chrome-tests/Dockerfile @@ -4,6 +4,6 @@ # Tests will be run as non-root (user skia, in fact), so /OUT should have permissions # 777 so as to be able to create output there. -FROM gcr.io/skia-public/karma-chrome-tests:72.0.3626.121_v1 +FROM gcr.io/skia-public/karma-chrome-tests:77.0.3865.120_v1 COPY /tmp/gold-aggregator /opt/gold-aggregator \ No newline at end of file diff --git a/third_party/skia/infra/wasm-common/docker/perf-karma-chrome-tests/Dockerfile b/third_party/skia/infra/wasm-common/docker/perf-karma-chrome-tests/Dockerfile index cc7c49912694..06685457211f 100644 --- a/third_party/skia/infra/wasm-common/docker/perf-karma-chrome-tests/Dockerfile +++ b/third_party/skia/infra/wasm-common/docker/perf-karma-chrome-tests/Dockerfile @@ -4,6 +4,6 @@ # Tests will be run as non-root (user skia, in fact), so /OUT should have permissions # 777 so as to be able to create output there. -FROM gcr.io/skia-public/karma-chrome-tests:72.0.3626.121_v1 +FROM gcr.io/skia-public/karma-chrome-tests:77.0.3865.120_v1 COPY /tmp/perf-aggregator /opt/perf-aggregator \ No newline at end of file diff --git a/third_party/skia/infra/wasm-common/gold/wasm_gold_aggregator.go b/third_party/skia/infra/wasm-common/gold/wasm_gold_aggregator.go index f215825312c3..2a6a1feda58a 100644 --- a/third_party/skia/infra/wasm-common/gold/wasm_gold_aggregator.go +++ b/third_party/skia/infra/wasm-common/gold/wasm_gold_aggregator.go @@ -176,15 +176,16 @@ func dumpJSON(w http.ResponseWriter, r *http.Request) { } dmresults := jsonio.GoldResults{ - TryJobID: *buildBucketID, - ContinuousIntegrationSystem: "buildbucket", Builder: *builder, - GitHash: *gitHash, ChangeListID: *issue, + CodeReviewSystem: "gerrit", + ContinuousIntegrationSystem: "buildbucket", + GitHash: *gitHash, Key: defaultKeys, PatchSetOrder: *patchset, Results: results, TaskID: *taskId, + TryJobID: *buildBucketID, } enc := json.NewEncoder(outputFile) enc.SetIndent("", " ") // Make it human readable. diff --git a/third_party/skia/modules/canvaskit/CHANGELOG.md b/third_party/skia/modules/canvaskit/CHANGELOG.md index 4c377a81b55a..0a47ec5c2053 100644 --- a/third_party/skia/modules/canvaskit/CHANGELOG.md +++ b/third_party/skia/modules/canvaskit/CHANGELOG.md @@ -6,6 +6,48 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + - `SkContourMeasureIter` and `SkContourMeasure` as an alternative to `SkPathMeasure`. + - CanvasKit image decode cache helpers: getDecodeCacheLimitBytes(), setDecodeCacheLimitBytes(), + and getDecodeCacheUsedBytes(). + +### Changed + - The returned values from `SkParagraph.getRectsForRange` now have direction with value + `CanvasKit.TextDirection`. + +### Fixed + - `MakeImage` properly in the externs file and can work with `CanvasKit.Malloc`. + +## [0.9.0] - 2019-11-18 +### Added + - Experimental `CanvasKit.Malloc`, which can be used to create a + TypedArray backed by the C++ WASM memory. This can save a copy in some cases + (e.g. SkColorFilter.MakeMatrix). This is an advanced feature, so use it with care. + - `SkCanvas.clipRRect`, `SkCanvas.drawColor` + - Blur, ColorFilter, Compose, MatrixTransform SkImageFilters. Can be used with `SkPaint.setImageFilter`. + - `SkCanvas.saveLayer` now takes 3 or 4 params to include up to bounds, paint, SkImageFilter, flags. + - `SkPath.rArcTo`, `SkPath.rConicTo`, `SkPath.rCubicTo`, `SkPath.rLineTo`, `SkPath.rMoveTo`, + `SkPath.rQuadTo`. Like their non-relative siblings, these are chainable. + - Add `width()`, `height()`, `reset()`, `getFrameCount()` to SkAnimatedImage. + - `SkCanvas.drawImageNine`, `SkCanvas.drawPoints` and related `PointMode` enum. + - `SkPath.addPoly` + - `SkPathMeasure.getSegment` + - More information on SkParagraph API, eg. `getLongestLine()`, `getWordBoundary`, and others. + +### Deprecated + - `CanvasKit.MakeBlurMaskFilter` will be renamed/moved soon to `CanvasKit.SkMaskFilter.MakeBlur`. + +### Changed + - Use newer version of Freetype2 (Tracking Skia's DEPS now). + - Use newer versions of libpng and zlib (Tracking Skia's DEPS now). + +### Fixed + - null dereference when sometimes falling back to CPU. + - Actually ask WebGL for a stencil buffer. + - Can opt out of Paragraph API with no_paragraph passed into compile.sh or when using primitive_shaper. + +## [0.8.0] - 2019-10-21 + ### Added - `CanvasKit.MakeAnimatedImageFromEncoded`, `SkCanvas.drawAnimatedImage`. - `CanvasKit.SkFontMgr.FromData` which takes several ArrayBuffers of font data, parses diff --git a/third_party/skia/modules/canvaskit/canvaskit/.gitignore b/third_party/skia/modules/canvaskit/canvaskit/.gitignore index d3c34990bab0..10e23fad69c6 100644 --- a/third_party/skia/modules/canvaskit/canvaskit/.gitignore +++ b/third_party/skia/modules/canvaskit/canvaskit/.gitignore @@ -1,3 +1,4 @@ bin/ +debug/ package-lock.json -node_modules/ \ No newline at end of file +node_modules/ diff --git a/third_party/skia/modules/canvaskit/canvaskit/extra.html b/third_party/skia/modules/canvaskit/canvaskit/extra.html index 64b7efec8f1f..bd43785e7d1b 100644 --- a/third_party/skia/modules/canvaskit/canvaskit/extra.html +++ b/third_party/skia/modules/canvaskit/canvaskit/extra.html @@ -108,15 +108,6 @@

Paragraph

}); }); - fetch('https://storage.googleapis.com/skia-cdn/misc/skottie_sample_webfont.json').then((resp) => { - resp.text().then((str) => { - webfontJSON = str; - SkottieExample(CanvasKit, 'sk_webfont', webfontJSON, fullBounds, { - 'Roboto-Regular': robotoData, - }); - }); - }); - fetch('https://storage.googleapis.com/skia-cdn/misc/flightAnim.gif').then((resp) => { resp.arrayBuffer().then((buffer) => { flightAnimGif = buffer; diff --git a/third_party/skia/modules/canvaskit/canvaskit/package.json b/third_party/skia/modules/canvaskit/canvaskit/package.json index cb4a10125407..89bf0cb7b07f 100644 --- a/third_party/skia/modules/canvaskit/canvaskit/package.json +++ b/third_party/skia/modules/canvaskit/canvaskit/package.json @@ -1,6 +1,6 @@ { "name": "canvaskit-wasm", - "version": "0.7.0", + "version": "0.9.0", "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/third_party/skia/modules/canvaskit/canvaskit_bindings.cpp b/third_party/skia/modules/canvaskit/canvaskit_bindings.cpp index 3f330454f74c..2f42b6fa25c4 100644 --- a/third_party/skia/modules/canvaskit/canvaskit_bindings.cpp +++ b/third_party/skia/modules/canvaskit/canvaskit_bindings.cpp @@ -20,6 +20,7 @@ #include "include/core/SkFontMgr.h" #include "include/core/SkFontTypes.h" #include "include/core/SkImage.h" +#include "include/core/SkImageFilter.h" #include "include/core/SkImageInfo.h" #include "include/core/SkMaskFilter.h" #include "include/core/SkPaint.h" @@ -43,6 +44,7 @@ #include "include/effects/SkDashPathEffect.h" #include "include/effects/SkDiscretePathEffect.h" #include "include/effects/SkGradientShader.h" +#include "include/effects/SkImageFilters.h" #include "include/effects/SkTrimPathEffect.h" #include "include/pathops/SkPathOps.h" #include "include/utils/SkParsePath.h" @@ -50,6 +52,7 @@ #include "modules/skshaper/include/SkShaper.h" #include "src/core/SkFontMgrPriv.h" #include "src/core/SkMakeUnique.h" +#include "src/core/SkResourceCache.h" #include #include @@ -140,10 +143,13 @@ sk_sp MakeOnScreenGLSurface(sk_sp grContext, int width, in info.fFBOID = (GrGLuint) buffer; SkColorType colorType; + GrGLint stencil; + glGetIntegerv(GL_STENCIL_BITS, &stencil); + info.fFormat = GL_RGBA8; colorType = kRGBA_8888_SkColorType; - GrBackendRenderTarget target(width, height, 0, 8, info); + GrBackendRenderTarget target(width, height, 0, stencil, info); sk_sp surface(SkSurface::MakeFromBackendRenderTarget(grContext.get(), target, kBottomLeft_GrSurfaceOrigin, @@ -188,8 +194,7 @@ void ApplyAddArc(SkPath& orig, const SkRect& oval, SkScalar startAngle, SkScalar } void ApplyAddOval(SkPath& orig, const SkRect& oval, bool ccw, unsigned start) { - orig.addOval(oval, ccw ? SkPath::Direction::kCCW_Direction : - SkPath::Direction::kCW_Direction, start); + orig.addOval(oval, ccw ? SkPathDirection::kCCW : SkPathDirection::kCW, start); } void ApplyAddPath(SkPath& orig, const SkPath& newPath, @@ -206,9 +211,7 @@ void ApplyAddPath(SkPath& orig, const SkPath& newPath, void ApplyAddRect(SkPath& path, SkScalar left, SkScalar top, SkScalar right, SkScalar bottom, bool ccw) { - path.addRect(left, top, right, bottom, - ccw ? SkPath::Direction::kCCW_Direction : - SkPath::Direction::kCW_Direction); + path.addRect(left, top, right, bottom, ccw ? SkPathDirection::kCCW : SkPathDirection::kCW); } void ApplyAddRoundRect(SkPath& path, SkScalar left, SkScalar top, @@ -217,7 +220,7 @@ void ApplyAddRoundRect(SkPath& path, SkScalar left, SkScalar top, // See comment below for uintptr_t explanation const SkScalar* radii = reinterpret_cast(rPtr); path.addRoundRect(SkRect::MakeLTRB(left, top, right, bottom), radii, - ccw ? SkPath::Direction::kCCW_Direction : SkPath::Direction::kCW_Direction); + ccw ? SkPathDirection::kCCW : SkPathDirection::kCW); } @@ -230,13 +233,20 @@ void ApplyArcToAngle(SkPath& p, SkRect& oval, SkScalar startAngle, SkScalar swee p.arcTo(oval, startAngle, sweepAngle, forceMoveTo); } -void ApplyAddArcToArcSize(SkPath& orig, SkScalar rx, SkScalar ry, SkScalar xAxisRotate, - bool useSmallArc, bool ccw, SkScalar x, SkScalar y) { +void ApplyArcToArcSize(SkPath& orig, SkScalar rx, SkScalar ry, SkScalar xAxisRotate, + bool useSmallArc, bool ccw, SkScalar x, SkScalar y) { auto arcSize = useSmallArc ? SkPath::ArcSize::kSmall_ArcSize : SkPath::ArcSize::kLarge_ArcSize; - auto sweep = ccw ? SkPath::Direction::kCCW_Direction : SkPath::Direction::kCW_Direction; + auto sweep = ccw ? SkPathDirection::kCCW : SkPathDirection::kCW; orig.arcTo(rx, ry, xAxisRotate, arcSize, sweep, x, y); } +void ApplyRArcToArcSize(SkPath& orig, SkScalar rx, SkScalar ry, SkScalar xAxisRotate, + bool useSmallArc, bool ccw, SkScalar dx, SkScalar dy) { + auto arcSize = useSmallArc ? SkPath::ArcSize::kSmall_ArcSize : SkPath::ArcSize::kLarge_ArcSize; + auto sweep = ccw ? SkPathDirection::kCCW : SkPathDirection::kCW; + orig.rArcTo(rx, ry, xAxisRotate, arcSize, sweep, dx, dy); +} + void ApplyClose(SkPath& p) { p.close(); } @@ -246,19 +256,37 @@ void ApplyConicTo(SkPath& p, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, p.conicTo(x1, y1, x2, y2, w); } +void ApplyRConicTo(SkPath& p, SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2, + SkScalar w) { + p.rConicTo(dx1, dy1, dx2, dy2, w); +} + void ApplyCubicTo(SkPath& p, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3) { p.cubicTo(x1, y1, x2, y2, x3, y3); } +void ApplyRCubicTo(SkPath& p, SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2, + SkScalar dx3, SkScalar dy3) { + p.rCubicTo(dx1, dy1, dx2, dy2, dx3, dy3); +} + void ApplyLineTo(SkPath& p, SkScalar x, SkScalar y) { p.lineTo(x, y); } +void ApplyRLineTo(SkPath& p, SkScalar dx, SkScalar dy) { + p.rLineTo(dx, dy); +} + void ApplyMoveTo(SkPath& p, SkScalar x, SkScalar y) { p.moveTo(x, y); } +void ApplyRMoveTo(SkPath& p, SkScalar dx, SkScalar dy) { + p.rMoveTo(dx, dy); +} + void ApplyReset(SkPath& p) { p.reset(); } @@ -271,6 +299,10 @@ void ApplyQuadTo(SkPath& p, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2) p.quadTo(x1, y1, x2, y2); } +void ApplyRQuadTo(SkPath& p, SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2) { + p.rQuadTo(dx1, dy1, dx2, dy2); +} + void ApplyTransform(SkPath& orig, SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY, SkScalar scaleY, SkScalar transY, @@ -557,10 +589,20 @@ class ShapedText { }; void drawShapedText(SkCanvas& canvas, ShapedText st, SkScalar x, - SkScalar y, SkPaint paint) { + SkScalar y, SkPaint paint) { canvas.drawTextBlob(st.blob(), x, y, paint); } +int saveLayerRec(SkCanvas& canvas, const SkPaint* paint, + const SkImageFilter* backdrop, SkCanvas::SaveLayerFlags flags) { + return canvas.saveLayer(SkCanvas::SaveLayerRec(nullptr, paint, backdrop, flags)); +} + +int saveLayerRecBounds(SkCanvas& canvas, const SkPaint* paint, const SkImageFilter* backdrop, + SkCanvas::SaveLayerFlags flags, const SkRect& bounds) { + return canvas.saveLayer(SkCanvas::SaveLayerRec(&bounds, paint, backdrop, flags)); +} + // This is simpler than dealing with an SkPoint and SkVector struct PosTan { SkScalar px, py, tx, ty; @@ -607,6 +649,10 @@ namespace emscripten { template void raw_destructor(ClassType *); + template<> + void raw_destructor(SkContourMeasure *ptr) { + } + template<> void raw_destructor(SkData *ptr) { } @@ -649,6 +695,10 @@ EMSCRIPTEN_BINDINGS(Skia) { constant("gpu", true); #endif + function("getDecodeCacheLimitBytes", &SkResourceCache::GetTotalByteLimit); + function("setDecodeCacheLimitBytes", &SkResourceCache::SetTotalByteLimit); + function("getDecodeCacheUsedBytes" , &SkResourceCache::GetTotalBytesUsed); + function("computeTonalColors", &computeTonalColors); function("_decodeAnimatedImage", optional_override([](uintptr_t /* uint8_t* */ iptr, size_t length)->sk_sp { @@ -680,6 +730,7 @@ EMSCRIPTEN_BINDINGS(Skia) { function("getSkDataBytes", &getSkDataBytes, allow_raw_pointers()); function("MakeSkCornerPathEffect", &SkCornerPathEffect::Make, allow_raw_pointers()); function("MakeSkDiscretePathEffect", &SkDiscretePathEffect::Make, allow_raw_pointers()); + // Deprecated: use Canvaskit.SkMaskFilter.MakeBlur function("MakeBlurMaskFilter", optional_override([](SkBlurStyle style, SkScalar sigma, bool respectCTM)->sk_sp { // Adds a little helper because emscripten doesn't expose default params. return SkMaskFilter::MakeBlur(style, sigma, respectCTM); @@ -805,13 +856,24 @@ EMSCRIPTEN_BINDINGS(Skia) { class_("SkAnimatedImage") .smart_ptr>("sk_sp") + .function("decodeNextFrame", &SkAnimatedImage::decodeNextFrame) + .function("getFrameCount", &SkAnimatedImage::getFrameCount) .function("getRepetitionCount", &SkAnimatedImage::getRepetitionCount) - .function("decodeNextFrame", &SkAnimatedImage::decodeNextFrame); + .function("height", optional_override([](SkAnimatedImage& self)->int32_t { + return self.dimensions().height(); + })) + .function("reset", &SkAnimatedImage::reset) + .function("width", optional_override([](SkAnimatedImage& self)->int32_t { + return self.dimensions().width(); + })); class_("SkCanvas") .constructor<>() .function("clear", &SkCanvas::clear) .function("clipPath", select_overload(&SkCanvas::clipPath)) + .function("clipRRect", optional_override([](SkCanvas& self, const SimpleRRect& r, SkClipOp op, bool doAntiAlias) { + self.clipRRect(toRRect(r), op, doAntiAlias); + })) .function("clipRect", select_overload(&SkCanvas::clipRect)) .function("concat", optional_override([](SkCanvas& self, const SimpleMatrix& m) { self.concat(toSkMatrix(m)); @@ -831,14 +893,20 @@ EMSCRIPTEN_BINDINGS(Skia) { self.drawAtlas(atlas, dstXforms, srcRects, colors, count, mode, nullptr, paint); }), allow_raw_pointers()) .function("drawCircle", select_overload(&SkCanvas::drawCircle)) + .function("drawColor", &SkCanvas::drawColor) .function("drawDRRect",optional_override([](SkCanvas& self, const SimpleRRect& o, const SimpleRRect& i, const SkPaint& paint) { self.drawDRRect(toRRect(o), toRRect(i), paint); })) .function("drawAnimatedImage", optional_override([](SkCanvas& self, sk_sp& aImg, - SkScalar x, SkScalar y)->void { + SkScalar x, SkScalar y)->void { self.drawDrawable(aImg.get(), x, y); }), allow_raw_pointers()) .function("drawImage", select_overload&, SkScalar, SkScalar, const SkPaint*)>(&SkCanvas::drawImage), allow_raw_pointers()) + .function("drawImageNine", optional_override([](SkCanvas& self, const sk_sp& image, + SkIRect center, SkRect dst, + const SkPaint* paint)->void { + self.drawImageNine(image, center, dst, paint); + }), allow_raw_pointers()) .function("drawImageRect", optional_override([](SkCanvas& self, const sk_sp& image, SkRect src, SkRect dst, const SkPaint* paint, bool fastSample)->void { @@ -859,6 +927,13 @@ EMSCRIPTEN_BINDINGS(Skia) { // Of note, picture is *not* what is colloquially thought of as a "picture", what we call // a bitmap. An SkPicture is a series of draw commands. .function("drawPicture", select_overload&)>(&SkCanvas::drawPicture)) + .function("_drawPoints", optional_override([](SkCanvas& self, SkCanvas::PointMode mode, + uintptr_t /* SkPoint* */ pptr, + int count, SkPaint paint)->void { + // See comment above for uintptr_t explanation + const SkPoint* pts = reinterpret_cast(pptr); + self.drawPoints(mode, count, pts, paint); + })) .function("drawRRect",optional_override([](SkCanvas& self, const SimpleRRect& r, const SkPaint& paint) { self.drawRRect(toRRect(r), paint); })) @@ -906,8 +981,14 @@ EMSCRIPTEN_BINDINGS(Skia) { .function("restoreToCount", &SkCanvas::restoreToCount) .function("rotate", select_overload(&SkCanvas::rotate)) .function("save", &SkCanvas::save) + // 2 params .function("saveLayer", select_overload(&SkCanvas::saveLayer), allow_raw_pointers()) + // 3 params (effectively with SaveLayerRec, but no bounds) + .function("saveLayer", saveLayerRec, allow_raw_pointers()) + // 4 params (effectively with SaveLayerRec) + .function("saveLayer", saveLayerRecBounds, allow_raw_pointers()) + .function("scale", &SkCanvas::scale) .function("skew", &SkCanvas::skew) .function("translate", &SkCanvas::translate) @@ -932,6 +1013,33 @@ EMSCRIPTEN_BINDINGS(Skia) { })) .class_function("MakeSRGBToLinearGamma", &SkColorFilters::SRGBToLinearGamma); + class_("SkContourMeasureIter") + .constructor() + .function("next", &SkContourMeasureIter::next); + + class_("SkContourMeasure") + .smart_ptr>("sk_sp>") + .function("getPosTan", optional_override([](SkContourMeasure& self, + SkScalar distance) -> PosTan { + SkPoint p{0, 0}; + SkVector v{0, 0}; + if (!self.getPosTan(distance, &p, &v)) { + SkDebugf("zero-length path in getPosTan\n"); + } + return PosTan{p.x(), p.y(), v.x(), v.y()}; + })) + .function("getSegment", optional_override([](SkContourMeasure& self, SkScalar startD, + SkScalar stopD, bool startWithMoveTo) -> SkPath { + SkPath p; + bool ok = self.getSegment(startD, stopD, &p, startWithMoveTo); + if (ok) { + return p; + } + return SkPath(); + })) + .function("isClosed", &SkContourMeasure::isClosed) + .function("length", &SkContourMeasure::length); + class_("SkData") .smart_ptr>("sk_sp>") .function("size", &SkData::size); @@ -1046,8 +1154,30 @@ EMSCRIPTEN_BINDINGS(Skia) { return self->readPixels(ii, pixels, dstRowBytes, srcX, srcY); }), allow_raw_pointers()); + class_("SkImageFilter") + .smart_ptr>("sk_sp") + .class_function("MakeBlur", optional_override([](SkScalar sigmaX, SkScalar sigmaY, + SkTileMode tileMode, sk_sp input)->sk_sp { + // Emscripten does not like default args nor SkIRect* much + return SkImageFilters::Blur(sigmaX, sigmaY, tileMode, input); + })) + .class_function("MakeColorFilter", optional_override([](sk_sp cf, + sk_sp input)->sk_sp { + // Emscripten does not like default args nor SkIRect* much + return SkImageFilters::ColorFilter(cf, input); + })) + .class_function("MakeCompose", &SkImageFilters::Compose) + .class_function("MakeMatrixTransform", optional_override([](SimpleMatrix sm, SkFilterQuality fq, + sk_sp input)->sk_sp { + return SkImageFilters::MatrixTransform(toSkMatrix(sm), fq, input); + })); + class_("SkMaskFilter") - .smart_ptr>("sk_sp"); + .smart_ptr>("sk_sp") + .class_function("MakeBlur", optional_override([](SkBlurStyle style, SkScalar sigma, bool respectCTM)->sk_sp { + // Adds a little helper because emscripten doesn't expose default params. + return SkMaskFilter::MakeBlur(style, sigma, respectCTM); + }), allow_raw_pointers()); class_("SkPaint") .constructor<>() @@ -1073,6 +1203,7 @@ EMSCRIPTEN_BINDINGS(Skia) { })) .function("setColorFilter", &SkPaint::setColorFilter) .function("setFilterQuality", &SkPaint::setFilterQuality) + .function("setImageFilter", &SkPaint::setImageFilter) .function("setMaskFilter", &SkPaint::setMaskFilter) .function("setPathEffect", &SkPaint::setPathEffect) .function("setShader", &SkPaint::setShader) @@ -1092,13 +1223,20 @@ EMSCRIPTEN_BINDINGS(Skia) { // interface.js has 3 overloads of addPath .function("_addOval", &ApplyAddOval) .function("_addPath", &ApplyAddPath) + .function("_addPoly", optional_override([](SkPath& self, + uintptr_t /* SkPoint* */ pptr, + int count, bool close)->void { + // See comment above for uintptr_t explanation + const SkPoint* pts = reinterpret_cast(pptr); + self.addPoly(pts, count, close); + })) // interface.js has 4 overloads of addRect .function("_addRect", &ApplyAddRect) // interface.js has 4 overloads of addRoundRect .function("_addRoundRect", &ApplyAddRoundRect) .function("_arcTo", &ApplyArcTo) .function("_arcTo", &ApplyArcToAngle) - .function("_arcTo", &ApplyAddArcToArcSize) + .function("_arcTo", &ApplyArcToArcSize) .function("_close", &ApplyClose) .function("_conicTo", &ApplyConicTo) .function("countPoints", &SkPath::countPoints) @@ -1109,9 +1247,15 @@ EMSCRIPTEN_BINDINGS(Skia) { .function("isVolatile", &SkPath::isVolatile) .function("_lineTo", &ApplyLineTo) .function("_moveTo", &ApplyMoveTo) + .function("_quadTo", &ApplyQuadTo) + .function("_rArcTo", &ApplyRArcToArcSize) + .function("_rConicTo", &ApplyRConicTo) + .function("_rCubicTo", &ApplyRCubicTo) + .function("_rLineTo", &ApplyRLineTo) + .function("_rMoveTo", &ApplyRMoveTo) + .function("_rQuadTo", &ApplyRQuadTo) .function("reset", &ApplyReset) .function("rewind", &ApplyRewind) - .function("_quadTo", &ApplyQuadTo) .function("setIsVolatile", &SkPath::setIsVolatile) .function("_transform", select_overload(&ApplyTransform)) @@ -1128,7 +1272,7 @@ EMSCRIPTEN_BINDINGS(Skia) { .function("toSVGString", &ToSVGString) .function("toCmds", &ToCmds) - .function("setFillType", &SkPath::setFillType) + .function("setFillType", select_overload(&SkPath::setFillType)) .function("getFillType", &SkPath::getFillType) .function("getBounds", &SkPath::getBounds) .function("computeTightBounds", &SkPath::computeTightBounds) @@ -1152,6 +1296,15 @@ EMSCRIPTEN_BINDINGS(Skia) { } return PosTan{p.x(), p.y(), v.x(), v.y()}; })) + .function("getSegment", optional_override([](SkPathMeasure& self, SkScalar startD, + SkScalar stopD, bool startWithMoveTo) -> SkPath { + SkPath p; + bool ok = self.getSegment(startD, stopD, &p, startWithMoveTo); + if (ok) { + return p; + } + return SkPath(); + })) .function("isClosed", &SkPathMeasure::isClosed) .function("nextContour", &SkPathMeasure::nextContour); @@ -1333,11 +1486,11 @@ EMSCRIPTEN_BINDINGS(Skia) { .value("R16G16_float", SkColorType::kR16G16_float_SkColorType) .value("R16G16B16A16_unorm", SkColorType::kR16G16B16A16_unorm_SkColorType); - enum_("FillType") - .value("Winding", SkPath::FillType::kWinding_FillType) - .value("EvenOdd", SkPath::FillType::kEvenOdd_FillType) - .value("InverseWinding", SkPath::FillType::kInverseWinding_FillType) - .value("InverseEvenOdd", SkPath::FillType::kInverseEvenOdd_FillType); + enum_("FillType") + .value("Winding", SkPathFillType::kWinding) + .value("EvenOdd", SkPathFillType::kEvenOdd) + .value("InverseWinding", SkPathFillType::kInverseWinding) + .value("InverseEvenOdd", SkPathFillType::kInverseEvenOdd); enum_("FilterQuality") .value("None", SkFilterQuality::kNone_SkFilterQuality) @@ -1361,6 +1514,11 @@ EMSCRIPTEN_BINDINGS(Skia) { .value("XOR", SkPathOp::kXOR_SkPathOp) .value("ReverseDifference", SkPathOp::kReverseDifference_SkPathOp); + enum_("PointMode") + .value("Points", SkCanvas::PointMode::kPoints_PointMode) + .value("Lines", SkCanvas::PointMode::kLines_PointMode) + .value("Polygon", SkCanvas::PointMode::kPolygon_PointMode); + enum_("StrokeCap") .value("Butt", SkPaint::Cap::kButt_Cap) .value("Round", SkPaint::Cap::kRound_Cap) @@ -1498,4 +1656,8 @@ EMSCRIPTEN_BINDINGS(Skia) { constant("CONIC_VERB", CONIC); constant("CUBIC_VERB", CUBIC); constant("CLOSE_VERB", CLOSE); + + constant("SaveLayerInitWithPrevious", SkCanvas::SaveLayerFlagsSet::kInitWithPrevious_SaveLayerFlag); + constant("SaveLayerF16ColorType", SkCanvas::SaveLayerFlagsSet::kF16ColorType); + } diff --git a/third_party/skia/modules/canvaskit/compile.sh b/third_party/skia/modules/canvaskit/compile.sh index a39852e5f3ff..c89cfdee0aad 100755 --- a/third_party/skia/modules/canvaskit/compile.sh +++ b/third_party/skia/modules/canvaskit/compile.sh @@ -72,19 +72,22 @@ fi MANAGED_SKOTTIE_BINDINGS="\ -DSK_INCLUDE_MANAGED_SKOTTIE=1 \ - modules/skottie/utils/SkottieUtils.cpp" + modules/skottie/utils/SkottieUtils.cpp \ + modules/skresources/src/SkResources.cpp" if [[ $@ == *no_managed_skottie* ]]; then echo "Omitting managed Skottie" MANAGED_SKOTTIE_BINDINGS="-DSK_INCLUDE_MANAGED_SKOTTIE=0" fi GN_PARTICLES="skia_enable_sksl_interpreter=true" +PARTICLES_JS="--pre-js $BASE_DIR/particles.js" PARTICLES_BINDINGS="$BASE_DIR/particles_bindings.cpp" PARTICLES_LIB="$BUILD_DIR/libparticles.a" if [[ $@ == *no_particles* ]]; then echo "Omitting Particles" GN_PARTICLES="skia_enable_sksl_interpreter=false" + PARTICLES_JS="" PARTICLES_BINDINGS="" PARTICLES_LIB="" fi @@ -127,7 +130,7 @@ else --align 4 fi -GN_SHAPER="skia_use_icu=true skia_use_system_icu=false skia_use_system_harfbuzz=false" +GN_SHAPER="skia_use_icu=true skia_use_system_icu=false skia_use_harfbuzz=true skia_use_system_harfbuzz=false" SHAPER_LIB="$BUILD_DIR/libharfbuzz.a \ $BUILD_DIR/libicu.a" SHAPER_TARGETS="libharfbuzz.a libicu.a" @@ -143,6 +146,14 @@ PARAGRAPH_LIB="$BUILD_DIR/libskparagraph.a" PARAGRAPH_BINDINGS="-DSK_INCLUDE_PARAGRAPH=1 \ $BASE_DIR/paragraph_bindings.cpp" +if [[ $@ == *no_paragraph* ]] || [[ $@ == *primitive_shaper* ]]; then + echo "Omitting paragraph (must also have non-primitive shaper)" + PARAGRAPH_JS="" + PARAGRAPH_LIB="" + PARAGRAPH_BINDINGS="" +fi + + # Turn off exiting while we check for ninja (which may not be on PATH) set +e NINJA=`which ninja` @@ -163,7 +174,7 @@ echo "Compiling bitcode" cxx=\"${EMCXX}\" \ ar=\"${EMAR}\" \ extra_cflags_cc=[\"-frtti\"] \ - extra_cflags=[\"-s\",\"USE_FREETYPE=1\",\"-s\",\"USE_LIBPNG=1\", \"-s\", \"WARN_UNALIGNED=1\", + extra_cflags=[\"-s\", \"WARN_UNALIGNED=1\", \"-DSKNX_NO_SIMD\", \"-DSK_DISABLE_AAA\", \"-DSK_DISABLE_READBUFFER\", \"-DSK_DISABLE_EFFECT_DESERIALIZATION\", ${GN_GPU_FLAGS} @@ -188,11 +199,12 @@ echo "Compiling bitcode" skia_use_libwebp=false \ skia_use_lua=false \ skia_use_piex=false \ - skia_use_system_libpng=true \ - skia_use_system_freetype2=true \ + skia_use_system_libpng=false \ + skia_use_system_freetype2=false \ skia_use_system_libjpeg_turbo=false \ + skia_use_system_zlib=false\ skia_use_vulkan=false \ - skia_use_wuffs = true \ + skia_use_wuffs=true \ skia_use_zlib=true \ \ ${GN_SHAPER} \ @@ -234,6 +246,7 @@ ${EMCXX} \ --pre-js $BASE_DIR/interface.js \ $PARAGRAPH_JS \ $SKOTTIE_JS \ + $PARTICLES_JS \ $HTML_CANVAS_API \ --pre-js $BASE_DIR/postamble.js \ --post-js $BASE_DIR/ready.js \ @@ -256,8 +269,6 @@ ${EMCXX} \ -s NO_EXIT_RUNTIME=1 \ -s STRICT=1 \ -s TOTAL_MEMORY=128MB \ - -s USE_FREETYPE=1 \ - -s USE_LIBPNG=1 \ -s WARN_UNALIGNED=1 \ -s WASM=1 \ -o $BUILD_DIR/canvaskit.js diff --git a/third_party/skia/modules/canvaskit/externs.js b/third_party/skia/modules/canvaskit/externs.js index 88c42766f0cd..2ad2cb3ed7e8 100644 --- a/third_party/skia/modules/canvaskit/externs.js +++ b/third_party/skia/modules/canvaskit/externs.js @@ -42,6 +42,8 @@ var CanvasKit = { /** @return {CanvasKit.SkAnimatedImage} */ MakeAnimatedImageFromEncoded: function() {}, /** @return {CanvasKit.SkImage} */ + MakeImage: function() {}, + /** @return {CanvasKit.SkImage} */ MakeImageFromEncoded: function() {}, /** @return {LinearCanvasGradient} */ MakeLinearGradientShader: function() {}, @@ -53,19 +55,25 @@ var CanvasKit = { MakeRenderTarget: function() {}, MakeSWCanvasSurface: function() {}, MakeManagedAnimation: function() {}, + MakeParticles: function() {}, MakeSkDashPathEffect: function() {}, MakeSkVertices: function() {}, MakeSurface: function() {}, /** @return {RadialCanvasGradient} */ MakeTwoPointConicalGradientShader: function() {}, MakeWebGLCanvasSurface: function() {}, + /** @return {TypedArray} */ + Malloc: function() {}, /** @return {TonalColors} */ computeTonalColors: function() {}, currentContext: function() {}, getColorComponents: function() {}, + getDecodeCacheLimitBytes: function() {}, + getDecodeCacheUsageBytes: function() {}, getSkDataBytes: function() {}, multiplyByAlpha: function() {}, setCurrentContext: function() {}, + setDecodeCacheLimitBytes: function() {}, // private API (i.e. things declared in the bindings that we use // in the pre-js file) @@ -74,6 +82,7 @@ var CanvasKit = { _MakePathFromCmds: function() {}, _MakeRadialGradientShader: function() {}, _MakeManagedAnimation: function() {}, + _MakeParticles: function() {}, _MakeSkDashPathEffect: function() {}, _MakeSkVertices: function() {}, _MakeTwoPointConicalGradientShader: function() {}, @@ -98,7 +107,16 @@ var CanvasKit = { Paragraph: { // public API (from C++ bindings) + didExceedMaxLines: function() {}, + getAlphabeticBaseline: function() {}, getGlyphPositionAtCoordinate: function() {}, + getHeight: function() {}, + getIdeographicBaseline: function() {}, + getLongestLine: function() {}, + getMaxIntrinsicWidth: function() {}, + getMaxWidth: function() {}, + getMinIntrinsicWidth: function() {}, + getWordBoundary: function() {}, layout: function() {}, // private API @@ -107,7 +125,6 @@ var CanvasKit = { }, ParagraphStyle: function() {}, - RSXFormBuilder: function() {}, SkColorBuilder: function() {}, SkRectBuilder: function() {}, @@ -119,21 +136,28 @@ var CanvasKit = { SkAnimatedImage: { // public API (from C++ bindings) - getRepetitionCount: function() {}, decodeNextFrame: function() {}, + getFrameCount: function() {}, + getRepetitionCount: function() {}, + height: function() {}, + reset: function() {}, + width: function() {}, }, SkCanvas: { // public API (from C++ bindings) clear: function() {}, clipPath: function() {}, + clipRRect: function() {}, clipRect: function() {}, concat: function() {}, + drawAnimatedImage: function() {}, drawArc: function() {}, drawCircle: function() {}, + drawColor: function() {}, drawDRRect: function() {}, - drawAnimatedImage: function() {}, drawImage: function() {}, + drawImageNine: function() {}, drawImageRect: function() {}, drawLine: function() {}, drawOval: function() {}, @@ -163,6 +187,7 @@ var CanvasKit = { // private API _drawAtlas: function() {}, + _drawPoints: function() {}, _drawSimpleText: function() {}, _readPixels: function() {}, _writePixels: function() {}, @@ -189,6 +214,17 @@ var CanvasKit = { scaled: function() {}, }, + SkContourMeasureIter: { + next: function() {}, + }, + + SkContourMeasure: { + getPosTan: function() {}, + getSegment: function() {}, + isClosed: function() {}, + length: function() {}, + }, + SkFont: { // public API (from C++ bindings) getScaleX: function() {}, @@ -225,6 +261,13 @@ var CanvasKit = { _makeShader: function() {}, }, + SkImageFilter: { + MakeBlur: function() {}, + MakeColorFilter: function() {}, + MakeCompose: function() {}, + MakeMatrixTransform: function() {}, + }, + SkMatrix: { identity: function() {}, invert: function() {}, @@ -236,6 +279,10 @@ var CanvasKit = { translated: function() {}, }, + SkMaskFilter: { + MakeBlur: function() {}, + }, + SkPaint: { // public API (from C++ bindings) /** @return {CanvasKit.SkPaint} */ @@ -251,6 +298,7 @@ var CanvasKit = { setBlendMode: function() {}, setColor: function() {}, setFilterQuality: function() {}, + setImageFilter: function() {}, setMaskFilter: function() {}, setPathEffect: function() {}, setShader: function() {}, @@ -288,6 +336,7 @@ var CanvasKit = { _addOval: function() {}, _addPath: function() {}, _addRect: function() {}, + _addPoly: function() {}, _addRoundRect: function() {}, _arc: function() {}, _arcTo: function() {}, @@ -299,6 +348,12 @@ var CanvasKit = { _moveTo: function() {}, _op: function() {}, _quadTo: function() {}, + _rArcTo: function() {}, + _rConicTo: function() {}, + _rCubicTo: function() {}, + _rLineTo: function() {}, + _rMoveTo: function() {}, + _rQuadTo: function() {}, _rect: function() {}, _simplify: function() {}, _stroke: function() {}, @@ -311,6 +366,7 @@ var CanvasKit = { SkPathMeasure: { getLength: function() {}, + getSegment: function() {}, getPosTan: function() {}, isClosed: function() {}, nextContour: function() {}, @@ -418,6 +474,9 @@ var CanvasKit = { OverlineDecoration: {}, LineThroughDecoration: {}, + SaveLayerInitWithPrevious: {}, + SaveLayerF16ColorType: {}, + Affinity: { Upstream: {}, Downstream: {}, @@ -501,6 +560,38 @@ var CanvasKit = { High: {}, }, + FontSlant: { + Upright: {}, + Italic: {}, + Oblique: {}, + }, + + FontWeight: { + Invisible: {}, + Thin: {}, + ExtraLight: {}, + Light: {}, + Normal: {}, + Medium: {}, + SemiBold: {}, + Bold: {}, + ExtraBold: {}, + Black: {}, + ExtraBlack: {}, + }, + + FontWidth: { + UltraCondensed: {}, + ExtraCondensed: {}, + Condensed: {}, + SemiCondensed: {}, + Normal: {}, + SemiExpanded: {}, + Expanded: {}, + ExtraExpanded: {}, + UltraExpanded: {}, + }, + ImageFormat: { PNG: {}, JPEG: {}, @@ -520,9 +611,18 @@ var CanvasKit = { ReverseDifference: {}, }, + PointMode: { + Points: {}, + Lines: {}, + Polygon: {}, + }, + RectHeightStyle: { Tight: {}, Max: {}, + IncludeLineSpacingMiddle: {}, + IncludeLineSpacingTop: {}, + IncludeLineSpacingBottom: {}, }, RectWidthStyle: { @@ -551,6 +651,11 @@ var CanvasKit = { End: {}, }, + TextDirection: { + LTR: {}, + RTL: {}, + }, + TextEncoding: { UTF8: {}, UTF16: {}, @@ -619,6 +724,7 @@ CanvasKit.Paragraph.prototype.getRectsForRange = function() {}; CanvasKit.SkPath.prototype.addArc = function() {}; CanvasKit.SkPath.prototype.addOval = function() {}; CanvasKit.SkPath.prototype.addPath = function() {}; +CanvasKit.SkPath.prototype.addPoly = function() {}; CanvasKit.SkPath.prototype.addRect = function() {}; CanvasKit.SkPath.prototype.addRoundRect = function() {}; CanvasKit.SkPath.prototype.arc = function() {}; @@ -632,6 +738,12 @@ CanvasKit.SkPath.prototype.moveTo = function() {}; CanvasKit.SkPath.prototype.offset = function() {}; CanvasKit.SkPath.prototype.op = function() {}; CanvasKit.SkPath.prototype.quadTo = function() {}; +CanvasKit.SkPath.prototype.rArcTo = function() {}; +CanvasKit.SkPath.prototype.rConicTo = function() {}; +CanvasKit.SkPath.prototype.rCubicTo = function() {}; +CanvasKit.SkPath.prototype.rLineTo = function() {}; +CanvasKit.SkPath.prototype.rMoveTo = function() {}; +CanvasKit.SkPath.prototype.rQuadTo = function() {}; CanvasKit.SkPath.prototype.rect = function() {}; CanvasKit.SkPath.prototype.simplify = function() {}; CanvasKit.SkPath.prototype.stroke = function() {}; @@ -652,6 +764,7 @@ CanvasKit.SkImage.prototype.encodeToData = function() {}; CanvasKit.SkImage.prototype.makeShader = function() {}; CanvasKit.SkCanvas.prototype.drawAtlas = function() {}; +CanvasKit.SkCanvas.prototype.drawPoints = function() {}; CanvasKit.SkCanvas.prototype.drawText = function() {}; /** @return {Uint8Array} */ CanvasKit.SkCanvas.prototype.readPixels = function() {}; diff --git a/third_party/skia/modules/canvaskit/gpu.js b/third_party/skia/modules/canvaskit/gpu.js index 179b64b3dd3b..3863c046bcf5 100644 --- a/third_party/skia/modules/canvaskit/gpu.js +++ b/third_party/skia/modules/canvaskit/gpu.js @@ -11,11 +11,10 @@ } function makeWebGLContext(canvas, attrs) { - // These defaults come from the emscripten _emscripten_webgl_create_context var contextAttributes = { alpha: get(attrs, 'alpha', 1), depth: get(attrs, 'depth', 1), - stencil: get(attrs, 'stencil', 0), + stencil: get(attrs, 'stencil', 8), antialias: get(attrs, 'antialias', 1), premultipliedAlpha: get(attrs, 'premultipliedAlpha', 1), preserveDrawingBuffer: get(attrs, 'preserveDrawingBuffer', 0), @@ -80,9 +79,12 @@ var grcontext = this.MakeGrContext(ctx); - // Bump the default resource cache limit. - var RESOURCE_CACHE_BYTES = 256 * 1024 * 1024; - grcontext.setResourceCacheLimitBytes(RESOURCE_CACHE_BYTES); + if (grcontext) { + // Bump the default resource cache limit. + var RESOURCE_CACHE_BYTES = 256 * 1024 * 1024; + grcontext.setResourceCacheLimitBytes(RESOURCE_CACHE_BYTES); + } + // Maybe better to use clientWidth/height. See: // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html diff --git a/third_party/skia/modules/canvaskit/helper.js b/third_party/skia/modules/canvaskit/helper.js index c80428c3f997..698e7e0555f0 100644 --- a/third_party/skia/modules/canvaskit/helper.js +++ b/third_party/skia/modules/canvaskit/helper.js @@ -70,6 +70,10 @@ function copy1dArray(arr, dest, ptr) { if (!arr || !arr.length) { return nullptr; } + // This was created with CanvasKit.Malloc, so it's already been copied. + if (arr['_ck']) { + return arr.byteOffset; + } if (!ptr) { ptr = CanvasKit._malloc(arr.length * dest.BYTES_PER_ELEMENT); } @@ -87,7 +91,7 @@ function copy1dArray(arr, dest, ptr) { } // arr should be a non-jagged 2d JS array (TypedArrays can't be nested -// inside themselves.) +// 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. function copy2dArray(arr, dest, ptr) { @@ -394,3 +398,27 @@ CanvasKit.RSXFormBuilder = CanvasKit.FourFloatArrayHelper; * the array every time. */ CanvasKit.SkColorBuilder = CanvasKit.OneUIntArrayHelper; + +/** + * Malloc returns a TypedArray backed by the C++ memory of the + * given length. It should only be used by advanced users who + * can manage memory and initialize values properly. When used + * correctly, it can save copying of data between JS and C++. + * When used incorrectly, it can lead to memory leaks. + * + * const ta = CanvasKit.Malloc(Float32Array, 20); + * // store data into ta + * const cf = CanvasKit.SkColorFilter.MakeMatrix(ta); + * // MakeMatrix cleans up the ptr automatically. + * + * @param {TypedArray} typedArray - constructor for the typedArray. + * @param {number} len - number of elements to store. + */ +CanvasKit.Malloc = function(typedArray, len) { + var byteLen = len * typedArray.BYTES_PER_ELEMENT; + var ptr = CanvasKit._malloc(byteLen); + var ta = new typedArray(CanvasKit.buffer, ptr, len); + // add a marker that this was allocated in C++ land + ta['_ck'] = true; + return ta; +} diff --git a/third_party/skia/modules/canvaskit/htmlcanvas/canvas2dcontext.js b/third_party/skia/modules/canvaskit/htmlcanvas/canvas2dcontext.js index 350ff3069c3e..7c08dff0cdc9 100644 --- a/third_party/skia/modules/canvaskit/htmlcanvas/canvas2dcontext.js +++ b/third_party/skia/modules/canvaskit/htmlcanvas/canvas2dcontext.js @@ -1015,7 +1015,7 @@ function CanvasRenderingContext2D(skcanvas) { } var shadowPaint = basePaint.copy(); shadowPaint.setColor(alphaColor); - var blurEffect = CanvasKit.MakeBlurMaskFilter(CanvasKit.BlurStyle.Normal, + var blurEffect = CanvasKit.SkMaskFilter.MakeBlur(CanvasKit.BlurStyle.Normal, SkBlurRadiusToSigma(this._shadowBlur), false); shadowPaint.setMaskFilter(blurEffect); diff --git a/third_party/skia/modules/canvaskit/interface.js b/third_party/skia/modules/canvaskit/interface.js index 7eea323dfebe..294e5dbdc96b 100644 --- a/third_party/skia/modules/canvaskit/interface.js +++ b/third_party/skia/modules/canvaskit/interface.js @@ -273,6 +273,26 @@ CanvasKit.onRuntimeInitialized = function() { return this; }; + // points is either an array of [x, y] where x and y are numbers or + // a typed array from Malloc where the even indices will be treated + // as x coordinates and the odd indices will be treated as y coordinates. + CanvasKit.SkPath.prototype.addPoly = function(points, close) { + var ptr; + var n; + // This was created with CanvasKit.Malloc, so assume the user has + // already been filled with data. + if (points['_ck']) { + ptr = points.byteOffset; + n = points.length/2; + } else { + ptr = copy2dArray(points, CanvasKit.HEAPF32); + n = points.length; + } + this._addPoly(ptr, n, close); + CanvasKit._free(ptr); + return this; + }; + CanvasKit.SkPath.prototype.addRect = function() { // Takes 1, 2, 4 or 5 args // - SkRect @@ -410,6 +430,38 @@ CanvasKit.onRuntimeInitialized = function() { return this; }; + CanvasKit.SkPath.prototype.rArcTo = function(rx, ry, xAxisRotate, useSmallArc, isCCW, dx, dy) { + this._rArcTo(rx, ry, xAxisRotate, useSmallArc, isCCW, dx, dy); + return this; + }; + + CanvasKit.SkPath.prototype.rConicTo = function(dx1, dy1, dx2, dy2, w) { + this._rConicTo(dx1, dy1, dx2, dy2, w); + return this; + }; + + // These params are all relative + CanvasKit.SkPath.prototype.rCubicTo = function(cp1x, cp1y, cp2x, cp2y, x, y) { + this._rCubicTo(cp1x, cp1y, cp2x, cp2y, x, y); + return this; + }; + + CanvasKit.SkPath.prototype.rLineTo = function(dx, dy) { + this._rLineTo(dx, dy); + return this; + }; + + CanvasKit.SkPath.prototype.rMoveTo = function(dx, dy) { + this._rMoveTo(dx, dy); + return this; + }; + + // These params are all relative + CanvasKit.SkPath.prototype.rQuadTo = function(cpx, cpy, x, y) { + this._rQuadTo(cpx, cpy, x, y); + return this; + }; + CanvasKit.SkPath.prototype.simplify = function() { if (this._simplify()) { return this; @@ -595,6 +647,25 @@ CanvasKit.onRuntimeInitialized = function() { } + // points is either an array of [x, y] where x and y are numbers or + // a typed array from Malloc where the even indices will be treated + // as x coordinates and the odd indices will be treated as y coordinates. + CanvasKit.SkCanvas.prototype.drawPoints = function(mode, points, paint) { + var ptr; + var n; + // This was created with CanvasKit.Malloc, so assume the user has + // already been filled with data. + if (points['_ck']) { + ptr = points.byteOffset; + n = points.length/2; + } else { + ptr = copy2dArray(points, CanvasKit.HEAPF32); + n = points.length; + } + this._drawPoints(mode, ptr, n, paint); + CanvasKit._free(ptr); + } + // str can be either a text string or a ShapedText object CanvasKit.SkCanvas.prototype.drawText = function(str, x, y, paint, font) { if (typeof str === 'string') { @@ -994,20 +1065,20 @@ CanvasKit.MakeImageFromEncoded = function(data) { return img; } -// pixels is a Uint8Array +// pixels must be a Uint8Array 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) { - var bytesPerPixel = pixels.byteLength / (width * height); + var bytesPerPixel = pixels.length / (width * height); var info = { 'width': width, 'height': height, 'alphaType': alphaType, 'colorType': colorType, }; - var pptr = CanvasKit._malloc(pixels.byteLength); - CanvasKit.HEAPU8.set(pixels, pptr); - // No need to _free iptr, Image takes it with SkData::MakeFromMalloc + var pptr = copy1dArray(pixels, CanvasKit.HEAPU8); + // No need to _free pptr, Image takes it with SkData::MakeFromMalloc - return CanvasKit._MakeImage(info, pptr, pixels.byteLength, width * bytesPerPixel); + return CanvasKit._MakeImage(info, pptr, pixels.length, width * bytesPerPixel); } CanvasKit.MakeLinearGradientShader = function(start, end, colors, pos, mode, localMatrix, flags) { diff --git a/third_party/skia/modules/canvaskit/karma.bench.conf.js b/third_party/skia/modules/canvaskit/karma.bench.conf.js index d4900b849ed8..1179f726670f 100644 --- a/third_party/skia/modules/canvaskit/karma.bench.conf.js +++ b/third_party/skia/modules/canvaskit/karma.bench.conf.js @@ -61,12 +61,18 @@ module.exports = function(config) { cfg.browsers = ['ChromeHeadlessNoSandbox'], cfg.customLaunchers = { ChromeHeadlessNoSandbox: { - base: 'ChromeHeadless', - flags: [ + base: 'ChromeHeadless', + flags: [ // Without this flag, we see an error: // Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted - '--no-sandbox' - ], + '--no-sandbox', + // may help tests be less flaky + // https://peter.sh/experiments/chromium-command-line-switches/#browser-test + '--browser-test', + // This can also help avoid crashes/timeouts: + // https://github.com/GoogleChrome/puppeteer/issues/1834 + '--disable-dev-shm-usage', + ], }, }; } diff --git a/third_party/skia/modules/canvaskit/karma.conf.js b/third_party/skia/modules/canvaskit/karma.conf.js index e815e045ba48..dd0594436828 100644 --- a/third_party/skia/modules/canvaskit/karma.conf.js +++ b/third_party/skia/modules/canvaskit/karma.conf.js @@ -62,12 +62,18 @@ module.exports = function(config) { cfg.browsers = ['ChromeHeadlessNoSandbox'], cfg.customLaunchers = { ChromeHeadlessNoSandbox: { - base: 'ChromeHeadless', - flags: [ + base: 'ChromeHeadless', + flags: [ // Without this flag, we see an error: // Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted - '--no-sandbox' - ], + '--no-sandbox', + // may help tests be less flaky + // https://peter.sh/experiments/chromium-command-line-switches/#browser-test + '--browser-test', + // This can also help avoid crashes/timeouts: + // https://github.com/GoogleChrome/puppeteer/issues/1834 + '--disable-dev-shm-usage', + ], }, }; } diff --git a/third_party/skia/modules/canvaskit/paragraph.js b/third_party/skia/modules/canvaskit/paragraph.js index 2a8aa4b84852..84d808e56473 100644 --- a/third_party/skia/modules/canvaskit/paragraph.js +++ b/third_party/skia/modules/canvaskit/paragraph.js @@ -13,8 +13,14 @@ return []; } var ret = []; - for (var i = 0; i < floatArray.length; i+=4) { - ret.push(CanvasKit.LTRBRect(floatArray[i], floatArray[i+1], floatArray[i+2], floatArray[i+3])) + for (var i = 0; i < floatArray.length; i+=5) { + var r = CanvasKit.LTRBRect(floatArray[i], floatArray[i+1], floatArray[i+2], floatArray[i+3]); + if (floatArray[i+4] === 1) { + r['direction'] = CanvasKit.TextDirection.RTL; + } else { + r['direction'] = CanvasKit.TextDirection.LTR; + } + ret.push(r); } CanvasKit._free(floatArray.byteOffset); return ret; @@ -24,17 +30,46 @@ // have undefined and it expects, for example, a float. CanvasKit.ParagraphStyle = function(s) { // Use [''] to tell closure not to minify the names + // TODO(kjlubick): strutStyle + s['disableHinting'] = s['disableHinting'] || false; + if (s['ellipsis']) { + var str = s['ellipsis']; + var strLen = lengthBytesUTF8(str) + 1; + var strPtr = CanvasKit._malloc(strLen); + stringToUTF8(str, strPtr, strLen); + s['_ellipsisPtr'] = strPtr; + s['_ellipsisLen'] = strLen; + } else { + s['_ellipsisPtr'] = nullptr; + s['_ellipsisLen'] = 0; + } + s['heightMultiplier'] = s['heightMultiplier'] || 0; s['maxLines'] = s['maxLines'] || 0; s['textAlign'] = s['textAlign'] || CanvasKit.TextAlign.Start; + s['textDirection'] = s['textDirection'] || CanvasKit.TextDirection.LTR; s['textStyle'] = CanvasKit.TextStyle(s['textStyle']); return s; } + function fontStyle(s) { + s = s || {}; + // Can't check for falsey as 0 width means "invisible". + if (s['weight'] === undefined) { + s['weight'] = CanvasKit.FontWeight.Normal; + } + s['width'] = s['width'] || CanvasKit.FontWidth.Normal; + s['slant'] = s['slant'] || CanvasKit.FontSlant.Upright; + return s; + } + CanvasKit.TextStyle = function(s) { // Use [''] to tell closure not to minify the names s['backgroundColor'] = s['backgroundColor'] || 0; - s['color'] = s['color'] || 0; + // Can't check for falsey as 0 is "white". + if (s['color'] === undefined) { + s['color'] = CanvasKit.BLACK; + } s['decoration'] = s['decoration'] || 0; s['decorationThickness'] = s['decorationThickness'] || 0; s['fontSize'] = s['fontSize'] || 0; @@ -45,7 +80,9 @@ } else { s['_fontFamilies'] = nullptr; s['_numFontFamilies'] = 0; + SkDebug("no font families provided, text may draw wrong or not at all") } + s['fontStyle'] = fontStyle(s['fontStyle']); s['foregroundColor'] = s['foregroundColor'] || 0; return s; } diff --git a/third_party/skia/modules/canvaskit/paragraph_bindings.cpp b/third_party/skia/modules/canvaskit/paragraph_bindings.cpp index ec88569b7a75..13f8c8ee8e9f 100644 --- a/third_party/skia/modules/canvaskit/paragraph_bindings.cpp +++ b/third_party/skia/modules/canvaskit/paragraph_bindings.cpp @@ -6,6 +6,7 @@ */ #include "include/core/SkColor.h" +#include "include/core/SkFontStyle.h" #include "include/core/SkString.h" #include "modules/skparagraph/include/DartTypes.h" @@ -26,13 +27,21 @@ using namespace emscripten; namespace para = skia::textlayout; +struct SimpleFontStyle { + SkFontStyle::Slant slant; + SkFontStyle::Weight weight; + SkFontStyle::Width width; +}; + struct SimpleTextStyle { - SkColor color; - SkColor foregroundColor; SkColor backgroundColor; + SkColor color; uint8_t decoration; - SkScalar fontSize; SkScalar decorationThickness; + SkScalar fontSize; + SimpleFontStyle fontStyle; + SkColor foregroundColor; + uintptr_t /* const char** */ fontFamilies; int numFontFamilies; }; @@ -73,45 +82,75 @@ para::TextStyle toTextStyle(const SimpleTextStyle& s) { ts.setFontFamilies(ff); } + SkFontStyle fs(s.fontStyle.weight, s.fontStyle.width, s.fontStyle.slant); + ts.setFontStyle(fs); + return ts; } struct SimpleParagraphStyle { - SimpleTextStyle textStyle; + bool disableHinting; + uintptr_t /* const char* */ ellipsisPtr; + size_t ellipsisLen; SkScalar heightMultiplier; - para::TextAlign textAlign; size_t maxLines; + para::TextAlign textAlign; + para::TextDirection textDirection; + SimpleTextStyle textStyle; }; para::ParagraphStyle toParagraphStyle(const SimpleParagraphStyle& s) { para::ParagraphStyle ps; + if (s.disableHinting) { + ps.turnHintingOff(); + } + + if (s.ellipsisLen > 0) { + const char* ellipsisPtr = reinterpret_cast(s.ellipsisPtr); + SkString eStr(ellipsisPtr, s.ellipsisLen); + ps.setEllipsis(eStr); + } + ps.setTextAlign(s.textAlign); + ps.setTextDirection(s.textDirection); auto ts = toTextStyle(s.textStyle); ps.setTextStyle(ts); if (s.heightMultiplier != 0) { ps.setHeight(s.heightMultiplier); } - ps.setTextAlign(s.textAlign); if (s.maxLines != 0) { ps.setMaxLines(s.maxLines); } return ps; } +struct SimpleTextBox { + SkRect rect; + // This isn't the most efficient way to represent this, but it is much easier to keep + // everything as floats when unpacking on the JS side. + // 0.0 = RTL, 1.0 = LTr + SkScalar direction; +}; + Float32Array GetRectsForRange(para::ParagraphImpl& self, unsigned start, unsigned end, para::RectHeightStyle heightStyle, para::RectWidthStyle widthStyle) { std::vector boxes = self.getRectsForRange(start, end, heightStyle, widthStyle); - // Pack these text boxes into an array of n groups of 4 SkScalar (floats) + // Pack these text boxes into an array of n groups of 5 SkScalar (floats) if (!boxes.size()) { return emscripten::val::null(); } - SkRect* rects = new SkRect[boxes.size()]; + SimpleTextBox* rects = new SimpleTextBox[boxes.size()]; for (int i = 0; i< boxes.size(); i++) { - rects[i] = boxes[i].rect; + rects[i].rect = boxes[i].rect; + if (boxes[i].direction == para::TextDirection::kRtl) { + rects[i].direction = 0; + } else { + rects[i].direction = 1; + } } float* fPtr = reinterpret_cast(rects); // Of note: now that we have cast rects to float*, emscripten is smart enough to wrap this // into a Float32Array for us. - return Float32Array(typed_memory_view(boxes.size()*4, fPtr)); + return Float32Array(typed_memory_view(boxes.size()*5, fPtr)); } EMSCRIPTEN_BINDINGS(Paragraph) { @@ -120,10 +159,19 @@ EMSCRIPTEN_BINDINGS(Paragraph) { // This "base<>" tells Emscripten that ParagraphImpl is a Paragraph and can get substituted // in properly in drawParagraph. However, Emscripten will not let us bind pure virtual methods - // so we have to "expose" the ParagraphImpl and its methods. + // so we have to "expose" the ParagraphImpl in those cases. class_>("ParagraphImpl") - .function("_getRectsForRange", &GetRectsForRange) + .function("didExceedMaxLines", ¶::Paragraph::didExceedMaxLines) + .function("getAlphabeticBaseline", ¶::Paragraph::getAlphabeticBaseline) .function("getGlyphPositionAtCoordinate", ¶::ParagraphImpl::getGlyphPositionAtCoordinate) + .function("getHeight", ¶::Paragraph::getHeight) + .function("getIdeographicBaseline", ¶::Paragraph::getIdeographicBaseline) + .function("getLongestLine", ¶::Paragraph::getLongestLine) + .function("getMaxIntrinsicWidth", ¶::Paragraph::getMaxIntrinsicWidth) + .function("getMaxWidth", ¶::Paragraph::getMaxWidth) + .function("getMinIntrinsicWidth", ¶::Paragraph::getMinIntrinsicWidth) + .function("_getRectsForRange", &GetRectsForRange) + .function("getWordBoundary", ¶::ParagraphImpl::getWordBoundary) .function("layout", ¶::ParagraphImpl::layout); class_("ParagraphBuilder") @@ -151,9 +199,41 @@ EMSCRIPTEN_BINDINGS(Paragraph) { .value("Upstream", para::Affinity::kUpstream) .value("Downstream", para::Affinity::kDownstream); + enum_("FontSlant") + .value("Upright", SkFontStyle::Slant::kUpright_Slant) + .value("Italic", SkFontStyle::Slant::kItalic_Slant) + .value("Oblique", SkFontStyle::Slant::kOblique_Slant); + + enum_("FontWeight") + .value("Invisible", SkFontStyle::Weight::kInvisible_Weight) + .value("Thin", SkFontStyle::Weight::kThin_Weight) + .value("ExtraLight", SkFontStyle::Weight::kExtraLight_Weight) + .value("Light", SkFontStyle::Weight::kLight_Weight) + .value("Normal", SkFontStyle::Weight::kNormal_Weight) + .value("Medium", SkFontStyle::Weight::kMedium_Weight) + .value("SemiBold", SkFontStyle::Weight::kSemiBold_Weight) + .value("Bold", SkFontStyle::Weight::kBold_Weight) + .value("ExtraBold", SkFontStyle::Weight::kExtraBold_Weight) + .value("Black" , SkFontStyle::Weight::kBlack_Weight) + .value("ExtraBlack", SkFontStyle::Weight::kExtraBlack_Weight); + + enum_("FontWidth") + .value("UltraCondensed", SkFontStyle::Width::kUltraCondensed_Width) + .value("ExtraCondensed", SkFontStyle::Width::kExtraCondensed_Width) + .value("Condensed", SkFontStyle::Width::kCondensed_Width) + .value("SemiCondensed", SkFontStyle::Width::kSemiCondensed_Width) + .value("Normal", SkFontStyle::Width::kNormal_Width) + .value("SemiExpanded", SkFontStyle::Width::kSemiExpanded_Width) + .value("Expanded", SkFontStyle::Width::kExpanded_Width) + .value("ExtraExpanded", SkFontStyle::Width::kExtraExpanded_Width) + .value("UltraExpanded", SkFontStyle::Width::kUltraExpanded_Width); + enum_("RectHeightStyle") - .value("Tight", para::RectHeightStyle::kTight) - .value("Max", para::RectHeightStyle::kMax); + .value("Tight", para::RectHeightStyle::kTight) + .value("Max", para::RectHeightStyle::kMax) + .value("IncludeLineSpacingMiddle", para::RectHeightStyle::kIncludeLineSpacingMiddle) + .value("IncludeLineSpacingTop", para::RectHeightStyle::kIncludeLineSpacingTop) + .value("IncludeLineSpacingBottom", para::RectHeightStyle::kIncludeLineSpacingBottom); enum_("RectWidthStyle") .value("Tight", para::RectWidthStyle::kTight) @@ -167,15 +247,28 @@ EMSCRIPTEN_BINDINGS(Paragraph) { .value("Start", para::TextAlign::kStart) .value("End", para::TextAlign::kEnd); + enum_("TextDirection") + .value("LTR", para::TextDirection::kLtr) + .value("RTL", para::TextDirection::kRtl); + value_object("PositionWithAffinity") .field("pos", ¶::PositionWithAffinity::position) .field("affinity", ¶::PositionWithAffinity::affinity); + value_object("FontStyle") + .field("slant", &SimpleFontStyle::slant) + .field("weight", &SimpleFontStyle::weight) + .field("width", &SimpleFontStyle::width); + value_object("ParagraphStyle") + .field("disableHinting", &SimpleParagraphStyle::disableHinting) + .field("_ellipsisPtr", &SimpleParagraphStyle::ellipsisPtr) + .field("_ellipsisLen", &SimpleParagraphStyle::ellipsisLen) .field("heightMultiplier", &SimpleParagraphStyle::heightMultiplier) .field("maxLines", &SimpleParagraphStyle::maxLines) .field("textAlign", &SimpleParagraphStyle::textAlign) + .field("textDirection", &SimpleParagraphStyle::textDirection) .field("textStyle", &SimpleParagraphStyle::textStyle); value_object("TextStyle") @@ -185,9 +278,16 @@ EMSCRIPTEN_BINDINGS(Paragraph) { .field("decorationThickness", &SimpleTextStyle::decorationThickness) .field("_fontFamilies", &SimpleTextStyle::fontFamilies) .field("fontSize", &SimpleTextStyle::fontSize) + .field("fontStyle", &SimpleTextStyle::fontStyle) .field("foregroundColor", &SimpleTextStyle::foregroundColor) .field("_numFontFamilies", &SimpleTextStyle::numFontFamilies); + // The U stands for unsigned - we can't bind a generic/template object, so we have to specify it + // with the type we are using. + value_object>("URange") + .field("start", ¶::SkRange::start) + .field("end", ¶::SkRange::end); + // TextDecoration should be a const because they can be combined constant("NoDecoration", int(para::TextDecoration::kNoDecoration)); constant("UnderlineDecoration", int(para::TextDecoration::kUnderline)); diff --git a/third_party/skia/modules/canvaskit/particles.js b/third_party/skia/modules/canvaskit/particles.js new file mode 100644 index 000000000000..3f59a931c74a --- /dev/null +++ b/third_party/skia/modules/canvaskit/particles.js @@ -0,0 +1,54 @@ +// Adds compile-time JS functions to augment the CanvasKit interface. +// Specifically, anything that should only be on the Particle builds of canvaskit. + +// assets is a dictionary of named blobs: { key: ArrayBuffer, ... } +// The keys should be well-behaved strings - they're turned into null-terminated +// strings for the native side. +CanvasKit.MakeParticles = function(json, assets) { + if (!CanvasKit._MakeParticles) { + throw 'Not compiled with MakeParticles'; + } + if (!assets) { + return CanvasKit._MakeParticles(json, 0, nullptr, nullptr, nullptr); + } + var assetNamePtrs = []; + var assetDataPtrs = []; + var assetSizes = []; + + var assetKeys = Object.keys(assets || {}); + for (var i = 0; i < assetKeys.length; i++) { + var key = assetKeys[i]; + var buffer = assets[key]; + var data = new Uint8Array(buffer); + + var iptr = CanvasKit._malloc(data.byteLength); + CanvasKit.HEAPU8.set(data, iptr); + assetDataPtrs.push(iptr); + assetSizes.push(data.byteLength); + + // lengthBytesUTF8 and stringToUTF8Array are defined in the emscripten + // JS. See https://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html#stringToUTF8 + // Add 1 for null terminator + var strLen = lengthBytesUTF8(key) + 1; + var strPtr = CanvasKit._malloc(strLen); + + stringToUTF8(key, strPtr, strLen); + assetNamePtrs.push(strPtr); + } + + // 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 particles = CanvasKit._MakeParticles(json, assetKeys.length, + namesPtr, assetsPtr, assetSizesPtr); + + // The C++ code has made copies of the asset and string data, so free our copies. + CanvasKit._free(namesPtr); + CanvasKit._free(assetsPtr); + CanvasKit._free(assetSizesPtr); + + return particles; +}; diff --git a/third_party/skia/modules/canvaskit/particles_bindings.cpp b/third_party/skia/modules/canvaskit/particles_bindings.cpp index f64d22a56e4e..abc51ee95139 100644 --- a/third_party/skia/modules/canvaskit/particles_bindings.cpp +++ b/third_party/skia/modules/canvaskit/particles_bindings.cpp @@ -10,6 +10,7 @@ #include "include/utils/SkRandom.h" #include "modules/particles/include/SkParticleEffect.h" #include "modules/particles/include/SkParticleSerialization.h" +#include "modules/skresources/include/SkResources.h" #include @@ -18,6 +19,61 @@ using namespace emscripten; +namespace { + +class ParticleAssetProvider : public skresources::ResourceProvider { +public: + ~ParticleAssetProvider() override = default; + + // Tried using a map, but that gave strange errors like + // https://emscripten.org/docs/porting/guidelines/function_pointer_issues.html + // Not entirely sure why, but perhaps the iterator in the map was + // confusing enscripten. + using AssetVec = std::vector>>; + + static sk_sp Make(AssetVec assets) { + if (assets.empty()) { + return nullptr; + } + + return sk_sp(new ParticleAssetProvider(std::move(assets))); + } + + sk_sp loadImageAsset(const char[] /* path */, + const char name[], + const char[] /* id */) const override { + // For CK we ignore paths & IDs, and identify images based solely on name. + if (auto data = this->findAsset(name)) { + return skresources::MultiFrameImageAsset::Make(std::move(data)); + } + + return nullptr; + } + + sk_sp loadFont(const char name[], const char[] /* url */) const override { + // Same as images paths, we ignore font URLs. + return this->findAsset(name); + } + +private: + explicit ParticleAssetProvider(AssetVec assets) : fAssets(std::move(assets)) {} + + sk_sp findAsset(const char name[]) const { + for (const auto& asset : fAssets) { + if (asset.first.equals(name)) { + return asset.second; + } + } + + SkDebugf("Could not find %s\n", name); + return nullptr; + } + + const AssetVec fAssets; +}; + +} + EMSCRIPTEN_BINDINGS(Particles) { class_("SkParticleEffect") .smart_ptr>("sk_sp") @@ -27,17 +83,39 @@ EMSCRIPTEN_BINDINGS(Particles) { .function("setPosition", select_overload(&SkParticleEffect::setPosition)) .function("setRate", select_overload(&SkParticleEffect::setRate)); - function("MakeParticles", optional_override([](std::string json)->sk_sp { + function("_MakeParticles", optional_override([](std::string json, + size_t assetCount, + uintptr_t /* char** */ nptr, + uintptr_t /* uint8_t** */ dptr, + uintptr_t /* size_t* */ sptr) + ->sk_sp { + // See the comment in canvaskit_bindings.cpp about the use of uintptr_t static bool didInit = false; if (!didInit) { SkParticleEffect::RegisterParticleTypes(); didInit = true; } + + const auto assetNames = reinterpret_cast(nptr); + const auto assetDatas = reinterpret_cast(dptr); + const auto assetSizes = reinterpret_cast(sptr); + + ParticleAssetProvider::AssetVec assets; + assets.reserve(assetCount); + + for (size_t i = 0; i < assetCount; i++) { + auto name = SkString(assetNames[i]); + auto bytes = SkData::MakeFromMalloc(assetDatas[i], assetSizes[i]); + assets.push_back(std::make_pair(std::move(name), std::move(bytes))); + } + SkRandom r; sk_sp params(new SkParticleEffectParams()); skjson::DOM dom(json.c_str(), json.length()); SkFromJsonVisitor fromJson(dom.root()); params->visitFields(&fromJson); + params->prepare(skresources::DataURIResourceProviderProxy::Make( + ParticleAssetProvider::Make(std::move(assets))).get()); return sk_sp(new SkParticleEffect(std::move(params), r)); })); constant("particles", true); diff --git a/third_party/skia/modules/canvaskit/perf/animation.bench.js b/third_party/skia/modules/canvaskit/perf/animation.bench.js index 3c94375e6a30..f2ad38dc6056 100644 --- a/third_party/skia/modules/canvaskit/perf/animation.bench.js +++ b/third_party/skia/modules/canvaskit/perf/animation.bench.js @@ -109,7 +109,10 @@ describe('CanvasKit\'s Animation', function() { }); }); - it(`renders to an HTML canvas ${animStr}`, function(done) { + // TODO(kjlubick): re-enable when we know why this stopped working on chrome-headless + // (happened after addition of WebGL2). It locks up on one of the animations for + // unknown reasons. + xit(`renders to an HTML canvas ${animStr}`, function(done) { let jsonStr = ''; function setup(ctx) { expect(jsonStr).toBeTruthy(); diff --git a/third_party/skia/modules/canvaskit/skottie.js b/third_party/skia/modules/canvaskit/skottie.js index 33e691a9fa9a..0bd6be9bf0ef 100644 --- a/third_party/skia/modules/canvaskit/skottie.js +++ b/third_party/skia/modules/canvaskit/skottie.js @@ -1,7 +1,9 @@ // Adds compile-time JS functions to augment the CanvasKit interface. // Specifically, anything that should only be on the Skottie builds of canvaskit. - +// assets is a dictionary of named blobs: { key: ArrayBuffer, ... } +// The keys should be well-behaved strings - they're turned into null-terminated +// strings for the native side. CanvasKit.MakeManagedAnimation = function(json, assets) { if (!CanvasKit._MakeManagedAnimation) { throw 'Not compiled with MakeManagedAnimation'; @@ -43,8 +45,7 @@ CanvasKit.MakeManagedAnimation = function(json, assets) { var anim = CanvasKit._MakeManagedAnimation(json, assetKeys.length, namesPtr, assetsPtr, assetSizesPtr); - // We leave the asset data arrays and string data live and assume - // it is now owned by the C++ code + // The C++ code has made copies of the asset and string data, so free our copies. CanvasKit._free(namesPtr); CanvasKit._free(assetsPtr); CanvasKit._free(assetSizesPtr); diff --git a/third_party/skia/modules/canvaskit/skottie_bindings.cpp b/third_party/skia/modules/canvaskit/skottie_bindings.cpp index 88213b9bc922..7d54914878e3 100644 --- a/third_party/skia/modules/canvaskit/skottie_bindings.cpp +++ b/third_party/skia/modules/canvaskit/skottie_bindings.cpp @@ -23,6 +23,7 @@ #if SK_INCLUDE_MANAGED_SKOTTIE #include "modules/skottie/include/SkottieProperty.h" #include "modules/skottie/utils/SkottieUtils.h" +#include "modules/skresources/include/SkResources.h" #endif // SK_INCLUDE_MANAGED_SKOTTIE using namespace emscripten; @@ -53,7 +54,7 @@ class SkottieAssetProvider : public skottie::ResourceProvider { const char[] /* id */) const override { // For CK/Skottie we ignore paths & IDs, and identify images based solely on name. if (auto data = this->findAsset(name)) { - return skottie_utils::MultiFrameImageAsset::Make(std::move(data), true /* predecode */); + return skresources::MultiFrameImageAsset::Make(std::move(data)); } return nullptr; @@ -83,12 +84,13 @@ class SkottieAssetProvider : public skottie::ResourceProvider { class ManagedAnimation final : public SkRefCnt { public: - static sk_sp Make(const std::string& json, sk_sp ap) { + static sk_sp Make(const std::string& json, + sk_sp rp) { auto mgr = skstd::make_unique(); auto animation = skottie::Animation::Builder() .setMarkerObserver(mgr->getMarkerObserver()) .setPropertyObserver(mgr->getPropertyObserver()) - .setResourceProvider(ap) + .setResourceProvider(rp) .make(json.c_str(), json.size()); return animation @@ -107,8 +109,15 @@ class ManagedAnimation final : public SkRefCnt { fAnimation->seek(t, &ic); return ic.bounds(); } - SkScalar duration() const { return fAnimation->duration(); } - const SkSize& size() const { return fAnimation->size(); } + // Returns a damage rect. + SkRect seekFrame(double t) { + sksg::InvalidationController ic; + fAnimation->seekFrame(t, &ic); + return ic.bounds(); + } + double duration() const { return fAnimation->duration(); } + double fps() const { return fAnimation->fps(); } + const SkSize& size() const { return fAnimation->size(); } std::string version() const { return std::string(fAnimation->version().c_str()); } // CustomPropertyManager API @@ -178,11 +187,15 @@ EMSCRIPTEN_BINDINGS(Skottie) { .function("version", optional_override([](skottie::Animation& self)->std::string { return std::string(self.version().c_str()); })) - .function("size", &skottie::Animation::size) + .function("size" , &skottie::Animation::size) .function("duration", &skottie::Animation::duration) + .function("fps" , &skottie::Animation::fps) .function("seek", optional_override([](skottie::Animation& self, SkScalar t)->void { self.seek(t); })) + .function("seekFrame", optional_override([](skottie::Animation& self, double t)->void { + self.seekFrame(t); + })) .function("render", optional_override([](skottie::Animation& self, SkCanvas* canvas)->void { self.render(canvas, nullptr); }), allow_raw_pointers()) @@ -202,7 +215,9 @@ EMSCRIPTEN_BINDINGS(Skottie) { .function("version" , &ManagedAnimation::version) .function("size" , &ManagedAnimation::size) .function("duration" , &ManagedAnimation::duration) + .function("fps" , &ManagedAnimation::fps) .function("seek" , &ManagedAnimation::seek) + .function("seekFrame" , &ManagedAnimation::seekFrame) .function("render" , select_overload(&ManagedAnimation::render), allow_raw_pointers()) .function("render" , select_overload (&ManagedAnimation::render), allow_raw_pointers()) @@ -218,6 +233,7 @@ EMSCRIPTEN_BINDINGS(Skottie) { uintptr_t /* uint8_t** */ dptr, uintptr_t /* size_t* */ sptr) ->sk_sp { + // See the comment in canvaskit_bindings.cpp about the use of uintptr_t const auto assetNames = reinterpret_cast(nptr); const auto assetDatas = reinterpret_cast(dptr); const auto assetSizes = reinterpret_cast(sptr); @@ -231,7 +247,9 @@ EMSCRIPTEN_BINDINGS(Skottie) { assets.push_back(std::make_pair(std::move(name), std::move(bytes))); } - return ManagedAnimation::Make(json, SkottieAssetProvider::Make(std::move(assets))); + return ManagedAnimation::Make(json, + skresources::DataURIResourceProviderProxy::Make( + SkottieAssetProvider::Make(std::move(assets)))); })); constant("managed_skottie", true); #endif // SK_INCLUDE_MANAGED_SKOTTIE diff --git a/third_party/skia/modules/canvaskit/tests/assets/NotoSerif-BoldItalic.ttf b/third_party/skia/modules/canvaskit/tests/assets/NotoSerif-BoldItalic.ttf new file mode 100644 index 000000000000..c63edd11c83b Binary files /dev/null and b/third_party/skia/modules/canvaskit/tests/assets/NotoSerif-BoldItalic.ttf differ diff --git a/third_party/skia/modules/canvaskit/tests/canvas.spec.js b/third_party/skia/modules/canvaskit/tests/canvas.spec.js index 9a73cf218371..28dadef7e332 100644 --- a/third_party/skia/modules/canvaskit/tests/canvas.spec.js +++ b/third_party/skia/modules/canvaskit/tests/canvas.spec.js @@ -284,8 +284,6 @@ describe('CanvasKit\'s Canvas Behavior', function() { return; } const canvas = surface.getCanvas(); - const path = starPath(CanvasKit); - const paint = new CanvasKit.SkPaint(); const blue = CanvasKit.SkColorFilter.MakeBlend( @@ -314,14 +312,12 @@ describe('CanvasKit\'s Canvas Behavior', function() { CanvasKit.SkColorMatrix.postTranslate(cm, 20, 0, -10, 0); const mat = CanvasKit.SkColorFilter.MakeMatrix(cm); - const final = CanvasKit.SkColorFilter.MakeCompose(mat, lerp); paint.setColorFilter(final) canvas.drawRect(CanvasKit.LTRBRect(10, 70, 140, 120), paint); surface.flush(); - path.delete(); paint.delete(); blue.delete(); red.delete(); @@ -332,4 +328,190 @@ describe('CanvasKit\'s Canvas Behavior', function() { })); }); -}); \ No newline at end of file + it('can use Malloc to save a copy', function(done) { + LoadCanvasKit.then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const paint = new CanvasKit.SkPaint(); + + const src = [ + 0.8, 0.45, 2, 0, 20, + 0.53, -0.918, 0.566, 0, 0, + 0.53, -0.918, -0.566, 0, -10, + 0, 0, 0, 0.8, 0, + ] + const cm = new CanvasKit.Malloc(Float32Array, 20); + for (i in src) { + cm[i] = src[i]; + } + const final = CanvasKit.SkColorFilter.MakeMatrix(cm); + + paint.setColorFilter(final) + canvas.drawRect(CanvasKit.LTRBRect(10, 70, 140, 120), paint); + + surface.flush() + paint.delete(); + final.delete(); + + reportSurface(surface, 'colorfilters_malloc_canvas', done); + })); + }); + + it('can clip using rrect and path', function(done) { + LoadCanvasKit.then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const path = starPath(CanvasKit); + const paint = new CanvasKit.SkPaint(); + paint.setColor(CanvasKit.BLUE); + const rrect = CanvasKit.RRectXY(CanvasKit.LTRBRect(300, 300, 500, 500), 40, 40); + + canvas.save(); + // draw magenta around the outside edge of an rrect. + canvas.clipRRect(rrect, CanvasKit.ClipOp.Difference, true); + canvas.drawColor(CanvasKit.Color(250, 30, 240, 0.9), CanvasKit.BlendMode.SrcOver); + canvas.restore(); + + // draw grey inside of a star pattern, then the blue star on top + canvas.clipPath(path, CanvasKit.ClipOp.Intersect, false); + canvas.drawColor(CanvasKit.Color(200, 200, 200, 1.0), CanvasKit.BlendMode.SrcOver); + canvas.drawPath(path, paint); + + surface.flush(); + path.delete(); + + reportSurface(surface, 'clips_canvas', done); + })); + }); + + it('can save layer with SaveLayerRec-like things', function(done) { + LoadCanvasKit.then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + // Note: fiddle.skia.org quietly draws a white background before doing + // other things, which is noticed in cases like this where we use saveLayer + // with the rec struct. + canvas.clear(CanvasKit.WHITE); + canvas.scale(8, 8); + const redPaint = new CanvasKit.SkPaint(); + redPaint.setColor(CanvasKit.RED); + redPaint.setAntiAlias(true); + canvas.drawCircle(21, 21, 8, redPaint); + + const bluePaint = new CanvasKit.SkPaint(); + bluePaint.setColor(CanvasKit.BLUE); + canvas.drawCircle(31, 21, 8, bluePaint); + + const blurIF = CanvasKit.SkImageFilter.MakeBlur(8, 0.2, CanvasKit.TileMode.Decal, null); + + const count = canvas.saveLayer(null, blurIF, 0); + expect(count).toEqual(1); + canvas.scale(1/4, 1/4); + canvas.drawCircle(125, 85, 8, redPaint); + canvas.restore(); + + surface.flush(); + blurIF.delete(); + redPaint.delete(); + bluePaint.delete(); + + reportSurface(surface, 'savelayerrec_canvas', done); + })); + }); + + it('can drawPoints', function(done) { + LoadCanvasKit.then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const paint = new CanvasKit.SkPaint(); + paint.setAntiAlias(true); + paint.setStyle(CanvasKit.PaintStyle.Stroke); + paint.setStrokeWidth(10); + paint.setColor(CanvasKit.Color(153, 204, 162, 0.82)); + + const points = [[32, 16], [48, 48], [16, 32]]; + + const caps = [CanvasKit.StrokeCap.Round, CanvasKit.StrokeCap.Square, + CanvasKit.StrokeCap.Butt]; + const joins = [CanvasKit.StrokeJoin.Round, CanvasKit.StrokeJoin.Miter, + CanvasKit.StrokeJoin.Bevel]; + const modes = [CanvasKit.PointMode.Points, CanvasKit.PointMode.Lines, + CanvasKit.PointMode.Polygon]; + + for (let i = 0; i < caps.length; i++) { + paint.setStrokeCap(caps[i]); + paint.setStrokeJoin(joins[i]); + + for (const m of modes) { + canvas.drawPoints(m, points, paint); + canvas.translate(64, 0); + } + // Try with the malloc approach. Note that the drawPoints + // will free the pointer when done. + const mPoints = CanvasKit.Malloc(Float32Array, 3*2); + mPoints.set([32, 16, 48, 48, 16, 32]); + canvas.drawPoints(CanvasKit.PointMode.Polygon, mPoints, paint); + canvas.translate(-192, 64); + } + + surface.flush(); + paint.delete(); + + reportSurface(surface, 'drawpoints_canvas', done); + })); + }); + + it('can stretch an image with drawImageNine', function(done) { + const imgPromise = fetch('/assets/mandrill_512.png') + .then((response) => response.arrayBuffer()); + Promise.all([imgPromise, LoadCanvasKit]).then((values) => { + const pngData = values[0]; + expect(pngData).toBeTruthy(); + catchException(done, () => { + let img = CanvasKit.MakeImageFromEncoded(pngData); + expect(img).toBeTruthy(); + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + canvas.clear(CanvasKit.WHITE); + const paint = new CanvasKit.SkPaint(); + + canvas.drawImageNine(img, { + fLeft: 40, + fTop: 40, + fRight: 400, + fBottom: 300, + }, CanvasKit.LTRBRect(5, 5, 300, 650), paint); + surface.flush(); + paint.delete(); + img.delete(); + + reportSurface(surface, 'drawImageNine_canvas', done); + })(); + }); + }); +}); diff --git a/third_party/skia/modules/canvaskit/tests/core.spec.js b/third_party/skia/modules/canvaskit/tests/core.spec.js index f68016d8ad7f..2f900625e98b 100644 --- a/third_party/skia/modules/canvaskit/tests/core.spec.js +++ b/third_party/skia/modules/canvaskit/tests/core.spec.js @@ -76,7 +76,7 @@ describe('Core canvas behavior', function() { let img = CanvasKit.MakeImageFromEncoded(pngData); expect(img).toBeTruthy(); const surface = CanvasKit.MakeCanvasSurface('test'); - expect(surface).toBeTruthy('Could not make surface') + expect(surface).toBeTruthy('Could not make surface'); if (!surface) { done(); return; @@ -103,7 +103,7 @@ describe('Core canvas behavior', function() { let img = CanvasKit.MakeImageFromEncoded(jpgData); expect(img).toBeTruthy(); const surface = CanvasKit.MakeCanvasSurface('test'); - expect(surface).toBeTruthy('Could not make surface') + expect(surface).toBeTruthy('Could not make surface'); if (!surface) { done(); return; @@ -130,7 +130,7 @@ describe('Core canvas behavior', function() { let img = CanvasKit.MakeImageFromEncoded(gifData); expect(img).toBeTruthy(); const surface = CanvasKit.MakeCanvasSurface('test'); - expect(surface).toBeTruthy('Could not make surface') + expect(surface).toBeTruthy('Could not make surface'); if (!surface) { done(); return; @@ -157,9 +157,12 @@ describe('Core canvas behavior', function() { let aImg = CanvasKit.MakeAnimatedImageFromEncoded(gifData); expect(aImg).toBeTruthy(); expect(aImg.getRepetitionCount()).toEqual(-1); // infinite loop + expect(aImg.width()).toEqual(320); + expect(aImg.height()).toEqual(240); + expect(aImg.getFrameCount()).toEqual(60); const surface = CanvasKit.MakeCanvasSurface('test'); - expect(surface).toBeTruthy('Could not make surface') + expect(surface).toBeTruthy('Could not make surface'); if (!surface) { done(); return; @@ -179,7 +182,7 @@ describe('Core canvas behavior', function() { c = aImg.decodeNextFrame(); expect(c).not.toEqual(-1); } - canvas.drawAnimatedImage(aImg, 300, 300); + canvas.drawAnimatedImage(aImg, 300, 300); aImg.delete(); @@ -188,4 +191,138 @@ describe('Core canvas behavior', function() { }); }); + it('can create an image "from scratch" by specifying pixels/colorInfo manually', function(done) { + LoadCanvasKit.then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface'); + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + canvas.clear(CanvasKit.WHITE); + const paint = new CanvasKit.SkPaint(); + + // This creates and draws an SkImage that is 1 pixel wide, 4 pixels tall with + // the colors listed below. + const pixels = Uint8Array.from([ + 255, 0, 0, 255, // opaque red + 0, 255, 0, 255, // opaque green + 0, 0, 255, 255, // opaque blue + 255, 0, 255, 100, // transparent purple + ]); + const img = CanvasKit.MakeImage(pixels, 1, 4, CanvasKit.AlphaType.Unpremul, CanvasKit.ColorType.RGBA_8888); + canvas.drawImage(img, 1, 1, paint); + + reportSurface(surface, '1x4_from_scratch', done); + })); + }); + + it('can blur using ImageFilter or MaskFilter', function(done) { + LoadCanvasKit.then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface'); + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const pathUL = starPath(CanvasKit, 100, 100, 80); + const pathBR = starPath(CanvasKit, 400, 300, 80); + const paint = new CanvasKit.SkPaint(); + const textFont = new CanvasKit.SkFont(null, 24); + + canvas.drawText('Above: MaskFilter', 20, 220, paint, textFont); + canvas.drawText('Right: ImageFilter', 20, 260, paint, textFont); + + paint.setColor(CanvasKit.BLUE); + + const blurMask = CanvasKit.SkMaskFilter.MakeBlur(CanvasKit.BlurStyle.Normal, 5, true); + paint.setMaskFilter(blurMask); + canvas.drawPath(pathUL, paint); + + const blurIF = CanvasKit.SkImageFilter.MakeBlur(8, 1, CanvasKit.TileMode.Decal, null); + paint.setImageFilter(blurIF); + canvas.drawPath(pathBR, paint); + + surface.flush(); + + pathUL.delete(); + pathBR.delete(); + paint.delete(); + blurMask.delete(); + blurIF.delete(); + textFont.delete(); + + reportSurface(surface, 'blur_filters', done); + })); + }); + + it('can use various image filters', function(done) { + const imgPromise = fetch('/assets/mandrill_512.png') + .then((response) => response.arrayBuffer()); + Promise.all([imgPromise, LoadCanvasKit]).then((values) => { + const pngData = values[0]; + expect(pngData).toBeTruthy(); + catchException(done, () => { + let img = CanvasKit.MakeImageFromEncoded(pngData); + expect(img).toBeTruthy(); + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface'); + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + canvas.clear(CanvasKit.WHITE); + const paint = new CanvasKit.SkPaint(); + paint.setAntiAlias(true); + paint.setColor(CanvasKit.Color(0, 255, 0, 1.0)); + const redCF = CanvasKit.SkColorFilter.MakeBlend( + CanvasKit.Color(255, 0, 0, 0.1), CanvasKit.BlendMode.SrcOver); + const redIF = CanvasKit.SkImageFilter.MakeColorFilter(redCF, null); + const blurIF = CanvasKit.SkImageFilter.MakeBlur(8, 0.2, CanvasKit.TileMode.Decal, null); + const combined = CanvasKit.SkImageFilter.MakeCompose(redIF, blurIF); + + // rotate 10 degrees centered on 200, 200 + const m = CanvasKit.SkMatrix.rotated(Math.PI/18, 200, 200); + const rotated = CanvasKit.SkImageFilter.MakeMatrixTransform(m, CanvasKit.FilterQuality.Medium, combined); + paint.setImageFilter(rotated); + + //canvas.rotate(10, 200, 200); + canvas.drawImage(img, 0, 0, paint); + canvas.drawRect(CanvasKit.LTRBRect(5, 35, 45, 80), paint); + + surface.flush(); + + paint.delete(); + redIF.delete(); + redCF.delete(); + blurIF.delete(); + combined.delete(); + rotated.delete(); + img.delete(); + + reportSurface(surface, 'combined_filters', done); + })(); + }); + }); + + it('can use DecodeCache APIs', function(done) { + LoadCanvasKit.then(catchException(done, () => { + const initialLimit = CanvasKit.getDecodeCacheLimitBytes(); + expect(initialLimit).toBeGreaterThan(1024 * 1024); + + const newLimit = 42 * 1024 * 1024; + CanvasKit.setDecodeCacheLimitBytes(newLimit); + expect(CanvasKit.getDecodeCacheLimitBytes()).toEqual(newLimit); + + // We cannot make any assumptions about this value, + // so we just make sure it doesn't crash. + CanvasKit.getDecodeCacheUsedBytes(); + + done(); + })); + }); + }); diff --git a/third_party/skia/modules/canvaskit/tests/paragraph.spec.js b/third_party/skia/modules/canvaskit/tests/paragraph.spec.js index e0bfcd985fb3..6c695eeaa735 100644 --- a/third_party/skia/modules/canvaskit/tests/paragraph.spec.js +++ b/third_party/skia/modules/canvaskit/tests/paragraph.spec.js @@ -22,6 +22,13 @@ describe('CanvasKit\'s Path Behavior', function() { notoSerifFontBuffer = buffer; }); + let notoSerifBoldItalicFontBuffer = null; + const notoSerifBoldItalicFontLoaded = fetch('/assets/NotoSerif-BoldItalic.ttf').then( + (response) => response.arrayBuffer()).then( + (buffer) => { + notoSerifBoldItalicFontBuffer = buffer; + }); + let emojiFontBuffer = null; const emojiFontLoaded = fetch('/assets/NotoColorEmoji.ttf').then( (response) => response.arrayBuffer()).then( @@ -55,6 +62,7 @@ describe('CanvasKit\'s Path Behavior', function() { }, textAlign: CanvasKit.TextAlign.Center, maxLines: 8, + ellipsis: '.._.', }); const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr); @@ -63,6 +71,7 @@ describe('CanvasKit\'s Path Behavior', function() { const blueText = new CanvasKit.TextStyle({ backgroundColor: CanvasKit.Color(234, 208, 232), // light pink color: CanvasKit.Color(48, 37, 199), + fontFamilies: ['Noto Serif'], decoration: CanvasKit.LineThroughDecoration, decorationThickness: 1.5, // multiplier based on font size fontSize: 24, @@ -76,7 +85,24 @@ describe('CanvasKit\'s Path Behavior', function() { paragraph.layout(wrapTo); - canvas.drawRect(CanvasKit.LTRBRect(10, 10, wrapTo+10, wrapTo+10), paint); + expect(paragraph.didExceedMaxLines()).toBeTruthy(); + expect(paragraph.getAlphabeticBaseline()).toBeCloseTo(21.377, 3); + expect(paragraph.getHeight()).toEqual(240); + expect(paragraph.getIdeographicBaseline()).toBeCloseTo(27.236, 3); + expect(paragraph.getLongestLine()).toBeCloseTo(142.129, 3); + expect(paragraph.getMaxIntrinsicWidth()).toBeCloseTo(1444.250, 3); + expect(paragraph.getMaxWidth()).toEqual(200); + expect(paragraph.getMinIntrinsicWidth()).toBeCloseTo(172.360, 3); + expect(paragraph.getWordBoundary(8)).toEqual({ + start: 0, + end: 14, + }); + expect(paragraph.getWordBoundary(25)).toEqual({ + start: 25, + end: 26, + }); + + canvas.drawRect(CanvasKit.LTRBRect(10, 10, wrapTo+10, 230), paint); canvas.drawParagraph(paragraph, 10, 10); surface.flush(); @@ -109,7 +135,6 @@ describe('CanvasKit\'s Path Behavior', function() { color: CanvasKit.BLACK, fontFamilies: ['Noto Serif'], fontSize: 50, - // TODO(kjlubick): font style }, textAlign: CanvasKit.TextAlign.Left, maxLines: 10, @@ -167,6 +192,7 @@ describe('CanvasKit\'s Path Behavior', function() { expect(rects.length).toEqual(test.expectedNum); for (const rect of rects) { + expect(rect.direction).toEqual(CanvasKit.TextDirection.LTR); const p = new CanvasKit.SkPaint(); p.setColor(test.color); p.setStyle(CanvasKit.PaintStyle.Stroke); @@ -181,8 +207,7 @@ describe('CanvasKit\'s Path Behavior', function() { })); }); - // Disabled until we can update CanvasKit's freetype. - xit('can draw emojis', function(done) { + it('can draw emojis', function(done) { Promise.all([LoadCanvasKit, notoSerifFontLoaded, emojiFontLoaded]).then(catchException(done, () => { const surface = CanvasKit.MakeCanvasSurface('test'); expect(surface).toBeTruthy('Could not make surface') @@ -193,25 +218,34 @@ describe('CanvasKit\'s Path Behavior', function() { const canvas = surface.getCanvas(); const fontMgr = CanvasKit.SkFontMgr.FromData([notoSerifFontBuffer, emojiFontBuffer]); - fontMgr.dumpFamilies(); + if (fontMgr.dumpFamilies) { + fontMgr.dumpFamilies(); + } const wrapTo = 450; const paraStyle = new CanvasKit.ParagraphStyle({ textStyle: { color: CanvasKit.BLACK, - // Put emoji first, otherwise zero-space-joiner will be matched by serif, - // and we don't get families or rainbow flags. - fontFamilies: ['Noto Color Emoji', 'Noto Serif'], + // Put text first, otherwise the "emoji space" is used and that looks bad. + fontFamilies: ['Noto Serif', 'Noto Color Emoji'], fontSize: 30, }, textAlign: CanvasKit.TextAlign.Left, maxLines: 10, }); + + const textStyle = new CanvasKit.TextStyle({ + color: CanvasKit.BLACK, + // The number 4 matches an emoji and looks strange w/o this additional style. + fontFamilies: ['Noto Serif'], + fontSize: 30, + }); + const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr); - // FIXME(kjlubick): We need one style that doesn't have emoji, otherwise the 4 will - // be "emoji 4". + builder.pushStyle(textStyle); builder.addText('4 flags on following line:\n'); + builder.pop(); builder.addText(`🏳️‍🌈 🇮🇹 🇱🇷 🇺🇸\n`); builder.addText('Rainbow Italy Liberia USA\n\n'); builder.addText('Emoji below should wrap:\n'); @@ -222,8 +256,16 @@ describe('CanvasKit\'s Path Behavior', function() { canvas.drawParagraph(paragraph, 10, 10); + const paint = new CanvasKit.SkPaint(); + paint.setColor(CanvasKit.RED); + paint.setStyle(CanvasKit.PaintStyle.Stroke); + canvas.drawRect(CanvasKit.LTRBRect(10, 10, wrapTo+10, wrapTo+10), paint); + surface.flush(); fontMgr.delete(); + paint.delete(); + builder.delete(); + reportSurface(surface, 'paragraph_emoji', done); })); }); @@ -293,4 +335,180 @@ describe('CanvasKit\'s Path Behavior', function() { })); }); + it('supports font styles', function(done) { + Promise.all([LoadCanvasKit, notoSerifFontLoaded, notoSerifBoldItalicFontLoaded]).then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const paint = new CanvasKit.SkPaint(); + + paint.setColor(CanvasKit.RED); + paint.setStyle(CanvasKit.PaintStyle.Stroke); + + const fontMgr = CanvasKit.SkFontMgr.FromData(notoSerifFontBuffer, notoSerifBoldItalicFontBuffer); + + const wrapTo = 250; + + const paraStyle = new CanvasKit.ParagraphStyle({ + textStyle: { + fontFamilies: ['Noto Serif'], + fontSize: 20, + fontStyle: { + weight: CanvasKit.FontWeight.Light, + } + }, + textDirection: CanvasKit.TextDirection.RTL, + disableHinting: true, + }); + + const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr); + builder.addText('Default text\n'); + + const boldItalic = new CanvasKit.TextStyle({ + color: CanvasKit.RED, + fontFamilies: ['Noto Serif'], + fontSize: 20, + fontStyle: { + weight: CanvasKit.FontWeight.Bold, + width: CanvasKit.FontWidth.Expanded, + slant: CanvasKit.FontSlant.Italic, + } + }); + builder.pushStyle(boldItalic) + builder.addText(`Bold, Expanded, Italic\n`) + builder.pop(); + builder.addText(`back to normal`); + const paragraph = builder.build(); + + paragraph.layout(wrapTo); + + canvas.clear(CanvasKit.Color(250, 250, 250)); + canvas.drawRect(CanvasKit.LTRBRect(10, 10, wrapTo+10, wrapTo+10), paint); + canvas.drawParagraph(paragraph, 10, 10); + + surface.flush(); + + paint.delete(); + fontMgr.delete(); + reportSurface(surface, 'paragraph_styles', done); + })); + }); + + it('should not crash if we omit font family on pushed textStyle', function(done) { + Promise.all([LoadCanvasKit, notoSerifFontLoaded, notoSerifBoldItalicFontLoaded]).then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const paint = new CanvasKit.SkPaint(); + + paint.setColor(CanvasKit.RED); + paint.setStyle(CanvasKit.PaintStyle.Stroke); + + const fontMgr = CanvasKit.SkFontMgr.FromData(notoSerifFontBuffer, notoSerifBoldItalicFontBuffer); + + const wrapTo = 250; + + const paraStyle = new CanvasKit.ParagraphStyle({ + textStyle: { + fontFamilies: ['Noto Serif'], + fontSize: 20, + }, + textDirection: CanvasKit.TextDirection.RTL, + disableHinting: true, + }); + + const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr); + builder.addText('Default text\n'); + + const boldItalic = new CanvasKit.TextStyle({ + fontStyle: { + weight: CanvasKit.FontWeight.Bold, + slant: CanvasKit.FontSlant.Italic, + } + }); + builder.pushStyle(boldItalic) + builder.addText(`Bold, Italic\n`); // doesn't show up, but we don't crash + builder.pop(); + builder.addText(`back to normal`); + const paragraph = builder.build(); + + paragraph.layout(wrapTo); + + canvas.clear(CanvasKit.Color(250, 250, 250)); + canvas.drawRect(CanvasKit.LTRBRect(10, 10, wrapTo+10, wrapTo+10), paint); + canvas.drawParagraph(paragraph, 10, 10); + + surface.flush(); + + paragraph.delete(); + paint.delete(); + fontMgr.delete(); + done(); + })); + }); + + it('should not crash if we omit font family on paragraph style', function(done) { + Promise.all([LoadCanvasKit, notoSerifFontLoaded, notoSerifBoldItalicFontLoaded]).then(catchException(done, () => { + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const paint = new CanvasKit.SkPaint(); + + paint.setColor(CanvasKit.RED); + paint.setStyle(CanvasKit.PaintStyle.Stroke); + + const fontMgr = CanvasKit.SkFontMgr.FromData(notoSerifFontBuffer, notoSerifBoldItalicFontBuffer); + + const wrapTo = 250; + + const paraStyle = new CanvasKit.ParagraphStyle({ + textStyle: { + fontSize: 20, + }, + textDirection: CanvasKit.TextDirection.RTL, + disableHinting: true, + }); + + const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr); + builder.addText('Default text\n'); + + const boldItalic = new CanvasKit.TextStyle({ + fontStyle: { + weight: CanvasKit.FontWeight.Bold, + slant: CanvasKit.FontSlant.Italic, + } + }); + builder.pushStyle(boldItalic) + builder.addText(`Bold, Italic\n`); + builder.pop(); + builder.addText(`back to normal`); + const paragraph = builder.build(); + + paragraph.layout(wrapTo); + + canvas.clear(CanvasKit.Color(250, 250, 250)); + canvas.drawRect(CanvasKit.LTRBRect(10, 10, wrapTo+10, wrapTo+10), paint); + canvas.drawParagraph(paragraph, 10, 10); + + surface.flush(); + + paragraph.delete(); + paint.delete(); + fontMgr.delete(); + done(); + })); + }); + }); diff --git a/third_party/skia/modules/canvaskit/tests/path.spec.js b/third_party/skia/modules/canvaskit/tests/path.spec.js index 66555fc195c1..8c8b5987fd64 100644 --- a/third_party/skia/modules/canvaskit/tests/path.spec.js +++ b/third_party/skia/modules/canvaskit/tests/path.spec.js @@ -216,4 +216,154 @@ describe('CanvasKit\'s Path Behavior', function() { reportSurface(surface, 'arcto_path', done); })); }); + + it('can draw a path using relative functions', function(done) { + LoadCanvasKit.then(catchException(done, () => { + // This is taken from example.html + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const paint = new CanvasKit.SkPaint(); + paint.setStrokeWidth(1.0); + paint.setAntiAlias(true); + paint.setColor(CanvasKit.Color(0, 0, 0, 1.0)); + paint.setStyle(CanvasKit.PaintStyle.Stroke); + + const path = new CanvasKit.SkPath(); + path.rMoveTo(20, 5) + .rLineTo(10, 15) // 30, 20 + .rLineTo(10, -5); // 40, 10 + path.rLineTo(10, 10); // 50, 20 + path.rLineTo(10, -20); // 60, 0 + path.rLineTo(-40, 5); // 20, 5 + + path.moveTo(20, 80) + .rCubicTo(70, -70, 140, 70, 170, -70); // 90, 10, 160, 150, 190, 10 + + path.moveTo(36, 148) + .rQuadTo(30, 40, 84, -12) // 66, 188, 120, 136 + .lineTo(36, 148); + + path.moveTo(150, 180) + .rArcTo(24, 24, 45, true, false, -68, -24); // 82, 156 + path.lineTo(160, 160); + + canvas.drawPath(path, paint); + + surface.flush(); + path.delete(); + paint.delete(); + + reportSurface(surface, 'path_relative', done); + })); + }); + + it('can measure a path', function(done) { + LoadCanvasKit.then(catchException(done, () => { + + const path = new CanvasKit.SkPath(); + path.moveTo(10, 10) + .lineTo(40, 50); // should be length 50 because of the 3/4/5 triangle rule + + path.moveTo(80, 0) + .lineTo(80, 10) + .lineTo(100, 5) + .lineTo(80, 0); + + const meas = new CanvasKit.SkPathMeasure(path, false, 1); + expect(meas.getLength()).toBeCloseTo(50.0, 3); + const pt = meas.getPosTan(28.7); // arbitrary point + expect(pt[0]).toBeCloseTo(27.22, 3); // x + expect(pt[1]).toBeCloseTo(32.96, 3); // y + expect(pt[2]).toBeCloseTo(0.6, 3); // dy + expect(pt[3]).toBeCloseTo(0.8, 3); // dy + const subpath = meas.getSegment(20, 40, true); // make sure this doesn't crash + + expect(meas.nextContour()).toBeTruthy(); + expect(meas.getLength()).toBeCloseTo(51.231, 3); + + expect(meas.nextContour()).toBeFalsy(); + + path.delete(); + done(); + })); + }); + + it('can measure the contours of a path', function(done) { + LoadCanvasKit.then(catchException(done, () => { + + const path = new CanvasKit.SkPath(); + path.moveTo(10, 10) + .lineTo(40, 50); // should be length 50 because of the 3/4/5 triangle rule + + path.moveTo(80, 0) + .lineTo(80, 10) + .lineTo(100, 5) + .lineTo(80, 0); + + const meas = new CanvasKit.SkContourMeasureIter(path, false, 1); + let cont = meas.next(); + expect(cont).toBeTruthy(); + + expect(cont.length()).toBeCloseTo(50.0, 3); + const pt = cont.getPosTan(28.7); // arbitrary point + expect(pt[0]).toBeCloseTo(27.22, 3); // x + expect(pt[1]).toBeCloseTo(32.96, 3); // y + expect(pt[2]).toBeCloseTo(0.6, 3); // dy + expect(pt[3]).toBeCloseTo(0.8, 3); // dy + const subpath = cont.getSegment(20, 40, true); // make sure this doesn't crash + + cont.delete(); + cont = meas.next(); + expect(cont).toBeTruthy() + expect(cont.length()).toBeCloseTo(51.231, 3); + + cont.delete(); + expect(meas.next()).toBeFalsy(); + + meas.delete(); + path.delete(); + done(); + })); + }); + + it('can draw a polygon', function(done) { + LoadCanvasKit.then(catchException(done, () => { + // This is taken from example.html + const surface = CanvasKit.MakeCanvasSurface('test'); + expect(surface).toBeTruthy('Could not make surface') + if (!surface) { + done(); + return; + } + const canvas = surface.getCanvas(); + const paint = new CanvasKit.SkPaint(); + paint.setStrokeWidth(1.0); + paint.setAntiAlias(true); + paint.setColor(CanvasKit.Color(0, 0, 0, 1.0)); + paint.setStyle(CanvasKit.PaintStyle.Stroke); + + const points = [[5, 5], [30, 20], [55, 5], [55, 50], [30, 30], [5, 50]]; + + const mPoints = CanvasKit.Malloc(Float32Array, 6 * 2); + mPoints.set([105, 105, 130, 120, 155, 105, 155, 150, 130, 130, 105, 150]); + + const path = new CanvasKit.SkPath(); + path.addPoly(points, true) + .moveTo(100, 0) + .addPoly(mPoints, true); + + canvas.drawPath(path, paint); + + surface.flush(); + path.delete(); + paint.delete(); + + reportSurface(surface, 'drawpoly_path', done); + })); + }); }); diff --git a/third_party/skia/modules/canvaskit/tests/skottie.spec.js b/third_party/skia/modules/canvaskit/tests/skottie.spec.js index 91cbd0a54e3b..ee729c90e24a 100644 --- a/third_party/skia/modules/canvaskit/tests/skottie.spec.js +++ b/third_party/skia/modules/canvaskit/tests/skottie.spec.js @@ -58,6 +58,7 @@ describe('Skottie behavior', function() { canvas.clear(CanvasKit.WHITE); animation.render(canvas, bounds); surface.flush(); + animation.delete(); reportSurface(surface, 'skottie_animgif', done); })(); diff --git a/third_party/skia/modules/canvaskit/tests/util.js b/third_party/skia/modules/canvaskit/tests/util.js index 458602c1eb9b..21832827087f 100644 --- a/third_party/skia/modules/canvaskit/tests/util.js +++ b/third_party/skia/modules/canvaskit/tests/util.js @@ -11,7 +11,7 @@ function reportSurface(surface, testname, done) { pixels = new Uint8ClampedArray(pixels.buffer); const imageData = new ImageData(pixels, CANVAS_WIDTH, CANVAS_HEIGHT); - let reportingCanvas = document.getElementById('report'); + const reportingCanvas = document.getElementById('report'); reportingCanvas.getContext('2d').putImageData(imageData, 0, 0); reportCanvas(reportingCanvas, testname).then(() => { done(); @@ -27,4 +27,4 @@ function starPath(CanvasKit, X=128, Y=128, R=116) { p.lineTo(X + R * Math.cos(a), Y + R * Math.sin(a)); } return p; - } \ No newline at end of file +} diff --git a/third_party/skia/modules/particles/BUILD.gn b/third_party/skia/modules/particles/BUILD.gn index 1573b72ee9f0..1ce078d33b57 100644 --- a/third_party/skia/modules/particles/BUILD.gn +++ b/third_party/skia/modules/particles/BUILD.gn @@ -22,6 +22,7 @@ static_library("particles") { include_dirs = [ "../../tools/timer" ] deps = [ "../..:skia", + "../skresources", ] sources = skia_particle_sources configs += [ "../../:skia_private" ] diff --git a/third_party/skia/modules/particles/include/SkParticleBinding.h b/third_party/skia/modules/particles/include/SkParticleBinding.h index 39665f6af0f5..b08aa15418e0 100644 --- a/third_party/skia/modules/particles/include/SkParticleBinding.h +++ b/third_party/skia/modules/particles/include/SkParticleBinding.h @@ -18,6 +18,10 @@ class SkParticleEffect; class SkParticleEffectParams; class SkRandom; +namespace skresources { + class ResourceProvider; +} + namespace SkSL { class Compiler; } @@ -47,7 +51,9 @@ class SkParticleBinding : public SkReflected { REFLECTED_ABSTRACT(SkParticleBinding, SkReflected) void visitFields(SkFieldVisitor* v) override; + virtual std::unique_ptr toValue(SkSL::Compiler&) = 0; + virtual void prepare(const skresources::ResourceProvider*) = 0; static void RegisterBindingTypes(); @@ -58,13 +64,19 @@ class SkParticleBinding : public SkReflected { * each kind of binding is described below. */ - // Binds an SkPath to an effect's SkSL. The path is specified using SVG syntax. It is called - // in the SkSL as 'name(t)'. 't' is a normalized distance along the path. This returns a float4 - // value, containing the position in .xy, and the normal in .zw. - static sk_sp MakePathBinding(const char* name, const char* path); + // void name(loop) -- Creates an effect instance. Effect will loop if 'loop' is true, otherwise + // it's a one-shot. The new effect inherits all properties from the calling effect or particle. + static sk_sp MakeEffect(const char* name, + sk_sp effect); + + // float4 name(xy) -- Fetches RGBA data from an image. 'xy' are normalized image coordinates. + static sk_sp MakeImage(const char* name, + const char* imagePath, const char* imageName); - static sk_sp MakeEffectBinding(const char* name, - sk_sp effect); + // float4 name(t) -- Fetches position and normal from an SkPath. 't' is the normalized distance + // along the path. The return value contains position in .xy and normal in .zw. + static sk_sp MakePath(const char* name, + const char* pathPath, const char* pathName); protected: SkString fName; diff --git a/third_party/skia/modules/particles/include/SkParticleDrawable.h b/third_party/skia/modules/particles/include/SkParticleDrawable.h index 94cfdabcb6c5..4acbe590f7ba 100644 --- a/third_party/skia/modules/particles/include/SkParticleDrawable.h +++ b/third_party/skia/modules/particles/include/SkParticleDrawable.h @@ -13,7 +13,8 @@ class SkCanvas; struct SkParticles; class SkPaint; -class SkString; + +namespace skresources { class ResourceProvider; } class SkParticleDrawable : public SkReflected { public: @@ -21,11 +22,13 @@ class SkParticleDrawable : public SkReflected { virtual void draw(SkCanvas* canvas, const SkParticles& particles, int count, const SkPaint& paint) = 0; + virtual void prepare(const skresources::ResourceProvider* resourceProvider) = 0; static void RegisterDrawableTypes(); static sk_sp MakeCircle(int radius); - static sk_sp MakeImage(const SkString& path, int cols, int rows); + static sk_sp MakeImage(const char* imagePath, const char* imageName, + int cols, int rows); }; #endif // SkParticleEffect_DEFINED diff --git a/third_party/skia/modules/particles/include/SkParticleEffect.h b/third_party/skia/modules/particles/include/SkParticleEffect.h index fe26408e9ec2..b19ce2f63587 100644 --- a/third_party/skia/modules/particles/include/SkParticleEffect.h +++ b/third_party/skia/modules/particles/include/SkParticleEffect.h @@ -25,6 +25,10 @@ class SkParticleBinding; class SkParticleDrawable; class SkParticleExternalValue; +namespace skresources { + class ResourceProvider; +} + namespace SkSL { class ByteCode; } @@ -111,6 +115,9 @@ class SkParticleEffectParams : public SkRefCnt { void visitFields(SkFieldVisitor* v); + // Load/compute cached resources + void prepare(const skresources::ResourceProvider*); + private: friend class SkParticleEffect; @@ -122,8 +129,6 @@ class SkParticleEffectParams : public SkRefCnt { Program fEffectProgram; Program fParticleProgram; - - void rebuild(); }; class SkParticleEffect : public SkRefCnt { @@ -198,7 +203,7 @@ class SkParticleEffect : public SkRefCnt { void processParticleSpawnRequests(double now, int start); void runParticleScript(double now, const char* entry, int start, int count); - sk_sp fParams; + sk_sp fParams; SkRandom fRandom; diff --git a/third_party/skia/modules/particles/include/SkParticleSerialization.h b/third_party/skia/modules/particles/include/SkParticleSerialization.h index 8cbc1c272d76..609650af6474 100644 --- a/third_party/skia/modules/particles/include/SkParticleSerialization.h +++ b/third_party/skia/modules/particles/include/SkParticleSerialization.h @@ -42,27 +42,8 @@ class SkToJsonVisitor : public SkFieldVisitor { fWriter.appendString(name, s.c_str()); } } - void visit(const char* name, int& i, const EnumStringMapping* map, int count) override { - fWriter.appendString(name, EnumToString(i, map, count)); - } // Compound types - void visit(const char* name, SkPoint& p) override { - fWriter.beginObject(name, false); - fWriter.appendFloat("x", p.fX); - fWriter.appendFloat("y", p.fY); - fWriter.endObject(); - } - - void visit(const char* name, SkColor4f& c) override { - fWriter.beginArray(name, false); - fWriter.appendFloat(c.fR); - fWriter.appendFloat(c.fG); - fWriter.appendFloat(c.fB); - fWriter.appendFloat(c.fA); - fWriter.endArray(); - } - void visit(sk_sp& e, const SkReflected::Type* baseType) override { fWriter.appendString("Type", e ? e->getType()->fName : "Null"); } @@ -115,29 +96,6 @@ class SkFromJsonVisitor : public SkFieldVisitor { TryParse(get(name), s); } } - void visit(const char* name, int& i, const EnumStringMapping* map, int count) override { - SkString str; - if (TryParse(get(name), str)) { - i = StringToEnum(str.c_str(), map, count); - } - } - - void visit(const char* name, SkPoint& p) override { - if (const skjson::ObjectValue* obj = get(name)) { - TryParse((*obj)["x"], p.fX); - TryParse((*obj)["y"], p.fY); - } - } - - void visit(const char* name, SkColor4f& c) override { - const skjson::ArrayValue* arr = get(name); - if (arr && arr->size() == 4) { - TryParse((*arr)[0], c.fR); - TryParse((*arr)[1], c.fG); - TryParse((*arr)[2], c.fB); - TryParse((*arr)[3], c.fA); - } - } void visit(sk_sp& e, const SkReflected::Type* baseType) override { const skjson::StringValue* typeString = get("Type"); diff --git a/third_party/skia/modules/particles/include/SkReflected.h b/third_party/skia/modules/particles/include/SkReflected.h index beb72918448e..104b4826ccc0 100644 --- a/third_party/skia/modules/particles/include/SkReflected.h +++ b/third_party/skia/modules/particles/include/SkReflected.h @@ -128,8 +128,8 @@ class SkReflected : public SkRefCnt { * SkReflected types, and of types that implement the visitFields() function. * * Classes implementing the interface must supply implementations of virtual functions that visit - * basic types (float, int, bool, SkString, etc...), as well as helper methods for entering the - * scope of an object or array. + * basic types (float, int, bool, SkString), as well as helper methods for entering the scope of + * an object or array. * * All visit functions supply a field name, and a non-constant reference to an actual field. * This allows visitors to serialize or deserialize collections of objects, or perform edits on @@ -152,28 +152,9 @@ class SkFieldVisitor { virtual void visit(const char*, bool&) = 0; virtual void visit(const char*, SkString&) = 0; - virtual void visit(const char*, SkPoint&) = 0; - virtual void visit(const char*, SkColor4f&) = 0; - - // Accommodation for enums, where caller can supply a value <-> string map - struct EnumStringMapping { - int fValue; - const char* fName; - }; - virtual void visit(const char*, int&, const EnumStringMapping*, int count) = 0; - - // Default visit function for structs with no special behavior. It is assumed that any such - // struct implements visitFields(SkFieldVisitor*) to recursively visit each of its fields. - template - void visit(const char* name, T& value) { - this->enterObject(name); - value.visitFields(this); - this->exitObject(); - } - // Specialization for SkTArrays. In conjunction with the enterArray/exitArray virtuals, this // allows visitors to resize an array (for deserialization), and apply a single edit operation - // (remove or move a single element). Each element of the array is visited as normal. + // (remove a single element). Each element of the array is visited as normal. template void visit(const char* name, SkTArray& arr) { arr.resize_back(this->enterArray(name, arr.count())); @@ -214,7 +195,6 @@ class SkFieldVisitor { enum class Verb { kNone, kRemove, - kMoveForward, }; Verb fVerb = Verb::kNone; @@ -231,32 +211,11 @@ class SkFieldVisitor { } arr.pop_back(); break; - case Verb::kMoveForward: - if (fIndex > 0 && fIndex < arr.count()) { - std::swap(arr[fIndex - 1], arr[fIndex]); - } - break; } } }; - static const char* EnumToString(int value, const EnumStringMapping* map, int count) { - for (int i = 0; i < count; ++i) { - if (map[i].fValue == value) { - return map[i].fName; - } - } - return nullptr; - } - static int StringToEnum(const char* str, const EnumStringMapping* map, int count) { - for (int i = 0; i < count; ++i) { - if (0 == strcmp(str, map[i].fName)) { - return map[i].fValue; - } - } - return -1; - } - +private: virtual void enterObject(const char* name) = 0; virtual void exitObject() = 0; diff --git a/third_party/skia/modules/particles/src/SkParticleBinding.cpp b/third_party/skia/modules/particles/src/SkParticleBinding.cpp index e1a45324a1e5..3f8b50b4a165 100644 --- a/third_party/skia/modules/particles/src/SkParticleBinding.cpp +++ b/third_party/skia/modules/particles/src/SkParticleBinding.cpp @@ -7,13 +7,16 @@ #include "modules/particles/include/SkParticleBinding.h" +#include "include/core/SkBitmap.h" #include "include/core/SkContourMeasure.h" +#include "include/core/SkImage.h" #include "include/core/SkPath.h" #include "include/utils/SkParsePath.h" #include "include/utils/SkRandom.h" #include "include/utils/SkTextUtils.h" #include "modules/particles/include/SkParticleEffect.h" #include "modules/particles/include/SkReflected.h" +#include "modules/skresources/include/SkResources.h" #include "src/sksl/SkSLCompiler.h" void SkParticleBinding::visitFields(SkFieldVisitor* v) { @@ -64,6 +67,10 @@ class SkEffectBinding : public SkParticleBinding { new SkEffectExternalValue(fName.c_str(), compiler, fParams)); } + void prepare(const skresources::ResourceProvider* resourceProvider) override { + fParams->prepare(resourceProvider); + } + private: sk_sp fParams; }; @@ -100,11 +107,12 @@ class SkPathExternalValue : public SkParticleExternalValue { void call(int index, float* arguments, float* outReturn) override { SkScalar len = fPath->fTotalLength * arguments[0]; int idx = 0; - while (idx < fPath->fContours.count() && len > fPath->fContours[idx]->length()) { + while (idx < fPath->fContours.count() - 1 && len > fPath->fContours[idx]->length()) { len -= fPath->fContours[idx++]->length(); } SkVector localXAxis; - if (!fPath->fContours[idx]->getPosTan(len, (SkPoint*)outReturn, &localXAxis)) { + if (idx >= fPath->fContours.count() || + !fPath->fContours[idx]->getPosTan(len, (SkPoint*)outReturn, &localXAxis)) { outReturn[0] = outReturn[1] = 0.0f; localXAxis = { 1, 0 }; } @@ -118,23 +126,17 @@ class SkPathExternalValue : public SkParticleExternalValue { class SkPathBinding : public SkParticleBinding { public: - SkPathBinding(const char* name = "", const char* path = "") + SkPathBinding(const char* name = "", const char* pathPath = "", const char* pathName = "") : SkParticleBinding(name) - , fPath(path) { - this->rebuild(); - } + , fPathPath(pathPath) + , fPathName(pathName) {} REFLECTED(SkPathBinding, SkParticleBinding) void visitFields(SkFieldVisitor* v) override { - SkString oldPath = fPath; - SkParticleBinding::visitFields(v); - v->visit("Path", fPath); - - if (fPath != oldPath) { - this->rebuild(); - } + v->visit("PathPath", fPathPath); + v->visit("PathName", fPathName); } std::unique_ptr toValue(SkSL::Compiler& compiler) override { @@ -142,16 +144,19 @@ class SkPathBinding : public SkParticleBinding { new SkPathExternalValue(fName.c_str(), compiler, &fContours)); } -private: - SkString fPath; - - void rebuild() { - SkPath path; - if (SkParsePath::FromSVGString(fPath.c_str(), &path)) { - fContours.rebuild(path); + void prepare(const skresources::ResourceProvider* resourceProvider) override { + if (auto pathData = resourceProvider->load(fPathPath.c_str(), fPathName.c_str())) { + SkPath path; + if (0 != path.readFromMemory(pathData->data(), pathData->size())) { + fContours.rebuild(path); + } } } +private: + SkString fPathPath; + SkString fPathName; + // Cached SkPathContours fContours; }; @@ -161,23 +166,14 @@ class SkTextBinding : public SkParticleBinding { SkTextBinding(const char* name = "", const char* text = "", SkScalar fontSize = 96) : SkParticleBinding(name) , fText(text) - , fFontSize(fontSize) { - this->rebuild(); - } + , fFontSize(fontSize) {} REFLECTED(SkTextBinding, SkParticleBinding) void visitFields(SkFieldVisitor* v) override { - SkString oldText = fText; - SkScalar oldSize = fFontSize; - SkParticleBinding::visitFields(v); v->visit("Text", fText); v->visit("FontSize", fFontSize); - - if (fText != oldText || fFontSize != oldSize) { - this->rebuild(); - } } std::unique_ptr toValue(SkSL::Compiler& compiler) override { @@ -185,11 +181,7 @@ class SkTextBinding : public SkParticleBinding { new SkPathExternalValue(fName.c_str(), compiler, &fContours)); } -private: - SkString fText; - SkScalar fFontSize; - - void rebuild() { + void prepare(const skresources::ResourceProvider*) override { if (fText.isEmpty()) { return; } @@ -200,22 +192,101 @@ class SkTextBinding : public SkParticleBinding { fContours.rebuild(path); } +private: + SkString fText; + SkScalar fFontSize; + // Cached SkPathContours fContours; }; -sk_sp SkParticleBinding::MakeEffectBinding( - const char* name, sk_sp params) { - return sk_sp(new SkEffectBinding(name, params)); +// Exposes an SkBitmap as an external, callable value. p(xy) returns a float4 +class SkBitmapExternalValue : public SkParticleExternalValue { +public: + SkBitmapExternalValue(const char* name, SkSL::Compiler& compiler, const SkBitmap& bitmap) + : SkParticleExternalValue(name, compiler, *compiler.context().fFloat4_Type) + , fBitmap(bitmap) { + SkASSERT(bitmap.colorType() == kRGBA_F32_SkColorType); + } + + bool canCall() const override { return true; } + int callParameterCount() const override { return 1; } + void getCallParameterTypes(const SkSL::Type** outTypes) const override { + outTypes[0] = fCompiler.context().fFloat2_Type.get(); + } + + void call(int index, float* arguments, float* outReturn) override { + int x = SkTPin(static_cast(arguments[0] * fBitmap.width()), 0, fBitmap.width() - 1); + int y = SkTPin(static_cast(arguments[1] * fBitmap.height()), 0, fBitmap.height() - 1); + float* p = static_cast(fBitmap.getAddr(x, y)); + memcpy(outReturn, p, 4 * sizeof(float)); + } + +private: + SkBitmap fBitmap; +}; + +class SkImageBinding : public SkParticleBinding { +public: + SkImageBinding(const char* name = "", const char* imagePath = "", const char* imageName = "") + : SkParticleBinding(name) + , fImagePath(imagePath) + , fImageName(imageName) {} + + REFLECTED(SkImageBinding, SkParticleBinding) + + void visitFields(SkFieldVisitor* v) override { + SkParticleBinding::visitFields(v); + v->visit("ImagePath", fImagePath); + v->visit("ImageName", fImageName); + } + + std::unique_ptr toValue(SkSL::Compiler& compiler) override { + return std::unique_ptr( + new SkBitmapExternalValue(fName.c_str(), compiler, fBitmap)); + } + + void prepare(const skresources::ResourceProvider* resourceProvider) override { + if (auto asset = resourceProvider->loadImageAsset(fImagePath.c_str(), fImageName.c_str(), + nullptr)) { + if (auto image = asset->getFrame(0)) { + fBitmap.allocPixels(image->imageInfo().makeColorType(kRGBA_F32_SkColorType)); + image->readPixels(fBitmap.pixmap(), 0, 0); + return; + } + } + + fBitmap.allocPixels(SkImageInfo::Make(1, 1, kRGBA_F32_SkColorType, kPremul_SkAlphaType)); + fBitmap.eraseColor(SK_ColorWHITE); + } + +private: + SkString fImagePath; + SkString fImageName; + + // Cached + SkBitmap fBitmap; +}; + +sk_sp SkParticleBinding::MakeEffect(const char* name, + sk_sp params) { + return sk_sp(new SkEffectBinding(name, std::move(params))); +} + +sk_sp SkParticleBinding::MakeImage(const char* name, const char* imagePath, + const char* imageName) { + return sk_sp(new SkImageBinding(name, imagePath, imageName)); } -sk_sp SkParticleBinding::MakePathBinding(const char* name, const char* path) { - return sk_sp(new SkPathBinding(name, path)); +sk_sp SkParticleBinding::MakePath(const char* name, const char* pathPath, + const char* pathName) { + return sk_sp(new SkPathBinding(name, pathPath, pathName)); } void SkParticleBinding::RegisterBindingTypes() { REGISTER_REFLECTED(SkParticleBinding); REGISTER_REFLECTED(SkEffectBinding); + REGISTER_REFLECTED(SkImageBinding); REGISTER_REFLECTED(SkPathBinding); REGISTER_REFLECTED(SkTextBinding); } diff --git a/third_party/skia/modules/particles/src/SkParticleDrawable.cpp b/third_party/skia/modules/particles/src/SkParticleDrawable.cpp index 1e67db9b0548..196748436947 100644 --- a/third_party/skia/modules/particles/src/SkParticleDrawable.cpp +++ b/third_party/skia/modules/particles/src/SkParticleDrawable.cpp @@ -15,6 +15,7 @@ #include "include/core/SkString.h" #include "include/core/SkSurface.h" #include "modules/particles/include/SkParticleData.h" +#include "modules/skresources/include/SkResources.h" #include "src/core/SkAutoMalloc.h" static sk_sp make_circle_image(int radius) { @@ -71,16 +72,14 @@ struct DrawAtlasArrays { class SkCircleDrawable : public SkParticleDrawable { public: - SkCircleDrawable(int radius = 1) - : fRadius(radius) { - this->rebuild(); - } + SkCircleDrawable(int radius = 1) : fRadius(radius) {} REFLECTED(SkCircleDrawable, SkParticleDrawable) void draw(SkCanvas* canvas, const SkParticles& particles, int count, const SkPaint& paint) override { - SkPoint center = { SkIntToScalar(fRadius), SkIntToScalar(fRadius) }; + int r = SkTMax(fRadius, 1); + SkPoint center = { SkIntToScalar(r), SkIntToScalar(r) }; DrawAtlasArrays arrays(particles, count, center); for (int i = 0; i < count; ++i) { arrays.fRects[i].setIWH(fImage->width(), fImage->height()); @@ -89,89 +88,81 @@ class SkCircleDrawable : public SkParticleDrawable { count, SkBlendMode::kModulate, nullptr, &paint); } + void prepare(const skresources::ResourceProvider*) override { + int r = SkTMax(fRadius, 1); + if (!fImage || fImage->width() != 2 * r) { + fImage = make_circle_image(r); + } + } + void visitFields(SkFieldVisitor* v) override { v->visit("Radius", fRadius); - this->rebuild(); } private: int fRadius; - void rebuild() { - fRadius = SkTMax(fRadius, 1); - if (!fImage || fImage->width() != 2 * fRadius) { - fImage = make_circle_image(fRadius); - } - } - // Cached sk_sp fImage; }; class SkImageDrawable : public SkParticleDrawable { public: - SkImageDrawable(const SkString& path = SkString(), int cols = 1, int rows = 1) - : fPath(path) + SkImageDrawable(const char* imagePath = "", const char* imageName = "", + int cols = 1, int rows = 1) + : fPath(imagePath) + , fName(imageName) , fCols(cols) - , fRows(rows) { - this->rebuild(); - } + , fRows(rows) {} REFLECTED(SkImageDrawable, SkParticleDrawable) void draw(SkCanvas* canvas, const SkParticles& particles, int count, const SkPaint& paint) override { - SkRect baseRect = getBaseRect(); + int cols = SkTMax(fCols, 1), + rows = SkTMax(fRows, 1); + SkRect baseRect = SkRect::MakeWH(static_cast(fImage->width()) / cols, + static_cast(fImage->height()) / rows); SkPoint center = { baseRect.width() * 0.5f, baseRect.height() * 0.5f }; DrawAtlasArrays arrays(particles, count, center); - int frameCount = fCols * fRows; + int frameCount = cols * rows; float* spriteFrames = particles.fData[SkParticles::kSpriteFrame].get(); for (int i = 0; i < count; ++i) { int frame = static_cast(spriteFrames[i] * frameCount + 0.5f); frame = SkTPin(frame, 0, frameCount - 1); - int row = frame / fCols; - int col = frame % fCols; + int row = frame / cols; + int col = frame % cols; arrays.fRects[i] = baseRect.makeOffset(col * baseRect.width(), row * baseRect.height()); } canvas->drawAtlas(fImage, arrays.fXforms.get(), arrays.fRects.get(), arrays.fColors.get(), count, SkBlendMode::kModulate, nullptr, &paint); } - void visitFields(SkFieldVisitor* v) override { - SkString oldPath = fPath; + void prepare(const skresources::ResourceProvider* resourceProvider) override { + fImage.reset(); + if (auto asset = resourceProvider->loadImageAsset(fPath.c_str(), fName.c_str(), nullptr)) { + fImage = asset->getFrame(0); + } + if (!fImage) { + SkDebugf("Could not load image \"%s:%s\"\n", fPath.c_str(), fName.c_str()); + fImage = make_circle_image(1); + } + } + void visitFields(SkFieldVisitor* v) override { v->visit("Path", fPath); + v->visit("Name", fName); v->visit("Columns", fCols); v->visit("Rows", fRows); - - fCols = SkTMax(fCols, 1); - fRows = SkTMax(fRows, 1); - if (oldPath != fPath) { - this->rebuild(); - } } private: SkString fPath; + SkString fName; int fCols; int fRows; - SkRect getBaseRect() const { - return SkRect::MakeWH(static_cast(fImage->width()) / fCols, - static_cast(fImage->height() / fRows)); - } - - void rebuild() { - fImage = SkImage::MakeFromEncoded(SkData::MakeFromFileName(fPath.c_str())); - if (!fImage) { - if (!fPath.isEmpty()) { - SkDebugf("Could not load image \"%s\"\n", fPath.c_str()); - } - fImage = make_circle_image(1); - } - } - // Cached sk_sp fImage; }; @@ -186,6 +177,8 @@ sk_sp SkParticleDrawable::MakeCircle(int radius) { return sk_sp(new SkCircleDrawable(radius)); } -sk_sp SkParticleDrawable::MakeImage(const SkString& path, int cols, int rows) { - return sk_sp(new SkImageDrawable(path, cols, rows)); +sk_sp SkParticleDrawable::MakeImage(const char* imagePath, + const char* imageName, + int cols, int rows) { + return sk_sp(new SkImageDrawable(imagePath, imageName, cols, rows)); } diff --git a/third_party/skia/modules/particles/src/SkParticleEffect.cpp b/third_party/skia/modules/particles/src/SkParticleEffect.cpp index ff3b5d7d81f0..fe00f5ce1787 100644 --- a/third_party/skia/modules/particles/src/SkParticleEffect.cpp +++ b/third_party/skia/modules/particles/src/SkParticleEffect.cpp @@ -11,6 +11,7 @@ #include "modules/particles/include/SkParticleBinding.h" #include "modules/particles/include/SkParticleDrawable.h" #include "modules/particles/include/SkReflected.h" +#include "modules/skresources/include/SkResources.h" #include "src/core/SkMakeUnique.h" #include "src/sksl/SkSLByteCode.h" #include "src/sksl/SkSLCompiler.h" @@ -99,30 +100,26 @@ SkParticleEffectParams::SkParticleEffectParams() : fMaxCount(128) , fDrawable(nullptr) , fEffectCode(kDefaultEffectCode) - , fParticleCode(kDefaultParticleCode) { - this->rebuild(); -} + , fParticleCode(kDefaultParticleCode) {} void SkParticleEffectParams::visitFields(SkFieldVisitor* v) { - SkString oldEffectCode = fEffectCode; - SkString oldParticleCode = fParticleCode; - v->visit("MaxCount", fMaxCount); - v->visit("Drawable", fDrawable); - v->visit("EffectCode", fEffectCode); v->visit("Code", fParticleCode); - v->visit("Bindings", fBindings); +} - // TODO: Or, if any change to binding metadata? - if (fParticleCode != oldParticleCode || fEffectCode != oldEffectCode) { - this->rebuild(); +void SkParticleEffectParams::prepare(const skresources::ResourceProvider* resourceProvider) { + for (auto& binding : fBindings) { + if (binding) { + binding->prepare(resourceProvider); + } + } + if (fDrawable) { + fDrawable->prepare(resourceProvider); } -} -void SkParticleEffectParams::rebuild() { auto buildProgram = [this](const SkSL::String& code, Program* p) { SkSL::Compiler compiler; SkSL::Program::Settings settings; @@ -278,6 +275,7 @@ void SkParticleEffect::runParticleScript(double now, const char* entry, int star value->setRandom(randomBase); value->setEffect(this); } + memcpy(&fParticleUniforms[1], &fState.fAge, sizeof(EffectState)); SkAssertResult(byteCode->runStriped(fun, count, args, SkParticles::kNumChannels, nullptr, 0, fParticleUniforms.data(), @@ -321,7 +319,6 @@ void SkParticleEffect::advanceTime(double now) { SkASSERT(!this->particleCode() || this->particleCode()->getUniformLocation("effect.age") == 1); fEffectUniforms[0] = deltaTime; fParticleUniforms[0] = deltaTime; - memcpy(&fParticleUniforms[1], &fState.fAge, sizeof(EffectState)); // Is this the first update after calling start()? // Run 'effectSpawn' to set initial emitter properties. diff --git a/third_party/skia/modules/pathkit/karma.bench.conf.js b/third_party/skia/modules/pathkit/karma.bench.conf.js index 315903b4b9d5..73650d30d1b8 100644 --- a/third_party/skia/modules/pathkit/karma.bench.conf.js +++ b/third_party/skia/modules/pathkit/karma.bench.conf.js @@ -59,12 +59,18 @@ module.exports = function(config) { cfg.browsers = ['ChromeHeadlessNoSandbox'], cfg.customLaunchers = { ChromeHeadlessNoSandbox: { - base: 'ChromeHeadless', - flags: [ + base: 'ChromeHeadless', + flags: [ // Without this flag, we see an error: // Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted - '--no-sandbox' - ], + '--no-sandbox', + // may help tests be less flaky + // https://peter.sh/experiments/chromium-command-line-switches/#browser-test + '--browser-test', + // This can also help avoid crashes/timeouts: + // https://github.com/GoogleChrome/puppeteer/issues/1834 + '--disable-dev-shm-usage', + ], }, }; } diff --git a/third_party/skia/modules/pathkit/karma.conf.js b/third_party/skia/modules/pathkit/karma.conf.js index 47ff2d25ee4c..04ef0231b77c 100644 --- a/third_party/skia/modules/pathkit/karma.conf.js +++ b/third_party/skia/modules/pathkit/karma.conf.js @@ -60,12 +60,18 @@ module.exports = function(config) { cfg.browsers = ['ChromeHeadlessNoSandbox'], cfg.customLaunchers = { ChromeHeadlessNoSandbox: { - base: 'ChromeHeadless', - flags: [ + base: 'ChromeHeadless', + flags: [ // Without this flag, we see an error: // Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted - '--no-sandbox' - ], + '--no-sandbox', + // may help tests be less flaky + // https://peter.sh/experiments/chromium-command-line-switches/#browser-test + '--browser-test', + // This can also help avoid crashes/timeouts: + // https://github.com/GoogleChrome/puppeteer/issues/1834 + '--disable-dev-shm-usage', + ], }, }; } diff --git a/third_party/skia/modules/pathkit/pathkit_wasm_bindings.cpp b/third_party/skia/modules/pathkit/pathkit_wasm_bindings.cpp index c47af69d9db1..34358d5bfdd8 100644 --- a/third_party/skia/modules/pathkit/pathkit_wasm_bindings.cpp +++ b/third_party/skia/modules/pathkit/pathkit_wasm_bindings.cpp @@ -275,7 +275,7 @@ void EMSCRIPTEN_KEEPALIVE ToCanvas(const SkPath& path, emscripten::val /* Path2D SkPath::Iter iter(path, false); SkPoint pts[4]; SkPath::Verb verb; - while ((verb = iter.next(pts, false)) != SkPath::kDone_Verb) { + while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { switch (verb) { case SkPath::kMove_Verb: ctx.call("moveTo", pts[0].x(), pts[0].y()); @@ -356,9 +356,9 @@ void ApplyAddPath(SkPath& orig, const SkPath& newPath, } JSString GetFillTypeString(const SkPath& path) { - if (path.getFillType() == SkPath::FillType::kWinding_FillType) { + if (path.getNewFillType() == SkPathFillType::kWinding) { return emscripten::val("nonzero"); - } else if (path.getFillType() == SkPath::FillType::kEvenOdd_FillType) { + } else if (path.getNewFillType() == SkPathFillType::kEvenOdd) { return emscripten::val("evenodd"); } else { SkDebugf("warning: can't translate inverted filltype to HTML Canvas\n"); @@ -503,7 +503,7 @@ EMSCRIPTEN_BINDINGS(skia) { .function("_rect", &ApplyAddRect) // Extra features - .function("setFillType", &SkPath::setFillType) + .function("setFillType", select_overload(&SkPath::setFillType)) .function("getFillType", &SkPath::getFillType) .function("getFillTypeString", &GetFillTypeString) .function("getBounds", &SkPath::getBounds) @@ -564,11 +564,11 @@ EMSCRIPTEN_BINDINGS(skia) { .value("XOR", SkPathOp::kXOR_SkPathOp) .value("REVERSE_DIFFERENCE", SkPathOp::kReverseDifference_SkPathOp); - enum_("FillType") - .value("WINDING", SkPath::FillType::kWinding_FillType) - .value("EVENODD", SkPath::FillType::kEvenOdd_FillType) - .value("INVERSE_WINDING", SkPath::FillType::kInverseWinding_FillType) - .value("INVERSE_EVENODD", SkPath::FillType::kInverseEvenOdd_FillType); + enum_("FillType") + .value("WINDING", SkPathFillType::kWinding) + .value("EVENODD", SkPathFillType::kEvenOdd) + .value("INVERSE_WINDING", SkPathFillType::kInverseWinding) + .value("INVERSE_EVENODD", SkPathFillType::kInverseEvenOdd); constant("MOVE_VERB", MOVE); constant("LINE_VERB", LINE); diff --git a/third_party/skia/modules/pathkit/perf/perfReporter.js b/third_party/skia/modules/pathkit/perf/perfReporter.js index c60cfbc7f9d8..35fd3590bc59 100644 --- a/third_party/skia/modules/pathkit/perf/perfReporter.js +++ b/third_party/skia/modules/pathkit/perf/perfReporter.js @@ -74,4 +74,4 @@ function reportError(done) { } done(); }; -} \ No newline at end of file +} diff --git a/third_party/skia/modules/skottie/BUILD.gn b/third_party/skia/modules/skottie/BUILD.gn index 4b0bbc9439fe..e11e65c09b59 100644 --- a/third_party/skia/modules/skottie/BUILD.gn +++ b/third_party/skia/modules/skottie/BUILD.gn @@ -23,6 +23,7 @@ if (skia_enable_skottie) { configs += [ "../../:skia_private" ] deps = [ "../..:skia", + "../skresources", "../sksg", "../skshaper", ] diff --git a/third_party/skia/modules/skottie/gm/SkottieGM.cpp b/third_party/skia/modules/skottie/gm/SkottieGM.cpp index f95ee1ce0849..e81b406bf537 100644 --- a/third_party/skia/modules/skottie/gm/SkottieGM.cpp +++ b/third_party/skia/modules/skottie/gm/SkottieGM.cpp @@ -11,21 +11,20 @@ #include "modules/skottie/include/Skottie.h" #include "modules/skottie/include/SkottieProperty.h" #include "modules/skottie/utils/SkottieUtils.h" +#include "modules/skresources/include/SkResources.h" #include "src/core/SkMakeUnique.h" #include "tools/Resources.h" #include #include -using namespace skottie; - namespace { static constexpr char kWebFontResource[] = "fonts/Roboto-Regular.ttf"; 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 ResourceProvider { +class FakeWebFontProvider final : public skresources::ResourceProvider { public: FakeWebFontProvider() : fFontData(GetResourceAsData(kWebFontResource)) {} @@ -36,7 +35,7 @@ class FakeWebFontProvider final : public ResourceProvider { private: sk_sp fFontData; - using INHERITED = ResourceProvider; + using INHERITED = skresources::ResourceProvider; }; } // namespace @@ -54,7 +53,7 @@ class SkottieWebFontGM : public skiagm::GM { void onOnceBeforeDraw() override { if (auto stream = GetResourceAsStream(kSkottieResource)) { - fAnimation = Animation::Builder() + fAnimation = skottie::Animation::Builder() .setResourceProvider(sk_make_sp()) .make(stream.get()); } @@ -84,15 +83,13 @@ class SkottieWebFontGM : public skiagm::GM { private: static constexpr SkScalar kSize = 800; - sk_sp fAnimation; + sk_sp fAnimation; using INHERITED = skiagm::GM; }; DEF_GM(return new SkottieWebFontGM;) -using namespace skottie_utils; - class SkottieColorizeGM : public skiagm::GM { protected: SkString onShortName() override { @@ -105,8 +102,8 @@ class SkottieColorizeGM : public skiagm::GM { void onOnceBeforeDraw() override { if (auto stream = GetResourceAsStream("skottie/skottie_sample_search.json")) { - fPropManager = skstd::make_unique(); - fAnimation = Animation::Builder() + fPropManager = skstd::make_unique(); + fAnimation = skottie::Animation::Builder() .setPropertyObserver(fPropManager->getPropertyObserver()) .make(stream.get()); fColors = fPropManager->getColorProps(); @@ -157,10 +154,10 @@ class SkottieColorizeGM : public skiagm::GM { private: static constexpr SkScalar kSize = 800; - sk_sp fAnimation; - std::unique_ptr fPropManager; - std::vector fColors; - size_t fColorIndex = 0; + sk_sp fAnimation; + std::unique_ptr fPropManager; + std::vector fColors; + size_t fColorIndex = 0; using INHERITED = skiagm::GM; }; @@ -180,7 +177,7 @@ class SkottieMultiFrameGM : public skiagm::GM { void onOnceBeforeDraw() override { if (auto stream = GetResourceAsStream("skottie/skottie_sample_multiframe.json")) { - fAnimation = Animation::Builder() + fAnimation = skottie::Animation::Builder() .setResourceProvider(sk_make_sp()) .make(stream.get()); } @@ -208,17 +205,18 @@ class SkottieMultiFrameGM : public skiagm::GM { } private: - class MultiFrameResourceProvider final : public skottie::ResourceProvider { + class MultiFrameResourceProvider final : public skresources::ResourceProvider { public: - sk_sp loadImageAsset(const char[], const char[], const char[]) const override { - return skottie_utils::MultiFrameImageAsset::Make( + sk_sp loadImageAsset(const char[], const char[], + const char[]) const override { + return skresources::MultiFrameImageAsset::Make( GetResourceAsData("images/flightAnim.gif")); } }; static constexpr SkScalar kSize = 800; - sk_sp fAnimation; + sk_sp fAnimation; using INHERITED = skiagm::GM; }; diff --git a/third_party/skia/modules/skottie/include/Skottie.h b/third_party/skia/modules/skottie/include/Skottie.h index 812e7443ffc8..723f674765d6 100644 --- a/third_party/skia/modules/skottie/include/Skottie.h +++ b/third_party/skia/modules/skottie/include/Skottie.h @@ -13,12 +13,11 @@ #include "include/core/SkSize.h" #include "include/core/SkString.h" #include "include/core/SkTypes.h" +#include "modules/skresources/include/SkResources.h" #include class SkCanvas; -class SkData; -class SkImage; struct SkRect; class SkStream; @@ -33,68 +32,10 @@ class Scene; namespace skottie { -class PropertyObserver; - -/** - * Image asset proxy interface. - */ -class SK_API ImageAsset : public SkRefCnt { -public: - /** - * Returns true if the image asset is animated. - */ - virtual bool isMultiFrame() = 0; - - /** - * Returns the SkImage for a given frame. - * - * If the image asset is static, getImage() is only called once, at animation load time. - * Otherwise, this gets invoked every time the animation time is adjusted (on every seek). - * - * Embedders should cache and serve the same SkImage whenever possible, for efficiency. - * - * @param t Frame time code, in seconds, relative to the image layer timeline origin - * (in-point). - */ - virtual sk_sp getFrame(float t) = 0; -}; +using ImageAsset = skresources::ImageAsset; +using ResourceProvider = skresources::ResourceProvider; -/** - * ResourceProvider allows Skottie embedders to control loading of external - * Skottie resources -- e.g. images, fonts, nested animations. - */ -class SK_API ResourceProvider : public SkRefCnt { -public: - /** - * Load a generic resource (currently only nested animations) specified by |path| + |name|, - * and return as an SkData. - */ - virtual sk_sp load(const char resource_path[], - const char resource_name[]) const; - - /** - * Load an image asset specified by |path| + |name|, and returns the corresponding - * ImageAsset proxy. - */ - virtual sk_sp loadImageAsset(const char resource_path[], - const char resource_name[], - const char resource_id[]) const; - - /** - * Load an external font and return as SkData. - * - * @param name font name ("fName" Lottie property) - * @param url web font URL ("fPath" Lottie property) - * - * -- Note -- - * - * This mechanism assumes monolithic fonts (single data blob). Some web font providers may - * serve multiple font blobs, segmented for various unicode ranges, depending on user agent - * capabilities (woff, woff2). In that case, the embedder would need to advertise no user - * agent capabilities when fetching the URL, in order to receive full font data. - */ - virtual sk_sp loadFont(const char name[], const char url[]) const; -}; +class PropertyObserver; /** * A Logger subclass can be used to receive Animation::Builder parsing errors and warnings. @@ -207,6 +148,9 @@ class SK_API Animation : public SkNVRefCnt { /** * Draws the current animation frame. * + * It is undefined behavior to call render() on a newly created Animation + * before specifying an initial frame via one of the seek() variants. + * * @param canvas destination canvas * @param dst optional destination rect * @param flags optional RenderFlags diff --git a/third_party/skia/modules/skottie/skottie.gni b/third_party/skia/modules/skottie/skottie.gni index ee659a4314ab..2710e62f2126 100644 --- a/third_party/skia/modules/skottie/skottie.gni +++ b/third_party/skia/modules/skottie/skottie.gni @@ -14,7 +14,9 @@ skia_skottie_public = [ skia_skottie_sources = [ "$_src/Composition.cpp", + "$_src/Composition.h", "$_src/Layer.cpp", + "$_src/Layer.h", "$_src/Skottie.cpp", "$_src/SkottieAdapter.cpp", "$_src/SkottieAdapter.h", @@ -39,6 +41,7 @@ skia_skottie_sources = [ "$_src/effects/MotionBlurEffect.h", "$_src/effects/MotionTileEffect.cpp", "$_src/effects/RadialWipeEffect.cpp", + "$_src/effects/ShiftChannelsEffect.cpp", "$_src/effects/TintEffect.cpp", "$_src/effects/TransformEffect.cpp", "$_src/effects/TritoneEffect.cpp", diff --git a/third_party/skia/modules/skottie/src/Composition.cpp b/third_party/skia/modules/skottie/src/Composition.cpp index 3efad4276b16..88976b2ccbe9 100644 --- a/third_party/skia/modules/skottie/src/Composition.cpp +++ b/third_party/skia/modules/skottie/src/Composition.cpp @@ -5,10 +5,12 @@ * found in the LICENSE file. */ -#include "modules/skottie/src/SkottiePriv.h" +#include "modules/skottie/src/Composition.h" #include "include/core/SkCanvas.h" +#include "modules/skottie/src/SkottieAdapter.h" #include "modules/skottie/src/SkottieJson.h" +#include "modules/skottie/src/SkottiePriv.h" #include "modules/sksg/include/SkSGGroup.h" #include "modules/sksg/include/SkSGTransform.h" @@ -117,26 +119,88 @@ sk_sp AnimationBuilder::attachAssetRef( return asset; } -sk_sp AnimationBuilder::attachComposition( - const skjson::ObjectValue& jcomp) const { - const skjson::ArrayValue* jlayers = jcomp["layers"]; - if (!jlayers) return nullptr; - - std::vector> layers; - AttachLayerContext layerCtx(*jlayers); - +CompositionBuilder::CompositionBuilder(const AnimationBuilder& abuilder, + const skjson::ObjectValue& jcomp) { // Optional motion blur params. if (const skjson::ObjectValue* jmb = jcomp["mb"]) { static constexpr size_t kMaxSamplesPerFrame = 64; - layerCtx.fMotionBlurSamples = std::min(ParseDefault((*jmb)["spf"], 1ul), - kMaxSamplesPerFrame); - layerCtx.fMotionBlurAngle = SkTPin(ParseDefault((*jmb)["sa"], 0.0f), 0.0f, 720.0f); - layerCtx.fMotionBlurPhase = SkTPin(ParseDefault((*jmb)["sp"], 0.0f), -360.0f, 360.0f); + fMotionBlurSamples = std::min(ParseDefault((*jmb)["spf"], 1ul), + kMaxSamplesPerFrame); + fMotionBlurAngle = SkTPin(ParseDefault((*jmb)["sa"], 0.0f), 0.0f, 720.0f); + fMotionBlurPhase = SkTPin(ParseDefault((*jmb)["sp"], 0.0f), -360.0f, 360.0f); + } + + int camera_builder_index = -1; + + // Prepare layer builders. + if (const skjson::ArrayValue* jlayers = jcomp["layers"]) { + fLayerBuilders.reserve(SkToInt(jlayers->size())); + for (const skjson::ObjectValue* jlayer : *jlayers) { + if (!jlayer) continue; + + const auto lbuilder_index = fLayerBuilders.size(); + const auto& lbuilder = fLayerBuilders.emplace_back(*jlayer); + + fLayerIndexMap.set(lbuilder.index(), lbuilder_index); + + // Keep track of the camera builder. + if (lbuilder.isCamera()) { + // We only support one (first) camera for now. + if (camera_builder_index < 0) { + camera_builder_index = SkToInt(lbuilder_index); + } else { + abuilder.log(Logger::Level::kWarning, jlayer, + "Ignoring duplicate camera layer."); + } + } + } + } + + // Attach a camera transform upfront, if needed (required to build + // all other 3D transform chains). + if (camera_builder_index >= 0) { + // Explicit camera. + fCameraTransform = fLayerBuilders[camera_builder_index].buildTransform(abuilder, this); + } else if (ParseDefault(jcomp["ddd"], 0)) { + // Default/implicit camera when 3D layers are present. + fCameraTransform = CameraAdapter::MakeDefault(abuilder.fSize)->refTransform(); + } +} + +CompositionBuilder::~CompositionBuilder() = default; + +void CompositionBuilder::pushMatte(sk_sp matte) { + fCurrentMatte = std::move(matte); +} + +sk_sp CompositionBuilder::popMatte() { + return std::move(fCurrentMatte); +} + +LayerBuilder* CompositionBuilder::layerBuilder(int layer_index) { + if (layer_index < 0) { + return nullptr; + } + + if (const auto* idx = fLayerIndexMap.find(layer_index)) { + return &fLayerBuilders[SkToInt(*idx)]; } - layers.reserve(jlayers->size()); - for (const auto& l : *jlayers) { - if (auto layer = this->attachLayer(l, &layerCtx)) { + return nullptr; +} + +sk_sp CompositionBuilder::build(const AnimationBuilder& abuilder) { + // First pass - transitively attach layer transform chains. + for (auto& lbuilder : fLayerBuilders) { + lbuilder.buildTransform(abuilder, this); + } + + // Second pass - attach actual layer contents and finalize the layer render tree. + std::vector> layers; + layers.reserve(fLayerBuilders.size()); + + for (auto& lbuilder : fLayerBuilders) { + if (auto layer = lbuilder.buildRenderTree(abuilder, this)) { layers.push_back(std::move(layer)); } } @@ -145,22 +209,15 @@ sk_sp AnimationBuilder::attachComposition( return nullptr; } - sk_sp comp; if (layers.size() == 1) { - comp = std::move(layers[0]); - } else { - // Layers are painted in bottom->top order. - std::reverse(layers.begin(), layers.end()); - layers.shrink_to_fit(); - comp = sksg::Group::Make(std::move(layers)); + return std::move(layers[0]); } - // Optional camera. - if (layerCtx.fCameraTransform) { - comp = sksg::TransformEffect::Make(std::move(comp), std::move(layerCtx.fCameraTransform)); - } + // Layers are painted in bottom->top order. + std::reverse(layers.begin(), layers.end()); + layers.shrink_to_fit(); - return comp; + return sksg::Group::Make(std::move(layers)); } } // namespace internal diff --git a/third_party/skia/modules/skottie/src/Composition.h b/third_party/skia/modules/skottie/src/Composition.h new file mode 100644 index 000000000000..0420dd622eb1 --- /dev/null +++ b/third_party/skia/modules/skottie/src/Composition.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkottieComposition_DEFINED +#define SkottieComposition_DEFINED + +#include "modules/skottie/src/SkottiePriv.h" + +#include "include/private/SkTArray.h" +#include "include/private/SkTHash.h" +#include "modules/skottie/src/Layer.h" + +namespace skottie { +namespace internal { + +class CompositionBuilder final : SkNoncopyable { +public: + CompositionBuilder(const AnimationBuilder&, const skjson::ObjectValue&); + ~CompositionBuilder(); + + sk_sp build(const AnimationBuilder&); + +private: + LayerBuilder* layerBuilder(int layer_index); + + const sk_sp& getCameraTransform() const { return fCameraTransform; } + + void pushMatte(sk_sp); + sk_sp popMatte(); + + friend class LayerBuilder; + + SkSTArray<64, LayerBuilder> fLayerBuilders; + SkTHashMap fLayerIndexMap; // Maps layer "ind" to layer builder index. + + sk_sp fCameraTransform; + sk_sp fCurrentMatte; // Tracks the current/active matte. + + size_t fMotionBlurSamples = 1; + float fMotionBlurAngle = 0, + fMotionBlurPhase = 0; +}; + +} // namespace internal +} // namespace skottie + +#endif // SkottieComposition_DEFINED diff --git a/third_party/skia/modules/skottie/src/Layer.cpp b/third_party/skia/modules/skottie/src/Layer.cpp index 4fdcf6836889..e7423cc96ea5 100644 --- a/third_party/skia/modules/skottie/src/Layer.cpp +++ b/third_party/skia/modules/skottie/src/Layer.cpp @@ -5,8 +5,9 @@ * found in the LICENSE file. */ -#include "modules/skottie/src/SkottiePriv.h" +#include "modules/skottie/src/Layer.h" +#include "modules/skottie/src/Composition.h" #include "modules/skottie/src/SkottieAdapter.h" #include "modules/skottie/src/SkottieJson.h" #include "modules/skottie/src/effects/Effects.h" @@ -29,7 +30,6 @@ namespace internal { namespace { static constexpr int kNullLayerType = 3; -static constexpr int kCameraLayerType = 13; struct MaskInfo { SkBlendMode fBlendMode; // used when masking with layers/blending @@ -107,8 +107,8 @@ sk_sp AttachMask(const skjson::ArrayValue* jmask, // "inv" is cumulative with mask info fInvertGeometry const auto inverted = (mask_info->fInvertGeometry != ParseDefault((*m)["inv"], false)); - mask_path->setFillType(inverted ? SkPath::kInverseWinding_FillType - : SkPath::kWinding_FillType); + mask_path->setFillType(inverted ? SkPathFillType::kInverseWinding + : SkPathFillType::kWinding); auto mask_paint = sksg::Color::Make(SK_ColorBLACK); mask_paint->setAntiAlias(true); @@ -247,80 +247,92 @@ class MotionBlurController final : public sksg::Animator { } // namespace -AnimationBuilder::AttachLayerContext::AttachLayerContext(const skjson::ArrayValue& jlayers) - : fLayerList(jlayers) {} +LayerBuilder::LayerBuilder(const skjson::ObjectValue& jlayer) + : fJlayer(jlayer) + , fIndex(ParseDefault(jlayer["ind"], -1)) + , fParentIndex(ParseDefault(jlayer["parent"], -1)) + , fType(ParseDefault(jlayer["ty"], -1)) { -AnimationBuilder::AttachLayerContext::~AttachLayerContext() = default; + if (this->isCamera() || ParseDefault(jlayer["ddd"], 0)) { + fFlags |= Flags::kIs3D; + } +} -AnimationBuilder::AttachLayerContext::TransformRec -AnimationBuilder::AttachLayerContext::attachLayerTransform(const skjson::ObjectValue& jlayer, - const AnimationBuilder* abuilder, - TransformType type) { - TransformRec result; +LayerBuilder::~LayerBuilder() = default; - const auto layer_index = ParseDefault(jlayer["ind"], -1); - if (layer_index >= 0) { - auto* rec = fLayerTransformMap.find(layer_index); - if (!rec) { - rec = this->attachLayerTransformImpl(jlayer, abuilder, type, layer_index); - } - SkASSERT(rec); +bool LayerBuilder::isCamera() const { + static constexpr int kCameraLayerType = 13; - // Note: the transform animator scope is *moved* to the result, because - // we want the animators transferred to the LayerController. - // - // This is safe because a) the scope is not used internally, and - // b) there is exactly one attachLayerTransform call per layer. - // The transform node OTOH may be used at a later time for parenting. - result.fTransformNode = rec->fTransformNode; - result.fTransformScope = std::move(rec->fTransformScope); - } + return fType == kCameraLayerType; +} + +sk_sp LayerBuilder::buildTransform(const AnimationBuilder& abuilder, + CompositionBuilder* cbuilder) { + // Depending on the leaf node type, we treat the whole transform chain as either 2D or 3D. + const auto transform_chain_type = this->is3D() ? TransformType::k3D + : TransformType::k2D; + fLayerTransform = this->getTransform(abuilder, cbuilder, transform_chain_type); - return result; + return fLayerTransform; } -sk_sp -AnimationBuilder::AttachLayerContext::attachParentLayerTransform(const skjson::ObjectValue& jlayer, - const AnimationBuilder* abuilder, - int layer_index) { - const auto parent_index = ParseDefault(jlayer["parent"], -1); - if (parent_index < 0 || parent_index == layer_index) - return nullptr; +sk_sp LayerBuilder::getTransform(const AnimationBuilder& abuilder, + CompositionBuilder* cbuilder, + TransformType ttype) { + const auto cache_valid_mask = (1ul << ttype); + if (!(fFlags & cache_valid_mask)) { + // Set valid flag upfront to break cycles. + fFlags |= cache_valid_mask; + + const AnimationBuilder::AutoPropertyTracker apt(&abuilder, fJlayer); + AnimationBuilder::AutoScope ascope(&abuilder, std::move(fLayerScope)); + fTransformCache[ttype] = this->doAttachTransform(abuilder, cbuilder, ttype); + fLayerScope = ascope.release(); + fTransformAnimatorCount = fLayerScope.size(); + } - if (const auto* rec = fLayerTransformMap.find(parent_index)) - return rec->fTransformNode; + return fTransformCache[ttype]; +} - for (const skjson::ObjectValue* l : fLayerList) { - if (!l) continue; +sk_sp LayerBuilder::getParentTransform(const AnimationBuilder& abuilder, + CompositionBuilder* cbuilder, + TransformType ttype) { + if (auto* parent_builder = cbuilder->layerBuilder(fParentIndex)) { + // Explicit parent layer. + return parent_builder->getTransform(abuilder, cbuilder, ttype); + } - if (ParseDefault((*l)["ind"], -1) == parent_index) { - const auto parent_type = ParseDefault((*l)["ty"], -1) == kCameraLayerType - ? TransformType::kCamera - : TransformType::kLayer; - return this->attachLayerTransformImpl(*l, - abuilder, - parent_type, - parent_index)->fTransformNode; - } + if (ttype == TransformType::k3D) { + // During camera transform attachment, cbuilder->getCameraTransform() is null. + // This prevents camera->camera transform chain cycles. + SkASSERT(!this->isCamera() || !cbuilder->getCameraTransform()); + + // 3D transform chains are implicitly rooted onto the camera. + return cbuilder->getCameraTransform(); } return nullptr; } -sk_sp -AnimationBuilder::AttachLayerContext::attachTransformNode(const skjson::ObjectValue& jlayer, - const AnimationBuilder* abuilder, - sk_sp parent_transform, - TransformType type) const { - const skjson::ObjectValue* jtransform = jlayer["ks"]; +sk_sp LayerBuilder::doAttachTransform(const AnimationBuilder& abuilder, + CompositionBuilder* cbuilder, + TransformType ttype) { + const skjson::ObjectValue* jtransform = fJlayer["ks"]; if (!jtransform) { return nullptr; } - if (type == TransformType::kCamera) { - auto camera_adapter = sk_make_sp(abuilder->fSize); + auto parent_transform = this->getParentTransform(abuilder, cbuilder, ttype); + + if (this->isCamera()) { + // The presence of an anchor point property ('a') differentiates + // one-node vs. two-node cameras. + const auto camera_type = (*jtransform)["a"].is() + ? CameraAdapter::Type::kOneNode + : CameraAdapter::Type::kTwoNode; + auto camera_adapter = sk_make_sp(abuilder.fSize, camera_type); - abuilder->bindProperty(jlayer["pe"], + abuilder.bindProperty(fJlayer["pe"], [camera_adapter] (const ScalarValue& pe) { // 'pe' (perspective?) corresponds to AE's "zoom" camera property. camera_adapter->setZoom(pe); @@ -333,65 +345,42 @@ AnimationBuilder::AttachLayerContext::attachTransformNode(const skjson::ObjectVa // parent_transform = sksg::Transform::MakeInverse(std::move(parent_transform)); - return abuilder->attachMatrix3D(*jtransform, - std::move(parent_transform), - std::move(camera_adapter), - true); // pre-compose parent + return abuilder.attachMatrix3D(*jtransform, + std::move(parent_transform), + std::move(camera_adapter), + true); // pre-compose parent } - return (ParseDefault(jlayer["ddd"], 0) == 0) - ? abuilder->attachMatrix2D(*jtransform, std::move(parent_transform)) - : abuilder->attachMatrix3D(*jtransform, std::move(parent_transform)); -} - -AnimationBuilder::AttachLayerContext::TransformRec* -AnimationBuilder::AttachLayerContext::attachLayerTransformImpl(const skjson::ObjectValue& jlayer, - const AnimationBuilder* abuilder, - TransformType type, - int layer_index) { - SkASSERT(!fLayerTransformMap.find(layer_index)); - - // Add a stub entry to break recursion cycles. - fLayerTransformMap.set(layer_index, { nullptr, {} }); - - auto parent_matrix = this->attachParentLayerTransform(jlayer, abuilder, layer_index); - - AutoScope ascope(abuilder); - auto transform = this->attachTransformNode(jlayer, - abuilder, - std::move(parent_matrix), - type); - - return fLayerTransformMap.set(layer_index, { std::move(transform), ascope.release() }); + return this->is3D() + ? abuilder.attachMatrix3D(*jtransform, std::move(parent_transform)) + : abuilder.attachMatrix2D(*jtransform, std::move(parent_transform)); } -bool AnimationBuilder::AttachLayerContext::hasMotionBlur(const skjson::ObjectValue& jlayer) const { - return fMotionBlurSamples > 1 - && fMotionBlurAngle > 0 - && ParseDefault(jlayer["mb"], false); +bool LayerBuilder::hasMotionBlur(const CompositionBuilder* cbuilder) const { + return cbuilder->fMotionBlurSamples > 1 + && cbuilder->fMotionBlurAngle > 0 + && ParseDefault(fJlayer["mb"], false); } -sk_sp AnimationBuilder::attachLayer(const skjson::ObjectValue* jlayer, - AttachLayerContext* layerCtx) const { - if (!jlayer) { - return nullptr; - } - - LayerInfo layer_info = { - fSize, - ParseDefault((*jlayer)["ip"], 0.0f), - ParseDefault((*jlayer)["op"], 0.0f), +sk_sp LayerBuilder::buildRenderTree(const AnimationBuilder& abuilder, + CompositionBuilder* cbuilder) { + AnimationBuilder::LayerInfo layer_info = { + abuilder.fSize, + ParseDefault(fJlayer["ip"], 0.0f), + ParseDefault(fJlayer["op"], 0.0f), }; if (layer_info.fInPoint >= layer_info.fOutPoint) { - this->log(Logger::Level::kError, nullptr, - "Invalid layer in/out points: %f/%f.", layer_info.fInPoint, layer_info.fOutPoint); + abuilder.log(Logger::Level::kError, nullptr, + "Invalid layer in/out points: %f/%f.", + layer_info.fInPoint, layer_info.fOutPoint); return nullptr; } - const AutoPropertyTracker apt(this, *jlayer); + const AnimationBuilder::AutoPropertyTracker apt(&abuilder, fJlayer); - using LayerBuilder = sk_sp (AnimationBuilder::*)(const skjson::ObjectValue&, - LayerInfo*) const; + using LayerBuilder = + sk_sp (AnimationBuilder::*)(const skjson::ObjectValue&, + AnimationBuilder::LayerInfo*) const; // AE is annoyingly inconsistent in how effects interact with layer transforms: depending on // the layer type, effects are applied before or after the content is transformed. @@ -415,127 +404,108 @@ sk_sp AnimationBuilder::attachLayer(const skjson::ObjectValue* { &AnimationBuilder::attachTextLayer , 0 }, // 'ty': 5 -> text }; - const auto type = ParseDefault((*jlayer)["ty"], -1); - if ((type < 0) || - (type >= SkTo(SK_ARRAY_COUNT(gLayerBuildInfo)) && type != kCameraLayerType)) { + if (SkToSizeT(fType) >= SK_ARRAY_COUNT(gLayerBuildInfo) && !this->isCamera()) { return nullptr; } - // Optional layer transform. - const auto transform_type = (type == kCameraLayerType) - ? AttachLayerContext::TransformType::kCamera - : AttachLayerContext::TransformType::kLayer; - auto layer_transform_rec = layerCtx->attachLayerTransform(*jlayer, this, transform_type); - - if (type == kCameraLayerType) { - // Camera layers are special: they don't build normal SG fragments, but drive a root-level - // transform. - if (layerCtx->fCameraTransform) { - this->log(Logger::Level::kWarning, jlayer, "Ignoring duplicate camera layer."); - return nullptr; - } - - layerCtx->fCameraTransform = layer_transform_rec.fTransformNode; - } - - AutoScope ascope(this, std::move(layer_transform_rec.fTransformScope)); - const auto transform_animator_count = fCurrentAnimatorScope->size(); + // Switch to the layer animator scope (which at this point holds transform-only animators). + AnimationBuilder::AutoScope ascope(&abuilder, std::move(fLayerScope)); - const auto is_hidden = ParseDefault((*jlayer)["hd"], false) || type == kCameraLayerType; - const auto& build_info = gLayerBuildInfo[is_hidden ? kNullLayerType : type]; + const auto is_hidden = ParseDefault(fJlayer["hd"], false) || this->isCamera(); + const auto& build_info = gLayerBuildInfo[is_hidden ? kNullLayerType : SkToSizeT(fType)]; // Build the layer content fragment. - auto layer = (this->*(build_info.fBuilder))(*jlayer, &layer_info); + auto layer = (abuilder.*(build_info.fBuilder))(fJlayer, &layer_info); // Clip layers with explicit dimensions. float w = 0, h = 0; - if (Parse((*jlayer)["w"], &w) && Parse((*jlayer)["h"], &h)) { + if (Parse(fJlayer["w"], &w) && Parse(fJlayer["h"], &h)) { layer = sksg::ClipEffect::Make(std::move(layer), sksg::Rect::Make(SkRect::MakeWH(w, h)), true); } // Optional layer mask. - layer = AttachMask((*jlayer)["masksProperties"], this, std::move(layer)); + layer = AttachMask(fJlayer["masksProperties"], &abuilder, std::move(layer)); // Does the transform apply to effects also? // (AE quirk: it doesn't - except for solid layers) const auto transform_effects = (build_info.fFlags & kTransformEffects); // Attach the transform before effects, when needed. - if (layer_transform_rec.fTransformNode && !transform_effects) { - layer = sksg::TransformEffect::Make(std::move(layer), layer_transform_rec.fTransformNode); + if (fLayerTransform && !transform_effects) { + layer = sksg::TransformEffect::Make(std::move(layer), fLayerTransform); } // Optional layer effects. - if (const skjson::ArrayValue* jeffects = (*jlayer)["ef"]) { - layer = EffectBuilder(this, layer_info.fSize).attachEffects(*jeffects, std::move(layer)); + if (const skjson::ArrayValue* jeffects = fJlayer["ef"]) { + layer = EffectBuilder(&abuilder, layer_info.fSize).attachEffects(*jeffects, + std::move(layer)); } // Attach the transform after effects, when needed. - if (layer_transform_rec.fTransformNode && transform_effects) { - layer = sksg::TransformEffect::Make(std::move(layer), - std::move(layer_transform_rec.fTransformNode)); + if (fLayerTransform && transform_effects) { + layer = sksg::TransformEffect::Make(std::move(layer), std::move(fLayerTransform)); } // Optional layer opacity. // TODO: de-dupe this "ks" lookup with matrix above. - if (const skjson::ObjectValue* jtransform = (*jlayer)["ks"]) { - layer = this->attachOpacity(*jtransform, std::move(layer)); + if (const skjson::ObjectValue* jtransform = fJlayer["ks"]) { + layer = abuilder.attachOpacity(*jtransform, std::move(layer)); } - // Optional blend mode. - layer = this->attachBlendMode(*jlayer, std::move(layer)); - - const auto has_animators = !fCurrentAnimatorScope->empty(); + const auto has_animators = !abuilder.fCurrentAnimatorScope->empty(); sk_sp controller = sk_make_sp(ascope.release(), layer, - transform_animator_count, + fTransformAnimatorCount, layer_info.fInPoint, layer_info.fOutPoint); // Optional motion blur. - if (layer && has_animators && layerCtx->hasMotionBlur(*jlayer)) { - SkASSERT(layerCtx->fMotionBlurAngle >= 0); - + if (layer && has_animators && this->hasMotionBlur(cbuilder)) { // Wrap both the layer node and the controller. auto motion_blur = MotionBlurEffect::Make(std::move(controller), std::move(layer), - layerCtx->fMotionBlurSamples, - layerCtx->fMotionBlurAngle, - layerCtx->fMotionBlurPhase); + cbuilder->fMotionBlurSamples, + cbuilder->fMotionBlurAngle, + cbuilder->fMotionBlurPhase); controller = sk_make_sp(motion_blur); layer = std::move(motion_blur); } - fCurrentAnimatorScope->push_back(std::move(controller)); + abuilder.fCurrentAnimatorScope->push_back(std::move(controller)); if (!layer) { return nullptr; } - if (ParseDefault((*jlayer)["td"], false)) { - // This layer is a matte. We apply it as a mask to the next layer. - layerCtx->fCurrentMatte = std::move(layer); - return nullptr; - } - - if (layerCtx->fCurrentMatte) { - // There is a pending matte. Apply and reset. + if (auto matte = cbuilder->popMatte()) { + // There is a pending matte (|layer| is a matte target). static constexpr sksg::MaskEffect::Mode gMaskModes[] = { sksg::MaskEffect::Mode::kAlphaNormal, // tt: 1 sksg::MaskEffect::Mode::kAlphaInvert, // tt: 2 sksg::MaskEffect::Mode::kLumaNormal, // tt: 3 sksg::MaskEffect::Mode::kLumaInvert, // tt: 4 }; - const auto matteType = ParseDefault((*jlayer)["tt"], 1) - 1; + const auto matteType = ParseDefault(fJlayer["tt"], 1) - 1; if (matteType < SK_ARRAY_COUNT(gMaskModes)) { - return sksg::MaskEffect::Make(std::move(layer), - std::move(layerCtx->fCurrentMatte), - gMaskModes[matteType]); + layer = sksg::MaskEffect::Make(std::move(layer), + std::move(matte), + gMaskModes[matteType]); } - layerCtx->fCurrentMatte.reset(); + } + + // Optional blend mode. The attachment point is important for matte interactions: + // - for mattes (mask layers), the blend mode is applied to the layer content + // - for matte targets (masked layers), the blend mode is applied post-masking + // (wrapping the MaskEffect above) + layer = abuilder.attachBlendMode(fJlayer, std::move(layer)); + + if (ParseDefault(fJlayer["td"], false)) { + // |layer| is a matte. We apply it as a mask to the next layer. + cbuilder->pushMatte(std::move(layer)); + return nullptr; } return layer; diff --git a/third_party/skia/modules/skottie/src/Layer.h b/third_party/skia/modules/skottie/src/Layer.h new file mode 100644 index 000000000000..d85a52b9e828 --- /dev/null +++ b/third_party/skia/modules/skottie/src/Layer.h @@ -0,0 +1,77 @@ +/* + * Copyright 2019 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkottieLayer_DEFINED +#define SkottieLayer_DEFINED + +#include "modules/skottie/src/SkottiePriv.h" + +namespace skottie { +namespace internal { + +class CompositionBuilder; + +class LayerBuilder final { +public: + explicit LayerBuilder(const skjson::ObjectValue& jlayer); + ~LayerBuilder(); + + int index() const { return fIndex; } + + bool isCamera() const; + + // Attaches the local and ancestor transform chain for the layer "native" type. + sk_sp buildTransform(const AnimationBuilder&, CompositionBuilder*); + + // Attaches the actual layer content and finalizes its render tree. Called once per layer. + sk_sp buildRenderTree(const AnimationBuilder&, CompositionBuilder*); + +private: + enum TransformType : uint8_t { + k2D = 0, + k3D = 1, + }; + + enum Flags { + // k2DTransformValid = 0x01, // reserved for cache tracking + // k3DTransformValie = 0x02, // reserved for cache tracking + kIs3D = 0x04, // 3D layer ("ddd": 1) or camera layer + }; + + bool is3D() const { return fFlags & Flags::kIs3D; } + + bool hasMotionBlur(const CompositionBuilder*) const; + + // Attaches (if needed) and caches the transform chain for a given layer, + // as either a 2D or 3D chain type. + // Called transitively (and possibly repeatedly) to resolve layer parenting. + sk_sp getTransform(const AnimationBuilder&, CompositionBuilder*, + TransformType); + + sk_sp getParentTransform(const AnimationBuilder&, CompositionBuilder*, + TransformType); + + sk_sp doAttachTransform(const AnimationBuilder&, CompositionBuilder*, + TransformType); + + const skjson::ObjectValue& fJlayer; + const int fIndex; + const int fParentIndex; + const int fType; + + sk_sp fLayerTransform; // this layer's transform node. + sk_sp fTransformCache[2]; // cached 2D/3D chain for the local node + + AnimatorScope fLayerScope; // layer-scoped animators + size_t fTransformAnimatorCount = 0; // transform-related animator count + uint32_t fFlags = 0; +}; + +} // namespace internal +} // namespace skottie + +#endif // SkottieLayer_DEFINED diff --git a/third_party/skia/modules/skottie/src/Skottie.cpp b/third_party/skia/modules/skottie/src/Skottie.cpp index b8ea15fed1dc..e28a54525002 100644 --- a/third_party/skia/modules/skottie/src/Skottie.cpp +++ b/third_party/skia/modules/skottie/src/Skottie.cpp @@ -17,6 +17,7 @@ #include "include/private/SkTArray.h" #include "include/private/SkTo.h" #include "modules/skottie/include/SkottieProperty.h" +#include "modules/skottie/src/Composition.h" #include "modules/skottie/src/SkottieAdapter.h" #include "modules/skottie/src/SkottieJson.h" #include "modules/skottie/src/SkottiePriv.h" @@ -293,7 +294,7 @@ std::unique_ptr AnimationBuilder::parse(const skjson::ObjectValue& this->parseFonts(jroot["fonts"], jroot["chars"]); AutoScope ascope(this); - auto root = this->attachComposition(jroot); + auto root = CompositionBuilder(*this, jroot).build(*this); auto animators = ascope.release(); fStats->fAnimatorCount = animators.size(); @@ -408,19 +409,6 @@ void AnimationBuilder::AutoPropertyTracker::updateContext(PropertyObserver* obse } // namespace internal -sk_sp ResourceProvider::load(const char[], const char[]) const { - return nullptr; -} - -sk_sp ResourceProvider::loadImageAsset(const char path[], const char name[], - const char id[]) const { - return nullptr; -} - -sk_sp ResourceProvider::loadFont(const char[], const char[]) const { - return nullptr; -} - void Logger::log(Level, const char[], const char*) {} Animation::Builder::Builder() = default; @@ -566,11 +554,7 @@ Animation::Animation(std::unique_ptr scene, SkString version, const , fOutPoint(outPoint) , fDuration(duration) , fFPS(fps) - , fFlags(flags) { - - // In case the client calls render before the first tick. - this->seek(0); -} + , fFlags(flags) {} Animation::~Animation() = default; diff --git a/third_party/skia/modules/skottie/src/SkottieAdapter.cpp b/third_party/skia/modules/skottie/src/SkottieAdapter.cpp index 23b1636a7a69..1cad3d9cdb89 100644 --- a/third_party/skia/modules/skottie/src/SkottieAdapter.cpp +++ b/third_party/skia/modules/skottie/src/SkottieAdapter.cpp @@ -120,29 +120,57 @@ void TransformAdapter3D::apply() { fMatrixNode->setMatrix(this->totalMatrix()); } -CameraAdapter:: CameraAdapter(const SkSize& viewport_size) - : fViewportSize(viewport_size) {} +CameraAdapter:: CameraAdapter(const SkSize& viewport_size, Type type) + : fViewportSize(viewport_size) + , fType(type) +{} CameraAdapter::~CameraAdapter() = default; +sk_sp CameraAdapter::MakeDefault(const SkSize &viewport_size) { + auto adapter = sk_make_sp(viewport_size, Type::kOneNode); + + static constexpr float kDefaultAEZoom = 879.13f; + const auto center = SkVector::Make(viewport_size.width() * 0.5f, + viewport_size.height() * 0.5f); + adapter->setZoom(kDefaultAEZoom); + adapter->setPosition (TransformAdapter3D::Vec3({center.fX, center.fY, -kDefaultAEZoom})); + + return adapter; +} + +SkPoint3 CameraAdapter::poi() const { + // AE supports two camera types: + // + // - one-node camera: does not auto-orient, and starts off perpendicular to the z = 0 plane, + // facing "forward" (decreasing z). + // + // - two-node camera: has a point of interest (encoded as the anchor point), and auto-orients + // to point in its direction. + return fType == Type::kOneNode + ? SkPoint3{ this->getPosition().fX, + this->getPosition().fY, + -this->getPosition().fZ - 1 } + : SkPoint3{ this->getAnchorPoint().fX, + this->getAnchorPoint().fY, + -this->getAnchorPoint().fZ}; +} + SkMatrix44 CameraAdapter::totalMatrix() const { // Camera parameters: // // * location -> position attribute - // * point of interest -> anchor point attribute + // * point of interest -> anchor point attribute (two-node camera only) // * orientation -> rotation attribute // - SkPoint3 pos = { this->getPosition().fX, - this->getPosition().fY, - -this->getPosition().fZ }, - poi = { this->getAnchorPoint().fX, - this->getAnchorPoint().fY, - -this->getAnchorPoint().fZ }, - up = { 0, 1, 0 }; + const auto pos = SkPoint3{ this->getPosition().fX, + this->getPosition().fY, + -this->getPosition().fZ }, + up = SkPoint3{ 0, 1, 0 }; // Initial camera vector. SkMatrix44 cam_t; - Sk3LookAt(&cam_t, pos, poi, up); + Sk3LookAt(&cam_t, pos, this->poi(), up); // Rotation origin is camera position. { @@ -253,7 +281,18 @@ void PolyStarAdapter::apply() { } GradientAdapter::GradientAdapter(sk_sp grad, size_t colorStopCount) - : fGradient(std::move(grad)), fColorStopCount(colorStopCount) {} + : fGradient(std::move(grad)) + , fColorStopCount(colorStopCount) {} + +template +static inline const T* next_rec(const T* rec, const T* end_rec) { + if (!rec) return nullptr; + + SkASSERT(rec < end_rec); + rec++; + + return rec < end_rec ? rec : nullptr; +}; void GradientAdapter::apply() { this->onApply(); @@ -266,18 +305,15 @@ void GradientAdapter::apply() { // // b) an (optional) array of opacity/alpha stop records (t, a) // - struct ColorRec { - float t, r, g, b; - }; - struct OpacityRec { - float t, a; - }; + struct ColorRec { float t, r, g, b; }; + struct OpacityRec { float t, a; }; // The number of color records is explicit (fColorStopCount), // while the number of opacity stops is implicit (based on the size of fStops). // // |fStops| holds ColorRec x |fColorStopCount| + OpacityRec x N - const auto c_count = fColorStopCount, c_size = c_count * 4, + const auto c_count = fColorStopCount, + c_size = c_count * 4, o_count = (fStops.size() - c_size) / 2; if (fStops.size() < c_size || fStops.size() != (c_count * 4 + o_count * 2)) { // apply() may get called before the stops are set, so only log when we have some stops. @@ -287,98 +323,69 @@ void GradientAdapter::apply() { return; } - const auto* current_c = reinterpret_cast(fStops.data()); - const auto* end_c = current_c + c_count; - const auto* current_o = reinterpret_cast(end_c); - const auto* end_o = current_o + o_count; + const auto* c_rec = c_count > 0 ? reinterpret_cast(fStops.data()) + : nullptr; + const auto* o_rec = o_count > 0 ? reinterpret_cast(fStops.data() + c_size) + : nullptr; + const auto* c_end = c_rec + c_count; + const auto* o_end = o_rec + o_count; + + sksg::Gradient::ColorStop current_stop = { + 0.0f, { + c_rec ? c_rec->r : 0, + c_rec ? c_rec->g : 0, + c_rec ? c_rec->b : 0, + o_rec ? o_rec->a : 1, + }}; - // TODO: Gradient/ColorStop should use 4f. - sksg::Gradient::ColorStop prev_stop = {0.0f, SK_ColorBLACK}; - if (current_c < end_c) { - prev_stop.fColor = SkColor4f{current_c->r, current_c->g, current_c->b, 1.0}.toSkColor(); - } - if (current_o < end_o) { - prev_stop.fColor = SkColorSetA(prev_stop.fColor, SkScalarRoundToInt(current_o->a * 255)); - } - - auto lerp = [](float a, float b, float t) { return a + t * (b - a); }; - - auto next_stop = [&]() -> sksg::Gradient::ColorStop { - const auto prev_c = SkColor4f::FromColor(prev_stop.fColor); - - const uint8_t has_color_stop = SkToU8(current_c < end_c), - has_opacity_stop = SkToU8(current_o < end_o); - - switch (has_color_stop | (has_opacity_stop << 1)) { - case 0x01: { - // Color-only stop. - sksg::Gradient::ColorStop cs{ - current_c->t, - SkColor4f{current_c->r, current_c->g, current_c->b, prev_c.fA}.toSkColor()}; - - current_c++; - return cs; - } - case 0x02: { - // Opacity-only stop. - sksg::Gradient::ColorStop cs{ - current_o->t, - SkColor4f{prev_c.fR, prev_c.fG, prev_c.fB, current_o->a}.toSkColor()}; - - current_o++; - return cs; - } - case 0x03: { - // Separate color and opacity stops. - // Merge-sort the two arrays, LERP-ing intermediate channel values as needed. - - auto c = SkColor4f{current_c->r, current_c->g, current_c->b, current_o->a}; - auto t_rgb = current_c->t, t_a = current_o->t; - - if (SkScalarNearlyEqual(t_rgb, t_a)) { - // Coincident color and opacity stops: no LERP needed, consume both. - current_c++; - current_o++; - - return {t_rgb, c.toSkColor()}; - } - - if (t_rgb < t_a) { - // Color stop followed by opacity stop: LERP alpha, consume the color stop. - const auto rel_t = SkTPin(sk_ieee_float_divide(t_rgb - prev_stop.fPosition, - t_a - prev_stop.fPosition), - 0.0f, 1.0f); - c.fA = lerp(prev_c.fA, c.fA, rel_t); - - current_c++; - - return {t_rgb, c.toSkColor()}; - } else { - // Opacity stop followed by color stop: LERP r/g/b, consume the opacity stop. - const auto rel_t = SkTPin(sk_ieee_float_divide(t_a - prev_stop.fPosition, - t_rgb - prev_stop.fPosition), - 0.0f, 1.0f); - c.fR = lerp(prev_c.fR, c.fR, rel_t); - c.fG = lerp(prev_c.fG, c.fG, rel_t); - c.fB = lerp(prev_c.fB, c.fB, rel_t); - - current_o++; + std::vector stops; + stops.reserve(c_count); - return {t_a, c.toSkColor()}; + // Merge-sort the color and opacity stops, LERP-ing intermediate channel values as needed. + while (c_rec || o_rec) { + // After exhausting one of color recs / opacity recs, continue propagating the last + // computed values (as if they were specified at the current position). + const auto& cs = c_rec + ? *c_rec + : ColorRec{ o_rec->t, + current_stop.fColor.fR, + current_stop.fColor.fG, + current_stop.fColor.fB }; + const auto& os = o_rec + ? *o_rec + : OpacityRec{ c_rec->t, current_stop.fColor.fA }; + + // Compute component lerp coefficients based on the relative position of the stops + // being considered. The idea is to select the smaller-pos stop, use its own properties + // as specified (lerp with t == 1), and lerp (with t < 1) the properties from the + // larger-pos stop against the previously computed gradient stop values. + const auto c_pos = std::max(cs.t, current_stop.fPosition), + o_pos = std::max(os.t, current_stop.fPosition), + c_pos_rel = c_pos - current_stop.fPosition, + o_pos_rel = o_pos - current_stop.fPosition, + t_c = SkTPin(sk_ieee_float_divide(o_pos_rel, c_pos_rel), 0.0f, 1.0f), + t_o = SkTPin(sk_ieee_float_divide(c_pos_rel, o_pos_rel), 0.0f, 1.0f); + + auto lerp = [](float a, float b, float t) { return a + t * (b - a); }; + + current_stop = { + std::min(c_pos, o_pos), + { + lerp(current_stop.fColor.fR, cs.r, t_c ), + lerp(current_stop.fColor.fG, cs.g, t_c ), + lerp(current_stop.fColor.fB, cs.b, t_c ), + lerp(current_stop.fColor.fA, os.a, t_o) } - } + }; + stops.push_back(current_stop); - default: - SkUNREACHABLE; + // Consume one of, or both (for coincident positions) color/opacity stops. + if (c_pos <= o_pos) { + c_rec = next_rec(c_rec, c_end); + } + if (o_pos <= c_pos) { + o_rec = next_rec(o_rec, o_end); } - }; - - std::vector stops; - stops.reserve(c_count); - - while (current_c < end_c || current_o < end_o) { - prev_stop = next_stop(); - stops.push_back(prev_stop); } stops.shrink_to_fit(); diff --git a/third_party/skia/modules/skottie/src/SkottieAdapter.h b/third_party/skia/modules/skottie/src/SkottieAdapter.h index eab318f4ec7a..8693ab665479 100644 --- a/third_party/skia/modules/skottie/src/SkottieAdapter.h +++ b/third_party/skia/modules/skottie/src/SkottieAdapter.h @@ -172,7 +172,14 @@ class TransformAdapter3D : public SkRefCnt { class CameraAdapter final : public TransformAdapter3D { public: - explicit CameraAdapter(const SkSize& viewport_size); + enum class Type { + kOneNode, // implicitly facing forward (decreasing z), does not auto-orient + kTwoNode, // explicitly facing a POI (the anchor point), auto-orients + }; + + static sk_sp MakeDefault(const SkSize& viewport_size); + + CameraAdapter(const SkSize& viewport_size, Type); ~CameraAdapter() override; ADAPTER_PROPERTY(Zoom, SkScalar, 0) @@ -180,7 +187,10 @@ class CameraAdapter final : public TransformAdapter3D { private: SkMatrix44 totalMatrix() const override; + SkPoint3 poi() const; + const SkSize fViewportSize; + const Type fType; using INHERITED = TransformAdapter3D; }; @@ -219,7 +229,7 @@ class GradientAdapter : public SkRefCnt { public: ADAPTER_PROPERTY(StartPoint, SkPoint , SkPoint::Make(0, 0) ) ADAPTER_PROPERTY(EndPoint , SkPoint , SkPoint::Make(0, 0) ) - ADAPTER_PROPERTY(Stops, VectorValue, VectorValue()) + ADAPTER_PROPERTY(Stops , VectorValue , VectorValue() ) protected: GradientAdapter(sk_sp, size_t colorStopCount); @@ -228,7 +238,7 @@ class GradientAdapter : public SkRefCnt { const SkPoint& endPoint() const { return fEndPoint; } sk_sp fGradient; - size_t fColorStopCount; + size_t fColorStopCount; virtual void onApply() = 0; diff --git a/third_party/skia/modules/skottie/src/SkottiePriv.h b/third_party/skia/modules/skottie/src/SkottiePriv.h index 97da465a54dd..e3abab83c851 100644 --- a/third_party/skia/modules/skottie/src/SkottiePriv.h +++ b/third_party/skia/modules/skottie/src/SkottiePriv.h @@ -166,6 +166,9 @@ class AnimationBuilder final : public SkNoncopyable { bool dispatchTransformProperty(const sk_sp&) const; private: + friend class CompositionBuilder; + friend class LayerBuilder; + struct AttachLayerContext; struct AttachShapeContext; struct ImageAssetInfo; @@ -177,10 +180,6 @@ class AnimationBuilder final : public SkNoncopyable { void dispatchMarkers(const skjson::ArrayValue*) const; - sk_sp attachComposition(const skjson::ObjectValue&) const; - sk_sp attachLayer(const skjson::ObjectValue*, - AttachLayerContext*) const; - sk_sp attachBlendMode(const skjson::ObjectValue&, sk_sp) const; @@ -253,47 +252,6 @@ class AnimationBuilder final : public SkNoncopyable { using INHERITED = SkNoncopyable; }; -struct AnimationBuilder::AttachLayerContext { - explicit AttachLayerContext(const skjson::ArrayValue&); - ~AttachLayerContext(); - - struct TransformRec { - sk_sp fTransformNode; - AnimatorScope fTransformScope; - }; - - const skjson::ArrayValue& fLayerList; - SkTHashMap fLayerTransformMap; - sk_sp fCurrentMatte; - sk_sp fCameraTransform; - - size_t fMotionBlurSamples = 1; - float fMotionBlurAngle = 0, - fMotionBlurPhase = 0; - - enum class TransformType { kLayer, kCamera }; - - TransformRec attachLayerTransform(const skjson::ObjectValue& jlayer, - const AnimationBuilder* abuilder, - TransformType type = TransformType::kLayer); - - bool hasMotionBlur(const skjson::ObjectValue& jlayer) const; - -private: - sk_sp attachParentLayerTransform(const skjson::ObjectValue& jlayer, - const AnimationBuilder* abuilder, - int layer_index); - - sk_sp attachTransformNode(const skjson::ObjectValue& jlayer, - const AnimationBuilder* abuilder, - sk_sp parent_transform, - TransformType type) const; - - TransformRec* attachLayerTransformImpl(const skjson::ObjectValue& jlayer, - const AnimationBuilder* abuilder, - TransformType type, int layer_index); -}; - } // namespace internal } // namespace skottie diff --git a/third_party/skia/modules/skottie/src/SkottieTest.cpp b/third_party/skia/modules/skottie/src/SkottieTest.cpp index 29124a27b509..991348d65fff 100644 --- a/third_party/skia/modules/skottie/src/SkottieTest.cpp +++ b/third_party/skia/modules/skottie/src/SkottieTest.cpp @@ -253,7 +253,7 @@ DEF_TEST(Skottie_Properties, reporter) { REPORTER_ASSERT(reporter, SkScalarNearlyEqual(opacities[1].handle->get(), 50)); const auto& transforms = observer->transforms(); - REPORTER_ASSERT(reporter, transforms.size() == 2); + REPORTER_ASSERT(reporter, transforms.size() == 3); REPORTER_ASSERT(reporter, transforms[0].node_name.equals("layer_0")); REPORTER_ASSERT(reporter, transforms[0].handle->get() == skottie::TransformPropertyValue({ SkPoint::Make(0, 0), @@ -263,8 +263,17 @@ DEF_TEST(Skottie_Properties, reporter) { 0, 0 })); - REPORTER_ASSERT(reporter, transforms[1].node_name.equals("shape_transform_0")); + REPORTER_ASSERT(reporter, transforms[1].node_name.equals("layer_1")); REPORTER_ASSERT(reporter, transforms[1].handle->get() == skottie::TransformPropertyValue({ + SkPoint::Make(0, 0), + SkPoint::Make(25, 25), + SkVector::Make(100, 100), + 0, + 0, + 0 + })); + REPORTER_ASSERT(reporter, transforms[2].node_name.equals("shape_transform_0")); + REPORTER_ASSERT(reporter, transforms[2].handle->get() == skottie::TransformPropertyValue({ SkPoint::Make(0, 0), SkPoint::Make(0, 0), SkVector::Make(50, 50), diff --git a/third_party/skia/modules/skottie/src/SkottieTool.cpp b/third_party/skia/modules/skottie/src/SkottieTool.cpp index 18d7d8f4c88b..501290aefd53 100644 --- a/third_party/skia/modules/skottie/src/SkottieTool.cpp +++ b/third_party/skia/modules/skottie/src/SkottieTool.cpp @@ -12,7 +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/SkMakeUnique.h" #include "src/core/SkOSFile.h" #include "src/core/SkTaskGroup.h" @@ -260,9 +260,11 @@ int main(int argc, char** argv) { } auto logger = sk_make_sp(); - auto rp = skottie_utils::CachingResourceProvider::Make( - skottie_utils::FileResourceProvider::Make(SkOSPath::Dirname(FLAGS_input[0]), - /*predecode=*/true)); + auto rp = skresources::CachingResourceProvider::Make( + skresources::DataURIResourceProviderProxy::Make( + skresources::FileResourceProvider::Make(SkOSPath::Dirname(FLAGS_input[0]), + /*predecode=*/true), + /*predecode=*/true)); auto data = SkData::MakeFromFileName(FLAGS_input[0]); if (!data) { diff --git a/third_party/skia/modules/skottie/src/SkottieValue.cpp b/third_party/skia/modules/skottie/src/SkottieValue.cpp index 409fcb7a9aec..f98f121536d5 100644 --- a/third_party/skia/modules/skottie/src/SkottieValue.cpp +++ b/third_party/skia/modules/skottie/src/SkottieValue.cpp @@ -62,6 +62,7 @@ void ValueTraits::Lerp(const VectorValue& v0, const VectorValue& v1 } } +// DEPRECATED: remove after converting everything to SkColor4f template <> template <> SkColor ValueTraits::As(const VectorValue& v) { @@ -77,6 +78,18 @@ SkColor ValueTraits::As(const VectorValue& v) { SkScalarRoundToInt(SkTPin(b, 0.0f, 1.0f) * 255)); } +template <> +template <> +SkColor4f ValueTraits::As(const VectorValue& v) { + // best effort to turn a vector into a color + const auto r = v.size() > 0 ? SkTPin(v[0], 0.0f, 1.0f) : 0, + g = v.size() > 1 ? SkTPin(v[1], 0.0f, 1.0f) : 0, + b = v.size() > 2 ? SkTPin(v[2], 0.0f, 1.0f) : 0, + a = v.size() > 3 ? SkTPin(v[3], 0.0f, 1.0f) : 1; + + return { r, g, b, a }; +} + template <> template <> SkPoint ValueTraits::As(const VectorValue& vec) { diff --git a/third_party/skia/modules/skottie/src/effects/Effects.cpp b/third_party/skia/modules/skottie/src/effects/Effects.cpp index c3704f7599c9..0ec8ad232305 100644 --- a/third_party/skia/modules/skottie/src/effects/Effects.cpp +++ b/third_party/skia/modules/skottie/src/effects/Effects.cpp @@ -57,7 +57,8 @@ EffectBuilder::EffectBuilderT EffectBuilder::findBuilder(const skjson::ObjectVal kLinearWipeEffectMN[] = "ADBE Linear Wipe", kMotionTileEffectMN[] = "ADBE Tile", kTransformEffectMN[] = "ADBE Geometry2", - kVenetianBlindsEffectMN[] = "ADBE Venetian Blinds"; + kVenetianBlindsEffectMN[] = "ADBE Venetian Blinds", + kShiftChannelsEffectMN[] = "ADBE Shift Channels"; if (const skjson::StringValue* mn = jeffect["mn"]) { if (!strcmp(mn->begin(), kGradientEffectMN)) { @@ -81,6 +82,9 @@ EffectBuilder::EffectBuilderT EffectBuilder::findBuilder(const skjson::ObjectVal if (!strcmp(mn->begin(), kVenetianBlindsEffectMN)) { return &EffectBuilder::attachVenetianBlindsEffect; } + if (!strcmp(mn->begin(), kShiftChannelsEffectMN)) { + return &EffectBuilder::attachShiftChannelsEffect; + } } fBuilder->log(Logger::Level::kWarning, nullptr, "Unsupported layer effect type: %d.", ty); diff --git a/third_party/skia/modules/skottie/src/effects/Effects.h b/third_party/skia/modules/skottie/src/effects/Effects.h index fedc69aa3e8b..30c797a65245 100644 --- a/third_party/skia/modules/skottie/src/effects/Effects.h +++ b/third_party/skia/modules/skottie/src/effects/Effects.h @@ -59,6 +59,8 @@ class EffectBuilder final : public SkNoncopyable { sk_sp) const; sk_sp attachVenetianBlindsEffect(const skjson::ArrayValue&, sk_sp) const; + sk_sp attachShiftChannelsEffect (const skjson::ArrayValue&, + sk_sp) const; EffectBuilderT findBuilder(const skjson::ObjectValue&) const; diff --git a/third_party/skia/modules/skottie/src/effects/GradientEffect.cpp b/third_party/skia/modules/skottie/src/effects/GradientEffect.cpp index 2165128a89b7..55022461a724 100644 --- a/third_party/skia/modules/skottie/src/effects/GradientEffect.cpp +++ b/third_party/skia/modules/skottie/src/effects/GradientEffect.cpp @@ -23,12 +23,12 @@ class GradientRampEffectAdapter final : public SkNVRefCnt child) : fRoot(sksg::ShaderEffect::Make(std::move(child))) {} - ADAPTER_PROPERTY(StartPoint, SkPoint , SkPoint::Make(0, 0)) - ADAPTER_PROPERTY(EndPoint , SkPoint , SkPoint::Make(0, 0)) - ADAPTER_PROPERTY(StartColor, SkColor , SK_ColorBLACK) - ADAPTER_PROPERTY(EndColor , SkColor , SK_ColorBLACK) - ADAPTER_PROPERTY(Blend , SkScalar, 0) - ADAPTER_PROPERTY(Scatter , SkScalar, 0) + ADAPTER_PROPERTY(StartPoint, SkPoint , SkPoint::Make(0, 0)) + ADAPTER_PROPERTY(EndPoint , SkPoint , SkPoint::Make(0, 0)) + ADAPTER_PROPERTY(StartColor, SkColor4f, SkColors::kBlack) + ADAPTER_PROPERTY(EndColor , SkColor4f, SkColors::kBlack) + ADAPTER_PROPERTY(Blend , SkScalar , 0) + ADAPTER_PROPERTY(Scatter , SkScalar , 0) // Really an enum: 1 -> linear, 7 -> radial (?!) ADAPTER_PROPERTY(Shape , SkScalar, 0) @@ -120,11 +120,11 @@ sk_sp EffectBuilder::attachGradientEffect(const skjson::ArrayV }); fBuilder->bindProperty(GetPropValue(jprops, kStartColor_Index), [adapter](const VectorValue& c0) { - adapter->setStartColor(ValueTraits::As(c0)); + adapter->setStartColor(ValueTraits::As(c0)); }); fBuilder->bindProperty(GetPropValue(jprops, kEndColor_Index), [adapter](const VectorValue& c1) { - adapter->setEndColor(ValueTraits::As(c1)); + adapter->setEndColor(ValueTraits::As(c1)); }); fBuilder->bindProperty(GetPropValue(jprops, kRampShape_Index), [adapter](const ScalarValue& shape) { diff --git a/third_party/skia/modules/skottie/src/effects/HueSaturationEffect.cpp b/third_party/skia/modules/skottie/src/effects/HueSaturationEffect.cpp index b636824af85f..8dc217e8e3c3 100644 --- a/third_party/skia/modules/skottie/src/effects/HueSaturationEffect.cpp +++ b/third_party/skia/modules/skottie/src/effects/HueSaturationEffect.cpp @@ -7,7 +7,6 @@ #include "modules/skottie/src/effects/Effects.h" -#include "include/effects/SkColorMatrix.h" #include "modules/skottie/src/SkottieAdapter.h" #include "modules/skottie/src/SkottieJson.h" #include "modules/skottie/src/SkottieValue.h" diff --git a/third_party/skia/modules/skottie/src/effects/ShiftChannelsEffect.cpp b/third_party/skia/modules/skottie/src/effects/ShiftChannelsEffect.cpp new file mode 100644 index 000000000000..660fe3cefc7d --- /dev/null +++ b/third_party/skia/modules/skottie/src/effects/ShiftChannelsEffect.cpp @@ -0,0 +1,145 @@ +/* + * Copyright 2019 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/effects/Effects.h" + +#include "include/private/SkColorData.h" +#include "modules/skottie/src/SkottieAdapter.h" +#include "modules/sksg/include/SkSGColorFilter.h" + +namespace skottie { +namespace internal { + +namespace { + +/* + * AE's Shift Channels effect overrides individual channels based on a selectable function: + * + * C' = {fR(C), fG(C), fB(C), fA(C)} + * + * where fR, fG, fB, fA can be one of + * + * C.r, C.g, C.b, C.a, Luminance(C), Hue(C), Saturation(C), Lightness(C), 1 or 0. + */ +class ShiftChannelsEffectAdapter final : public DiscardableAdaptorBase { +public: + static sk_sp Make(const skjson::ArrayValue& jprops, + sk_sp layer, + const AnimationBuilder* abuilder) { + enum : size_t { + kTakeAlphaFrom_Index = 0, + kTakeRedFrom_Index = 1, + kTakeGreenFrom_Index = 2, + kTakeBlueFrom_Index = 3, + + kMax_Index = kTakeBlueFrom_Index + }; + + auto adapter = sk_sp( + new ShiftChannelsEffectAdapter(std::move(layer))); + + // Use raw captures, pending TheBigRefactoringToComeReallySoonNow. + auto* raw_adapter = adapter.get(); + + abuilder->bindProperty(EffectBuilder::GetPropValue(jprops, + kTakeRedFrom_Index), + [raw_adapter](const ScalarValue& r) { raw_adapter->fR = r; }); + abuilder->bindProperty(EffectBuilder::GetPropValue(jprops, + kTakeGreenFrom_Index), + [raw_adapter](const ScalarValue& g) { raw_adapter->fG = g; }); + abuilder->bindProperty(EffectBuilder::GetPropValue(jprops, + kTakeBlueFrom_Index), + [raw_adapter](const ScalarValue& b) { raw_adapter->fB = b; }); + abuilder->bindProperty(EffectBuilder::GetPropValue(jprops, + kTakeAlphaFrom_Index), + [raw_adapter](const ScalarValue& a) { raw_adapter->fA = a; }); + + return adapter; + } + + const sk_sp& renderNode() const { return fColorFilter; } + +private: + explicit ShiftChannelsEffectAdapter(sk_sp layer) + : fColorFilter(sksg::ExternalColorFilter::Make(std::move(layer))) {} + + enum class Source : uint8_t { + kAlpha = 1, + kRed = 2, + kGreen = 3, + kBlue = 4, + kLuminance = 5, + kHue = 6, + kLightness = 7, + kSaturation = 8, + kFullOn = 9, + kFullOff = 10, + + kMax = kFullOff + }; + + void onSync() override { + // TODO: support for HSL sources will require a custom color filter. + + static constexpr float gSourceCoeffs[][5] = { + { 0, 0, 0, 1, 0}, // kAlpha + { 1, 0, 0, 0, 0}, // kRed + { 0, 1, 0, 0, 0}, // kGreen + { 0, 0, 1, 0, 0}, // kBlue + {SK_LUM_COEFF_R, SK_LUM_COEFF_G, SK_LUM_COEFF_B, 0, 0}, // kLuminance + { 0, 0, 0, 0, 0}, // TODO: kHue + { 0, 0, 0, 0, 0}, // TODO: kLightness + { 0, 0, 0, 0, 0}, // TODO: kSaturation + { 0, 0, 0, 0, 1}, // kFullOn + { 0, 0, 0, 0, 0}, // kFullOff + }; + static_assert(SK_ARRAY_COUNT(gSourceCoeffs) == static_cast(Source::kMax), ""); + + auto coeffs = [](float src) { + // Channel sources are encoded as Source enum values. + // We map these onto our coeffs table. + src = SkTPin(src, 1.0f, static_cast(Source::kMax)); + return gSourceCoeffs[static_cast(src) - 1]; + }; + + const float* rc = coeffs(fR); + const float* gc = coeffs(fG); + const float* bc = coeffs(fB); + const float* ac = coeffs(fA); + + const float cm[] = { + rc[0], rc[1], rc[2], rc[3], rc[4], + gc[0], gc[1], gc[2], gc[3], gc[4], + bc[0], bc[1], bc[2], bc[3], bc[4], + ac[0], ac[1], ac[2], ac[3], ac[4], + }; + + fColorFilter->setColorFilter(SkColorFilters::Matrix(cm)); + } + + const sk_sp fColorFilter; + + float fR = static_cast(Source::kRed), + fG = static_cast(Source::kGreen), + fB = static_cast(Source::kBlue), + fA = static_cast(Source::kAlpha); + + using INHERITED = DiscardableAdaptorBase; +}; + +} // namespace + + +sk_sp EffectBuilder::attachShiftChannelsEffect( + const skjson::ArrayValue& jprops, sk_sp layer) const { + return fBuilder->attachDiscardableAdapter(jprops, + std::move(layer), + fBuilder); +} + +} // namespace internal +} // namespace skottie diff --git a/third_party/skia/modules/skottie/src/layers/ImageLayer.cpp b/third_party/skia/modules/skottie/src/layers/ImageLayer.cpp index 3447548bc8f4..cf79830c11e9 100644 --- a/third_party/skia/modules/skottie/src/layers/ImageLayer.cpp +++ b/third_party/skia/modules/skottie/src/layers/ImageLayer.cpp @@ -15,6 +15,17 @@ namespace skottie { namespace internal { +namespace { + +SkMatrix image_matrix(const sk_sp& image, const SkISize& dest_size) { + return image ? SkMatrix::MakeRectToRect(SkRect::Make(image->bounds()), + SkRect::Make(dest_size), + SkMatrix::kCenter_ScaleToFit) + : SkMatrix::I(); +} + +} // namespace + const AnimationBuilder::ImageAssetInfo* AnimationBuilder::loadImageAsset(const skjson::ObjectValue& jimage) const { const skjson::StringValue* name = jimage["p"]; @@ -49,58 +60,75 @@ sk_sp AnimationBuilder::attachImageAsset(const skjson::ObjectV } SkASSERT(asset_info->fAsset); - auto image = asset_info->fAsset->getFrame(0); - if (!image) { - this->log(Logger::Level::kError, nullptr, "Could not load first image asset frame."); - return nullptr; - } - - auto image_node = sksg::Image::Make(image); + auto image_node = sksg::Image::Make(nullptr); image_node->setQuality(kMedium_SkFilterQuality); - if (asset_info->fAsset->isMultiFrame()) { + // Optional image transform (mapping the intrinsic image size to declared asset size). + sk_sp> image_transform; + + if (!asset_info->fAsset->isMultiFrame()) { + // Single-frame asset -> we can resolve the frame upfront. + auto frame = asset_info->fAsset->getFrame(0); + if (!frame) { + this->log(Logger::Level::kError, nullptr, "Could not load single-frame image asset."); + return nullptr; + } + + if (frame->bounds().size() != asset_info->fSize) { + image_transform = sksg::Matrix::Make(image_matrix(frame, asset_info->fSize)); + } + + image_node->setImage(std::move(frame)); + } else { class MultiFrameAnimator final : public sksg::Animator { public: - MultiFrameAnimator(sk_sp asset, sk_sp image_node, + MultiFrameAnimator(sk_sp asset, + sk_sp image_node, + sk_sp> image_transform_node, + const SkISize& asset_size, float time_bias, float time_scale) : fAsset(std::move(asset)) , fImageNode(std::move(image_node)) + , fImageTransformNode(std::move(image_transform_node)) + , fAssetSize(asset_size) , fTimeBias(time_bias) , fTimeScale(time_scale) {} void onTick(float t) override { - fImageNode->setImage(fAsset->getFrame((t + fTimeBias) * fTimeScale)); + auto frame = fAsset->getFrame((t + fTimeBias) * fTimeScale); + fImageTransformNode->setMatrix(image_matrix(frame, fAssetSize)); + fImageNode->setImage(std::move(frame)); } private: - sk_sp fAsset; - sk_sp fImageNode; - float fTimeBias, - fTimeScale; + const sk_sp fAsset; + const sk_sp fImageNode; + const sk_sp> fImageTransformNode; + const SkISize fAssetSize; + const float fTimeBias, + fTimeScale; }; + // We don't know the intrinsic image size yet (plus, in the general case, + // the size may change from frame to frame) -> we always prepare a scaling transform. + image_transform = sksg::Matrix::Make(SkMatrix::I()); fCurrentAnimatorScope->push_back(sk_make_sp(asset_info->fAsset, image_node, + image_transform, + asset_info->fSize, -layer_info->fInPoint, 1 / fFrameRate)); } - const auto asset_size = SkISize::Make( - asset_info->fSize.width() > 0 ? asset_info->fSize.width() : image->width(), - asset_info->fSize.height() > 0 ? asset_info->fSize.height() : image->height()); - // Image layers are sized explicitly. - layer_info->fSize = asset_size; + layer_info->fSize = SkSize::Make(asset_info->fSize); - if (asset_size == image->bounds().size()) { + if (!image_transform) { // No resize needed. - return image_node; + return std::move(image_node); } - return sksg::TransformEffect::Make(std::move(image_node), - SkMatrix::MakeRectToRect(SkRect::Make(image->bounds()), - SkRect::Make(asset_size), - SkMatrix::kCenter_ScaleToFit)); + return sksg::TransformEffect::Make(std::move(image_node), std::move(image_transform)); } sk_sp AnimationBuilder::attachImageLayer(const skjson::ObjectValue& jlayer, diff --git a/third_party/skia/modules/skottie/src/layers/PrecompLayer.cpp b/third_party/skia/modules/skottie/src/layers/PrecompLayer.cpp index eaf6ccdc399f..21c776130828 100644 --- a/third_party/skia/modules/skottie/src/layers/PrecompLayer.cpp +++ b/third_party/skia/modules/skottie/src/layers/PrecompLayer.cpp @@ -7,6 +7,7 @@ #include "modules/skottie/src/SkottiePriv.h" +#include "modules/skottie/src/Composition.h" #include "modules/skottie/src/SkottieJson.h" #include "modules/skottie/src/SkottieValue.h" #include "modules/sksg/include/SkSGRenderNode.h" @@ -38,7 +39,7 @@ sk_sp AnimationBuilder::attachPrecompLayer(const skjson::Objec auto precomp_layer = this->attachAssetRef(jlayer, [this] (const skjson::ObjectValue& jcomp) { - return this->attachComposition(jcomp); + return CompositionBuilder(*this, jcomp).build(*this); }); // Applies a bias/scale/remap t-adjustment to child animators. diff --git a/third_party/skia/modules/skottie/src/layers/ShapeLayer.cpp b/third_party/skia/modules/skottie/src/layers/ShapeLayer.cpp index 1b05987afbf7..97a96da9da8b 100644 --- a/third_party/skia/modules/skottie/src/layers/ShapeLayer.cpp +++ b/third_party/skia/modules/skottie/src/layers/ShapeLayer.cpp @@ -41,8 +41,8 @@ sk_sp AttachPathGeometry(const skjson::ObjectValue& jpath, sk_sp AttachRRectGeometry(const skjson::ObjectValue& jrect, const AnimationBuilder* abuilder) { auto rect_node = sksg::RRect::Make(); - rect_node->setDirection(ParseDefault(jrect["d"], -1) == 3 ? SkPath::kCCW_Direction - : SkPath::kCW_Direction); + rect_node->setDirection(ParseDefault(jrect["d"], -1) == 3 ? SkPathDirection::kCCW + : SkPathDirection::kCW); rect_node->setInitialPointIndex(2); // starting point: (Right, Top - radius.y) auto adapter = sk_make_sp(rect_node); @@ -70,8 +70,8 @@ sk_sp AttachRRectGeometry(const skjson::ObjectValue& jrect, sk_sp AttachEllipseGeometry(const skjson::ObjectValue& jellipse, const AnimationBuilder* abuilder) { auto rect_node = sksg::RRect::Make(); - rect_node->setDirection(ParseDefault(jellipse["d"], -1) == 3 ? SkPath::kCCW_Direction - : SkPath::kCW_Direction); + rect_node->setDirection(ParseDefault(jellipse["d"], -1) == 3 ? SkPathDirection::kCCW + : SkPathDirection::kCW); rect_node->setInitialPointIndex(1); // starting point: (Center, Top) auto adapter = sk_make_sp(rect_node); @@ -167,8 +167,10 @@ sk_sp AttachGradient(const skjson::ObjectValue& jgrad, gradient_node = std::move(radial_node); } - abuilder->bindProperty( - (*stops)["k"], [adapter](const VectorValue& stops) { adapter->setStops(stops); }); + abuilder->bindProperty((*stops)["k"], + [adapter](const VectorValue& stops) { + adapter->setStops(stops); + }); abuilder->bindProperty(jgrad["s"], [adapter](const VectorValue& s) { adapter->setStartPoint(ValueTraits::As(s)); @@ -288,10 +290,11 @@ std::vector> AttachMergeGeometryEffect( std::vector> AttachTrimGeometryEffect( const skjson::ObjectValue& jtrim, const AnimationBuilder* abuilder, std::vector>&& geos) { + enum class Mode { - kParallel, // "m": 1 (Trim Multiple Shapes: Simultaneously) - kSerial, // "m": 2 (Trim Multiple Shapes: Individually) - } gModes[] = {Mode::kParallel, Mode::kSerial}; + kParallel, // "m": 1 (Trim Multiple Shapes: Simultaneously) + kSerial, // "m": 2 (Trim Multiple Shapes: Individually) + } gModes[] = { Mode::kParallel, Mode::kSerial}; const auto mode = gModes[SkTMin(ParseDefault(jtrim["m"], 1) - 1, SK_ARRAY_COUNT(gModes) - 1)]; diff --git a/third_party/skia/modules/skottie/utils/SkottieUtils.cpp b/third_party/skia/modules/skottie/utils/SkottieUtils.cpp index 6cb2aed90604..f8d7d6d72119 100644 --- a/third_party/skia/modules/skottie/utils/SkottieUtils.cpp +++ b/third_party/skia/modules/skottie/utils/SkottieUtils.cpp @@ -7,118 +7,8 @@ #include "modules/skottie/utils/SkottieUtils.h" -#include "include/codec/SkCodec.h" -#include "include/core/SkData.h" -#include "include/core/SkImage.h" -#include "include/utils/SkAnimCodecPlayer.h" -#include "src/core/SkMakeUnique.h" -#include "src/core/SkOSFile.h" -#include "src/utils/SkOSPath.h" - -#include - namespace skottie_utils { -sk_sp MultiFrameImageAsset::Make(sk_sp data, bool predecode) { - if (auto codec = SkCodec::MakeFromData(std::move(data))) { - return sk_sp( - new MultiFrameImageAsset(skstd::make_unique(std::move(codec)), - predecode)); - } - - return nullptr; -} - -MultiFrameImageAsset::MultiFrameImageAsset(std::unique_ptr player, - bool predecode) - : fPlayer(std::move(player)) - , fPreDecode(predecode) { - SkASSERT(fPlayer); -} - -bool MultiFrameImageAsset::isMultiFrame() { - return fPlayer->duration() > 0; -} - -sk_sp MultiFrameImageAsset::getFrame(float t) { - auto decode = [](sk_sp image) { - SkASSERT(image->isLazyGenerated()); - - static constexpr size_t kMaxArea = 2048 * 2048; - const auto image_area = SkToSizeT(image->width() * image->height()); - - if (image_area > kMaxArea) { - // When the image is too large, decode and scale down to a reasonable size. - const auto scale = std::sqrt(static_cast(kMaxArea) / image_area); - const auto info = SkImageInfo::MakeN32Premul(scale * image->width(), - scale * image->height()); - SkBitmap bm; - if (bm.tryAllocPixels(info, info.minRowBytes()) && - image->scalePixels(bm.pixmap(), - SkFilterQuality::kMedium_SkFilterQuality, - SkImage::kDisallow_CachingHint)) { - image = SkImage::MakeFromBitmap(bm); - } - } else { - // When the image size is OK, just force-decode. - image = image->makeRasterImage(); - } - - return image; - }; - - fPlayer->seek(static_cast(t * 1000)); - auto frame = fPlayer->getFrame(); - - if (fPreDecode && frame && frame->isLazyGenerated()) { - frame = decode(std::move(frame)); - } - - return frame; -} - -sk_sp FileResourceProvider::Make(SkString base_dir, bool predecode) { - return sk_isdir(base_dir.c_str()) - ? sk_sp(new FileResourceProvider(std::move(base_dir), predecode)) - : nullptr; -} - -FileResourceProvider::FileResourceProvider(SkString base_dir, bool predecode) - : fDir(std::move(base_dir)) - , fPredecode(predecode) {} - -sk_sp FileResourceProvider::load(const char resource_path[], - const char resource_name[]) const { - const auto full_dir = SkOSPath::Join(fDir.c_str() , resource_path), - full_path = SkOSPath::Join(full_dir.c_str(), resource_name); - return SkData::MakeFromFileName(full_path.c_str()); -} - -sk_sp FileResourceProvider::loadImageAsset(const char resource_path[], - const char resource_name[], - const char[]) const { - return MultiFrameImageAsset::Make(this->load(resource_path, resource_name), fPredecode); -} - -CachingResourceProvider::CachingResourceProvider(sk_sp rp) - : fProxy(std::move(rp)) {} - -sk_sp CachingResourceProvider::loadImageAsset(const char resource_path[], - const char resource_name[], - const char resource_id[]) const { - SkAutoMutexExclusive amx(fMutex); - - const SkString key(resource_id); - if (const auto* asset = fImageCache.find(key)) { - return *asset; - } - - auto asset = fProxy->loadImageAsset(resource_path, resource_name, resource_id); - fImageCache.set(key, asset); - - return asset; -} - class CustomPropertyManager::PropertyInterceptor final : public skottie::PropertyObserver { public: explicit PropertyInterceptor(CustomPropertyManager* mgr) : fMgr(mgr) {} diff --git a/third_party/skia/modules/skottie/utils/SkottieUtils.h b/third_party/skia/modules/skottie/utils/SkottieUtils.h index 3360d4c3f901..a64ae14a5823 100644 --- a/third_party/skia/modules/skottie/utils/SkottieUtils.h +++ b/third_party/skia/modules/skottie/utils/SkottieUtils.h @@ -8,10 +8,6 @@ #ifndef SkottieUtils_DEFINED #define SkottieUtils_DEFINED -#include "include/core/SkColor.h" -#include "include/core/SkString.h" -#include "include/private/SkMutex.h" -#include "include/private/SkTHash.h" #include "modules/skottie/include/Skottie.h" #include "modules/skottie/include/SkottieProperty.h" @@ -20,75 +16,8 @@ #include #include -class SkAnimCodecPlayer; -class SkData; -class SkImage; - namespace skottie_utils { -class MultiFrameImageAsset final : public skottie::ImageAsset { -public: - /** - * By default, images are decoded on-the-fly, at rasterization time. - * Large images may cause jank as decoding is expensive (and can thrash internal caches). - * - * Pass |predecode| true to force-decode all images upfront, at the cost of potentially more RAM - * and slower animation build times. - */ - static sk_sp Make(sk_sp, bool predecode = false); - - bool isMultiFrame() override; - - sk_sp getFrame(float t) override; - -private: - explicit MultiFrameImageAsset(std::unique_ptr, bool predecode); - - std::unique_ptr fPlayer; - bool fPreDecode; - - using INHERITED = skottie::ImageAsset; -}; - -class FileResourceProvider final : public skottie::ResourceProvider { -public: - static sk_sp Make(SkString base_dir, bool predecode = false); - - sk_sp load(const char resource_path[], const char resource_name[]) const override; - - sk_sp loadImageAsset(const char[], const char[], - const char[]) const override; - -private: - FileResourceProvider(SkString, bool); - - const SkString fDir; - const bool fPredecode; - - using INHERITED = skottie::ResourceProvider; -}; - -class CachingResourceProvider final : public skottie::ResourceProvider { -public: - static sk_sp Make(sk_sp rp) { - return rp ? sk_sp(new CachingResourceProvider(std::move(rp))) - : nullptr; - } - -private: - explicit CachingResourceProvider(sk_sp); - - sk_sp loadImageAsset(const char[], const char[], - const char[]) const override; - - const sk_sp fProxy; - - mutable SkMutex fMutex; - mutable SkTHashMap> fImageCache; - - using INHERITED = skottie::ResourceProvider; -}; - /** * CustomPropertyManager implements a property management scheme where color/opacity/transform * attributes are grouped and manipulated by name (one-to-many mapping). diff --git a/third_party/skia/modules/skparagraph/BUILD.gn b/third_party/skia/modules/skparagraph/BUILD.gn index 5a85d37c4ede..80b86e073a80 100644 --- a/third_party/skia/modules/skparagraph/BUILD.gn +++ b/third_party/skia/modules/skparagraph/BUILD.gn @@ -3,7 +3,7 @@ import("../../gn/skia.gni") declare_args() { - skia_enable_skparagraph = !(is_win && is_component_build) + skia_enable_skparagraph = true paragraph_tests_enabled = true paragraph_bench_enabled = false } diff --git a/third_party/skia/modules/skparagraph/include/FontCollection.h b/third_party/skia/modules/skparagraph/include/FontCollection.h index 22d89ed3de08..f7336286a858 100644 --- a/third_party/skia/modules/skparagraph/include/FontCollection.h +++ b/third_party/skia/modules/skparagraph/include/FontCollection.h @@ -31,12 +31,13 @@ class FontCollection : public SkRefCnt { sk_sp getFallbackManager() const { return fDefaultFontManager; } - sk_sp matchTypeface(const char familyName[], SkFontStyle fontStyle, const SkString& locale); - sk_sp matchDefaultTypeface(SkFontStyle fontStyle, const SkString& locale); + std::vector> findTypefaces(const std::vector& familyNames, SkFontStyle fontStyle); + sk_sp defaultFallback(SkUnichar unicode, SkFontStyle fontStyle, const SkString& locale); sk_sp defaultFallback(); void disableFontFallback(); + void enableFontFallback(); bool fontFallbackEnabled() { return fEnableFontFallback; } ParagraphCache* getParagraphCache() { return &fParagraphCache; } @@ -44,14 +45,15 @@ class FontCollection : public SkRefCnt { private: std::vector> getFontManagerOrder() const; + sk_sp matchTypeface(const SkString& familyName, SkFontStyle fontStyle); + struct FamilyKey { - FamilyKey(const char family[], const char loc[], SkFontStyle style) - : fFontFamily(family), fLocale(loc), fFontStyle(style) {} + FamilyKey(const std::vector& familyNames, SkFontStyle style) + : fFamilyNames(familyNames), fFontStyle(style) {} FamilyKey() {} - SkString fFontFamily; - SkString fLocale; + std::vector fFamilyNames; SkFontStyle fFontStyle; bool operator==(const FamilyKey& other) const; @@ -62,7 +64,7 @@ class FontCollection : public SkRefCnt { }; bool fEnableFontFallback; - SkTHashMap, FamilyKey::Hasher> fTypefaces; + SkTHashMap>, FamilyKey::Hasher> fTypefaces; sk_sp fDefaultFontManager; sk_sp fAssetFontManager; sk_sp fDynamicFontManager; diff --git a/third_party/skia/modules/skparagraph/include/Paragraph.h b/third_party/skia/modules/skparagraph/include/Paragraph.h index dffcb4056945..d262aae9a6bd 100644 --- a/third_party/skia/modules/skparagraph/include/Paragraph.h +++ b/third_party/skia/modules/skparagraph/include/Paragraph.h @@ -63,6 +63,10 @@ class Paragraph { virtual void markDirty() = 0; + // This function will return the number of unresolved glyphs or + // -1 if not applicable (has not been shaped yet - valid case) + virtual int32_t unresolvedGlyphs() = 0; + // Experimental API that allows fast way to update "immutable" paragraph virtual void updateTextAlign(TextAlign textAlign) = 0; virtual void updateText(size_t from, SkString text) = 0; diff --git a/third_party/skia/modules/skparagraph/include/ParagraphCache.h b/third_party/skia/modules/skparagraph/include/ParagraphCache.h index ac4b4f1a02eb..0bfe59fa0f06 100644 --- a/third_party/skia/modules/skparagraph/include/ParagraphCache.h +++ b/third_party/skia/modules/skparagraph/include/ParagraphCache.h @@ -11,16 +11,6 @@ namespace skia { namespace textlayout { -struct Measurement { - SkScalar fAlphabeticBaseline; - SkScalar fIdeographicBaseline; - SkScalar fHeight; - SkScalar fWidth; - SkScalar fMaxIntrinsicWidth; - SkScalar fMinIntrinsicWidth; - SkScalar fLongestLine; -}; - enum InternalState { kUnknown = 0, kShaped = 1, diff --git a/third_party/skia/modules/skparagraph/include/ParagraphStyle.h b/third_party/skia/modules/skparagraph/include/ParagraphStyle.h index 69a0596f35f9..528c30bfe80c 100644 --- a/third_party/skia/modules/skparagraph/include/ParagraphStyle.h +++ b/third_party/skia/modules/skparagraph/include/ParagraphStyle.h @@ -75,6 +75,7 @@ struct ParagraphStyle { const SkString& getEllipsis() const { return fEllipsis; } void setEllipsis(const std::u16string& ellipsis); + void setEllipsis(const SkString& ellipsis) { fEllipsis = ellipsis; } SkScalar getHeight() const { return fHeight; } void setHeight(SkScalar height) { fHeight = height; } diff --git a/third_party/skia/modules/skparagraph/skparagraph.gni b/third_party/skia/modules/skparagraph/skparagraph.gni index f127d6819745..c5bcd47feb7e 100644 --- a/third_party/skia/modules/skparagraph/skparagraph.gni +++ b/third_party/skia/modules/skparagraph/skparagraph.gni @@ -20,9 +20,9 @@ skparagraph_public = [ skparagraph_sources = [ "$_src/FontCollection.cpp", - "$_src/FontResolver.h", - "$_src/FontResolver.cpp", "$_src/Iterators.h", + "$_src/OneLineShaper.h", + "$_src/OneLineShaper.cpp", "$_src/ParagraphBuilderImpl.h", "$_src/ParagraphBuilderImpl.cpp", "$_src/ParagraphCache.cpp", diff --git a/third_party/skia/modules/skparagraph/src/FontCollection.cpp b/third_party/skia/modules/skparagraph/src/FontCollection.cpp index bb0d60c6e34d..ec47018938ba 100644 --- a/third_party/skia/modules/skparagraph/src/FontCollection.cpp +++ b/third_party/skia/modules/skparagraph/src/FontCollection.cpp @@ -8,13 +8,15 @@ namespace skia { namespace textlayout { bool FontCollection::FamilyKey::operator==(const FontCollection::FamilyKey& other) const { - return fFontFamily == other.fFontFamily && fLocale == other.fLocale && - fFontStyle == other.fFontStyle; + return fFamilyNames == other.fFamilyNames && fFontStyle == other.fFontStyle; } size_t FontCollection::FamilyKey::Hasher::operator()(const FontCollection::FamilyKey& key) const { - return std::hash()(key.fFontFamily.c_str()) ^ - std::hash()(key.fLocale.c_str()) ^ + size_t hash = 0; + for (const SkString& family : key.fFamilyNames) { + hash ^= std::hash()(family.c_str()); + } + return hash ^ std::hash()(key.fFontStyle.weight()) ^ std::hash()(key.fFontStyle.slant()); } @@ -65,49 +67,36 @@ std::vector> FontCollection::getFontManagerOrder() const { return order; } -sk_sp FontCollection::matchTypeface(const char familyName[], SkFontStyle fontStyle, const SkString& locale) { +std::vector> FontCollection::findTypefaces(const std::vector& familyNames, SkFontStyle fontStyle) { // Look inside the font collections cache first - FamilyKey familyKey(familyName, locale.c_str(), fontStyle); + FamilyKey familyKey(familyNames, fontStyle); auto found = fTypefaces.find(familyKey); if (found) { return *found; } - sk_sp typeface = nullptr; - for (const auto& manager : this->getFontManagerOrder()) { - SkFontStyleSet* set = manager->matchFamily( manager == fTestFontManager ? "Ahem" : familyName); - if (nullptr == set || set->count() == 0) { - continue; - } - - for (int i = 0; i < set->count(); ++i) { - set->createTypeface(i); + std::vector> typefaces; + for (const SkString& familyName : familyNames) { + sk_sp match = matchTypeface(familyName, fontStyle); + if (match) { + typefaces.emplace_back(std::move(match)); } + } - sk_sp match(set->matchStyle(fontStyle)); - if (match || manager == fTestFontManager) { - typeface = std::move(match); - break; + if (typefaces.empty()) { + sk_sp match = matchTypeface(fDefaultFamilyName, fontStyle); + if (match) { + typefaces.emplace_back(std::move(match)); } } - if (typeface != nullptr && typeface.get() != nullptr) { - fTypefaces.set(familyKey, typeface); - } - return typeface; + fTypefaces.set(familyKey, typefaces); + return typefaces; } -sk_sp FontCollection::matchDefaultTypeface(SkFontStyle fontStyle, const SkString& locale) { - // Look inside the font collections cache first - FamilyKey familyKey(fDefaultFamilyName.c_str(), locale.c_str(), fontStyle); - auto found = fTypefaces.find(familyKey); - if (found) { - return *found; - } - - sk_sp typeface = nullptr; +sk_sp FontCollection::matchTypeface(const SkString& familyName, SkFontStyle fontStyle) { for (const auto& manager : this->getFontManagerOrder()) { - SkFontStyleSet* set = manager->matchFamily(fDefaultFamilyName.c_str()); + SkFontStyleSet* set = manager->matchFamily(familyName.c_str()); if (nullptr == set || set->count() == 0) { continue; } @@ -117,16 +106,12 @@ sk_sp FontCollection::matchDefaultTypeface(SkFontStyle fontStyle, co } sk_sp match(set->matchStyle(fontStyle)); - if (match || manager == fTestFontManager) { - typeface = std::move(match); - break; + if (match) { + return match; } } - if (typeface != nullptr && typeface.get() != nullptr) { - fTypefaces.set(familyKey, typeface); - } - return typeface; + return nullptr; } // Find ANY font in available font managers that resolves the unicode codepoint @@ -156,6 +141,7 @@ sk_sp FontCollection::defaultFallback() { void FontCollection::disableFontFallback() { fEnableFontFallback = false; } +void FontCollection::enableFontFallback() { fEnableFontFallback = true; } } // namespace textlayout } // namespace skia diff --git a/third_party/skia/modules/skparagraph/src/FontResolver.cpp b/third_party/skia/modules/skparagraph/src/FontResolver.cpp deleted file mode 100644 index ac02f98d675f..000000000000 --- a/third_party/skia/modules/skparagraph/src/FontResolver.cpp +++ /dev/null @@ -1,359 +0,0 @@ -// Copyright 2019 Google LLC. - -#include -#include -#include "include/core/SkBlurTypes.h" -#include "include/core/SkCanvas.h" -#include "include/core/SkFontMgr.h" -#include "include/core/SkPictureRecorder.h" -#include "modules/skparagraph/src/FontResolver.h" -#include "modules/skparagraph/src/ParagraphImpl.h" -#include "src/core/SkSpan.h" -#include "src/utils/SkUTF.h" - -namespace { -SkUnichar utf8_next(const char** ptr, const char* end) { - SkUnichar val = SkUTF::NextUTF8(ptr, end); - return val < 0 ? 0xFFFD : val; -} -} // namespace - -// TODO: FontResolver and FontIterator have common functionality -namespace skia { -namespace textlayout { - -bool FontResolver::findNext(const char* codepoint, SkFont* font, SkScalar* height) { - - SkASSERT(fFontIterator != nullptr); - TextIndex index = codepoint - fText.begin(); - while (fFontIterator != fFontSwitches.end() && fFontIterator->fStart <= index) { - if (fFontIterator->fStart == index) { - *font = fFontIterator->fFont; - *height = fFontIterator->fHeight; - return true; - } - ++fFontIterator; - } - return false; -} - -bool FontResolver::isEmpty() { - return fFontIterator == fFontSwitches.end(); -} - -void FontResolver::getFirstFont(SkFont* font, SkScalar* height) { - *font = fFirstResolvedFont.fFont; - *height = fFirstResolvedFont.fHeight; -} - -void FontResolver::findAllFontsForStyledBlock(const TextStyle& style, TextRange textRange) { - fCodepoints.reset(); - fCharacters.reset(); - fUnresolvedIndexes.reset(); - fUnresolvedCodepoints.reset(); - - // Extract all unicode codepoints - const char* end = fText.begin() + textRange.end; - const char* current = fText.begin() + textRange.start; - while (current != end) { - fCharacters.emplace_back(current); - fCodepoints.emplace_back(utf8_next(¤t, end)); - fUnresolvedIndexes.emplace_back(fUnresolvedIndexes.size()); - } - fUnresolvedCodepoints.push_back_n(fUnresolvedIndexes.size()); - fUnresolved = fCodepoints.size(); - - // Walk through all available fonts to resolve the block - auto wasUnresolved = fUnresolved; - for (auto& fontFamily : style.getFontFamilies()) { - auto typeface = fFontCollection->matchTypeface(fontFamily.c_str(), style.getFontStyle(), style.getLocale()); - if (typeface.get() == nullptr) { - continue; - } - - // Resolve all unresolved characters - auto font = makeFont(typeface, style.getFontSize(), style.getHeight()); - resolveAllCharactersByFont(font); - if (fUnresolved == 0) { - break; - } - } - - if (fUnresolved != wasUnresolved || allWhitespaces()) { - addResolvedWhitespacesToMapping(); - wasUnresolved = fUnresolved; - } - - if (fUnresolved > 0) { - // Check the default font - auto typeface = - fFontCollection->matchDefaultTypeface(style.getFontStyle(), style.getLocale()); - if (typeface != nullptr) { - auto font = makeFont(typeface, style.getFontSize(), style.getHeight()); - resolveAllCharactersByFont(font); - } - if (fUnresolved != wasUnresolved || allWhitespaces()) { - addResolvedWhitespacesToMapping(); - wasUnresolved = fUnresolved; - } - } - - if (fUnresolved > 0 && fFontCollection->fontFallbackEnabled()) { - while (fUnresolved > 0 && !allWhitespaces()) { - auto unicode = firstUnresolved(); - auto typeface = fFontCollection->defaultFallback(unicode, style.getFontStyle(), style.getLocale()); - if (typeface == nullptr) { - break; - } - - SkString name; - typeface->getFamilyName(&name); - auto font = makeFont(typeface, style.getFontSize(), style.getHeight()); - auto newResolved = resolveAllCharactersByFont(font); - if (newResolved == 0) { - // Not a single unicode character was resolved - break; - } - } - if (fUnresolved != wasUnresolved || allWhitespaces()) { - addResolvedWhitespacesToMapping(); - wasUnresolved = fUnresolved; - } - } -} - -size_t FontResolver::resolveAllCharactersByFont(const FontDescr& font) { - // Consolidate all unresolved unicodes in one array to make a batch call - SkTArray glyphs(fUnresolved); - glyphs.push_back_n(fUnresolved, SkGlyphID(0)); - font.fFont.getTypeface()->unicharsToGlyphs( - fUnresolved == fCodepoints.size() ? fCodepoints.data() : fUnresolvedCodepoints.data(), - fUnresolved, glyphs.data()); - - SkRange resolved(0, 0); - SkRange whitespaces(0, 0); - size_t stillUnresolved = 0; - - auto processRuns = [&]() { - if (resolved.width() == 0) { - return; - } - - if (resolved.width() == whitespaces.width()) { - // The entire run is just whitespaces; - // Remember the font and mark whitespaces back unresolved - // to calculate its mapping for the other fonts - for (auto w = whitespaces.start; w != whitespaces.end; ++w) { - if (fWhitespaces.find(w) == nullptr) { - fWhitespaces.set(w, font); - } - fUnresolvedIndexes[stillUnresolved] = w; - fUnresolvedCodepoints[stillUnresolved] = fCodepoints[w]; - ++stillUnresolved; - } - } else { - fFontMapping.set(fCharacters[resolved.start] - fText.begin(), font); - } - }; - - // Try to resolve all the unresolved unicode points - SkString name; - font.fFont.getTypeface()->getFamilyName(&name); - for (size_t i = 0; i < glyphs.size(); ++i) { - auto glyph = glyphs[i]; - auto index = fUnresolvedIndexes[i]; - auto codepoint = fCodepoints[index]; - - if (u_hasBinaryProperty(codepoint, UCHAR_BIDI_CONTROL)) { - // Skip control characters - they don't have to be resolved - } else if (glyph == 0) { - processRuns(); - - resolved = SkRange(0, 0); - whitespaces = SkRange(0, 0); - - fUnresolvedIndexes[stillUnresolved] = index; - fUnresolvedCodepoints[stillUnresolved] = codepoint; - ++stillUnresolved; - continue; - } - - if (index == resolved.end) { - ++resolved.end; - } else { - processRuns(); - resolved = SkRange(index, index + 1); - } - if (u_isUWhiteSpace(codepoint)) { - if (index == whitespaces.end) { - ++whitespaces.end; - } else { - whitespaces = SkRange(index, index + 1); - } - } else { - whitespaces = SkRange(0, 0); - } - } - - // One last time to take care of the tail run - processRuns(); - - size_t wasUnresolved = fUnresolved; - fUnresolved = stillUnresolved; - return wasUnresolved - stillUnresolved; -} - -void FontResolver::addResolvedWhitespacesToMapping() { - size_t resolvedWhitespaces = 0; - for (size_t i = 0; i < fUnresolved; ++i) { - auto index = fUnresolvedIndexes[i]; - auto found = fWhitespaces.find(index); - if (found != nullptr) { - fFontMapping.set(fCharacters[index] - fText.begin(), *found); - ++resolvedWhitespaces; - } - } - fUnresolved -= resolvedWhitespaces; -} - -FontDescr FontResolver::makeFont(sk_sp typeface, SkScalar size, SkScalar height) { - SkFont font(typeface, size); - font.setEdging(SkFont::Edging::kAntiAlias); - font.setHinting(SkFontHinting::kSlight); - font.setSubpixel(true); - FontDescr descr(font, height); - - const FontDescr* foundFont = fResolvedFonts.find(descr); - if (foundFont == nullptr) { - if (fResolvedFonts.count() == 0) { - fFirstResolvedFont = descr; - } - fResolvedFonts.add(descr); - } - return descr; -} - -SkUnichar FontResolver::firstUnresolved() { - if (fUnresolved == 0) return 0; - return fUnresolvedCodepoints[0]; -} - -void FontResolver::setLastResortFont() { - TextStyle foundStyle; - sk_sp typeface = nullptr; - for (auto& style : fStyles) { - for (auto& fontFamily : style.fStyle.getFontFamilies()) { - typeface = fFontCollection->matchTypeface(fontFamily.c_str(), style.fStyle.getFontStyle(), style.fStyle.getLocale()); - if (typeface.get() != nullptr) { - foundStyle = style.fStyle; - break; - } - } - if (typeface != nullptr) { - break; - } - } - if (typeface == nullptr) { - for (auto& fontFamily : fDefaultStyle.getFontFamilies()) { - typeface = fFontCollection->matchTypeface(fontFamily.c_str(), fDefaultStyle.getFontStyle(), fDefaultStyle.getLocale()); - if (typeface.get() != nullptr) { - foundStyle = fDefaultStyle; - break; - } - } - } - - if (typeface == nullptr) { - foundStyle = fStyles.empty() ? fDefaultStyle : fStyles.front().fStyle; - typeface = fFontCollection->defaultFallback(0, foundStyle.getFontStyle(), foundStyle.getLocale()); - } - - if (typeface == nullptr) { - typeface = fFontCollection->defaultFallback(); - } - - fFirstResolvedFont = makeFont(typeface, foundStyle.getFontSize(), foundStyle.getHeight()); - fFirstResolvedFont.fStart = 0; -} - -void FontResolver::findAllFontsForAllStyledBlocks(ParagraphImpl* master) { - fFontCollection = master->fontCollection(); - fStyles = master->styles(); - fText = master->text(); - fDefaultStyle = master->paragraphStyle().getTextStyle(); - - if (fText.empty()) { - setLastResortFont(); - return; - } - - Block combinedBlock; - for (auto& block : fStyles) { - SkASSERT(combinedBlock.fRange.width() == 0 || - combinedBlock.fRange.end == block.fRange.start); - - if (!combinedBlock.fRange.empty()) { - if (block.fStyle.matchOneAttribute(StyleType::kFont, combinedBlock.fStyle)) { - combinedBlock.add(block.fRange); - continue; - } - // Resolve all characters in the block for this style - this->findAllFontsForStyledBlock(combinedBlock.fStyle, combinedBlock.fRange); - } - - if (block.fStyle.isPlaceholder()) { - fFontMapping.set(block.fRange.start, FontDescr()); - combinedBlock.fRange = EMPTY_RANGE; - } else { - combinedBlock.fRange = block.fRange; - combinedBlock.fStyle = block.fStyle; - } - } - - this->findAllFontsForStyledBlock(combinedBlock.fStyle, combinedBlock.fRange); - - fFontSwitches.reset(); - FontDescr* prev = nullptr; - for (auto& ch : fText) { - if (fFontSwitches.count() == fFontMapping.count()) { - // Checked all - break; - } - auto found = fFontMapping.find(&ch - fText.begin()); - if (found == nullptr) { - // Insignificant character - continue; - } - if (prev == nullptr) { - prev = found; - prev->fStart = 0; - } - - if (*prev == *found) { - continue; - } - - if (prev->fFont.getTypeface() != nullptr) { - fFontSwitches.emplace_back(*prev); - } - prev = found; - prev->fStart = &ch - fText.begin(); - } - - if (prev != nullptr) { - if (prev->fFont.getTypeface() != nullptr) { - fFontSwitches.emplace_back(*prev); - } - } - - if (fFontSwitches.empty()) { - setLastResortFont(); - if (fFirstResolvedFont.fFont.getTypeface() != nullptr) { - fFontSwitches.emplace_back(fFirstResolvedFont); - } - } - - fFontIterator = fFontSwitches.begin(); -} -} // namespace textlayout -} // namespace skia diff --git a/third_party/skia/modules/skparagraph/src/FontResolver.h b/third_party/skia/modules/skparagraph/src/FontResolver.h deleted file mode 100644 index c17807959154..000000000000 --- a/third_party/skia/modules/skparagraph/src/FontResolver.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2019 Google LLC. -#ifndef FontResolver_DEFINED -#define FontResolver_DEFINED - -#include -#include -#include "include/core/SkFontMgr.h" -#include "include/core/SkRefCnt.h" -#include "include/private/SkTHash.h" -#include "modules/skparagraph/include/FontCollection.h" -#include "modules/skparagraph/include/TextStyle.h" -#include "modules/skparagraph/src/TextLine.h" -#include "src/core/SkSpan.h" - -namespace skia { -namespace textlayout { - -struct FontDescr { - FontDescr() { } - FontDescr(SkFont font, SkScalar height) - : fFont(font), fHeight(height), fStart(EMPTY_INDEX) { } - bool operator==(const FontDescr& a) const { - return this->fFont == a.fFont && this->fHeight == a.fHeight; - } - SkFont fFont; - SkScalar fHeight; - TextIndex fStart; -}; - -class FontResolver { -public: - - FontResolver() = default; - ~FontResolver() = default; - - void findAllFontsForAllStyledBlocks(ParagraphImpl* master); - bool findNext(const char* codepoint, SkFont* font, SkScalar* height); - void getFirstFont(SkFont* font, SkScalar* height); - - const SkTArray& switches() const { return fFontSwitches; } - - bool isEmpty(); - - bool allWhitespaces() const { return fUnresolved == SkToU32(fWhitespaces.count()); } - -private: - void findAllFontsForStyledBlock(const TextStyle& style, TextRange textRange); - FontDescr makeFont(sk_sp typeface, SkScalar size, SkScalar height); - size_t resolveAllCharactersByFont(const FontDescr& fontDescr); - void addResolvedWhitespacesToMapping(); - void setLastResortFont(); - - struct Hash { - uint32_t operator()(const FontDescr& key) const { - return SkTypeface::UniqueID(key.fFont.getTypeface()) + - SkScalarCeilToInt(key.fFont.getSize()) + - SkScalarCeilToInt(key.fHeight); - } - }; - - SkUnichar firstUnresolved(); - - sk_sp fFontCollection; - SkSpan fText; - SkSpan fStyles; - TextStyle fDefaultStyle; - - SkTArray fFontSwitches; - FontDescr* fFontIterator; - SkTHashSet fResolvedFonts; - FontDescr fFirstResolvedFont; - - SkTHashMap fFontMapping; - SkTArray fCodepoints; - SkTArray fCharacters; - SkTArray fUnresolvedIndexes; - SkTArray fUnresolvedCodepoints; - SkTHashMap fWhitespaces; - size_t fUnresolved; -}; -} // namespace textlayout -} // namespace skia - -#endif // FontResolver_DEFINED diff --git a/third_party/skia/modules/skparagraph/src/Iterators.h b/third_party/skia/modules/skparagraph/src/Iterators.h index 213fa95701c2..8f3f95e4f867 100644 --- a/third_party/skia/modules/skparagraph/src/Iterators.h +++ b/third_party/skia/modules/skparagraph/src/Iterators.h @@ -8,7 +8,6 @@ #include "include/core/SkCanvas.h" #include "include/core/SkFontMgr.h" #include "include/core/SkPictureRecorder.h" -#include "modules/skparagraph/src/FontResolver.h" #include "modules/skparagraph/src/ParagraphImpl.h" #include "src/core/SkSpan.h" #include "src/utils/SkUTF.h" @@ -16,41 +15,25 @@ namespace skia { namespace textlayout { -class FontIterator final : public SkShaper::FontRunIterator { +class SingleFontIterator final : public SkShaper::FontRunIterator { public: - FontIterator(SkSpan utf8, FontResolver* fontResolver) - : fText(utf8), fCurrentChar(utf8.begin()), fFontResolver(fontResolver) { } + SingleFontIterator(SkSpan utf8, const SkFont& font) + : fText(utf8), fCurrentChar(utf8.begin()), fFont(font) { } void consume() override { - SkASSERT(fCurrentChar < fText.end()); - fFontResolver->findNext(fCurrentChar, &fFont, &fLineHeight); - - // Move until we find the first character that cannot be resolved with the current font - while (++fCurrentChar != fText.end()) { - SkFont font; - SkScalar height; - if (fFontResolver->findNext(fCurrentChar, &font, &height)) { - if (fFont == font && fLineHeight == height) { - continue; - } - break; - } - } + fCurrentChar = fText.end(); } size_t endOfCurrentRun() const override { return fCurrentChar - fText.begin(); } bool atEnd() const override { return fCurrentChar == fText.end(); } const SkFont& currentFont() const override { return fFont; } - SkScalar currentLineHeight() const { return fLineHeight; } private: SkSpan fText; const char* fCurrentChar; SkFont fFont; - SkScalar fLineHeight; - FontResolver* fFontResolver; }; class LangIterator final : public SkShaper::LanguageRunIterator { diff --git a/third_party/skia/modules/skparagraph/src/OneLineShaper.cpp b/third_party/skia/modules/skparagraph/src/OneLineShaper.cpp new file mode 100644 index 000000000000..2974e5e0d1d4 --- /dev/null +++ b/third_party/skia/modules/skparagraph/src/OneLineShaper.cpp @@ -0,0 +1,556 @@ +// Copyright 2019 Google LLC. + +#include "modules/skparagraph/src/Iterators.h" +#include "modules/skparagraph/src/OneLineShaper.h" +#include +#include +#include "src/utils/SkUTF.h" + +namespace skia { +namespace textlayout { + +namespace { + +SkUnichar utf8_next(const char** ptr, const char* end) { + SkUnichar val = SkUTF::NextUTF8(ptr, end); + return val < 0 ? 0xFFFD : val; +} + +} + +void OneLineShaper::commitRunBuffer(const RunInfo&) { + + fCurrentRun->commit(); + + auto oldUnresolvedCount = fUnresolvedBlocks.size(); + + // Find all unresolved blocks + bool nothingWasUnresolved = true; + sortOutGlyphs([&](GlyphRange block){ + if (block.width() == 0) { + return; + } + nothingWasUnresolved = false; + addUnresolvedWithRun(block); + }); + + // Fill all the gaps between unresolved blocks with resolved ones + if (nothingWasUnresolved) { + // No unresolved blocks added - we resolved the block with one run entirely + addFullyResolved(); + return; + } + + auto& front = fUnresolvedBlocks.front(); // The one we need to resolve + auto& back = fUnresolvedBlocks.back(); // The one we have from shaper + if (fUnresolvedBlocks.size() == oldUnresolvedCount + 1 && + front.fText.width() == back.fText.width()) { + // The entire block remains unresolved! + if (front.fRun != nullptr) { + back.fRun = front.fRun; + } + } else { + fillGaps(oldUnresolvedCount); + } +} + +#ifdef SK_DEBUG +void OneLineShaper::printState() { + SkDebugf("Resolved: %d\n", fResolvedBlocks.size()); + for (auto& resolved : fResolvedBlocks) { + if (resolved.fRun == nullptr) { + SkDebugf("[%d:%d) unresolved\n", + resolved.fText.start, resolved.fText.end); + continue; + } + SkString name("???"); + if (resolved.fRun->fFont.getTypeface() != nullptr) { + resolved.fRun->fFont.getTypeface()->getFamilyName(&name); + } + SkDebugf("[%d:%d) ", resolved.fGlyphs.start, resolved.fGlyphs.end); + SkDebugf("[%d:%d) with %s\n", + resolved.fText.start, resolved.fText.end, + name.c_str()); + } + + auto size = fUnresolvedBlocks.size(); + SkDebugf("Unresolved: %d\n", size); + for (size_t i = 0; i < size; ++i) { + auto unresolved = fUnresolvedBlocks.front(); + fUnresolvedBlocks.pop(); + SkDebugf("[%d:%d)\n", unresolved.fText.start, unresolved.fText.end); + fUnresolvedBlocks.emplace(unresolved); + } +} +#endif + +void OneLineShaper::dropUnresolved() { + SkASSERT(!fUnresolvedBlocks.empty()); + fUnresolvedBlocks.pop(); +} + +void OneLineShaper::fillGaps(size_t startingCount) { + // Fill out gaps between all unresolved blocks + TextRange resolvedTextLimits = fCurrentRun->fTextRange; + if (!fCurrentRun->leftToRight()) { + std::swap(resolvedTextLimits.start, resolvedTextLimits.end); + } + TextIndex resolvedTextStart = resolvedTextLimits.start; + GlyphIndex resolvedGlyphsStart = 0; + + auto count = fUnresolvedBlocks.size(); + for (size_t i = 0; i < count; ++i) { + auto unresolved = fUnresolvedBlocks.front(); + fUnresolvedBlocks.pop(); + fUnresolvedBlocks.push(unresolved); + if (i < startingCount) { + // Skip the first ones + continue; + } + + TextRange resolvedText(resolvedTextStart, fCurrentRun->leftToRight() ? unresolved.fText.start : unresolved.fText.end); + if (resolvedText.width() > 0) { + if (!fCurrentRun->leftToRight()) { + std::swap(resolvedText.start, resolvedText.end); + } + + GlyphRange resolvedGlyphs(resolvedGlyphsStart, unresolved.fGlyphs.start); + RunBlock resolved(fCurrentRun, resolvedText, resolvedGlyphs, resolvedGlyphs.width()); + + fResolvedBlocks.emplace_back(resolved); + } + resolvedGlyphsStart = unresolved.fGlyphs.end; + resolvedTextStart = fCurrentRun->leftToRight() + ? unresolved.fText.end + : unresolved.fText.start; + } + + TextRange resolvedText(resolvedTextStart, resolvedTextLimits.end); + if (resolvedText.width() > 0) { + if (!fCurrentRun->leftToRight()) { + std::swap(resolvedText.start, resolvedText.end); + } + + GlyphRange resolvedGlyphs(resolvedGlyphsStart, fCurrentRun->size()); + RunBlock resolved(fCurrentRun, resolvedText, resolvedGlyphs, resolvedGlyphs.width()); + + fResolvedBlocks.emplace_back(resolved); + } +} + +void OneLineShaper::finish(TextRange blockText, SkScalar height, SkScalar& advanceX) { + + // Add all unresolved blocks to resolved blocks + while (!fUnresolvedBlocks.empty()) { + auto unresolved = fUnresolvedBlocks.front(); + fUnresolvedBlocks.pop(); + fResolvedBlocks.emplace_back(unresolved); + fUnresolvedGlyphs += unresolved.fGlyphs.width(); + } + + // Sort all pieces by text + std::sort(fResolvedBlocks.begin(), fResolvedBlocks.end(), + [](const RunBlock& a, const RunBlock& b) { + return a.fText.start < b.fText.start; + }); + + // Go through all of them + size_t lastTextEnd = blockText.start; + for (auto& block : fResolvedBlocks) { + + if (block.fText.end <= blockText.start) { + continue; + } + + if (block.fRun != nullptr) { + fParagraph->fFontSwitches.emplace_back(block.fText.start, block.fRun->fFont); + } + + auto run = block.fRun; + auto glyphs = block.fGlyphs; + auto text = block.fText; + if (lastTextEnd != text.start) { + SkDEBUGF("Text ranges mismatch: ...:%d] - [%d:%d] (%d-%d)\n", lastTextEnd, text.start, text.end, glyphs.start, glyphs.end); + SkASSERT(false); + } + lastTextEnd = text.end; + + if (block.isFullyResolved()) { + // Just move the entire run + block.fRun->fIndex = this->fParagraph->fRuns.size(); + this->fParagraph->fRuns.emplace_back(*block.fRun.get()); + block.fRun.reset(); + continue; + } else if (run == nullptr) { + continue; + } + + auto runAdvance = SkVector::Make(run->posX(glyphs.end) - run->posX(glyphs.start), run->fAdvance.fY); + const SkShaper::RunHandler::RunInfo info = { + run->fFont, run->fBidiLevel, runAdvance, glyphs.width(), + SkShaper::RunHandler::Range(text.start - run->fClusterStart, text.width())}; + this->fParagraph->fRuns.emplace_back( + this->fParagraph, + info, + run->fClusterStart, + height, + this->fParagraph->fRuns.count(), + advanceX + ); + auto piece = &this->fParagraph->fRuns.back(); + + // TODO: Optimize copying + for (size_t i = glyphs.start; i <= glyphs.end; ++i) { + + auto index = i - glyphs.start; + if (i < glyphs.end) { + piece->fGlyphs[index] = run->fGlyphs[i]; + piece->fBounds[index] = run->fBounds[i]; + } + piece->fClusterIndexes[index] = run->fClusterIndexes[i]; + piece->fOffsets[index] = run->fOffsets[i]; + piece->fPositions[index] = run->fPositions[i]; + piece->addX(index, advanceX); + } + + // Carve out the line text out of the entire run text + fAdvance.fX += runAdvance.fX; + fAdvance.fY = SkMaxScalar(fAdvance.fY, runAdvance.fY); + } + + advanceX = fAdvance.fX; + if (lastTextEnd != blockText.end) { + SkDEBUGF("Last range mismatch: %d - %d\n", lastTextEnd, blockText.end); + SkASSERT(false); + } +} + +void OneLineShaper::increment(TextIndex& index) { + auto text = fCurrentRun->fMaster->text(); + auto cluster = text.begin() + index; + + if (cluster < text.end()) { + utf8_next(&cluster, text.end()); + index = cluster - text.begin(); + } +} + +// Make it [left:right) regardless of a text direction +TextRange OneLineShaper::normalizeTextRange(GlyphRange glyphRange) { + TextRange textRange(clusterIndex(glyphRange.start), clusterIndex(glyphRange.end)); + if (!fCurrentRun->leftToRight()) { + std::swap(textRange.start, textRange.end); + } + return textRange; +} + +void OneLineShaper::addFullyResolved() { + if (this->fCurrentRun->size() == 0) { + return; + } + RunBlock resolved(fCurrentRun, + this->fCurrentRun->fTextRange, + GlyphRange(0, this->fCurrentRun->size()), + this->fCurrentRun->size()); + fResolvedBlocks.emplace_back(resolved); +} + +void OneLineShaper::addUnresolvedWithRun(GlyphRange glyphRange) { + RunBlock unresolved(fCurrentRun, clusteredText(glyphRange), glyphRange, 0); + if (unresolved.fGlyphs.width() == fCurrentRun->size()) { + SkASSERT(unresolved.fText.width() == fCurrentRun->fTextRange.width()); + } else if (!fUnresolvedBlocks.empty()) { + auto& lastUnresolved = fUnresolvedBlocks.back(); + if (lastUnresolved.fRun != nullptr && + lastUnresolved.fRun->fIndex == fCurrentRun->fIndex) { + + if (lastUnresolved.fText.end == unresolved.fText.start) { + // Two pieces next to each other - can join them + lastUnresolved.fText.end = unresolved.fText.end; + lastUnresolved.fGlyphs.end = glyphRange.end; + return; + } else if (lastUnresolved.fText.intersects(unresolved.fText)) { + // Few pieces of the same unresolved text block can ignore the second one + lastUnresolved.fGlyphs.start = + SkTMin(lastUnresolved.fGlyphs.start, glyphRange.start); + lastUnresolved.fGlyphs.end = SkTMax(lastUnresolved.fGlyphs.end, glyphRange.end); + lastUnresolved.fText = clusteredText(lastUnresolved.fGlyphs); + return; + } + } + } + fUnresolvedBlocks.emplace(unresolved); +} + +void OneLineShaper::sortOutGlyphs(std::function&& sortOutUnresolvedBLock) { + + auto text = fCurrentRun->fMaster->text(); + size_t unresolvedGlyphs = 0; + + GlyphRange block = EMPTY_RANGE; + for (size_t i = 0; i < fCurrentRun->size(); ++i) { + + // Inspect the glyph + auto glyph = fCurrentRun->fGlyphs[i]; + if (glyph != 0) { + if (block.start == EMPTY_INDEX) { + // Keep skipping resolved code points + continue; + } + // This is the end of unresolved block + block.end = i; + } else { + const char* cluster = text.begin() + clusterIndex(i); + SkUnichar codepoint = utf8_next(&cluster, text.end()); + if (u_iscntrl(codepoint)) { + // This codepoint does not have to be resolved; let's pretend it's resolved + if (block.start == EMPTY_INDEX) { + // Keep skipping resolved code points + continue; + } + // This is the end of unresolved block + block.end = i; + } else { + ++unresolvedGlyphs; + if (block.start == EMPTY_INDEX) { + // Start new unresolved block + block.start = i; + block.end = EMPTY_INDEX; + } else { + // Keep skipping unresolved block + } + continue; + } + } + + // Found an unresolved block + sortOutUnresolvedBLock(block); + block = EMPTY_RANGE; + } + + // One last block could have been left + if (block.start != EMPTY_INDEX) { + block.end = fCurrentRun->size(); + sortOutUnresolvedBLock(block); + } + +} + +void OneLineShaper::iterateThroughFontStyles(SkSpan styleSpan, + const ShapeSingleFontVisitor& visitor) { + Block combinedBlock; + for (auto& block : styleSpan) { + SkASSERT(combinedBlock.fRange.width() == 0 || + combinedBlock.fRange.end == block.fRange.start); + + if (!combinedBlock.fRange.empty()) { + if (block.fStyle.matchOneAttribute(StyleType::kFont, combinedBlock.fStyle)) { + combinedBlock.add(block.fRange); + continue; + } + // Resolve all characters in the block for this style + visitor(combinedBlock); + } + + combinedBlock.fRange = block.fRange; + combinedBlock.fStyle = block.fStyle; + } + + visitor(combinedBlock); +#ifdef SK_DEBUG + //printState(); +#endif +} + +void OneLineShaper::matchResolvedFonts(const TextStyle& textStyle, + const TypefaceVisitor& visitor) { + std::vector> typefaces = fParagraph->fFontCollection->findTypefaces(textStyle.getFontFamilies(), textStyle.getFontStyle()); + + for (const auto& typeface : typefaces) { + if (!visitor(typeface)) + return; + } + + if (fParagraph->fFontCollection->fontFallbackEnabled()) { + // Give fallback a clue + SkASSERT(!fUnresolvedBlocks.empty()); + auto unresolvedRange = fUnresolvedBlocks.front().fText; + auto unresolvedText = fParagraph->text(unresolvedRange); + const char* ch = unresolvedText.begin(); + SkUnichar unicode = utf8_next(&ch, unresolvedText.end()); + + auto typeface = fParagraph->fFontCollection->defaultFallback( + unicode, textStyle.getFontStyle(), textStyle.getLocale()); + + if (typeface != nullptr) { + if (!visitor(typeface)) { + return; + } + } + } +} + +bool OneLineShaper::iterateThroughShapingRegions(const ShapeVisitor& shape) { + + SkScalar advanceX = 0; + for (auto& placeholder : fParagraph->fPlaceholders) { + // Shape the text + if (placeholder.fTextBefore.width() > 0) { + // Set up the iterators + SkSpan textSpan = fParagraph->text(placeholder.fTextBefore); + SkSpan styleSpan(fParagraph->fTextStyles.begin() + placeholder.fBlocksBefore.start, + placeholder.fBlocksBefore.width()); + + if (!shape(textSpan, styleSpan, advanceX, placeholder.fTextBefore.start)) { + return false; + } + } + + if (placeholder.fRange.width() == 0) { + continue; + } + + // Get the placeholder font + std::vector> typefaces = fParagraph->fFontCollection->findTypefaces( + placeholder.fTextStyle.getFontFamilies(), + placeholder.fTextStyle.getFontStyle()); + sk_sp typeface = typefaces.size() ? typefaces.front() : nullptr; + SkFont font(typeface, placeholder.fTextStyle.getFontSize()); + + // "Shape" the placeholder + const SkShaper::RunHandler::RunInfo runInfo = { + font, + (uint8_t)2, + SkPoint::Make(placeholder.fStyle.fWidth, placeholder.fStyle.fHeight), + 1, + SkShaper::RunHandler::Range(placeholder.fRange.start, placeholder.fRange.width()) + }; + auto& run = fParagraph->fRuns.emplace_back(this->fParagraph, + runInfo, + 0, + 1.0f, + fParagraph->fRuns.count(), + advanceX); + + run.fPositions[0] = { advanceX, 0 }; + run.fOffsets[0] = {0, 0}; + run.fClusterIndexes[0] = 0; + run.fPlaceholder = &placeholder.fStyle; + advanceX += placeholder.fStyle.fWidth; + } + return true; +} + +bool OneLineShaper::shape() { + + // The text can be broken into many shaping sequences + // (by place holders, possibly, by hard line breaks or tabs, too) + uint8_t textDirection = fParagraph->fParagraphStyle.getTextDirection() == TextDirection::kLtr ? 2 : 1; + auto limitlessWidth = std::numeric_limits::max(); + + auto result = iterateThroughShapingRegions( + [this, textDirection, limitlessWidth] + (SkSpan textSpan, SkSpan styleSpan, SkScalar& advanceX, TextIndex textStart) { + + // Set up the shaper and shape the next + auto shaper = SkShaper::MakeShapeDontWrapOrReorder(); + if (shaper == nullptr) { + // For instance, loadICU does not work. We have to stop the process + return false; + } + + iterateThroughFontStyles(styleSpan, + [this, &shaper, textDirection, limitlessWidth, &advanceX](Block block) { + auto blockSpan = SkSpan(&block, 1); + + // Start from the beginning (hoping that it's a simple case one block - one run) + fHeight = block.fStyle.getHeight(); + fAdvance = SkVector::Make(advanceX, 0); + fCurrentText = block.fRange; + fUnresolvedBlocks.emplace(RunBlock(block.fRange)); + + matchResolvedFonts(block.fStyle, [&](sk_sp typeface) { + // Create one more font to try + SkFont font(std::move(typeface), block.fStyle.getFontSize()); + font.setEdging(SkFont::Edging::kAntiAlias); + font.setHinting(SkFontHinting::kSlight); + font.setSubpixel(true); + + // Walk through all the currently unresolved blocks + // (ignoring those that appear later) + auto count = fUnresolvedBlocks.size(); + while (count-- > 0) { + auto unresolvedRange = fUnresolvedBlocks.front().fText; + auto unresolvedText = fParagraph->text(unresolvedRange); + + SingleFontIterator fontIter(unresolvedText, font); + LangIterator lang(unresolvedText, blockSpan, + fParagraph->paragraphStyle().getTextStyle()); + auto script = SkShaper::MakeHbIcuScriptRunIterator(unresolvedText.begin(), + unresolvedText.size()); + auto bidi = SkShaper::MakeIcuBiDiRunIterator( + unresolvedText.begin(), unresolvedText.size(), textDirection); + if (bidi == nullptr) { + return false; + } + + fCurrentText = unresolvedRange; + shaper->shape(unresolvedText.begin(), unresolvedText.size(), fontIter, *bidi, + *script, lang, limitlessWidth, this); + + // Take off the queue the block we tried to resolved - + // whatever happened, we have now smaller pieces of it to deal with + this->dropUnresolved(); + } + + // Continue until we resolved all the code points + return !fUnresolvedBlocks.empty(); + }); + + this->finish(block.fRange, block.fStyle.getHeight(), advanceX); + }); + + return true; + }); + + return result; +} + +TextRange OneLineShaper::clusteredText(GlyphRange glyphs) { + + enum class Dir { left, right }; + enum class Pos { inclusive, exclusive }; + + // [left: right) + auto findBaseChar = [&](TextIndex index, Dir dir) -> TextIndex { + + if (!fCurrentRun->leftToRight()) { + ++index; + } + if (dir == Dir::right) { + while (index < fCurrentRun->fTextRange.end) { + if (this->fParagraph->fGraphemes.contains(index)) { + return index; + } + ++index; + } + return fCurrentRun->fTextRange.end; + } else { + while (index >= fCurrentRun->fTextRange.start) { + if (this->fParagraph->fGraphemes.contains(index)) { + return index; + } + --index; + } + return fCurrentRun->fTextRange.start; + } + }; + + TextRange textRange(normalizeTextRange(glyphs)); + textRange.start = findBaseChar(textRange.start, Dir::left); + textRange.end = findBaseChar(textRange.end, Dir::right); + + return { textRange.start, textRange.end }; +} +} +} diff --git a/third_party/skia/modules/skparagraph/src/OneLineShaper.h b/third_party/skia/modules/skparagraph/src/OneLineShaper.h new file mode 100644 index 000000000000..e25c0851164c --- /dev/null +++ b/third_party/skia/modules/skparagraph/src/OneLineShaper.h @@ -0,0 +1,113 @@ +// Copyright 2019 Google LLC. +#ifndef LineBreaker_DEFINED +#define LineBreaker_DEFINED + +#include // std::function +#include +#include "modules/skparagraph/include/TextStyle.h" +#include "modules/skparagraph/src/ParagraphImpl.h" +#include "modules/skparagraph/src/Run.h" +#include "src/core/SkSpan.h" + +namespace skia { +namespace textlayout { + +typedef size_t GlyphIndex; +typedef SkRange GlyphRange; + +class ParagraphImpl; +class OneLineShaper : public SkShaper::RunHandler { +public: + explicit OneLineShaper(ParagraphImpl* paragraph) + : fParagraph(paragraph) + , fHeight(0.0f) + , fAdvance(SkPoint::Make(0.0f, 0.0f)) + , fUnresolvedGlyphs(0) { } + + bool shape(); + + size_t unresolvedGlyphs() { return fUnresolvedGlyphs; } + +private: + + struct RunBlock { + RunBlock() : fRun(nullptr) { } + + // First unresolved block + explicit RunBlock(TextRange text) : fRun(nullptr), fText(text) { } + + RunBlock(std::shared_ptr run, TextRange text, GlyphRange glyphs, size_t score) + : fRun(std::move(run)) + , fText(text) + , fGlyphs(glyphs) { } + + // Entire run comes as one block fully resolved + explicit RunBlock(std::shared_ptr run) + : fRun(std::move(run)) + , fText(run->fTextRange) + , fGlyphs(GlyphRange(0, run->size())) { } + + std::shared_ptr fRun; + TextRange fText; + GlyphRange fGlyphs; + bool isFullyResolved() { return fRun != nullptr && fGlyphs.width() == fRun->size(); } + }; + + using ShapeVisitor = + std::function, SkSpan, SkScalar&, TextIndex)>; + bool iterateThroughShapingRegions(const ShapeVisitor& shape); + + using ShapeSingleFontVisitor = std::function; + void iterateThroughFontStyles(SkSpan styleSpan, const ShapeSingleFontVisitor& visitor); + + using TypefaceVisitor = std::function typeface)>; + void matchResolvedFonts(const TextStyle& textStyle, const TypefaceVisitor& visitor); +#ifdef SK_DEBUG + void printState(); +#endif + void dropUnresolved(); + void finish(TextRange text, SkScalar height, SkScalar& advanceX); + + void beginLine() override {} + void runInfo(const RunInfo&) override {} + void commitRunInfo() override {} + void commitLine() override {} + + Buffer runBuffer(const RunInfo& info) override { + fCurrentRun = std::make_shared(fParagraph, + info, + fCurrentText.start, + fHeight, + fParagraph->fRuns.count(), + fAdvance.fX); + return fCurrentRun->newRunBuffer(); + } + + void commitRunBuffer(const RunInfo&) override; + + TextRange clusteredText(GlyphRange glyphs); + ClusterIndex clusterIndex(GlyphIndex glyph) { + return fCurrentText.start + fCurrentRun->fClusterIndexes[glyph]; + } + void addFullyResolved(); + void addUnresolvedWithRun(GlyphRange glyphRange); + void sortOutGlyphs(std::function&& sortOutUnresolvedBLock); + ClusterRange normalizeTextRange(GlyphRange glyphRange); + void increment(TextIndex& index); + void fillGaps(size_t); + + ParagraphImpl* fParagraph; + TextRange fCurrentText; + SkScalar fHeight; + SkVector fAdvance; + size_t fUnresolvedGlyphs; + + // TODO: Something that is not thead-safe since we don't need it + std::shared_ptr fCurrentRun; + std::queue fUnresolvedBlocks; + std::vector fResolvedBlocks; +}; + +} +} +#endif diff --git a/third_party/skia/modules/skparagraph/src/ParagraphCache.cpp b/third_party/skia/modules/skparagraph/src/ParagraphCache.cpp index 80da392b7c07..05d951c6b95e 100644 --- a/third_party/skia/modules/skparagraph/src/ParagraphCache.cpp +++ b/third_party/skia/modules/skparagraph/src/ParagraphCache.cpp @@ -9,12 +9,12 @@ class ParagraphCacheKey { public: ParagraphCacheKey(const ParagraphImpl* paragraph) : fText(paragraph->fText.c_str(), paragraph->fText.size()) - , fFontSwitches(paragraph->switches()) + , fResolvedFonts(paragraph->resolvedFonts()) , fTextStyles(paragraph->fTextStyles) , fParagraphStyle(paragraph->paragraphStyle()) { } SkString fText; - SkTArray fFontSwitches; + SkTArray fResolvedFonts; SkTArray fTextStyles; ParagraphStyle fParagraphStyle; }; @@ -23,18 +23,19 @@ class ParagraphCacheValue { public: ParagraphCacheValue(const ParagraphImpl* paragraph) : fKey(ParagraphCacheKey(paragraph)) - , fInternalState(paragraph->state()) + , fInternalState(paragraph->fState) , fRuns(paragraph->fRuns) - , fClusters(paragraph->fClusters) { } + , fClusters(paragraph->fClusters) + , fUnresolvedGlyphs(paragraph->fUnresolvedGlyphs){ } // Input == key ParagraphCacheKey fKey; // Shaped results: InternalState fInternalState; - SkTArray fRuns; + SkTArray fRuns; SkTArray fClusters; - SkTArray fRunShifts; + size_t fUnresolvedGlyphs; }; @@ -46,8 +47,8 @@ uint32_t ParagraphCache::KeyHash::mix(uint32_t hash, uint32_t data) const { } uint32_t ParagraphCache::KeyHash::operator()(const ParagraphCacheKey& key) const { uint32_t hash = 0; - for (auto& fd : key.fFontSwitches) { - hash = mix(hash, SkGoodHash()(fd.fStart)); + for (auto& fd : key.fResolvedFonts) { + hash = mix(hash, SkGoodHash()(fd.fTextStart)); hash = mix(hash, SkGoodHash()(fd.fFont.getSize())); if (fd.fFont.getTypeface() != nullptr) { @@ -74,7 +75,7 @@ bool operator==(const ParagraphCacheKey& a, const ParagraphCacheKey& b) { if (a.fText.size() != b.fText.size()) { return false; } - if (a.fFontSwitches.count() != b.fFontSwitches.count()) { + if (a.fResolvedFonts.count() != b.fResolvedFonts.count()) { return false; } if (a.fText != b.fText) { @@ -89,10 +90,10 @@ bool operator==(const ParagraphCacheKey& a, const ParagraphCacheKey& b) { return false; } - for (size_t i = 0; i < a.fFontSwitches.size(); ++i) { - auto& fda = a.fFontSwitches[i]; - auto& fdb = b.fFontSwitches[i]; - if (fda.fStart != fdb.fStart) { + for (size_t i = 0; i < a.fResolvedFonts.size(); ++i) { + auto& fda = a.fResolvedFonts[i]; + auto& fdb = b.fResolvedFonts[i]; + if (fda.fTextStart != fdb.fTextStart) { return false; } if (fda.fFont != fdb.fFont) { @@ -149,7 +150,6 @@ ParagraphCache::~ParagraphCache() { } void ParagraphCache::updateFrom(const ParagraphImpl* paragraph, Entry* entry) { entry->fValue->fInternalState = paragraph->state(); - entry->fValue->fRunShifts = paragraph->fRunShifts; for (size_t i = 0; i < paragraph->fRuns.size(); ++i) { auto& run = paragraph->fRuns[i]; if (run.fSpaced) { @@ -171,12 +171,8 @@ void ParagraphCache::updateTo(ParagraphImpl* paragraph, const Entry* entry) { cluster.setMaster(paragraph); } - paragraph->fRunShifts.reset(); - for (auto& runShift : entry->fValue->fRunShifts) { - paragraph->fRunShifts.push_back(runShift); - } - paragraph->fState = entry->fValue->fInternalState; + paragraph->fUnresolvedGlyphs = entry->fValue->fUnresolvedGlyphs; } void ParagraphCache::printStatistics() { diff --git a/third_party/skia/modules/skparagraph/src/ParagraphImpl.cpp b/third_party/skia/modules/skparagraph/src/ParagraphImpl.cpp index 43c4a68de05c..26d128ea409d 100644 --- a/third_party/skia/modules/skparagraph/src/ParagraphImpl.cpp +++ b/third_party/skia/modules/skparagraph/src/ParagraphImpl.cpp @@ -3,7 +3,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkFontMgr.h" #include "include/core/SkPictureRecorder.h" -#include "modules/skparagraph/src/Iterators.h" +#include "modules/skparagraph/src/OneLineShaper.h" #include "modules/skparagraph/src/ParagraphImpl.h" #include "modules/skparagraph/src/Run.h" #include "modules/skparagraph/src/TextWrapper.h" @@ -11,6 +11,7 @@ #include "src/utils/SkUTF.h" #include #include +#include namespace skia { namespace textlayout { @@ -23,6 +24,7 @@ SkScalar littleRound(SkScalar a) { // This rounding is done to match Flutter tests. Must be removed.. return SkScalarRoundToScalar(a * 100.0)/100.0; } + } TextRange operator*(const TextRange& a, const TextRange& b) { @@ -71,10 +73,12 @@ ParagraphImpl::ParagraphImpl(const SkString& text, , fPlaceholders(std::move(placeholders)) , fText(text) , fState(kUnknown) + , fUnresolvedGlyphs(0) , fPicture(nullptr) , fStrutMetrics(false) , fOldWidth(0) - , fOldHeight(0) { + , fOldHeight(0) + , fOrigin(SkRect::MakeEmpty()) { // TODO: extractStyles(); } @@ -87,10 +91,12 @@ ParagraphImpl::ParagraphImpl(const std::u16string& utf16text, , fTextStyles(std::move(blocks)) , fPlaceholders(std::move(placeholders)) , fState(kUnknown) + , fUnresolvedGlyphs(0) , fPicture(nullptr) , fStrutMetrics(false) , fOldWidth(0) - , fOldHeight(0) { + , fOldHeight(0) + , fOrigin(SkRect::MakeEmpty()) { icu::UnicodeString unicode((UChar*)utf16text.data(), SkToS32(utf16text.size())); std::string str; unicode.toUTF8String(str); @@ -100,6 +106,14 @@ ParagraphImpl::ParagraphImpl(const std::u16string& utf16text, ParagraphImpl::~ParagraphImpl() = default; +int32_t ParagraphImpl::unresolvedGlyphs() { + if (fState < kShaped) { + return -1; + } + + return fUnresolvedGlyphs; +} + void ParagraphImpl::layout(SkScalar rawWidth) { // TODO: This rounding is done to match Flutter tests. Must be removed... @@ -107,6 +121,7 @@ void ParagraphImpl::layout(SkScalar rawWidth) { if (fState < kShaped) { // Layout marked as dirty for performance/testing reasons this->fRuns.reset(); + this->fRunShifts.reset(); this->fClusters.reset(); } else if (fState >= kLineBroken && (fOldWidth != floorWidth || fOldHeight != fHeight)) { // We can use the results from SkShaper but have to break lines again @@ -115,6 +130,8 @@ void ParagraphImpl::layout(SkScalar rawWidth) { if (fState < kShaped) { fClusters.reset(); + fGraphemes.reset(); + this->markGraphemes(); if (!this->shapeTextIntoEndlessLine()) { @@ -208,7 +225,7 @@ void ParagraphImpl::paint(SkCanvas* canvas, SkScalar x, SkScalar y) { fState = kDrawn; } - SkMatrix matrix = SkMatrix::MakeTrans(x, y); + SkMatrix matrix = SkMatrix::MakeTrans(x + fOrigin.fLeft, y + fOrigin.fTop); canvas->drawPicture(fPicture, &matrix, nullptr); } @@ -237,11 +254,11 @@ void ParagraphImpl::buildClusterTable() { if (!fClusters.empty()) { fClusters.back().setBreakType(Cluster::SoftLineBreak); } - auto& cluster = fClusters.emplace_back(this, runIndex, 0ul, 0ul, text, - run.advance().fX, run.advance().fY); + auto& cluster = fClusters.emplace_back(this, runIndex, 0ul, 0ul, text, run.advance().fX, + run.advance().fY); cluster.setBreakType(Cluster::SoftLineBreak); } else { - fClusters.reserve(fClusters.size() + fRuns.size()); + fClusters.reserve(fClusters.size() + run.size()); // Walk through the glyph in the direction of input text run.iterateThroughClustersInTextOrder([runIndex, this](size_t glyphStart, size_t glyphEnd, @@ -342,156 +359,28 @@ void ParagraphImpl::markLineBreaks() { bool ParagraphImpl::shapeTextIntoEndlessLine() { - class ShapeHandler final : public SkShaper::RunHandler { - public: - explicit ShapeHandler(ParagraphImpl& paragraph, size_t firstChar, FontIterator* fontIterator, SkScalar advanceX) - : fParagraph(¶graph) - , fFirstChar(firstChar) - , fFontIterator(fontIterator) - , fAdvance(SkVector::Make(advanceX, 0)) {} - - SkVector advance() const { return fAdvance; } - - private: - void beginLine() override {} - - void runInfo(const RunInfo&) override {} - - void commitRunInfo() override {} - - Buffer runBuffer(const RunInfo& info) override { - auto& run = fParagraph->fRuns.emplace_back(fParagraph, - info, - fFirstChar, - fFontIterator->currentLineHeight(), - fParagraph->fRuns.count(), - fAdvance.fX); - return run.newRunBuffer(); - } - - void commitRunBuffer(const RunInfo&) override { - - auto& run = fParagraph->fRuns.back(); - if (run.size() == 0) { - fParagraph->fRuns.pop_back(); - return; - } - - // Carve out the line text out of the entire run text - fAdvance.fX += run.advance().fX; - fAdvance.fY = SkMaxScalar(fAdvance.fY, run.advance().fY); - run.fPlaceholder = nullptr; - } - - void commitLine() override {} - - ParagraphImpl* fParagraph; - size_t fFirstChar; - FontIterator* fFontIterator; - SkVector fAdvance; - }; - - // This is a pretty big step - resolving all characters against all given fonts - fFontResolver.findAllFontsForAllStyledBlocks(this); - - if (fText.size() == 0 || fFontResolver.switches().size() == 0) { + if (fText.size() == 0) { return false; } // Check the font-resolved text against the cache - if (!fFontCollection->getParagraphCache()->findParagraph(this)) { - // The text can be broken into many shaping sequences - // (by place holders, possibly, by hard line breaks or tabs, too) - uint8_t textDirection = fParagraphStyle.getTextDirection() == TextDirection::kLtr ? 2 : 1; - auto limitlessWidth = std::numeric_limits::max(); - - auto result = iterateThroughShapingRegions( - [this, textDirection, limitlessWidth] - (SkSpan textSpan, SkSpan styleSpan, SkScalar& advanceX, size_t start) { - - LangIterator lang(textSpan, styleSpan, paragraphStyle().getTextStyle()); - FontIterator font(textSpan, &fFontResolver); - auto script = SkShaper::MakeHbIcuScriptRunIterator(textSpan.begin(), textSpan.size()); - auto bidi = SkShaper::MakeIcuBiDiRunIterator(textSpan.begin(), textSpan.size(), textDirection); - if (bidi == nullptr) { - return false; - } - - // Set up the shaper and shape the next - ShapeHandler handler(*this, start, &font, advanceX); - auto shaper = SkShaper::MakeShapeDontWrapOrReorder(); - SkASSERT_RELEASE(shaper != nullptr); - shaper->shape(textSpan.begin(), textSpan.size(), font, *bidi, *script, lang, limitlessWidth, &handler); - advanceX = handler.advance().fX; - return true; - }); - if (!result) { - return false; - } - } - - // Clean the array for justification - if (fParagraphStyle.getTextAlign() == TextAlign::kJustify) { - fRunShifts.reset(); - fRunShifts.push_back_n(fRuns.size(), RunShifts()); - for (size_t i = 0; i < fRuns.size(); ++i) { - fRunShifts[i].fShifts.push_back_n(fRuns[i].size() + 1, 0.0); - } + if (fFontCollection->getParagraphCache()->findParagraph(this)) { + this->fRunShifts.reset(); + return true; } - return true; -} - -bool ParagraphImpl::iterateThroughShapingRegions(ShapeVisitor shape) { - - SkScalar advanceX = 0; - for (auto& placeholder : fPlaceholders) { - // Shape the text - if (placeholder.fTextBefore.width() > 0) { - // Set up the iterators - SkSpan textSpan = this->text(placeholder.fTextBefore); - SkSpan styleSpan(fTextStyles.begin() + placeholder.fBlocksBefore.start, - placeholder.fBlocksBefore.width()); - - if (!shape(textSpan, styleSpan, advanceX, placeholder.fTextBefore.start)) { - return false; - } - } + fFontSwitches.reset(); - if (placeholder.fRange.width() == 0) { - continue; - } + OneLineShaper oneLineShaper(this); + auto result = oneLineShaper.shape(); + fUnresolvedGlyphs = oneLineShaper.unresolvedGlyphs(); - // Get the placeholder font - sk_sp typeface = nullptr; - for (auto& ff : placeholder.fTextStyle.getFontFamilies()) { - typeface = fFontCollection->matchTypeface(ff.c_str(), placeholder.fTextStyle.getFontStyle(), placeholder.fTextStyle.getLocale()); - if (typeface != nullptr) { - break; - } - } - SkFont font(typeface, placeholder.fTextStyle.getFontSize()); - - // "Shape" the placeholder - const SkShaper::RunHandler::RunInfo runInfo = { - font, - (uint8_t)2, - SkPoint::Make(placeholder.fStyle.fWidth, placeholder.fStyle.fHeight), - 1, - SkShaper::RunHandler::Range(placeholder.fRange.start, placeholder.fRange.width()) - }; - auto& run = fRuns.emplace_back(this, - runInfo, - 0, - 1, - fRuns.count(), - advanceX); - run.fPositions[0] = { advanceX, 0 }; - run.fClusterIndexes[0] = 0; - run.fPlaceholder = &placeholder.fStyle; - advanceX += placeholder.fStyle.fWidth; + if (!result) { + return false; + } else { + this->fRunShifts.reset(); + return true; } - return true; } void ParagraphImpl::breakShapedTextIntoLines(SkScalar maxWidth) { @@ -531,6 +420,9 @@ void ParagraphImpl::breakShapedTextIntoLines(SkScalar maxWidth) { void ParagraphImpl::formatLines(SkScalar maxWidth) { auto effectiveAlign = fParagraphStyle.effective_align(); + if (effectiveAlign == TextAlign::kJustify) { + this->resetRunShifts(); + } for (auto& line : fLines) { if (&line == &fLines.back() && effectiveAlign == TextAlign::kJustify) { effectiveAlign = line.assumedTextAlign(); @@ -541,7 +433,8 @@ void ParagraphImpl::formatLines(SkScalar maxWidth) { void ParagraphImpl::paintLinesIntoPicture() { SkPictureRecorder recorder; - SkCanvas* textCanvas = recorder.beginRecording(fWidth, fHeight, nullptr, 0); + SkCanvas* textCanvas = recorder.beginRecording(fOrigin.width(), fOrigin.height(), nullptr, 0); + textCanvas->translate(-fOrigin.fLeft, -fOrigin.fTop); for (auto& line : fLines) { line.paint(textCanvas); @@ -556,24 +449,13 @@ void ParagraphImpl::resolveStrut() { return; } - sk_sp typeface; - if (strutStyle.getFontFamilies().empty()) { - typeface = fFontCollection->matchTypeface("", strutStyle.getFontStyle(), SkString("")); - } else { - for (auto& fontFamily : strutStyle.getFontFamilies()) { - typeface = fFontCollection->matchTypeface(fontFamily.c_str(), strutStyle.getFontStyle(), SkString("")); - if (typeface.get() != nullptr) { - break; - } - } - } - - if (typeface.get() == nullptr) { + std::vector> typefaces = fFontCollection->findTypefaces(strutStyle.getFontFamilies(), strutStyle.getFontStyle()); + if (typefaces.empty()) { SkDEBUGF("Could not resolve strut font\n"); return; } - SkFont font(typeface, strutStyle.getFontSize()); + SkFont font(typefaces.front(), strutStyle.getFontSize()); SkFontMetrics metrics; font.getMetrics(&metrics); @@ -614,6 +496,36 @@ BlockRange ParagraphImpl::findAllBlocks(TextRange textRange) { return { begin, end + 1 }; } +void ParagraphImpl::calculateBoundaries(ClusterRange clusters, SkVector offset, SkVector advance) { + + auto boundaries = SkRect::MakeXYWH(0, 0, advance.fX, advance.fY); + + if (!fRuns.empty()) { + // TODO: Move it down to the TextWrapper to avoid extra calculations + auto run = &fRuns[0]; + auto runShift = 0.0f; + auto clusterShift = 0.0f; + for (auto index = clusters.start; index < clusters.end; ++index) { + auto& cluster = fClusters[index]; + if (cluster.runIndex() != run->index()) { + run = &fRuns[cluster.runIndex()]; + runShift += clusterShift; + clusterShift = 0; + } + clusterShift += cluster.width(); + for (auto i = cluster.startPos(); i < cluster.endPos(); ++i) { + auto posX = run->posX(i); + auto posY = run->posY(i); + auto bounds = run->getBounds(i); + bounds.offset(posX + runShift, posY); + boundaries.joinPossiblyEmptyRect(bounds); + } + } + } + boundaries.offset(offset); + fOrigin.joinPossiblyEmptyRect(boundaries); +} + TextLine& ParagraphImpl::addLine(SkVector offset, SkVector advance, TextRange text, @@ -625,12 +537,16 @@ TextLine& ParagraphImpl::addLine(SkVector offset, // Define a list of styles that covers the line auto blocks = findAllBlocks(text); + auto correctedOffset = offset; + correctedOffset.offset(0, sizes.baseline()); + calculateBoundaries(clusters, correctedOffset, advance); + return fLines.emplace_back(this, offset, advance, blocks, text, textWithSpaces, clusters, clustersWithGhosts, widthWithSpaces, sizes); } -void ParagraphImpl::markGraphemes() { +void ParagraphImpl::markGraphemes16() { - if (!fGraphemes.empty()) { + if (!fGraphemes16.empty()) { return; } @@ -648,9 +564,9 @@ void ParagraphImpl::markGraphemes() { SkUnichar u = SkUTF::NextUTF8(&ptr, end); uint16_t buffer[2]; size_t count = SkUTF::ToUTF16(u, buffer); - fCodePoints.emplace_back(EMPTY_INDEX, index); + fCodePoints.emplace_back(EMPTY_INDEX, index, count > 1 ? 2 : 1); if (count > 1) { - fCodePoints.emplace_back(EMPTY_INDEX, index); + fCodePoints.emplace_back(EMPTY_INDEX, index, 1); } } @@ -666,16 +582,38 @@ void ParagraphImpl::markGraphemes() { ++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) { - fCodePoints[i].fGrapeme = fGraphemes.size(); + //SkDebugf(" [%d] = %d + %d\n", i, fCodePoints[i].fTextIndex, fCodePoints[i].fIndex); + fCodePoints[i].fGrapheme = fGraphemes16.size(); } - fGraphemes.emplace_back(codepoints, TextRange(startPos, endPos)); + 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, @@ -684,11 +622,14 @@ std::vector ParagraphImpl::getRectsForRange(unsigned start, RectWidthStyle rectWidthStyle) { std::vector results; if (fText.isEmpty()) { - results.emplace_back(SkRect::MakeXYWH(0, 0, 0, fHeight), fParagraphStyle.getTextDirection()); + if (start == 0 && end > 0) { + // On account of implied "\n" that is always at the end of the text + results.emplace_back(SkRect::MakeXYWH(0, 0, 0, fHeight), fParagraphStyle.getTextDirection()); + } return results; } - markGraphemes(); + markGraphemes16(); if (start >= end || start > fCodePoints.size() || end == 0) { return results; @@ -696,27 +637,34 @@ std::vector ParagraphImpl::getRectsForRange(unsigned start, // Snap text edges to the code points/grapheme edges TextRange text(fText.size(), fText.size()); - if (end < fCodePoints.size()) { - text.end = fCodePoints[end].fTextIndex; - auto endGrapheme = fGraphemes[fCodePoints[end].fGrapeme]; - if (text.end < endGrapheme.fTextRange.end) { - text.end = endGrapheme.fTextRange.start; - } - } + if (start < fCodePoints.size()) { - text.start = fCodePoints[start].fTextIndex; - auto startGrapheme = fGraphemes[fCodePoints[start].fGrapeme]; - if (startGrapheme.fTextRange.end <= text.end) { - // TODO: remove the change that is done to pass txtlib unittests - // (GetRectsForRangeIncludeCombiningCharacter). Must be removed... - if (startGrapheme.fCodepointRange.end - start == 1 || - startGrapheme.fCodepointRange.start == start) { + auto startGrapheme = fGraphemes16[fCodePoints[start].fGrapheme]; + auto lastGrapheme = fCodePoints[start].fGrapheme == fGraphemes16.size() - 1; + if (start > startGrapheme.fCodepointRange.start) { + if (end == startGrapheme.fCodepointRange.end && + start == startGrapheme.fCodepointRange.end - 1) { + // This is a fix to make test GetRectsForRangeIncludeCombiningCharacter work + // Must be removed... text.start = startGrapheme.fTextRange.start; } else { - text.start = startGrapheme.fTextRange.end; + text.start = lastGrapheme && end >= fCodePoints.size() + ? fCodePoints.back().fTextIndex + : startGrapheme.fTextRange.end; } - } else if (text.start > startGrapheme.fTextRange.start) { - text.start = startGrapheme.fTextRange.end; + } else { + text.start = startGrapheme.fTextRange.start; + } + } + + if (end < fCodePoints.size()) { + auto codepoint = fCodePoints[end]; + auto endGrapheme = fGraphemes16[fCodePoints[end].fGrapheme]; + if (text.start == endGrapheme.fTextRange.start && + end + codepoint.fIndex == fCodePoints.size()) { + text.end = endGrapheme.fTextRange.end; + } else { + text.end = endGrapheme.fTextRange.start; } } @@ -877,12 +825,7 @@ std::vector ParagraphImpl::getRectsForRange(unsigned start, std::vector ParagraphImpl::getRectsForPlaceholders() { std::vector boxes; if (fText.isEmpty()) { - boxes.emplace_back(SkRect::MakeXYWH(0, 0, 0, fHeight), fParagraphStyle.getTextDirection()); - return boxes; - } - if (fPlaceholders.size() <= 1) { - boxes.emplace_back(SkRect::MakeXYWH(0, 0, 0, fHeight), fParagraphStyle.getTextDirection()); - return boxes; + return boxes; } for (auto& line : fLines) { line.iterateThroughVisualRuns( @@ -913,6 +856,7 @@ std::vector ParagraphImpl::getRectsForPlaceholders() { return boxes; } + // TODO: Deal with RTL here PositionWithAffinity ParagraphImpl::getGlyphPositionAtCoordinate(SkScalar dx, SkScalar dy) { @@ -921,7 +865,7 @@ PositionWithAffinity ParagraphImpl::getGlyphPositionAtCoordinate(SkScalar dx, Sk return result; } - markGraphemes(); + markGraphemes16(); for (auto& line : fLines) { // Let's figure out if we can stop looking auto offsetY = line.offset().fY; @@ -980,7 +924,7 @@ PositionWithAffinity ParagraphImpl::getGlyphPositionAtCoordinate(SkScalar dx, Sk [](const Codepoint& lhs,size_t rhs) -> bool { return lhs.fTextIndex < rhs; }); auto codepointIndex = codepoint - fCodePoints.begin(); - auto codepoints = fGraphemes[codepoint->fGrapeme].fCodepointRange; + auto codepoints = fGraphemes16[codepoint->fGrapheme].fCodepointRange; auto graphemeSize = codepoints.width(); // We only need to inspect one glyph (maybe not even the entire glyph) @@ -1111,9 +1055,9 @@ Block& ParagraphImpl::block(BlockIndex blockIndex) { return fTextStyles[blockIndex]; } +// TODO: Cache this information void ParagraphImpl::resetRunShifts() { - fRunShifts.reset(); - fRunShifts.push_back_n(fRuns.size(), RunShifts()); + fRunShifts.resize(fRuns.size()); for (size_t i = 0; i < fRuns.size(); ++i) { fRunShifts[i].fShifts.push_back_n(fRuns[i].size() + 1, 0.0); } @@ -1136,7 +1080,7 @@ void ParagraphImpl::setState(InternalState state) { case kLineBroken: this->resetContext(); this->resolveStrut(); - this->resetRunShifts(); + this->fRunShifts.reset(); fLines.reset(); case kFormatted: fPicture = nullptr; @@ -1152,9 +1096,9 @@ InternalLineMetrics ParagraphImpl::computeEmptyMetrics() { auto defaultTextStyle = paragraphStyle().getTextStyle(); - auto typeface = fontCollection()->matchTypeface( - defaultTextStyle.getFontFamilies().front().c_str(), defaultTextStyle.getFontStyle(), - defaultTextStyle.getLocale()); + auto typefaces = fontCollection()->findTypefaces( + defaultTextStyle.getFontFamilies(), defaultTextStyle.getFontStyle()); + auto typeface = typefaces.size() ? typefaces.front() : nullptr; SkFont font(typeface, defaultTextStyle.getFontSize()); InternalLineMetrics metrics(font, paragraphStyle().getStrutStyle().getForceStrutHeight()); diff --git a/third_party/skia/modules/skparagraph/src/ParagraphImpl.h b/third_party/skia/modules/skparagraph/src/ParagraphImpl.h index 5630698dd6dc..eb79275e9156 100644 --- a/third_party/skia/modules/skparagraph/src/ParagraphImpl.h +++ b/third_party/skia/modules/skparagraph/src/ParagraphImpl.h @@ -12,7 +12,6 @@ #include "modules/skparagraph/include/Paragraph.h" #include "modules/skparagraph/include/ParagraphStyle.h" #include "modules/skparagraph/include/TextStyle.h" -#include "modules/skparagraph/src/FontResolver.h" #include "modules/skparagraph/src/Run.h" #include "modules/skparagraph/src/TextLine.h" @@ -42,6 +41,14 @@ struct StyleBlock { TStyle fStyle; }; +struct ResolvedFontDescriptor { + + ResolvedFontDescriptor(TextIndex index, SkFont font) + : fFont(font), fTextStart(index) { } + SkFont fFont; + TextIndex fTextStart; +}; + class TextBreaker { public: TextBreaker() : fInitialized(false), fPos(-1) {} @@ -118,7 +125,6 @@ class ParagraphImpl final : public Paragraph { SkSpan text() const { return SkSpan(fText.c_str(), fText.size()); } InternalState state() const { return fState; } SkSpan runs() { return SkSpan(fRuns.data(), fRuns.size()); } - const SkTArray& switches() const { return fFontResolver.switches(); } SkSpan styles() { return SkSpan(fTextStyles.data(), fTextStyles.size()); } @@ -128,11 +134,19 @@ class ParagraphImpl final : public Paragraph { sk_sp fontCollection() const { return fFontCollection; } void formatLines(SkScalar maxWidth); - void shiftCluster(ClusterIndex index, SkScalar shift) { + void shiftCluster(ClusterIndex index, SkScalar shift, SkScalar lastShift) { auto& cluster = fClusters[index]; - auto& run = fRunShifts[cluster.runIndex()]; - for (size_t pos = cluster.startPos(); pos < cluster.endPos(); ++pos) { - run.fShifts[pos] = shift; + auto& runShift = fRunShifts[cluster.runIndex()]; + auto& run = fRuns[cluster.runIndex()]; + auto start = cluster.startPos(); + auto end = cluster.endPos(); + if (!run.leftToRight()) { + runShift.fShifts[start] = lastShift; + ++start; + ++end; + } + for (size_t pos = start; pos < end; ++pos) { + runShift.fShifts[pos] = shift; } } @@ -141,8 +155,6 @@ class ParagraphImpl final : public Paragraph { return fRunShifts[index].fShifts[pos]; } - SkScalar lineShift(size_t index) { return fLines[index].shift(); } - bool strutEnabled() const { return paragraphStyle().getStrutStyle().getStrutEnabled(); } bool strutForceHeight() const { return paragraphStyle().getStrutStyle().getForceStrutHeight(); @@ -152,27 +164,6 @@ class ParagraphImpl final : public Paragraph { } InternalLineMetrics strutMetrics() const { return fStrutMetrics; } - Measurement measurement() { - return { - fAlphabeticBaseline, - fIdeographicBaseline, - fHeight, - fWidth, - fMaxIntrinsicWidth, - fMinIntrinsicWidth, - fLongestLine, - }; - } - void setMeasurement(Measurement m) { - fAlphabeticBaseline = m.fAlphabeticBaseline; - fIdeographicBaseline = m.fIdeographicBaseline; - fHeight = m.fHeight; - fWidth = m.fWidth; - fMaxIntrinsicWidth = m.fMaxIntrinsicWidth; - fMinIntrinsicWidth = m.fMinIntrinsicWidth; - fLongestLine = m.fLongestLine; - } - SkSpan text(TextRange textRange); SkSpan clusters(ClusterRange clusterRange); Cluster& cluster(ClusterIndex clusterIndex); @@ -180,15 +171,15 @@ class ParagraphImpl final : public Paragraph { Run& runByCluster(ClusterIndex clusterIndex); SkSpan blocks(BlockRange blockRange); Block& block(BlockIndex blockIndex); + SkTArray resolvedFonts() const { return fFontSwitches; } void markDirty() override { fState = kUnknown; } - FontResolver& getResolver() { return fFontResolver; } + + int32_t unresolvedGlyphs() override; + void setState(InternalState state); sk_sp getPicture() { return fPicture; } - - using ShapeVisitor = - std::function, SkSpan, SkScalar&, size_t)>; - bool iterateThroughShapingRegions(ShapeVisitor shape); + SkRect getBoundaries() const { return fOrigin; } void resetContext(); void resolveStrut(); @@ -215,10 +206,13 @@ class ParagraphImpl final : public Paragraph { friend class ParagraphCache; friend class TextWrapper; + friend class OneLineShaper; + void calculateBoundaries(ClusterRange clusters, SkVector offset, SkVector advance); BlockRange findAllBlocks(TextRange textRange); void extractStyles(); + void markGraphemes16(); void markGraphemes(); // Input @@ -234,22 +228,25 @@ class ParagraphImpl final : public Paragraph { // Internal structures InternalState fState; - SkTArray fRuns; // kShaped + SkTArray fRuns; // kShaped SkTArray fClusters; // kClusterized (cached: text, word spacing, letter spacing, resolved fonts) - SkTArray fGraphemes; + SkTArray fGraphemes16; SkTArray fCodePoints; + SkTHashSet fGraphemes; + size_t fUnresolvedGlyphs; - SkTArray fRunShifts; + SkTArray fRunShifts; SkTArray fLines; // kFormatted (cached: width, max lines, ellipsis, text align) sk_sp fPicture; // kRecorded (cached: text styles) + SkTArray fFontSwitches; + InternalLineMetrics fStrutMetrics; - FontResolver fFontResolver; SkScalar fOldWidth; SkScalar fOldHeight; SkScalar fMaxWidthWithTrailingSpaces; - + SkRect fOrigin; std::vector fWords; }; } // namespace textlayout diff --git a/third_party/skia/modules/skparagraph/src/Run.cpp b/third_party/skia/modules/skparagraph/src/Run.cpp index 0fbcc07e7962..8d9ad0860e65 100644 --- a/third_party/skia/modules/skparagraph/src/Run.cpp +++ b/third_party/skia/modules/skparagraph/src/Run.cpp @@ -26,7 +26,7 @@ Run::Run(ParagraphImpl* master, : fMaster(master) , fTextRange(firstChar + info.utf8Range.begin(), firstChar + info.utf8Range.end()) , fClusterRange(EMPTY_CLUSTERS) - , fFirstChar(firstChar) { + , fClusterStart(firstChar) { fFont = info.fFont; fHeightMultiplier = lineHeight; fBidiLevel = info.fBidiLevel; @@ -35,49 +35,56 @@ Run::Run(ParagraphImpl* master, fUtf8Range = info.utf8Range; fOffset = SkVector::Make(offsetX, 0); 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, 0.0); + 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); fSpaced = false; // To make edge cases easier: fPositions[info.glyphCount] = fOffset + fAdvance; - fClusterIndexes[info.glyphCount] = info.utf8Range.end(); + fOffsets[info.glyphCount] = { 0, 0}; + fClusterIndexes[info.glyphCount] = this->leftToRight() ? info.utf8Range.end() : info.utf8Range.begin(); fEllipsis = false; + fPlaceholder = nullptr; } SkShaper::RunHandler::Buffer Run::newRunBuffer() { - return {fGlyphs.data(), fPositions.data(), nullptr, fClusterIndexes.data(), fOffset}; + return {fGlyphs.data(), fPositions.data(), fOffsets.data(), fClusterIndexes.data(), fOffset}; } +void Run::commit() { + fFont.getBounds(fGlyphs.data(), fGlyphs.size(), fBounds.data(), nullptr); +} SkScalar Run::calculateWidth(size_t start, size_t end, bool clip) const { SkASSERT(start <= end); // clip |= end == size(); // Clip at the end of the run? - SkScalar offset = 0; + SkScalar shift = 0; if (fSpaced && end > start) { - offset = fOffsets[clip ? end - 1 : end] - fOffsets[start]; + shift = fShifts[clip ? end - 1 : end] - fShifts[start]; + } + auto correction = 0.0f; + if (end > start) { + correction = fMaster->posShift(fIndex, clip ? end - 1 : end) - + fMaster->posShift(fIndex, start); } - auto correction = end > start ? fMaster->posShift(fIndex, end - 1) - fMaster->posShift(fIndex, start) : 0; - return fPositions[end].fX - fPositions[start].fX + offset + correction; + return posX(end) - posX(start) + shift + correction; } -void Run::copyTo(SkTextBlobBuilder& builder, size_t pos, size_t size, SkVector offset) const { +void Run::copyTo(SkTextBlobBuilder& builder, size_t pos, size_t size, SkVector runOffset) 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)); - - if (fSpaced || offset.fX != 0 || offset.fY != 0) { - for (size_t i = 0; i < size; ++i) { - auto point = fPositions[i + pos]; - if (fSpaced) { - point.fX += fOffsets[i + pos]; - } - point.fX += fMaster->posShift(fIndex, i + pos); - blobBuffer.points()[i] = point + offset; + 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]; } - } else { - // Good for the first line - sk_careful_memcpy(blobBuffer.points(), fPositions.data() + pos, size * sizeof(SkPoint)); + point.fX += fMaster->posShift(fIndex, i + pos); + blobBuffer.points()[i] = point + runOffset; } } @@ -147,8 +154,8 @@ void Run::iterateThroughClustersInTextOrder(const ClusterVisitor& visitor) { visitor(start, glyph, - fFirstChar + cluster, - fFirstChar + nextCluster, + fClusterStart + cluster, + fClusterStart + nextCluster, this->calculateWidth(start, glyph, glyph == size()), this->calculateHeight()); @@ -167,8 +174,8 @@ void Run::iterateThroughClustersInTextOrder(const ClusterVisitor& visitor) { visitor(start, glyph, - fFirstChar + cluster, - fFirstChar + nextCluster, + fClusterStart + cluster, + fClusterStart + nextCluster, this->calculateWidth(start, glyph, glyph == 0), this->calculateHeight()); @@ -183,7 +190,7 @@ SkScalar Run::addSpacesAtTheEnd(SkScalar space, Cluster* cluster) { return 0; } - fOffsets[cluster->endPos() - 1] += space; + fShifts[cluster->endPos() - 1] += space; // Increment the run width fSpaced = true; fAdvance.fX += space; @@ -197,12 +204,12 @@ SkScalar Run::addSpacesEvenly(SkScalar space, Cluster* cluster) { // Offset all the glyphs in the cluster SkScalar shift = 0; for (size_t i = cluster->startPos(); i < cluster->endPos(); ++i) { - fOffsets[i] += shift; + fShifts[i] += shift; shift += space; } if (this->size() == cluster->endPos()) { // To make calculations easier - fOffsets[cluster->endPos()] += shift; + fShifts[cluster->endPos()] += shift; } // Increment the run width fSpaced = true; @@ -221,11 +228,11 @@ void Run::shift(const Cluster* cluster, SkScalar offset) { fSpaced = true; for (size_t i = cluster->startPos(); i < cluster->endPos(); ++i) { - fOffsets[i] += offset; + fShifts[i] += offset; } if (this->size() == cluster->endPos()) { // To make calculations easier - fOffsets[cluster->endPos()] += offset; + fShifts[cluster->endPos()] += offset; } } @@ -329,7 +336,7 @@ SkScalar Cluster::trimmedWidth(size_t pos) const { } SkScalar Run::positionX(size_t pos) const { - return fPositions[pos].fX + fOffsets[pos] + fMaster->posShift(fIndex, pos); + return posX(pos) + fShifts[pos] + fMaster->posShift(fIndex, pos); } Run* Cluster::run() const { diff --git a/third_party/skia/modules/skparagraph/src/Run.h b/third_party/skia/modules/skparagraph/src/Run.h index 65ed78718e64..d58c3d7523d2 100644 --- a/third_party/skia/modules/skparagraph/src/Run.h +++ b/third_party/skia/modules/skparagraph/src/Run.h @@ -55,6 +55,15 @@ class Run { 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; + } size_t size() const { return fGlyphs.size(); } void setWidth(SkScalar width) { fAdvance.fX = width; } void setHeight(SkScalar height) { fAdvance.fY = height; } @@ -143,16 +152,23 @@ class Run { 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()); } - SkSpan offsets() const { return SkSpan(fOffsets.begin(), fOffsets.size()); } + SkSpan shifts() const { return SkSpan(fShifts.begin(), fShifts.size()); } + void commit(); + + SkRect getBounds(size_t pos) const { return fBounds[pos]; } private: friend class ParagraphImpl; friend class TextLine; friend class InternalLineMetrics; friend class ParagraphCache; + friend class OneLineShaper; ParagraphImpl* fMaster; TextRange fTextRange; @@ -167,22 +183,26 @@ class Run { uint8_t fBidiLevel; SkVector fAdvance; SkVector fOffset; - size_t fFirstChar; + TextIndex fClusterStart; SkShaper::RunHandler::Range fUtf8Range; - SkSTArray<128, SkGlyphID, false> fGlyphs; + SkSTArray<128, SkGlyphID, true> fGlyphs; SkSTArray<128, SkPoint, true> fPositions; + SkSTArray<128, SkPoint, true> fOffsets; SkSTArray<128, uint32_t, true> fClusterIndexes; - SkSTArray<128, SkScalar, true> fOffsets; // For formatting (letter/word spacing, justification) + SkSTArray<128, SkRect, true> fBounds; + + SkSTArray<128, SkScalar, true> fShifts; // For formatting (letter/word spacing, justification) bool fSpaced; }; struct Codepoint { - Codepoint(GraphemeIndex graphemeIndex, TextIndex textIndex) - : fGrapeme(graphemeIndex), fTextIndex(textIndex) { } + Codepoint(GraphemeIndex graphemeIndex, TextIndex textIndex, size_t index) + : fGrapheme(graphemeIndex), fTextIndex(textIndex), fIndex(index) { } - GraphemeIndex fGrapeme; + GraphemeIndex fGrapheme; TextIndex fTextIndex; // Used for getGlyphPositionAtCoordinate + size_t fIndex; }; struct Grapheme { @@ -325,9 +345,6 @@ class InternalLineMetrics { fDescent = metrics.fDescent; fLeading = metrics.fLeading; fForceStrut = forceStrut; - if (fForceStrut) { - fHeight = fDescent - fAscent + fLeading; - } } void add(Run* run) { @@ -339,7 +356,6 @@ class InternalLineMetrics { fAscent = SkTMin(fAscent, run->correctAscent()); fDescent = SkTMax(fDescent, run->correctDescent()); fLeading = SkTMax(fLeading, run->correctLeading()); - } void add(InternalLineMetrics other) { @@ -351,7 +367,6 @@ class InternalLineMetrics { fAscent = 0; fDescent = 0; fLeading = 0; - //fForceStrut = false; } SkScalar delta() const { return height() - ideographicBaseline(); } @@ -361,12 +376,10 @@ class InternalLineMetrics { metrics.fAscent = fAscent; metrics.fDescent = fDescent; metrics.fLeading = fLeading; - metrics.fHeight = fDescent - fAscent + fLeading; } else { // This is another of those flutter changes. To be removed... metrics.fAscent = SkTMin(metrics.fAscent, fAscent - fLeading / 2.0f); metrics.fDescent = SkTMax(metrics.fDescent, fDescent + fLeading / 2.0f); - //metrics.fLeading = SkTMax(metrics.fLeading, fLeading); } } @@ -375,11 +388,7 @@ class InternalLineMetrics { } SkScalar height() const { - if (fForceStrut) { - return SkScalarRoundToInt(fHeight); - } else { - return SkScalarRoundToInt(fDescent - fAscent + fLeading); - } + return ::round((double)fDescent - fAscent + fLeading); } SkScalar alphabeticBaseline() const { return fLeading / 2 - fAscent; } @@ -399,7 +408,6 @@ class InternalLineMetrics { SkScalar fDescent; SkScalar fLeading; bool fForceStrut; - SkScalar fHeight; }; } // namespace textlayout } // namespace skia diff --git a/third_party/skia/modules/skparagraph/src/TextLine.cpp b/third_party/skia/modules/skparagraph/src/TextLine.cpp index 3a0f90acdb8f..52dc8d91b1b0 100644 --- a/third_party/skia/modules/skparagraph/src/TextLine.cpp +++ b/third_party/skia/modules/skparagraph/src/TextLine.cpp @@ -11,16 +11,10 @@ namespace skia { namespace textlayout { -// TODO: deal with all the intersection functionality -int32_t intersectedSize(TextRange a, TextRange b) { - if (a.empty() || b.empty()) { - return -1; - } - auto begin = SkTMax(a.start, b.start); - auto end = SkTMin(a.end, b.end); - return begin <= end ? SkToS32(end - begin) : -1; -} +namespace { + +// TODO: deal with all the intersection functionality TextRange intersected(const TextRange& a, const TextRange& b) { if (a.start == b.start && a.end == b.end) return a; auto begin = SkTMax(a.start, b.start); @@ -28,6 +22,29 @@ TextRange intersected(const TextRange& a, const TextRange& b) { return end >= begin ? TextRange(begin, end) : EMPTY_TEXT; } +SkScalar littleRound(SkScalar a) { + // This rounding is done to match Flutter tests. Must be removed.. + return SkScalarRoundToScalar(a * 100.0)/100.0; +} + +int compareRound(SkScalar a, SkScalar b) { + // There is a rounding error that gets bigger when maxWidth gets bigger + // Currently, with VERY long zalgo text (> 100000) on a VERY long line (> 10000) + // it grows bigger that this little trick can hide + // TODO: deal with it eventually + auto ra = littleRound(a); + auto rb = littleRound(b); + if (ra == rb) { + return 0; + } else if (ra < rb) { + return -1; + } else { + return 1; + } +} + +} + TextLine::TextLine(ParagraphImpl* master, SkVector offset, SkVector advance, @@ -221,8 +238,11 @@ void TextLine::paintText(SkCanvas* canvas, TextRange textRange, const TextStyle& paint.setColor(style.getColor()); } + // 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(0, this->baseline())); + context.run->copyTo(builder, SkToU32(context.pos), context.size, SkVector::Make(0, correctedBaseline)); canvas->save(); if (context.clippingNeeded) { canvas->clipRect(context.clip); @@ -466,11 +486,12 @@ void TextLine::justify(SkScalar maxWidth) { if (ghost) { if (leftToRight) { - fMaster->shiftCluster(index, ghostShift); + fMaster->shiftCluster(index, ghostShift, ghostShift); } return true; } + auto lastShift = shift; if (cluster->isWhitespaces()) { if (!whitespacePatch) { shift += step; @@ -480,7 +501,7 @@ void TextLine::justify(SkScalar maxWidth) { } else { whitespacePatch = false; } - fMaster->shiftCluster(index, shift); + fMaster->shiftCluster(index, shift, lastShift); return true; }); @@ -496,30 +517,46 @@ void TextLine::createEllipsis(SkScalar maxWidth, const SkString& ellipsis, bool) // Go through the clusters in the reverse logical order // taking off cluster by cluster until the ellipsis fits SkScalar width = fAdvance.fX; + bool noWhitespace = false; + + auto attachEllipsis = [&](const Cluster* cluster){ + // Shape the ellipsis + Run* run = shapeEllipsis(ellipsis, cluster->run()); + run->fClusterStart = cluster->textRange().start; + run->setMaster(fMaster); + + // See if it fits + if (width + run->advance().fX > maxWidth) { + width -= cluster->width(); + // Continue if it's not + noWhitespace = true; + return false; + } + + fEllipsis = std::make_shared(*run); + fEllipsis->shift(width, 0); + fAdvance.fX = width; + return true; + }; + iterateThroughClustersInGlyphsOrder( - true, false, [this, &width, ellipsis, maxWidth](const Cluster* cluster, ClusterIndex index, bool leftToRight, bool ghost) { + true, false, [&](const Cluster* cluster, ClusterIndex index, bool leftToRight, bool ghost) { if (cluster->isWhitespaces()) { width -= cluster->width(); + noWhitespace = false; return true; - } - - // Shape the ellipsis - Run* run = shapeEllipsis(ellipsis, cluster->run()); - run->fFirstChar = cluster->textRange().start; - run->setMaster(fMaster); - fEllipsis = std::make_shared(*run); - - // See if it fits - if (width + fEllipsis->advance().fX > maxWidth) { + } else if (noWhitespace) { width -= cluster->width(); - // Continue if it's not return true; } - fEllipsis->shift(width, 0); - fAdvance.fX = width; - return false; + return !attachEllipsis(cluster); }); + + if (!fEllipsis) { + // Weird situation: just the ellipsis on the line (if it fits) + attachEllipsis(&fMaster->cluster(clusters().start)); + } } Run* TextLine::shapeEllipsis(const SkString& ellipsis, Run* run) { @@ -572,8 +609,6 @@ TextLine::ClipContext TextLine::measureTextInsideOneRun(TextRange textRange, SkScalar textOffsetInRunInLine, bool includeGhostSpaces, bool limitToClusters) const { - SkASSERT(intersectedSize(run->textRange(), textRange) >= 0); - ClipContext result = { run, 0, run->size(), 0, SkRect::MakeEmpty(), false }; if (run->placeholder() != nullptr || run->fEllipsis) { @@ -626,9 +661,9 @@ TextLine::ClipContext TextLine::measureTextInsideOneRun(TextRange textRange, textStartInLine -= leftCorrection; result.clip.offset(textStartInLine, 0); - if (result.clip.fRight > fAdvance.fX && !includeGhostSpaces) { - result.clip.fRight = fAdvance.fX; + if (compareRound(result.clip.fRight, fAdvance.fX) > 0 && !includeGhostSpaces) { result.clippingNeeded = true; + result.clip.fRight = fAdvance.fX; } // The text must be aligned with the lineOffset @@ -673,15 +708,15 @@ void TextLine::iterateThroughClustersInGlyphsOrder(bool reverse, } SkScalar TextLine::iterateThroughSingleRunByStyles(const Run* run, - SkScalar runOffset, - TextRange textRange, - StyleType styleType, - const RunStyleVisitor& visitor) const { + SkScalar runOffset, + TextRange textRange, + StyleType styleType, + const RunStyleVisitor& visitor) const { if (run->fEllipsis) { // Extra efforts to get the ellipsis text style ClipContext clipContext = this->measureTextInsideOneRun(run->textRange(), run, runOffset, 0, false, false); - TextRange testRange(run->fFirstChar, run->fFirstChar + 1); + TextRange testRange(run->fClusterStart, run->fClusterStart + 1); for (BlockIndex index = fBlockRange.start; index < fBlockRange.end; ++index) { auto block = fMaster->styles().begin() + index; auto intersect = intersected(block->fRange, testRange); @@ -765,7 +800,10 @@ void TextLine::iterateThroughVisualRuns(bool includingGhostSpaces, const RunVisi const auto run = &this->fMaster->run(runIndex); auto lineIntersection = intersected(run->textRange(), textRange); - + if (lineIntersection.width() == 0 && this->width() != 0) { + // TODO: deal with empty runs in a better way + continue; + } runOffset += width; if (!visitor(run, runOffset, lineIntersection, &width)) { return; @@ -781,7 +819,7 @@ void TextLine::iterateThroughVisualRuns(bool includingGhostSpaces, const RunVisi // This is a very important assert! // It asserts that 2 different ways of calculation come with the same results - if (!includingGhostSpaces && !SkScalarNearlyEqual(runOffset, this->width())) { + if (!includingGhostSpaces && compareRound(runOffset, this->width()) != 0) { SkDebugf("ASSERT: %f != %f\n", runOffset, this->width()); SkASSERT(false); } @@ -799,14 +837,17 @@ LineMetrics TextLine::getMetrics() const { result.fEndIndex = fTextWithWhitespacesRange.end; result.fEndExcludingWhitespaces = fTextRange.end; result.fEndIncludingNewline = fTextWithWhitespacesRange.end; // TODO: implement - result.fHardBreak = fMaster->cluster(fGhostClusterRange.end).isHardBreak(); - result.fAscent = fMaxRunMetrics.ascent(); + // TODO: For some reason Flutter imagines a hard line break at the end of the last line. + // To be removed... + result.fHardBreak = fMaster->cluster(fGhostClusterRange.end - 1).isHardBreak() || + fGhostClusterRange.end == fMaster->clusters().size() - 1; + result.fAscent = - fMaxRunMetrics.ascent(); result.fDescent = fMaxRunMetrics.descent(); - result.fUnscaledAscent = fMaxRunMetrics.ascent(); // TODO: implement - result.fHeight = fAdvance.fY; - result.fWidth = fAdvance.fX; + result.fUnscaledAscent = - fMaxRunMetrics.ascent(); // TODO: implement + result.fHeight = littleRound(fAdvance.fY); + result.fWidth = littleRound(fAdvance.fX); result.fLeft = fOffset.fX; - result.fBaseline = fMaxRunMetrics.baseline(); + result.fBaseline = fMaxRunMetrics.baseline() + (this - fMaster->lines().begin()) * result.fHeight; result.fLineNumber = this - fMaster->lines().begin(); // Fill out the style parts diff --git a/third_party/skia/modules/skparagraph/src/TextWrapper.cpp b/third_party/skia/modules/skparagraph/src/TextWrapper.cpp index def8cb266774..a0fb5813bf05 100644 --- a/third_party/skia/modules/skparagraph/src/TextWrapper.cpp +++ b/third_party/skia/modules/skparagraph/src/TextWrapper.cpp @@ -83,7 +83,7 @@ void TextWrapper::moveForward() { } else if (fClusters.width() > 0) { fEndLine.extend(fClusters); fTooLongWord = false; - } else if (fClip.width() > 0) { + } else if (fClip.width() > 0 || (fTooLongWord && fTooLongCluster)) { fEndLine.extend(fClip); fTooLongWord = false; fTooLongCluster = false; @@ -112,9 +112,7 @@ void TextWrapper::trimEndSpaces(TextAlign align) { break; } } - if (!right || true) { - fEndLine.trim(); - } + fEndLine.trim(); } SkScalar TextWrapper::getClustersTrimmedWidth() { @@ -234,9 +232,7 @@ void TextWrapper::breakTextIntoLines(ParagraphImpl* parent, // TODO: keep start/end/break info for text and runs but in a better way that below TextRange text(fEndLine.startCluster()->textRange().start, fEndLine.endCluster()->textRange().end); TextRange textWithSpaces(fEndLine.startCluster()->textRange().start, startLine->textRange().start); - if (fEndLine.breakCluster()->isHardBreak()) { - textWithSpaces.end = fEndLine.breakCluster()->textRange().start; - } else if (startLine == end) { + if (startLine == end) { textWithSpaces.end = parent->text().size(); } ClusterRange clusters(fEndLine.startCluster() - start, fEndLine.endCluster() - start + 1); diff --git a/third_party/skia/modules/skparagraph/src/TextWrapper.h b/third_party/skia/modules/skparagraph/src/TextWrapper.h index 79a034dc730c..9bc9744e0139 100644 --- a/third_party/skia/modules/skparagraph/src/TextWrapper.h +++ b/third_party/skia/modules/skparagraph/src/TextWrapper.h @@ -104,7 +104,8 @@ class TextWrapper { if (fEnd.cluster() != nullptr && fEnd.cluster()->master() != nullptr && fEnd.cluster()->run() != nullptr && - fEnd.cluster()->run()->placeholder() == nullptr) { + fEnd.cluster()->run()->placeholder() == nullptr && + fWidth > 0) { fWidth -= (fEnd.cluster()->width() - fEnd.cluster()->trimmedWidth(fEnd.position())); } } @@ -136,7 +137,11 @@ class TextWrapper { }; public: - TextWrapper() { fLineNumber = 1; } + TextWrapper() { + fLineNumber = 1; + fHardLineBreak = false; + fExceededMaxLines = false; + } using AddLineToParagraph = std::function + + + + + + Test + + + + + + + +
+
+ >Sͬ͑̀͐̈͒̈́̋̎ͮͩ̽̓ͬ̂̆̔͗́̓ͣͧ͊ͫ͛̉͌̐̑ͪ͗̚͝҉̴͉͢k̡̊̓ͫͭͩ͂͊ͨͪͬ̑ͫ̍̌̄͛̌̂̑̂̋̊̔ͫ͛̽̑ͨ̍ͭ̓̀ͪͪ̉͐͗̌̓̃̚͟͝҉̢͏̫̞̙͇͖̮͕̗̟͕͇͚̻͈̣̻̪͉̰̲̣̫ͅͅP̴̅̍͒̿͗͗̇ͩ̃͆͌̀̽͏̧̡͕͖̝̖̼̺̰̣̬͔͖͔̼͙̞̦̫͓̘͜a̸̴̸̴̢̢̨̨̫͍͓̥̼̭̼̻̤̯̙̤̻̠͚̍̌͋̂ͦͨ̽̇͌͌͆̀̽̎͒̄ͪ̐ͦ̈ͫ͐͗̓̚̚͜ͅr͐͐ͤͫ̐ͥ͂̈́̿́ͮ̃͗̓̏ͫ̀̿͏̸̵̧́͘̕͟͝͠͞͠҉̷̧͚͢͟a̓̽̎̄͗̔͛̄̐͊͛ͫ͂͌̂̂̈̈̓̔̅̅̄͊̉́ͪ̑̄͆ͬ̍͆ͭ͋̐ͬ͏̷̵̨̢̩̹̖͓̥̳̰͔̱̬͖̙͓̙͇̀̀̕͜͟͟͢͟͜͠͡g̨̅̇ͦ͋̂ͦͨͭ̓͐͆̏̂͛̉ͧ̑ͫ̐̒͛ͫ̍̒͛́̚҉̷̨̛̛̀͜͢͞҉̩̘̲͍͎̯̹̝̭̗̱͇͉̲̱͔̯̠̹̥̻͉̲̜̤̰̪̗̺̖̺r̷͌̓̇̅ͭ̀̐̃̃ͭ͑͗̉̈̇̈́ͥ̓ͣ́ͤ͂ͤ͂̏͌̆̚҉̴̸̧̢̢̛̫͉̦̥̤̙͈͉͈͉͓̙̗̟̳̜͈̗̺̟̠̠͖͓̖̪͕̠̕̕͝ͅả̸̴̡̡̧͠͞͡͞҉̛̕͟͏̷̘̪̱͈̲͉̞̠̞̪̫͎̲̬̖̀̀͟͝͞͞͠p̛͂̈͐̚͠҉̵̸̡̢̢̩̹͙̯͖̙̙̮̥̙͚̠͔̥̭̮̞̣̪̬̥̠̖̝̥̪͎́̀̕͜͡͡ͅͅh̵̷̵̡̛ͤ̂͌̐̓̐̋̋͊̒̆̽́̀̀̀͢͠͞͞҉̷̸̢̕҉͚̯͖̫̜̞̟̠̱͉̝̲̹̼͉̟͉̩̮͔̤͖̞̭̙̹̬ͅ< +
+ + + \ No newline at end of file diff --git a/third_party/skia/modules/skparagraph/utils/TestFontCollection.cpp b/third_party/skia/modules/skparagraph/utils/TestFontCollection.cpp index 680167532dcf..aba76d834220 100644 --- a/third_party/skia/modules/skparagraph/utils/TestFontCollection.cpp +++ b/third_party/skia/modules/skparagraph/utils/TestFontCollection.cpp @@ -8,7 +8,7 @@ namespace skia { namespace textlayout { -TestFontCollection::TestFontCollection(const std::string& resourceDir) +TestFontCollection::TestFontCollection(const std::string& resourceDir, bool testOnly, bool loadFonts) : fResourceDir(resourceDir) , fFontsFound(0) { if (fDirs == resourceDir) { @@ -17,22 +17,40 @@ TestFontCollection::TestFontCollection(const std::string& resourceDir) fFontProvider = sk_make_sp(); - SkOSFile::Iter iter(fResourceDir.c_str()); - SkString path; - while (iter.next(&path)) { - SkString file_path; - file_path.printf("%s/%s", fResourceDir.c_str(), path.c_str()); - // fonts from data are faster (skips file overhead), so we use them here for testing - auto data = SkData::MakeFromFileName(file_path.c_str()); - if (data) { - fFontProvider->registerTypeface(SkTypeface::MakeFromData(data)); + if (loadFonts) { + SkOSFile::Iter iter(fResourceDir.c_str()); + SkString path; + while (iter.next(&path)) { + addFontFromFile(path.c_str()); } } fFontsFound = fFontProvider->countFamilies(); - this->setTestFontManager(fFontProvider); + if (testOnly) { + this->setTestFontManager(fFontProvider); + } else { + this->setAssetFontManager(fFontProvider); + } this->disableFontFallback(); fDirs = resourceDir; } + +bool TestFontCollection::addFontFromFile(const std::string& path, const std::string& familyName) { + + SkString file_path; + file_path.printf("%s/%s", fResourceDir.c_str(), path.c_str()); + + auto data = SkData::MakeFromFileName(file_path.c_str()); + if (!data) { + return false; + } + if (familyName.empty()) { + fFontProvider->registerTypeface(SkTypeface::MakeFromData(data)); + } else { + fFontProvider->registerTypeface(SkTypeface::MakeFromData(data), SkString(familyName.c_str())); + } + + return true; +} } // namespace textlayout } // namespace skia diff --git a/third_party/skia/modules/skparagraph/utils/TestFontCollection.h b/third_party/skia/modules/skparagraph/utils/TestFontCollection.h index ca379ab31dc8..5220f05d50f5 100644 --- a/third_party/skia/modules/skparagraph/utils/TestFontCollection.h +++ b/third_party/skia/modules/skparagraph/utils/TestFontCollection.h @@ -6,10 +6,11 @@ namespace skia { namespace textlayout { class TestFontCollection : public FontCollection { public: - TestFontCollection(const std::string& resourceDir); + TestFontCollection(const std::string& resourceDir, bool testOnly = false, bool loadFonts = true); ~TestFontCollection() = default; size_t fontsFound() const { return fFontsFound; } + bool addFontFromFile(const std::string& path, const std::string& familyName = ""); private: std::string fResourceDir; diff --git a/third_party/skia/modules/skresources/BUILD.gn b/third_party/skia/modules/skresources/BUILD.gn new file mode 100644 index 000000000000..cf2a64e5ef82 --- /dev/null +++ b/third_party/skia/modules/skresources/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright 2019 Google LLC +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("../../gn/skia.gni") + +config("public_config") { + include_dirs = [ "include" ] +} + +static_library("skresources") { + import("skresources.gni") + public_configs = [ ":public_config" ] + public = skia_skresources_public + sources = skia_skresources_sources + configs += [ "../../:skia_private" ] + deps = [ + "../..:skia", + ] +} diff --git a/third_party/skia/modules/skresources/include/SkResources.h b/third_party/skia/modules/skresources/include/SkResources.h new file mode 100644 index 000000000000..3a5769d900fc --- /dev/null +++ b/third_party/skia/modules/skresources/include/SkResources.h @@ -0,0 +1,181 @@ +/* + * Copyright 2019 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkResources_DEFINED +#define SkResources_DEFINED + +#include "include/core/SkData.h" +#include "include/core/SkRefCnt.h" +#include "include/core/SkString.h" +#include "include/core/SkTypes.h" +#include "include/private/SkMutex.h" +#include "include/private/SkTHash.h" + +#include + +class SkAnimCodecPlayer; +class SkImage; + +namespace skresources { + +/** + * Image asset proxy interface. + */ +class SK_API ImageAsset : public SkRefCnt { +public: + /** + * Returns true if the image asset is animated. + */ + virtual bool isMultiFrame() = 0; + + /** + * Returns the SkImage for a given frame. + * + * If the image asset is static, getImage() is only called once, at animation load time. + * Otherwise, this gets invoked every time the animation time is adjusted (on every seek). + * + * Embedders should cache and serve the same SkImage whenever possible, for efficiency. + * + * @param t Frame time code, in seconds, relative to the image layer timeline origin + * (in-point). + */ + virtual sk_sp getFrame(float t) = 0; +}; + +class MultiFrameImageAsset final : public ImageAsset { +public: + /** + * By default, images are decoded on-the-fly, at rasterization time. + * Large images may cause jank as decoding is expensive (and can thrash internal caches). + * + * Pass |predecode| true to force-decode all images upfront, at the cost of potentially more RAM + * and slower animation build times. + */ + static sk_sp Make(sk_sp, bool predecode = false); + + bool isMultiFrame() override; + + sk_sp getFrame(float t) override; + +private: + explicit MultiFrameImageAsset(std::unique_ptr, bool predecode); + + std::unique_ptr fPlayer; + bool fPreDecode; + + using INHERITED = ImageAsset; +}; + +/** + * ResourceProvider is an interface that lets rich-content modules defer loading of external + * resources (images, fonts, etc.) to embedding clients. + */ +class SK_API ResourceProvider : public SkRefCnt { +public: + /** + * Load a generic resource (currently only nested animations) specified by |path| + |name|, + * and return as an SkData. + */ + virtual sk_sp load(const char[] /* resource_path */, + const char[] /* resource_name */) const { + return nullptr; + } + + /** + * Load an image asset specified by |path| + |name|, and returns the corresponding + * ImageAsset proxy. + */ + virtual sk_sp loadImageAsset(const char[] /* resource_path */, + const char[] /* resource_name */, + const char[] /* resource_id */) const { + return nullptr; + } + + /** + * Load an external font and return as SkData. + * + * @param name font name ("fName" Lottie property) + * @param url web font URL ("fPath" Lottie property) + * + * -- Note -- + * + * This mechanism assumes monolithic fonts (single data blob). Some web font providers may + * serve multiple font blobs, segmented for various unicode ranges, depending on user agent + * capabilities (woff, woff2). In that case, the embedder would need to advertise no user + * agent capabilities when fetching the URL, in order to receive full font data. + */ + virtual sk_sp loadFont(const char[] /* name */, + const char[] /* url */) const { + return nullptr; + } +}; + +class FileResourceProvider final : public ResourceProvider { +public: + static sk_sp Make(SkString base_dir, bool predecode = false); + + sk_sp load(const char resource_path[], const char resource_name[]) const override; + + sk_sp loadImageAsset(const char[], const char[], const char[]) const override; + +private: + FileResourceProvider(SkString, bool); + + const SkString fDir; + const bool fPredecode; + + using INHERITED = ResourceProvider; +}; + +class ResourceProviderProxyBase : public ResourceProvider { +protected: + explicit ResourceProviderProxyBase(sk_sp); + + 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; + +private: + const sk_sp fProxy; +}; + +class CachingResourceProvider final : public ResourceProviderProxyBase { +public: + static sk_sp Make(sk_sp rp) { + return rp ? sk_sp(new CachingResourceProvider(std::move(rp))) + : nullptr; + } + +private: + explicit CachingResourceProvider(sk_sp); + + sk_sp loadImageAsset(const char[], const char[], const char[]) const override; + + mutable SkMutex fMutex; + mutable SkTHashMap> fImageCache; + + using INHERITED = ResourceProviderProxyBase; +}; + +class DataURIResourceProviderProxy final : public ResourceProviderProxyBase { +public: + static sk_sp Make(sk_sp rp, + bool predecode = false); + +private: + DataURIResourceProviderProxy(sk_sp, bool); + + sk_sp loadImageAsset(const char[], const char[], const char[]) const override; + + const bool fPredecode; + + using INHERITED = ResourceProviderProxyBase; +}; + +} // namespace skresources + +#endif // SkResources_DEFINED diff --git a/third_party/skia/modules/skresources/skresources.gni b/third_party/skia/modules/skresources/skresources.gni new file mode 100644 index 000000000000..10f70696501e --- /dev/null +++ b/third_party/skia/modules/skresources/skresources.gni @@ -0,0 +1,12 @@ +# Copyright 2019 Google LLC +# +# 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_skresources_public = [ "$_include/SkResources.h" ] + +skia_skresources_sources = [ "$_src/SkResources.cpp" ] diff --git a/third_party/skia/modules/skresources/src/SkResources.cpp b/third_party/skia/modules/skresources/src/SkResources.cpp new file mode 100644 index 000000000000..38b04d297da1 --- /dev/null +++ b/third_party/skia/modules/skresources/src/SkResources.cpp @@ -0,0 +1,183 @@ +/* + * 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 "modules/skresources/include/SkResources.h" + +#include "include/codec/SkCodec.h" +#include "include/core/SkData.h" +#include "include/core/SkImage.h" +#include "include/utils/SkAnimCodecPlayer.h" +#include "include/utils/SkBase64.h" +#include "src/core/SkMakeUnique.h" +#include "src/core/SkOSFile.h" +#include "src/utils/SkOSPath.h" + +namespace skresources { + +sk_sp MultiFrameImageAsset::Make(sk_sp data, bool predecode) { + if (auto codec = SkCodec::MakeFromData(std::move(data))) { + return sk_sp( + new MultiFrameImageAsset(skstd::make_unique(std::move(codec)), + predecode)); + } + + return nullptr; +} + +MultiFrameImageAsset::MultiFrameImageAsset(std::unique_ptr player, + bool predecode) + : fPlayer(std::move(player)) + , fPreDecode(predecode) { + SkASSERT(fPlayer); +} + +bool MultiFrameImageAsset::isMultiFrame() { + return fPlayer->duration() > 0; +} + +sk_sp MultiFrameImageAsset::getFrame(float t) { + auto decode = [](sk_sp image) { + SkASSERT(image->isLazyGenerated()); + + static constexpr size_t kMaxArea = 2048 * 2048; + const auto image_area = SkToSizeT(image->width() * image->height()); + + if (image_area > kMaxArea) { + // When the image is too large, decode and scale down to a reasonable size. + const auto scale = std::sqrt(static_cast(kMaxArea) / image_area); + const auto info = SkImageInfo::MakeN32Premul(scale * image->width(), + scale * image->height()); + SkBitmap bm; + if (bm.tryAllocPixels(info, info.minRowBytes()) && + image->scalePixels(bm.pixmap(), + SkFilterQuality::kMedium_SkFilterQuality, + SkImage::kDisallow_CachingHint)) { + image = SkImage::MakeFromBitmap(bm); + } + } else { + // When the image size is OK, just force-decode. + image = image->makeRasterImage(); + } + + return image; + }; + + fPlayer->seek(static_cast(t * 1000)); + auto frame = fPlayer->getFrame(); + + if (fPreDecode && frame && frame->isLazyGenerated()) { + frame = decode(std::move(frame)); + } + + return frame; +} + +sk_sp FileResourceProvider::Make(SkString base_dir, bool predecode) { + return sk_isdir(base_dir.c_str()) + ? sk_sp(new FileResourceProvider(std::move(base_dir), predecode)) + : nullptr; +} + +FileResourceProvider::FileResourceProvider(SkString base_dir, bool predecode) + : fDir(std::move(base_dir)) + , fPredecode(predecode) {} + +sk_sp FileResourceProvider::load(const char resource_path[], + const char resource_name[]) const { + const auto full_dir = SkOSPath::Join(fDir.c_str() , resource_path), + full_path = SkOSPath::Join(full_dir.c_str(), resource_name); + return SkData::MakeFromFileName(full_path.c_str()); +} + +sk_sp FileResourceProvider::loadImageAsset(const char resource_path[], + const char resource_name[], + const char[]) const { + return MultiFrameImageAsset::Make(this->load(resource_path, resource_name), fPredecode); +} + +ResourceProviderProxyBase::ResourceProviderProxyBase(sk_sp rp) + : fProxy(std::move(rp)) {} + +sk_sp ResourceProviderProxyBase::load(const char resource_path[], + const char resource_name[]) const { + return fProxy ? fProxy->load(resource_path, resource_name) + : nullptr; +} + +sk_sp ResourceProviderProxyBase::loadImageAsset(const char rpath[], + const char rname[], + const char rid[]) const { + return fProxy ? fProxy->loadImageAsset(rpath, rname, rid) + : nullptr; +} + +sk_sp ResourceProviderProxyBase::loadFont(const char name[], const char url[]) const { + return fProxy ? fProxy->loadFont(name, url) + : nullptr; +} + +CachingResourceProvider::CachingResourceProvider(sk_sp rp) + : INHERITED(std::move(rp)) {} + +sk_sp CachingResourceProvider::loadImageAsset(const char resource_path[], + const char resource_name[], + const char resource_id[]) const { + SkAutoMutexExclusive amx(fMutex); + + const SkString key(resource_id); + if (const auto* asset = fImageCache.find(key)) { + return *asset; + } + + auto asset = this->INHERITED::loadImageAsset(resource_path, resource_name, resource_id); + fImageCache.set(key, asset); + + return asset; +} + +sk_sp DataURIResourceProviderProxy::Make(sk_sp rp, + bool predecode) { + return sk_sp( + new DataURIResourceProviderProxy(std::move(rp), predecode)); +} + +DataURIResourceProviderProxy::DataURIResourceProviderProxy(sk_sp rp, + bool predecode) + : INHERITED(std::move(rp)) + , fPredecode(predecode) {} + +sk_sp DataURIResourceProviderProxy::loadImageAsset(const char rpath[], + const char rname[], + const char rid[]) const { + // We only handle B64 encoded image dataURIs: data:image/;base64, + // (https://en.wikipedia.org/wiki/Data_URI_scheme) + static constexpr char kDataURIImagePrefix[] = "data:image/", + kDataURIEncodingStr[] = ";base64,"; + + if (!strncmp(rname, kDataURIImagePrefix, SK_ARRAY_COUNT(kDataURIImagePrefix) - 1)) { + const char* encoding_start = strstr(rname + SK_ARRAY_COUNT(kDataURIImagePrefix) - 1, + kDataURIEncodingStr); + if (encoding_start) { + const char* data_start = encoding_start + SK_ARRAY_COUNT(kDataURIEncodingStr) - 1; + + // TODO: SkBase64::decode ergonomics are... interesting. + SkBase64 b64; + if (SkBase64::kNoError == b64.decode(data_start, strlen(data_start))) { + return MultiFrameImageAsset::Make(SkData::MakeWithProc(b64.getData(), + b64.getDataSize(), + [](const void* ptr, void*) { + delete[] static_cast(ptr); + }, /*ctx=*/nullptr), + fPredecode); + } + } + } + + return this->INHERITED::loadImageAsset(rpath, rname, rid); +} + +} // namespace skresources diff --git a/third_party/skia/modules/sksg/include/SkSGGradient.h b/third_party/skia/modules/sksg/include/SkSGGradient.h index 78b7227c6d45..f76c7b836daf 100644 --- a/third_party/skia/modules/sksg/include/SkSGGradient.h +++ b/third_party/skia/modules/sksg/include/SkSGGradient.h @@ -25,8 +25,8 @@ namespace sksg { class Gradient : public Shader { public: struct ColorStop { - SkScalar fPosition; - SkColor fColor; + SkScalar fPosition; + SkColor4f fColor; bool operator==(const ColorStop& other) const { return fPosition == other.fPosition && fColor == other.fColor; @@ -39,8 +39,8 @@ class Gradient : public Shader { protected: sk_sp onRevalidateShader() final; - virtual sk_sp onMakeShader(const std::vector& colors, - const std::vector& positions) const = 0; + virtual sk_sp onMakeShader(const std::vector& colors, + const std::vector& positions) const = 0; protected: Gradient() = default; @@ -62,8 +62,8 @@ class LinearGradient final : public Gradient { SG_ATTRIBUTE(EndPoint , SkPoint, fEndPoint ) protected: - sk_sp onMakeShader(const std::vector& colors, - const std::vector& positions) const override; + sk_sp onMakeShader(const std::vector&, + const std::vector&) const override; private: LinearGradient() = default; @@ -86,8 +86,8 @@ class RadialGradient final : public Gradient { SG_ATTRIBUTE(EndRadius , SkScalar, fEndRadius ) protected: - sk_sp onMakeShader(const std::vector& colors, - const std::vector& positions) const override; + sk_sp onMakeShader(const std::vector&, + const std::vector&) const override; private: RadialGradient() = default; diff --git a/third_party/skia/modules/sksg/include/SkSGPath.h b/third_party/skia/modules/sksg/include/SkSGPath.h index 1135fb9df016..d8ffcbeaee32 100644 --- a/third_party/skia/modules/sksg/include/SkSGPath.h +++ b/third_party/skia/modules/sksg/include/SkSGPath.h @@ -26,7 +26,20 @@ class Path : public GeometryNode { static sk_sp Make(const SkPath& r) { return sk_sp(new Path(r)); } SG_ATTRIBUTE(Path, SkPath, fPath) - SG_MAPPED_ATTRIBUTE(FillType, SkPath::FillType, fPath) + + // Temporarily inlined for SkPathFillType staging + // SG_MAPPED_ATTRIBUTE(FillType, SkPathFillType, fPath) + + SkPathFillType getFillType() const { + return fPath.getNewFillType(); + } + + void setFillType(SkPathFillType fillType) { + if (fillType != fPath.getNewFillType()) { + fPath.setFillType(fillType); + this->invalidate(); + } + } protected: void onClip(SkCanvas*, bool antiAlias) const override; diff --git a/third_party/skia/modules/sksg/include/SkSGRect.h b/third_party/skia/modules/sksg/include/SkSGRect.h index 29456a04395b..fa39a8fe0228 100644 --- a/third_party/skia/modules/sksg/include/SkSGRect.h +++ b/third_party/skia/modules/sksg/include/SkSGRect.h @@ -32,8 +32,8 @@ class Rect final : public GeometryNode { SG_ATTRIBUTE(R, SkScalar, fRect.fRight ) SG_ATTRIBUTE(B, SkScalar, fRect.fBottom) - SG_MAPPED_ATTRIBUTE(Direction , SkPath::Direction, fAttrContaier) - SG_MAPPED_ATTRIBUTE(InitialPointIndex, uint8_t , fAttrContaier) + SG_MAPPED_ATTRIBUTE(Direction , SkPathDirection, fAttrContaier) + SG_MAPPED_ATTRIBUTE(InitialPointIndex, uint8_t , fAttrContaier) protected: void onClip(SkCanvas*, bool antiAlias) const override; @@ -52,15 +52,15 @@ class Rect final : public GeometryNode { uint8_t fDirection : 1; uint8_t fInitialPointIndex : 2; - SkPath::Direction getDirection() const { - return static_cast(fDirection); + SkPathDirection getDirection() const { + return static_cast(fDirection); } - void setDirection(SkPath::Direction dir) { fDirection = SkTo(dir); } + void setDirection(SkPathDirection dir) { fDirection = SkTo(dir); } uint8_t getInitialPointIndex() const { return fInitialPointIndex; } void setInitialPointIndex(uint8_t idx) { fInitialPointIndex = idx; } }; - AttrContainer fAttrContaier = { SkPath::kCW_Direction, 0 }; + AttrContainer fAttrContaier = { (int)SkPathDirection::kCW, 0 }; using INHERITED = GeometryNode; }; @@ -75,7 +75,7 @@ class RRect final : public GeometryNode { SG_ATTRIBUTE(RRect, SkRRect, fRRect) - SG_MAPPED_ATTRIBUTE(Direction , SkPath::Direction, fAttrContaier) + SG_MAPPED_ATTRIBUTE(Direction , SkPathDirection, fAttrContaier) SG_MAPPED_ATTRIBUTE(InitialPointIndex, uint8_t , fAttrContaier) protected: @@ -95,15 +95,15 @@ class RRect final : public GeometryNode { uint8_t fDirection : 1; uint8_t fInitialPointIndex : 2; - SkPath::Direction getDirection() const { - return static_cast(fDirection); + SkPathDirection getDirection() const { + return static_cast(fDirection); } - void setDirection(SkPath::Direction dir) { fDirection = SkTo(dir); } + void setDirection(SkPathDirection dir) { fDirection = SkTo(dir); } uint8_t getInitialPointIndex() const { return fInitialPointIndex; } void setInitialPointIndex(uint8_t idx) { fInitialPointIndex = idx; } }; - AttrContainer fAttrContaier = { SkPath::kCW_Direction, 0 }; + AttrContainer fAttrContaier = { (int)SkPathDirection::kCW, 0 }; using INHERITED = GeometryNode; }; diff --git a/third_party/skia/modules/sksg/src/SkSGGradient.cpp b/third_party/skia/modules/sksg/src/SkSGGradient.cpp index 4834a9db5a2b..1ab7d2916203 100644 --- a/third_party/skia/modules/sksg/src/SkSGGradient.cpp +++ b/third_party/skia/modules/sksg/src/SkSGGradient.cpp @@ -17,8 +17,8 @@ sk_sp Gradient::onRevalidateShader() { return nullptr; } - std::vector colors; - std::vector positions; + std::vector colors; + std::vector positions; colors.reserve(fColorStops.size()); positions.reserve(fColorStops.size()); @@ -33,27 +33,27 @@ sk_sp Gradient::onRevalidateShader() { return this->onMakeShader(colors, positions); } -sk_sp LinearGradient::onMakeShader(const std::vector& colors, - const std::vector& positions) const { +sk_sp LinearGradient::onMakeShader(const std::vector& colors, + const std::vector& positions) const { SkASSERT(colors.size() == positions.size()); const SkPoint pts[] = { fStartPoint, fEndPoint }; - return SkGradientShader::MakeLinear(pts, colors.data(), positions.data(), colors.size(), - this->getTileMode()); + return SkGradientShader::MakeLinear(pts, colors.data(), nullptr, positions.data(), + SkToInt(colors.size()), this->getTileMode()); } -sk_sp RadialGradient::onMakeShader(const std::vector& colors, - const std::vector& positions) const { +sk_sp RadialGradient::onMakeShader(const std::vector& colors, + const std::vector& positions) const { SkASSERT(colors.size() == positions.size()); return (fStartRadius <= 0 && fStartCenter == fEndCenter) ? SkGradientShader::MakeRadial(fEndCenter, fEndRadius, - colors.data(), positions.data(), colors.size(), - this->getTileMode()) + colors.data(), nullptr, positions.data(), + SkToInt(colors.size()), this->getTileMode()) : SkGradientShader::MakeTwoPointConical(fStartCenter, fStartRadius, fEndCenter, fEndRadius, - colors.data(), positions.data(), colors.size(), - this->getTileMode()); + colors.data(), nullptr, positions.data(), + SkToInt(colors.size()), this->getTileMode()); } } //namespace sksg diff --git a/third_party/skia/modules/sksg/src/SkSGPath.cpp b/third_party/skia/modules/sksg/src/SkSGPath.cpp index 9895ee63409a..7ca5a0410f28 100644 --- a/third_party/skia/modules/sksg/src/SkSGPath.cpp +++ b/third_party/skia/modules/sksg/src/SkSGPath.cpp @@ -30,8 +30,8 @@ bool Path::onContains(const SkPoint& p) const { SkRect Path::onRevalidate(InvalidationController*, const SkMatrix&) { SkASSERT(this->hasInval()); - const auto ft = fPath.getFillType(); - return (ft == SkPath::kWinding_FillType || ft == SkPath::kEvenOdd_FillType) + const auto ft = fPath.getNewFillType(); + return (ft == SkPathFillType::kWinding || ft == SkPathFillType::kEvenOdd) // "Containing" fills have finite bounds. ? fPath.computeTightBounds() // Inverse fills are "infinite". diff --git a/third_party/skia/modules/sksg/src/SkSGPlane.cpp b/third_party/skia/modules/sksg/src/SkSGPlane.cpp index 122ee53bbdca..c2072894652a 100644 --- a/third_party/skia/modules/sksg/src/SkSGPlane.cpp +++ b/third_party/skia/modules/sksg/src/SkSGPlane.cpp @@ -30,7 +30,7 @@ SkRect Plane::onRevalidate(InvalidationController*, const SkMatrix&) { SkPath Plane::onAsPath() const { SkPath path; - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); return path; } diff --git a/third_party/skia/modules/sksg/src/SkSGRenderNode.cpp b/third_party/skia/modules/sksg/src/SkSGRenderNode.cpp index 01ae80c06654..5c75d5d2ca4c 100644 --- a/third_party/skia/modules/sksg/src/SkSGRenderNode.cpp +++ b/third_party/skia/modules/sksg/src/SkSGRenderNode.cpp @@ -142,7 +142,7 @@ RenderNode::ScopedRenderContext::modulateMaskFilter(sk_sp mf, cons // => T = Inv(maskCTM) x ctm // SkMatrix invMaskCTM; - if (fCtx.fMaskCTM.invert(&invMaskCTM)) { + if (mf && fCtx.fMaskCTM.invert(&invMaskCTM)) { const auto relative_transform = SkMatrix::Concat(invMaskCTM, ctm); fCtx.fMaskFilter = SkMaskFilter::MakeCompose(std::move(fCtx.fMaskFilter), mf->makeWithMatrix(relative_transform)); diff --git a/third_party/skia/modules/skshaper/BUILD.gn b/third_party/skia/modules/skshaper/BUILD.gn index dcfd870f65ad..523898c781f9 100644 --- a/third_party/skia/modules/skshaper/BUILD.gn +++ b/third_party/skia/modules/skshaper/BUILD.gn @@ -6,7 +6,7 @@ import("../../gn/skia.gni") declare_args() { - skia_enable_skshaper = !(is_win && is_component_build) + skia_enable_skshaper = true } if (skia_enable_skshaper) { diff --git a/third_party/skia/modules/skshaper/include/SkShaper.h b/third_party/skia/modules/skshaper/include/SkShaper.h index 0da63eeb5c4a..4fec9a54ad3d 100644 --- a/third_party/skia/modules/skshaper/include/SkShaper.h +++ b/third_party/skia/modules/skshaper/include/SkShaper.h @@ -75,8 +75,8 @@ class SkShaper { class TrivialRunIterator : public RunIteratorSubclass { public: static_assert(std::is_base_of::value, ""); - TrivialRunIterator(size_t utf8Bytes) : fEnd(utf8Bytes), fAtEnd(false) {} - void consume() override { fAtEnd = true; } + TrivialRunIterator(size_t utf8Bytes) : fEnd(utf8Bytes), fAtEnd(fEnd == 0) {} + void consume() override { SkASSERT(!fAtEnd); fAtEnd = true; } size_t endOfCurrentRun() const override { return fAtEnd ? fEnd : 0; } bool atEnd() const override { return fAtEnd; } private: diff --git a/third_party/skia/modules/skshaper/src/SkShaper_harfbuzz.cpp b/third_party/skia/modules/skshaper/src/SkShaper_harfbuzz.cpp index 0c80eee7e439..c8584525f228 100644 --- a/third_party/skia/modules/skshaper/src/SkShaper_harfbuzz.cpp +++ b/third_party/skia/modules/skshaper/src/SkShaper_harfbuzz.cpp @@ -525,9 +525,9 @@ void append(SkShaper::RunHandler* handler, const SkShaper::RunHandler::RunInfo& buffer.glyphs[i] = glyph.fID; if (buffer.offsets) { buffer.positions[i] = advance + buffer.point; - buffer.offsets[i] = glyph.fOffset; //TODO: invert glyph.fOffset.fY? + buffer.offsets[i] = glyph.fOffset; } else { - buffer.positions[i] = advance + buffer.point + glyph.fOffset; //TODO: invert glyph.fOffset.fY? + buffer.positions[i] = advance + buffer.point + glyph.fOffset; } if (buffer.clusters) { buffer.clusters[i] = glyph.fCluster; @@ -1308,9 +1308,9 @@ ShapedRun ShaperHarfBuzz::shape(char const * const utf8, glyph.fID = info[i].codepoint; glyph.fCluster = info[i].cluster; glyph.fOffset.fX = pos[i].x_offset * textSizeX; - glyph.fOffset.fY = pos[i].y_offset * textSizeY; + glyph.fOffset.fY = -(pos[i].y_offset * textSizeY); // HarfBuzz y-up, Skia y-down glyph.fAdvance.fX = pos[i].x_advance * textSizeX; - glyph.fAdvance.fY = pos[i].y_advance * textSizeY; + glyph.fAdvance.fY = -(pos[i].y_advance * textSizeY); // HarfBuzz y-up, Skia y-down SkRect bounds; SkScalar advance; diff --git a/third_party/skia/modules/skshaper/src/SkShaper_primitive.cpp b/third_party/skia/modules/skshaper/src/SkShaper_primitive.cpp index 48035f04da07..a72cffe0ce7a 100644 --- a/third_party/skia/modules/skshaper/src/SkShaper_primitive.cpp +++ b/third_party/skia/modules/skshaper/src/SkShaper_primitive.cpp @@ -122,11 +122,20 @@ void SkShaperPrimitive::shape(const char* utf8, size_t utf8Bytes, SkScalar width, RunHandler* handler) const { - font.consume(); - SkASSERT(font.currentFont().getTypeface()); - bidi.consume(); - return this->shape(utf8, utf8Bytes, font.currentFont(), (bidi.currentLevel() % 2) == 0, - width, handler); + SkFont skfont; + if (!font.atEnd()) { + font.consume(); + skfont = font.currentFont(); + } else { + skfont.setTypeface(sk_ref_sp(skfont.getTypefaceOrDefault())); + } + SkASSERT(skfont.getTypeface()); + bool skbidi = 0; + if (!bidi.atEnd()) { + bidi.consume(); + skbidi = (bidi.currentLevel() % 2) == 0; + } + return this->shape(utf8, utf8Bytes, skfont, skbidi, width, handler); } void SkShaperPrimitive::shape(const char* utf8, size_t utf8Bytes, diff --git a/third_party/skia/platform_tools/android/skp_gen/android_skp_capture.py b/third_party/skia/platform_tools/android/skp_gen/android_skp_capture.py old mode 100644 new mode 100755 diff --git a/third_party/skia/public.bzl b/third_party/skia/public.bzl index d0bade80aa48..0d92a2060c79 100644 --- a/third_party/skia/public.bzl +++ b/third_party/skia/public.bzl @@ -267,15 +267,14 @@ BASE_SRCS_ALL = struct( def codec_srcs(limited): """Sources for the codecs. Excludes Raw, and Ico, Webp, and Png if limited.""" - # TODO: Enable wuffs in Google3 - exclude = ["src/codec/SkWuffsCodec.cpp", "src/codec/*Raw*.cpp"] + exclude = ["src/codec/*Raw*.cpp"] if limited: exclude += [ "src/codec/*Ico*.cpp", "src/codec/*Webp*.cpp", "src/codec/*Png*", ] - return native.glob(["src/codec/*.cpp", "third_party/gif/*.cpp"], exclude = exclude) + return native.glob(["src/codec/*.cpp"], exclude = exclude) GL_SRCS_UNIX = struct( include = [ @@ -518,6 +517,7 @@ DM_SRCS_ALL = struct( "gm/video_decoder.cpp", "tests/FontMgrAndroidParserTest.cpp", # Android-only. "tests/FontMgrFontConfigTest.cpp", # FontConfig-only. + "tests/SkParagraphTest.cpp", # Skipping tests for now. "tests/skia_test.cpp", # Old main. "tools/gpu/atlastext/*", "tools/gpu/dawn/*", @@ -621,7 +621,6 @@ def base_defines(os_conditions): "PNG_SKIP_SETJMP_CHECK", "SK_BUILD_FOR_UNIX", "SK_R32_SHIFT=16", - "SK_PDF_USE_SFNTLY", "SK_HAS_PNG_LIBRARY", "SK_HAS_WEBP_LIBRARY", ], @@ -744,8 +743,8 @@ SKOTTIE_SHAPER_SRCS = [ SKOTTIE_TOOL_SRCS = [ "modules/skottie/src/SkottieTool.cpp", - "modules/skottie/utils/SkottieUtils.cpp", - "modules/skottie/utils/SkottieUtils.h", + "modules/skresources/src/SkResources.cpp", + "modules/skresources/include/SkResources.h", # TODO(benjaminwagner): Add "flags" target. "tools/flags/CommandLineFlags.cpp", "tools/flags/CommandLineFlags.h", diff --git a/third_party/skia/resources/SkVMTest.expected b/third_party/skia/resources/SkVMTest.expected index c42a9fd66d36..064e75de86d7 100644 --- a/third_party/skia/resources/SkVMTest.expected +++ b/third_party/skia/resources/SkVMTest.expected @@ -1,697 +1,610 @@ A8 over A8 -17 values: -☠️ v0 = splat 0 (0) - v1 = load8 arg(0) -↑ v2 = splat 3B808081 (0.0039215689) - v3 = to_f32 v1 - v4 = mul_f32 v2 v3 - v5 = load8 arg(1) - v6 = to_f32 v5 - v7 = mul_f32 v2 v6 -↑ v8 = splat 3F800000 (1) - v9 = sub_f32 v8 v4 -☠️ v10 = mul_f32 v0 v9 - v11 = mad_f32 v7 v9 v4 -↑ v12 = splat 437F0000 (255) -↑ v13 = splat 3F000000 (0.5) - v14 = mad_f32 v11 v12 v13 - v15 = to_i32 v14 - store8 arg(1) v15 +12 values: + v0 = load8 arg(0) + v1 = to_f32 v0 + v2 = mul_f32 v1 3B808081 (0.0039215689) + v3 = load8 arg(1) + v4 = to_f32 v3 + v5 = mul_f32 v4 3B808081 (0.0039215689) +↑ v6 = splat 3F800000 (1) + v7 = sub_f32 v6 v2 + v8 = mad_f32 v5 v7 v2 + v9 = mul_f32 v8 437F0000 (255) + v10 = round v9 + store8 arg(1) v10 -7 registers, 15 instructions: -r0 = splat 3B808081 (0.0039215689) -r1 = splat 3F800000 (1) -r2 = splat 437F0000 (255) -r3 = splat 3F000000 (0.5) +4 registers, 12 instructions: +r0 = splat 3F800000 (1) loop: -r4 = load8 arg(0) -r4 = to_f32 r4 -r4 = mul_f32 r0 r4 -r5 = load8 arg(1) -r5 = to_f32 r5 -r5 = mul_f32 r0 r5 -r6 = sub_f32 r1 r4 -r4 = mad_f32 r5 r6 r4 -r4 = mad_f32 r4 r2 r3 -r4 = to_i32 r4 -store8 arg(1) r4 + r1 = load8 arg(0) + r1 = to_f32 r1 + r1 = mul_f32 r1 3B808081 (0.0039215689) + r2 = load8 arg(1) + r2 = to_f32 r2 + r2 = mul_f32 r2 3B808081 (0.0039215689) + r3 = sub_f32 r0 r1 + r1 = mad_f32 r2 r3 r1 + r1 = mul_f32 r1 437F0000 (255) + r1 = round r1 + store8 arg(1) r1 A8 over G8 -23 values: -☠️ v0 = splat 0 (0) - v1 = load8 arg(0) -↑ v2 = splat 3B808081 (0.0039215689) - v3 = to_f32 v1 - v4 = mul_f32 v2 v3 - v5 = load8 arg(1) - v6 = to_f32 v5 - v7 = mul_f32 v2 v6 -↑ v8 = splat 3F800000 (1) - v9 = sub_f32 v8 v4 - v10 = mul_f32 v7 v9 -☠️ v11 = mad_f32 v8 v9 v4 -↑ v12 = splat 3E59B3D0 (0.21259999) -↑ v13 = splat 3F371759 (0.71520001) -↑ v14 = splat 3D93DD98 (0.0722) - v15 = mul_f32 v10 v14 - v16 = mad_f32 v10 v13 v15 - v17 = mad_f32 v10 v12 v16 -↑ v18 = splat 437F0000 (255) -↑ v19 = splat 3F000000 (0.5) - v20 = mad_f32 v17 v18 v19 - v21 = to_i32 v20 - store8 arg(1) v21 +17 values: + v0 = load8 arg(1) + v1 = to_f32 v0 + v2 = mul_f32 v1 3B808081 (0.0039215689) + v3 = load8 arg(0) + v4 = to_f32 v3 + v5 = mul_f32 v4 3B808081 (0.0039215689) +↑ v6 = splat 3F800000 (1) + v7 = sub_f32 v6 v5 + v8 = mul_f32 v2 v7 +↑ v9 = splat 3E59B3D0 (0.21259999) +↑ v10 = splat 3F371759 (0.71520001) + v11 = mul_f32 v8 3D93DD98 (0.0722) + v12 = mad_f32 v8 v10 v11 + v13 = mad_f32 v8 v9 v12 + v14 = mul_f32 v13 437F0000 (255) + v15 = round v14 + store8 arg(1) v15 -9 registers, 21 instructions: -r0 = splat 3B808081 (0.0039215689) -r1 = splat 3F800000 (1) -r2 = splat 3E59B3D0 (0.21259999) -r3 = splat 3F371759 (0.71520001) -r4 = splat 3D93DD98 (0.0722) -r5 = splat 437F0000 (255) -r6 = splat 3F000000 (0.5) +5 registers, 17 instructions: +r0 = splat 3F800000 (1) +r1 = splat 3E59B3D0 (0.21259999) +r2 = splat 3F371759 (0.71520001) loop: -r7 = load8 arg(0) -r7 = to_f32 r7 -r7 = mul_f32 r0 r7 -r8 = load8 arg(1) -r8 = to_f32 r8 -r8 = mul_f32 r0 r8 -r7 = sub_f32 r1 r7 -r7 = mul_f32 r8 r7 -r8 = mul_f32 r7 r4 -r8 = mad_f32 r7 r3 r8 -r8 = mad_f32 r7 r2 r8 -r8 = mad_f32 r8 r5 r6 -r8 = to_i32 r8 -store8 arg(1) r8 + r3 = load8 arg(1) + r3 = to_f32 r3 + r3 = mul_f32 r3 3B808081 (0.0039215689) + r4 = load8 arg(0) + r4 = to_f32 r4 + r4 = mul_f32 r4 3B808081 (0.0039215689) + r4 = sub_f32 r0 r4 + r4 = mul_f32 r3 r4 + r3 = mul_f32 r4 3D93DD98 (0.0722) + r3 = mad_f32 r4 r2 r3 + r3 = mad_f32 r4 r1 r3 + r3 = mul_f32 r3 437F0000 (255) + r3 = round r3 + store8 arg(1) r3 A8 over RGBA_8888 -39 values: -☠️ v0 = splat 0 (0) - v1 = load8 arg(0) -↑ v2 = splat 3B808081 (0.0039215689) - v3 = to_f32 v1 - v4 = mul_f32 v2 v3 - v5 = load32 arg(1) -↑ v6 = splat FF (3.5733111e-43) - v7 = extract v5 0 v6 - v8 = to_f32 v7 - v9 = mul_f32 v2 v8 - v10 = extract v5 8 v6 - v11 = to_f32 v10 - v12 = mul_f32 v2 v11 - v13 = extract v5 16 v6 +35 values: + v0 = load32 arg(1) +↑ v1 = splat FF (3.5733111e-43) + v2 = extract v0 0 v1 + v3 = to_f32 v2 + v4 = mul_f32 v3 3B808081 (0.0039215689) + v5 = load8 arg(0) + v6 = to_f32 v5 + v7 = mul_f32 v6 3B808081 (0.0039215689) +↑ v8 = splat 3F800000 (1) + v9 = sub_f32 v8 v7 + v10 = mul_f32 v4 v9 + v11 = mul_f32 v10 437F0000 (255) + v12 = round v11 + v13 = extract v0 8 v1 v14 = to_f32 v13 - v15 = mul_f32 v2 v14 - v16 = extract v5 24 v6 - v17 = to_f32 v16 - v18 = mul_f32 v2 v17 -↑ v19 = splat 3F800000 (1) - v20 = sub_f32 v19 v4 - v21 = mul_f32 v9 v20 - v22 = mul_f32 v12 v20 - v23 = mul_f32 v15 v20 - v24 = mad_f32 v18 v20 v4 -↑ v25 = splat 437F0000 (255) -↑ v26 = splat 3F000000 (0.5) - v27 = mad_f32 v21 v25 v26 - v28 = to_i32 v27 - v29 = mad_f32 v22 v25 v26 - v30 = to_i32 v29 - v31 = mad_f32 v23 v25 v26 - v32 = to_i32 v31 - v33 = mad_f32 v24 v25 v26 - v34 = to_i32 v33 - v35 = pack v28 v30 8 - v36 = pack v32 v34 8 - v37 = pack v35 v36 16 - store32 arg(1) v37 + v15 = mul_f32 v14 3B808081 (0.0039215689) + v16 = mul_f32 v15 v9 + v17 = mul_f32 v16 437F0000 (255) + v18 = round v17 + v19 = pack v12 v18 8 + v20 = extract v0 16 v1 + v21 = to_f32 v20 + v22 = mul_f32 v21 3B808081 (0.0039215689) + v23 = mul_f32 v22 v9 + v24 = mul_f32 v23 437F0000 (255) + v25 = round v24 + v26 = extract v0 24 v1 + v27 = to_f32 v26 + v28 = mul_f32 v27 3B808081 (0.0039215689) + v29 = mad_f32 v28 v9 v7 + v30 = mul_f32 v29 437F0000 (255) + v31 = round v30 + v32 = pack v25 v31 8 + v33 = pack v19 v32 16 + store32 arg(1) v33 -11 registers, 38 instructions: -r0 = splat 3B808081 (0.0039215689) -r1 = splat FF (3.5733111e-43) -r2 = splat 3F800000 (1) -r3 = splat 437F0000 (255) -r4 = splat 3F000000 (0.5) +7 registers, 35 instructions: +r0 = splat FF (3.5733111e-43) +r1 = splat 3F800000 (1) loop: -r5 = load8 arg(0) -r5 = to_f32 r5 -r5 = mul_f32 r0 r5 -r6 = load32 arg(1) -r7 = extract r6 0 r1 -r7 = to_f32 r7 -r7 = mul_f32 r0 r7 -r8 = extract r6 8 r1 -r8 = to_f32 r8 -r8 = mul_f32 r0 r8 -r9 = extract r6 16 r1 -r9 = to_f32 r9 -r9 = mul_f32 r0 r9 -r6 = extract r6 24 r1 -r6 = to_f32 r6 -r6 = mul_f32 r0 r6 -r10 = sub_f32 r2 r5 -r7 = mul_f32 r7 r10 -r8 = mul_f32 r8 r10 -r9 = mul_f32 r9 r10 -r5 = mad_f32 r6 r10 r5 -r7 = mad_f32 r7 r3 r4 -r7 = to_i32 r7 -r8 = mad_f32 r8 r3 r4 -r8 = to_i32 r8 -r9 = mad_f32 r9 r3 r4 -r9 = to_i32 r9 -r5 = mad_f32 r5 r3 r4 -r5 = to_i32 r5 -r8 = pack r7 r8 8 -r5 = pack r9 r5 8 -r5 = pack r8 r5 16 -store32 arg(1) r5 + r2 = load32 arg(1) + r3 = extract r2 0 r0 + r3 = to_f32 r3 + r3 = mul_f32 r3 3B808081 (0.0039215689) + r4 = load8 arg(0) + r4 = to_f32 r4 + r4 = mul_f32 r4 3B808081 (0.0039215689) + r5 = sub_f32 r1 r4 + r3 = mul_f32 r3 r5 + r3 = mul_f32 r3 437F0000 (255) + r3 = round r3 + r6 = extract r2 8 r0 + r6 = to_f32 r6 + r6 = mul_f32 r6 3B808081 (0.0039215689) + r6 = mul_f32 r6 r5 + r6 = mul_f32 r6 437F0000 (255) + r6 = round r6 + r6 = pack r3 r6 8 + r3 = extract r2 16 r0 + r3 = to_f32 r3 + r3 = mul_f32 r3 3B808081 (0.0039215689) + r3 = mul_f32 r3 r5 + r3 = mul_f32 r3 437F0000 (255) + r3 = round r3 + r2 = extract r2 24 r0 + r2 = to_f32 r2 + r2 = mul_f32 r2 3B808081 (0.0039215689) + r4 = mad_f32 r2 r5 r4 + r4 = mul_f32 r4 437F0000 (255) + r4 = round r4 + r4 = pack r3 r4 8 + r4 = pack r6 r4 16 + store32 arg(1) r4 G8 over A8 -17 values: -☠️ v0 = load8 arg(0) -↑ v1 = splat 3B808081 (0.0039215689) -☠️ v2 = to_f32 v0 -☠️ v3 = mul_f32 v1 v2 -↑ v4 = splat 3F800000 (1) -☠️ v5 = splat 0 (0) - v6 = load8 arg(1) - v7 = to_f32 v6 - v8 = mul_f32 v1 v7 -↑ v9 = sub_f32 v4 v4 -☠️ v10 = mad_f32 v5 v9 v3 - v11 = mad_f32 v8 v9 v4 -↑ v12 = splat 437F0000 (255) -↑ v13 = splat 3F000000 (0.5) - v14 = mad_f32 v11 v12 v13 - v15 = to_i32 v14 - store8 arg(1) v15 +9 values: +↑ v0 = splat 3F800000 (1) +↑ v1 = splat 0 (0) + v2 = load8 arg(1) + v3 = to_f32 v2 + v4 = mul_f32 v3 3B808081 (0.0039215689) + v5 = mad_f32 v4 v1 v0 + v6 = mul_f32 v5 437F0000 (255) + v7 = round v6 + store8 arg(1) v7 -6 registers, 12 instructions: -r0 = splat 3B808081 (0.0039215689) -r1 = splat 3F800000 (1) -r2 = sub_f32 r1 r1 -r3 = splat 437F0000 (255) -r4 = splat 3F000000 (0.5) +3 registers, 9 instructions: +r0 = splat 3F800000 (1) +r1 = splat 0 (0) loop: -r5 = load8 arg(1) -r5 = to_f32 r5 -r5 = mul_f32 r0 r5 -r5 = mad_f32 r5 r2 r1 -r5 = mad_f32 r5 r3 r4 -r5 = to_i32 r5 -store8 arg(1) r5 + r2 = load8 arg(1) + r2 = to_f32 r2 + r2 = mul_f32 r2 3B808081 (0.0039215689) + r2 = mad_f32 r2 r1 r0 + r2 = mul_f32 r2 437F0000 (255) + r2 = round r2 + store8 arg(1) r2 G8 over G8 -22 values: +16 values: v0 = load8 arg(0) -↑ v1 = splat 3B808081 (0.0039215689) - v2 = to_f32 v0 - v3 = mul_f32 v1 v2 -↟ v4 = splat 3F800000 (1) - v5 = load8 arg(1) - v6 = to_f32 v5 - v7 = mul_f32 v1 v6 -↑ v8 = sub_f32 v4 v4 - v9 = mad_f32 v7 v8 v3 -☠️ v10 = mad_f32 v4 v8 v4 -↑ v11 = splat 3E59B3D0 (0.21259999) -↑ v12 = splat 3F371759 (0.71520001) -↑ v13 = splat 3D93DD98 (0.0722) - v14 = mul_f32 v9 v13 - v15 = mad_f32 v9 v12 v14 - v16 = mad_f32 v9 v11 v15 -↑ v17 = splat 437F0000 (255) -↑ v18 = splat 3F000000 (0.5) - v19 = mad_f32 v16 v17 v18 - v20 = to_i32 v19 - store8 arg(1) v20 + v1 = to_f32 v0 + v2 = mul_f32 v1 3B808081 (0.0039215689) + v3 = load8 arg(1) + v4 = to_f32 v3 + v5 = mul_f32 v4 3B808081 (0.0039215689) +↑ v6 = splat 0 (0) + v7 = mad_f32 v5 v6 v2 +↑ v8 = splat 3E59B3D0 (0.21259999) +↑ v9 = splat 3F371759 (0.71520001) + v10 = mul_f32 v7 3D93DD98 (0.0722) + v11 = mad_f32 v7 v9 v10 + v12 = mad_f32 v7 v8 v11 + v13 = mul_f32 v12 437F0000 (255) + v14 = round v13 + store8 arg(1) v14 -9 registers, 21 instructions: -r0 = splat 3B808081 (0.0039215689) -r1 = splat 3F800000 (1) -r1 = sub_f32 r1 r1 -r2 = splat 3E59B3D0 (0.21259999) -r3 = splat 3F371759 (0.71520001) -r4 = splat 3D93DD98 (0.0722) -r5 = splat 437F0000 (255) -r6 = splat 3F000000 (0.5) +5 registers, 16 instructions: +r0 = splat 0 (0) +r1 = splat 3E59B3D0 (0.21259999) +r2 = splat 3F371759 (0.71520001) loop: -r7 = load8 arg(0) -r7 = to_f32 r7 -r7 = mul_f32 r0 r7 -r8 = load8 arg(1) -r8 = to_f32 r8 -r8 = mul_f32 r0 r8 -r7 = mad_f32 r8 r1 r7 -r8 = mul_f32 r7 r4 -r8 = mad_f32 r7 r3 r8 -r8 = mad_f32 r7 r2 r8 -r8 = mad_f32 r8 r5 r6 -r8 = to_i32 r8 -store8 arg(1) r8 + r3 = load8 arg(0) + r3 = to_f32 r3 + r3 = mul_f32 r3 3B808081 (0.0039215689) + r4 = load8 arg(1) + r4 = to_f32 r4 + r4 = mul_f32 r4 3B808081 (0.0039215689) + r3 = mad_f32 r4 r0 r3 + r4 = mul_f32 r3 3D93DD98 (0.0722) + r4 = mad_f32 r3 r2 r4 + r4 = mad_f32 r3 r1 r4 + r4 = mul_f32 r4 437F0000 (255) + r4 = round r4 + store8 arg(1) r4 G8 over RGBA_8888 -38 values: +35 values: v0 = load8 arg(0) -↑ v1 = splat 3B808081 (0.0039215689) - v2 = to_f32 v0 - v3 = mul_f32 v1 v2 -↑ v4 = splat 3F800000 (1) - v5 = load32 arg(1) -↑ v6 = splat FF (3.5733111e-43) - v7 = extract v5 0 v6 - v8 = to_f32 v7 - v9 = mul_f32 v1 v8 - v10 = extract v5 8 v6 - v11 = to_f32 v10 - v12 = mul_f32 v1 v11 - v13 = extract v5 16 v6 - v14 = to_f32 v13 - v15 = mul_f32 v1 v14 - v16 = extract v5 24 v6 - v17 = to_f32 v16 - v18 = mul_f32 v1 v17 -↑ v19 = sub_f32 v4 v4 - v20 = mad_f32 v9 v19 v3 - v21 = mad_f32 v12 v19 v3 - v22 = mad_f32 v15 v19 v3 - v23 = mad_f32 v18 v19 v4 -↑ v24 = splat 437F0000 (255) -↑ v25 = splat 3F000000 (0.5) - v26 = mad_f32 v20 v24 v25 - v27 = to_i32 v26 - v28 = mad_f32 v21 v24 v25 - v29 = to_i32 v28 - v30 = mad_f32 v22 v24 v25 - v31 = to_i32 v30 - v32 = mad_f32 v23 v24 v25 - v33 = to_i32 v32 - v34 = pack v27 v29 8 - v35 = pack v31 v33 8 - v36 = pack v34 v35 16 - store32 arg(1) v36 + v1 = to_f32 v0 + v2 = mul_f32 v1 3B808081 (0.0039215689) + v3 = load32 arg(1) +↑ v4 = splat FF (3.5733111e-43) + v5 = extract v3 0 v4 + v6 = to_f32 v5 + v7 = mul_f32 v6 3B808081 (0.0039215689) +↑ v8 = splat 0 (0) + v9 = mad_f32 v7 v8 v2 + v10 = mul_f32 v9 437F0000 (255) + v11 = round v10 + v12 = extract v3 8 v4 + v13 = to_f32 v12 + v14 = mul_f32 v13 3B808081 (0.0039215689) + v15 = mad_f32 v14 v8 v2 + v16 = mul_f32 v15 437F0000 (255) + v17 = round v16 + v18 = pack v11 v17 8 + v19 = extract v3 16 v4 + v20 = to_f32 v19 + v21 = mul_f32 v20 3B808081 (0.0039215689) + v22 = mad_f32 v21 v8 v2 + v23 = mul_f32 v22 437F0000 (255) + v24 = round v23 +↑ v25 = splat 3F800000 (1) + v26 = extract v3 24 v4 + v27 = to_f32 v26 + v28 = mul_f32 v27 3B808081 (0.0039215689) + v29 = mad_f32 v28 v8 v25 + v30 = mul_f32 v29 437F0000 (255) + v31 = round v30 + v32 = pack v24 v31 8 + v33 = pack v18 v32 16 + store32 arg(1) v33 -11 registers, 38 instructions: -r0 = splat 3B808081 (0.0039215689) -r1 = splat 3F800000 (1) -r2 = splat FF (3.5733111e-43) -r3 = sub_f32 r1 r1 -r4 = splat 437F0000 (255) -r5 = splat 3F000000 (0.5) +7 registers, 35 instructions: +r0 = splat FF (3.5733111e-43) +r1 = splat 0 (0) +r2 = splat 3F800000 (1) loop: -r6 = load8 arg(0) -r6 = to_f32 r6 -r6 = mul_f32 r0 r6 -r7 = load32 arg(1) -r8 = extract r7 0 r2 -r8 = to_f32 r8 -r8 = mul_f32 r0 r8 -r9 = extract r7 8 r2 -r9 = to_f32 r9 -r9 = mul_f32 r0 r9 -r10 = extract r7 16 r2 -r10 = to_f32 r10 -r10 = mul_f32 r0 r10 -r7 = extract r7 24 r2 -r7 = to_f32 r7 -r7 = mul_f32 r0 r7 -r8 = mad_f32 r8 r3 r6 -r9 = mad_f32 r9 r3 r6 -r6 = mad_f32 r10 r3 r6 -r7 = mad_f32 r7 r3 r1 -r8 = mad_f32 r8 r4 r5 -r8 = to_i32 r8 -r9 = mad_f32 r9 r4 r5 -r9 = to_i32 r9 -r6 = mad_f32 r6 r4 r5 -r6 = to_i32 r6 -r7 = mad_f32 r7 r4 r5 -r7 = to_i32 r7 -r9 = pack r8 r9 8 -r7 = pack r6 r7 8 -r7 = pack r9 r7 16 -store32 arg(1) r7 + r3 = load8 arg(0) + r3 = to_f32 r3 + r3 = mul_f32 r3 3B808081 (0.0039215689) + r4 = load32 arg(1) + r5 = extract r4 0 r0 + r5 = to_f32 r5 + r5 = mul_f32 r5 3B808081 (0.0039215689) + r5 = mad_f32 r5 r1 r3 + r5 = mul_f32 r5 437F0000 (255) + r5 = round r5 + r6 = extract r4 8 r0 + r6 = to_f32 r6 + r6 = mul_f32 r6 3B808081 (0.0039215689) + r6 = mad_f32 r6 r1 r3 + r6 = mul_f32 r6 437F0000 (255) + r6 = round r6 + r6 = pack r5 r6 8 + r5 = extract r4 16 r0 + r5 = to_f32 r5 + r5 = mul_f32 r5 3B808081 (0.0039215689) + r3 = mad_f32 r5 r1 r3 + r3 = mul_f32 r3 437F0000 (255) + r3 = round r3 + r4 = extract r4 24 r0 + r4 = to_f32 r4 + r4 = mul_f32 r4 3B808081 (0.0039215689) + r4 = mad_f32 r4 r1 r2 + r4 = mul_f32 r4 437F0000 (255) + r4 = round r4 + r4 = pack r3 r4 8 + r4 = pack r6 r4 16 + store32 arg(1) r4 RGBA_8888 over A8 -30 values: +14 values: v0 = load32 arg(0) ↑ v1 = splat FF (3.5733111e-43) -☠️ v2 = extract v0 0 v1 -↑ v3 = splat 3B808081 (0.0039215689) -☠️ v4 = to_f32 v2 -☠️ v5 = mul_f32 v3 v4 -☠️ v6 = extract v0 8 v1 -☠️ v7 = to_f32 v6 -☠️ v8 = mul_f32 v3 v7 -☠️ v9 = extract v0 16 v1 -☠️ v10 = to_f32 v9 -☠️ v11 = mul_f32 v3 v10 - v12 = extract v0 24 v1 - v13 = to_f32 v12 - v14 = mul_f32 v3 v13 -☠️ v15 = splat 0 (0) - v16 = load8 arg(1) - v17 = to_f32 v16 - v18 = mul_f32 v3 v17 -↑ v19 = splat 3F800000 (1) - v20 = sub_f32 v19 v14 -☠️ v21 = mad_f32 v15 v20 v5 -☠️ v22 = mad_f32 v15 v20 v8 -☠️ v23 = mad_f32 v15 v20 v11 - v24 = mad_f32 v18 v20 v14 -↑ v25 = splat 437F0000 (255) -↑ v26 = splat 3F000000 (0.5) - v27 = mad_f32 v24 v25 v26 - v28 = to_i32 v27 - store8 arg(1) v28 + v2 = extract v0 24 v1 + v3 = to_f32 v2 + v4 = mul_f32 v3 3B808081 (0.0039215689) + v5 = load8 arg(1) + v6 = to_f32 v5 + v7 = mul_f32 v6 3B808081 (0.0039215689) +↑ v8 = splat 3F800000 (1) + v9 = sub_f32 v8 v4 + v10 = mad_f32 v7 v9 v4 + v11 = mul_f32 v10 437F0000 (255) + v12 = round v11 + store8 arg(1) v12 -8 registers, 17 instructions: +5 registers, 14 instructions: r0 = splat FF (3.5733111e-43) -r1 = splat 3B808081 (0.0039215689) -r2 = splat 3F800000 (1) -r3 = splat 437F0000 (255) -r4 = splat 3F000000 (0.5) +r1 = splat 3F800000 (1) loop: -r5 = load32 arg(0) -r5 = extract r5 24 r0 -r5 = to_f32 r5 -r5 = mul_f32 r1 r5 -r6 = load8 arg(1) -r6 = to_f32 r6 -r6 = mul_f32 r1 r6 -r7 = sub_f32 r2 r5 -r5 = mad_f32 r6 r7 r5 -r5 = mad_f32 r5 r3 r4 -r5 = to_i32 r5 -store8 arg(1) r5 + r2 = load32 arg(0) + r2 = extract r2 24 r0 + r2 = to_f32 r2 + r2 = mul_f32 r2 3B808081 (0.0039215689) + r3 = load8 arg(1) + r3 = to_f32 r3 + r3 = mul_f32 r3 3B808081 (0.0039215689) + r4 = sub_f32 r1 r2 + r2 = mad_f32 r3 r4 r2 + r2 = mul_f32 r2 437F0000 (255) + r2 = round r2 + store8 arg(1) r2 RGBA_8888 over G8 -35 values: +30 values: v0 = load32 arg(0) ↑ v1 = splat FF (3.5733111e-43) v2 = extract v0 0 v1 -↑ v3 = splat 3B808081 (0.0039215689) - v4 = to_f32 v2 - v5 = mul_f32 v3 v4 - v6 = extract v0 8 v1 - v7 = to_f32 v6 - v8 = mul_f32 v3 v7 - v9 = extract v0 16 v1 - v10 = to_f32 v9 - v11 = mul_f32 v3 v10 - v12 = extract v0 24 v1 - v13 = to_f32 v12 - v14 = mul_f32 v3 v13 - v15 = load8 arg(1) + v3 = to_f32 v2 + v4 = mul_f32 v3 3B808081 (0.0039215689) + v5 = load8 arg(1) + v6 = to_f32 v5 + v7 = mul_f32 v6 3B808081 (0.0039215689) + v8 = extract v0 24 v1 + v9 = to_f32 v8 + v10 = mul_f32 v9 3B808081 (0.0039215689) +↑ v11 = splat 3F800000 (1) + v12 = sub_f32 v11 v10 + v13 = mad_f32 v7 v12 v4 +↑ v14 = splat 3E59B3D0 (0.21259999) + v15 = extract v0 8 v1 v16 = to_f32 v15 - v17 = mul_f32 v3 v16 -↑ v18 = splat 3F800000 (1) - v19 = sub_f32 v18 v14 - v20 = mad_f32 v17 v19 v5 - v21 = mad_f32 v17 v19 v8 - v22 = mad_f32 v17 v19 v11 -☠️ v23 = mad_f32 v18 v19 v14 -↑ v24 = splat 3E59B3D0 (0.21259999) -↑ v25 = splat 3F371759 (0.71520001) -↑ v26 = splat 3D93DD98 (0.0722) - v27 = mul_f32 v22 v26 - v28 = mad_f32 v21 v25 v27 - v29 = mad_f32 v20 v24 v28 -↑ v30 = splat 437F0000 (255) -↑ v31 = splat 3F000000 (0.5) - v32 = mad_f32 v29 v30 v31 - v33 = to_i32 v32 - store8 arg(1) v33 + v17 = mul_f32 v16 3B808081 (0.0039215689) + v18 = mad_f32 v7 v12 v17 +↑ v19 = splat 3F371759 (0.71520001) + v20 = extract v0 16 v1 + v21 = to_f32 v20 + v22 = mul_f32 v21 3B808081 (0.0039215689) + v23 = mad_f32 v7 v12 v22 + v24 = mul_f32 v23 3D93DD98 (0.0722) + v25 = mad_f32 v18 v19 v24 + v26 = mad_f32 v13 v14 v25 + v27 = mul_f32 v26 437F0000 (255) + v28 = round v27 + store8 arg(1) v28 -13 registers, 34 instructions: +9 registers, 30 instructions: r0 = splat FF (3.5733111e-43) -r1 = splat 3B808081 (0.0039215689) -r2 = splat 3F800000 (1) -r3 = splat 3E59B3D0 (0.21259999) -r4 = splat 3F371759 (0.71520001) -r5 = splat 3D93DD98 (0.0722) -r6 = splat 437F0000 (255) -r7 = splat 3F000000 (0.5) +r1 = splat 3F800000 (1) +r2 = splat 3E59B3D0 (0.21259999) +r3 = splat 3F371759 (0.71520001) loop: -r8 = load32 arg(0) -r9 = extract r8 0 r0 -r9 = to_f32 r9 -r9 = mul_f32 r1 r9 -r10 = extract r8 8 r0 -r10 = to_f32 r10 -r10 = mul_f32 r1 r10 -r11 = extract r8 16 r0 -r11 = to_f32 r11 -r11 = mul_f32 r1 r11 -r8 = extract r8 24 r0 -r8 = to_f32 r8 -r8 = mul_f32 r1 r8 -r12 = load8 arg(1) -r12 = to_f32 r12 -r12 = mul_f32 r1 r12 -r8 = sub_f32 r2 r8 -r9 = mad_f32 r12 r8 r9 -r10 = mad_f32 r12 r8 r10 -r11 = mad_f32 r12 r8 r11 -r11 = mul_f32 r11 r5 -r11 = mad_f32 r10 r4 r11 -r11 = mad_f32 r9 r3 r11 -r11 = mad_f32 r11 r6 r7 -r11 = to_i32 r11 -store8 arg(1) r11 + r4 = load32 arg(0) + r5 = extract r4 0 r0 + r5 = to_f32 r5 + r5 = mul_f32 r5 3B808081 (0.0039215689) + r6 = load8 arg(1) + r6 = to_f32 r6 + r6 = mul_f32 r6 3B808081 (0.0039215689) + r7 = extract r4 24 r0 + r7 = to_f32 r7 + r7 = mul_f32 r7 3B808081 (0.0039215689) + r7 = sub_f32 r1 r7 + r5 = mad_f32 r6 r7 r5 + r8 = extract r4 8 r0 + r8 = to_f32 r8 + r8 = mul_f32 r8 3B808081 (0.0039215689) + r8 = mad_f32 r6 r7 r8 + r4 = extract r4 16 r0 + r4 = to_f32 r4 + r4 = mul_f32 r4 3B808081 (0.0039215689) + r4 = mad_f32 r6 r7 r4 + r4 = mul_f32 r4 3D93DD98 (0.0722) + r4 = mad_f32 r8 r3 r4 + r4 = mad_f32 r5 r2 r4 + r4 = mul_f32 r4 437F0000 (255) + r4 = round r4 + store8 arg(1) r4 RGBA_8888 over RGBA_8888 -48 values: +45 values: v0 = load32 arg(0) ↑ v1 = splat FF (3.5733111e-43) v2 = extract v0 0 v1 -↑ v3 = splat 3B808081 (0.0039215689) - v4 = to_f32 v2 - v5 = mul_f32 v3 v4 - v6 = extract v0 8 v1 + v3 = to_f32 v2 + v4 = mul_f32 v3 3B808081 (0.0039215689) + v5 = load32 arg(1) + v6 = extract v5 0 v1 v7 = to_f32 v6 - v8 = mul_f32 v3 v7 - v9 = extract v0 16 v1 + v8 = mul_f32 v7 3B808081 (0.0039215689) + v9 = extract v0 24 v1 v10 = to_f32 v9 - v11 = mul_f32 v3 v10 - v12 = extract v0 24 v1 - v13 = to_f32 v12 - v14 = mul_f32 v3 v13 - v15 = load32 arg(1) - v16 = extract v15 0 v1 - v17 = to_f32 v16 - v18 = mul_f32 v3 v17 - v19 = extract v15 8 v1 - v20 = to_f32 v19 - v21 = mul_f32 v3 v20 - v22 = extract v15 16 v1 - v23 = to_f32 v22 - v24 = mul_f32 v3 v23 - v25 = extract v15 24 v1 - v26 = to_f32 v25 - v27 = mul_f32 v3 v26 -↑ v28 = splat 3F800000 (1) - v29 = sub_f32 v28 v14 - v30 = mad_f32 v18 v29 v5 - v31 = mad_f32 v21 v29 v8 - v32 = mad_f32 v24 v29 v11 - v33 = mad_f32 v27 v29 v14 -↑ v34 = splat 437F0000 (255) -↑ v35 = splat 3F000000 (0.5) - v36 = mad_f32 v30 v34 v35 - v37 = to_i32 v36 - v38 = mad_f32 v31 v34 v35 - v39 = to_i32 v38 - v40 = mad_f32 v32 v34 v35 - v41 = to_i32 v40 - v42 = mad_f32 v33 v34 v35 - v43 = to_i32 v42 - v44 = pack v37 v39 8 - v45 = pack v41 v43 8 - v46 = pack v44 v45 16 - store32 arg(1) v46 + v11 = mul_f32 v10 3B808081 (0.0039215689) +↑ v12 = splat 3F800000 (1) + v13 = sub_f32 v12 v11 + v14 = mad_f32 v8 v13 v4 + v15 = mul_f32 v14 437F0000 (255) + v16 = round v15 + v17 = extract v0 8 v1 + v18 = to_f32 v17 + v19 = mul_f32 v18 3B808081 (0.0039215689) + v20 = extract v5 8 v1 + v21 = to_f32 v20 + v22 = mul_f32 v21 3B808081 (0.0039215689) + v23 = mad_f32 v22 v13 v19 + v24 = mul_f32 v23 437F0000 (255) + v25 = round v24 + v26 = pack v16 v25 8 + v27 = extract v0 16 v1 + v28 = to_f32 v27 + v29 = mul_f32 v28 3B808081 (0.0039215689) + v30 = extract v5 16 v1 + v31 = to_f32 v30 + v32 = mul_f32 v31 3B808081 (0.0039215689) + v33 = mad_f32 v32 v13 v29 + v34 = mul_f32 v33 437F0000 (255) + v35 = round v34 + v36 = extract v5 24 v1 + v37 = to_f32 v36 + v38 = mul_f32 v37 3B808081 (0.0039215689) + v39 = mad_f32 v38 v13 v11 + v40 = mul_f32 v39 437F0000 (255) + v41 = round v40 + v42 = pack v35 v41 8 + v43 = pack v26 v42 16 + store32 arg(1) v43 -14 registers, 48 instructions: +9 registers, 45 instructions: r0 = splat FF (3.5733111e-43) -r1 = splat 3B808081 (0.0039215689) -r2 = splat 3F800000 (1) -r3 = splat 437F0000 (255) -r4 = splat 3F000000 (0.5) +r1 = splat 3F800000 (1) loop: -r5 = load32 arg(0) -r6 = extract r5 0 r0 -r6 = to_f32 r6 -r6 = mul_f32 r1 r6 -r7 = extract r5 8 r0 -r7 = to_f32 r7 -r7 = mul_f32 r1 r7 -r8 = extract r5 16 r0 -r8 = to_f32 r8 -r8 = mul_f32 r1 r8 -r5 = extract r5 24 r0 -r5 = to_f32 r5 -r5 = mul_f32 r1 r5 -r9 = load32 arg(1) -r10 = extract r9 0 r0 -r10 = to_f32 r10 -r10 = mul_f32 r1 r10 -r11 = extract r9 8 r0 -r11 = to_f32 r11 -r11 = mul_f32 r1 r11 -r12 = extract r9 16 r0 -r12 = to_f32 r12 -r12 = mul_f32 r1 r12 -r9 = extract r9 24 r0 -r9 = to_f32 r9 -r9 = mul_f32 r1 r9 -r13 = sub_f32 r2 r5 -r6 = mad_f32 r10 r13 r6 -r7 = mad_f32 r11 r13 r7 -r8 = mad_f32 r12 r13 r8 -r5 = mad_f32 r9 r13 r5 -r6 = mad_f32 r6 r3 r4 -r6 = to_i32 r6 -r7 = mad_f32 r7 r3 r4 -r7 = to_i32 r7 -r8 = mad_f32 r8 r3 r4 -r8 = to_i32 r8 -r5 = mad_f32 r5 r3 r4 -r5 = to_i32 r5 -r7 = pack r6 r7 8 -r5 = pack r8 r5 8 -r5 = pack r7 r5 16 -store32 arg(1) r5 + r2 = load32 arg(0) + r3 = extract r2 0 r0 + r3 = to_f32 r3 + r3 = mul_f32 r3 3B808081 (0.0039215689) + r4 = load32 arg(1) + r5 = extract r4 0 r0 + r5 = to_f32 r5 + r5 = mul_f32 r5 3B808081 (0.0039215689) + r6 = extract r2 24 r0 + r6 = to_f32 r6 + r6 = mul_f32 r6 3B808081 (0.0039215689) + r7 = sub_f32 r1 r6 + r3 = mad_f32 r5 r7 r3 + r3 = mul_f32 r3 437F0000 (255) + r3 = round r3 + r5 = extract r2 8 r0 + r5 = to_f32 r5 + r5 = mul_f32 r5 3B808081 (0.0039215689) + r8 = extract r4 8 r0 + r8 = to_f32 r8 + r8 = mul_f32 r8 3B808081 (0.0039215689) + r5 = mad_f32 r8 r7 r5 + r5 = mul_f32 r5 437F0000 (255) + r5 = round r5 + r5 = pack r3 r5 8 + r2 = extract r2 16 r0 + r2 = to_f32 r2 + r2 = mul_f32 r2 3B808081 (0.0039215689) + r3 = extract r4 16 r0 + r3 = to_f32 r3 + r3 = mul_f32 r3 3B808081 (0.0039215689) + r2 = mad_f32 r3 r7 r2 + r2 = mul_f32 r2 437F0000 (255) + r2 = round r2 + r4 = extract r4 24 r0 + r4 = to_f32 r4 + r4 = mul_f32 r4 3B808081 (0.0039215689) + r6 = mad_f32 r4 r7 r6 + r6 = mul_f32 r6 437F0000 (255) + r6 = round r6 + r6 = pack r2 r6 8 + r6 = pack r5 r6 16 + store32 arg(1) r6 I32 (Naive) 8888 over 8888 29 values: v0 = load32 arg(0) ↑ v1 = splat FF (3.5733111e-43) v2 = extract v0 0 v1 - v3 = extract v0 8 v1 - v4 = extract v0 16 v1 + v3 = load32 arg(1) + v4 = extract v3 0 v1 v5 = extract v0 24 v1 - v6 = load32 arg(1) - v7 = extract v6 0 v1 - v8 = extract v6 8 v1 - v9 = extract v6 16 v1 - v10 = extract v6 24 v1 -↑ v11 = splat 100 (3.5873241e-43) - v12 = sub_i32 v11 v5 - v13 = mul_i32 v7 v12 +↑ v6 = splat 100 (3.5873241e-43) + v7 = sub_i32 v6 v5 + v8 = mul_i32 v4 v7 + v9 = shr_i32 v8 8 + v10 = add_i32 v2 v9 + v11 = extract v0 8 v1 + v12 = extract v3 8 v1 + v13 = mul_i32 v12 v7 v14 = shr_i32 v13 8 - v15 = add_i32 v2 v14 - v16 = mul_i32 v8 v12 - v17 = shr_i32 v16 8 - v18 = add_i32 v3 v17 - v19 = mul_i32 v9 v12 + v15 = add_i32 v11 v14 + v16 = pack v10 v15 8 + v17 = extract v0 16 v1 + v18 = extract v3 16 v1 + v19 = mul_i32 v18 v7 v20 = shr_i32 v19 8 - v21 = add_i32 v4 v20 - v22 = mul_i32 v10 v12 - v23 = shr_i32 v22 8 - v24 = add_i32 v5 v23 - v25 = pack v15 v18 8 - v26 = pack v21 v24 8 - v27 = pack v25 v26 16 + v21 = add_i32 v17 v20 + v22 = extract v3 24 v1 + v23 = mul_i32 v22 v7 + v24 = shr_i32 v23 8 + v25 = add_i32 v5 v24 + v26 = pack v21 v25 8 + v27 = pack v16 v26 16 store32 arg(1) v27 -11 registers, 29 instructions: +9 registers, 29 instructions: r0 = splat FF (3.5733111e-43) r1 = splat 100 (3.5873241e-43) loop: -r2 = load32 arg(0) -r3 = extract r2 0 r0 -r4 = extract r2 8 r0 -r5 = extract r2 16 r0 -r2 = extract r2 24 r0 -r6 = load32 arg(1) -r7 = extract r6 0 r0 -r8 = extract r6 8 r0 -r9 = extract r6 16 r0 -r6 = extract r6 24 r0 -r10 = sub_i32 r1 r2 -r7 = mul_i32 r7 r10 -r7 = shr_i32 r7 8 -r7 = add_i32 r3 r7 -r8 = mul_i32 r8 r10 -r8 = shr_i32 r8 8 -r8 = add_i32 r4 r8 -r9 = mul_i32 r9 r10 -r9 = shr_i32 r9 8 -r9 = add_i32 r5 r9 -r10 = mul_i32 r6 r10 -r10 = shr_i32 r10 8 -r10 = add_i32 r2 r10 -r8 = pack r7 r8 8 -r10 = pack r9 r10 8 -r10 = pack r8 r10 16 -store32 arg(1) r10 + r2 = load32 arg(0) + r3 = extract r2 0 r0 + r4 = load32 arg(1) + r5 = extract r4 0 r0 + r6 = extract r2 24 r0 + r7 = sub_i32 r1 r6 + r5 = mul_i32 r5 r7 + r5 = shr_i32 r5 8 + r5 = add_i32 r3 r5 + r3 = extract r2 8 r0 + r8 = extract r4 8 r0 + r8 = mul_i32 r8 r7 + r8 = shr_i32 r8 8 + r8 = add_i32 r3 r8 + r8 = pack r5 r8 8 + r2 = extract r2 16 r0 + r5 = extract r4 16 r0 + r5 = mul_i32 r5 r7 + r5 = shr_i32 r5 8 + r5 = add_i32 r2 r5 + r4 = extract r4 24 r0 + r7 = mul_i32 r4 r7 + r7 = shr_i32 r7 8 + r7 = add_i32 r6 r7 + r7 = pack r5 r7 8 + r7 = pack r8 r7 16 + store32 arg(1) r7 I32 8888 over 8888 29 values: v0 = load32 arg(0) ↑ v1 = splat FF (3.5733111e-43) v2 = bit_and v0 v1 - v3 = bytes v0 2 - v4 = bytes v0 3 + v3 = load32 arg(1) + v4 = bit_and v3 v1 v5 = shr_i32 v0 24 - v6 = load32 arg(1) - v7 = bit_and v6 v1 - v8 = bytes v6 2 - v9 = bytes v6 3 - v10 = shr_i32 v6 24 -↑ v11 = splat 100 (3.5873241e-43) - v12 = sub_i32 v11 v5 - v13 = mul_i16x2 v7 v12 +↑ v6 = splat 100 (3.5873241e-43) + v7 = sub_i32 v6 v5 + v8 = mul_i16x2 v4 v7 + v9 = shr_i32 v8 8 + v10 = add_i32 v2 v9 + v11 = bytes v0 2 + v12 = bytes v3 2 + v13 = mul_i16x2 v12 v7 v14 = shr_i32 v13 8 - v15 = add_i32 v2 v14 - v16 = mul_i16x2 v8 v12 - v17 = shr_i32 v16 8 - v18 = add_i32 v3 v17 - v19 = mul_i16x2 v9 v12 + v15 = add_i32 v11 v14 + v16 = pack v10 v15 8 + v17 = bytes v0 3 + v18 = bytes v3 3 + v19 = mul_i16x2 v18 v7 v20 = shr_i32 v19 8 - v21 = add_i32 v4 v20 - v22 = mul_i16x2 v10 v12 - v23 = shr_i32 v22 8 - v24 = add_i32 v5 v23 - v25 = pack v15 v18 8 - v26 = pack v21 v24 8 - v27 = pack v25 v26 16 + v21 = add_i32 v17 v20 + v22 = shr_i32 v3 24 + v23 = mul_i16x2 v22 v7 + v24 = shr_i32 v23 8 + v25 = add_i32 v5 v24 + v26 = pack v21 v25 8 + v27 = pack v16 v26 16 store32 arg(1) v27 -11 registers, 29 instructions: +9 registers, 29 instructions: r0 = splat FF (3.5733111e-43) r1 = splat 100 (3.5873241e-43) loop: -r2 = load32 arg(0) -r3 = bit_and r2 r0 -r4 = bytes r2 2 -r5 = bytes r2 3 -r2 = shr_i32 r2 24 -r6 = load32 arg(1) -r7 = bit_and r6 r0 -r8 = bytes r6 2 -r9 = bytes r6 3 -r6 = shr_i32 r6 24 -r10 = sub_i32 r1 r2 -r7 = mul_i16x2 r7 r10 -r7 = shr_i32 r7 8 -r7 = add_i32 r3 r7 -r8 = mul_i16x2 r8 r10 -r8 = shr_i32 r8 8 -r8 = add_i32 r4 r8 -r9 = mul_i16x2 r9 r10 -r9 = shr_i32 r9 8 -r9 = add_i32 r5 r9 -r10 = mul_i16x2 r6 r10 -r10 = shr_i32 r10 8 -r10 = add_i32 r2 r10 -r8 = pack r7 r8 8 -r10 = pack r9 r10 8 -r10 = pack r8 r10 16 -store32 arg(1) r10 + r2 = load32 arg(0) + r3 = bit_and r2 r0 + r4 = load32 arg(1) + r5 = bit_and r4 r0 + r6 = shr_i32 r2 24 + r7 = sub_i32 r1 r6 + r5 = mul_i16x2 r5 r7 + r5 = shr_i32 r5 8 + r5 = add_i32 r3 r5 + r3 = bytes r2 2 + r8 = bytes r4 2 + r8 = mul_i16x2 r8 r7 + r8 = shr_i32 r8 8 + r8 = add_i32 r3 r8 + r8 = pack r5 r8 8 + r2 = bytes r2 3 + r5 = bytes r4 3 + r5 = mul_i16x2 r5 r7 + r5 = shr_i32 r5 8 + r5 = add_i32 r2 r5 + r4 = shr_i32 r4 24 + r7 = mul_i16x2 r4 r7 + r7 = shr_i32 r7 8 + r7 = add_i32 r6 r7 + r7 = pack r5 r7 8 + r7 = pack r8 r7 16 + store32 arg(1) r7 I32 (SWAR) 8888 over 8888 15 values: @@ -702,12 +615,12 @@ I32 (SWAR) 8888 over 8888 v4 = load32 arg(1) ↑ v5 = splat FF00FF (2.3418409e-38) v6 = bit_and v4 v5 - v7 = shr_i16x2 v4 8 - v8 = mul_i16x2 v6 v3 - v9 = shr_i16x2 v8 8 - v10 = mul_i16x2 v7 v3 + v7 = mul_i16x2 v6 v3 + v8 = shr_i16x2 v7 8 + v9 = shr_i16x2 v4 8 + v10 = mul_i16x2 v9 v3 v11 = bit_clear v10 v5 - v12 = bit_or v9 v11 + v12 = bit_or v8 v11 v13 = add_i32 v0 v12 store32 arg(1) v13 @@ -715,19 +628,19 @@ I32 (SWAR) 8888 over 8888 r0 = splat 1000100 (2.3510604e-38) r1 = splat FF00FF (2.3418409e-38) loop: -r2 = load32 arg(0) -r3 = bytes r2 404 -r3 = sub_i16x2 r0 r3 -r4 = load32 arg(1) -r5 = bit_and r4 r1 -r4 = shr_i16x2 r4 8 -r5 = mul_i16x2 r5 r3 -r5 = shr_i16x2 r5 8 -r3 = mul_i16x2 r4 r3 -r3 = bit_clear r3 r1 -r3 = bit_or r5 r3 -r3 = add_i32 r2 r3 -store32 arg(1) r3 + r2 = load32 arg(0) + r3 = bytes r2 404 + r3 = sub_i16x2 r0 r3 + r4 = load32 arg(1) + r5 = bit_and r4 r1 + r5 = mul_i16x2 r5 r3 + r5 = shr_i16x2 r5 8 + r4 = shr_i16x2 r4 8 + r3 = mul_i16x2 r4 r3 + r3 = bit_clear r3 r1 + r3 = bit_or r5 r3 + r3 = add_i32 r2 r3 + store32 arg(1) r3 6 values: ↟ v0 = splat 1 (1.4012985e-45) @@ -742,7 +655,50 @@ r0 = splat 1 (1.4012985e-45) r1 = splat 2 (2.8025969e-45) r1 = add_i32 r0 r1 loop: -r0 = load32 arg(0) -r0 = mul_i32 r0 r1 -store32 arg(0) r0 + r0 = load32 arg(0) + r0 = mul_i32 r0 r1 + store32 arg(0) r0 + +19 values: +↑ v0 = splat FF (3.5733111e-43) + v1 = load32 arg(0) + v2 = extract v1 0 v0 + v3 = load32 arg(1) + v4 = extract v3 0 v0 + v5 = add_i32 v2 v4 + v6 = extract v1 8 v0 + v7 = extract v3 8 v0 + v8 = add_i32 v6 v7 + v9 = pack v5 v8 8 + v10 = extract v1 16 v0 + v11 = extract v3 16 v0 + v12 = add_i32 v10 v11 + v13 = extract v1 24 v0 + v14 = extract v3 24 v0 + v15 = add_i32 v13 v14 + v16 = pack v12 v15 8 + v17 = pack v9 v16 16 + store32 arg(1) v17 + +6 registers, 19 instructions: +r0 = splat FF (3.5733111e-43) +loop: + r1 = load32 arg(0) + r2 = extract r1 0 r0 + r3 = load32 arg(1) + r4 = extract r3 0 r0 + r4 = add_i32 r2 r4 + r2 = extract r1 8 r0 + r5 = extract r3 8 r0 + r5 = add_i32 r2 r5 + r5 = pack r4 r5 8 + r4 = extract r1 16 r0 + r2 = extract r3 16 r0 + r2 = add_i32 r4 r2 + r1 = extract r1 24 r0 + r3 = extract r3 24 r0 + r3 = add_i32 r1 r3 + r3 = pack r2 r3 8 + r3 = pack r5 r3 16 + store32 arg(1) r3 diff --git a/third_party/skia/resources/diff_canvas_traces/lorem_ipsum.trace b/third_party/skia/resources/diff_canvas_traces/lorem_ipsum.trace new file mode 100644 index 000000000000..55ef5b123ba0 Binary files /dev/null and b/third_party/skia/resources/diff_canvas_traces/lorem_ipsum.trace differ diff --git a/third_party/skia/resources/ducky.jpg b/third_party/skia/resources/ducky.jpg new file mode 100644 index 000000000000..f1b8657e2800 Binary files /dev/null and b/third_party/skia/resources/ducky.jpg differ diff --git a/third_party/skia/resources/ducky.png b/third_party/skia/resources/ducky.png new file mode 100644 index 000000000000..f1cbd35250be Binary files /dev/null and b/third_party/skia/resources/ducky.png differ diff --git a/third_party/skia/resources/fonts/abc/abc+agrave.ttf b/third_party/skia/resources/fonts/abc/abc+agrave.ttf new file mode 100644 index 000000000000..fab112b64dd2 Binary files /dev/null and b/third_party/skia/resources/fonts/abc/abc+agrave.ttf differ diff --git a/third_party/skia/resources/fonts/abc/abc+agrave.ttx b/third_party/skia/resources/fonts/abc/abc+agrave.ttx new file mode 100644 index 000000000000..54ab0395bb8e --- /dev/null +++ b/third_party/skia/resources/fonts/abc/abc+agrave.ttx @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + abc+agrave + + + Normal + + + ABC+agrave-Skia-Test-Font + + + abc+agrave + + + abc+agraveNormal + + + + + + + + + + + + + + + + diff --git a/third_party/skia/resources/fonts/abc/abc+grave.ttf b/third_party/skia/resources/fonts/abc/abc+grave.ttf new file mode 100644 index 000000000000..c3abcd30ea7a Binary files /dev/null and b/third_party/skia/resources/fonts/abc/abc+grave.ttf differ diff --git a/third_party/skia/resources/fonts/abc/abc+grave.ttx b/third_party/skia/resources/fonts/abc/abc+grave.ttx new file mode 100644 index 000000000000..e5b94ae83ff8 --- /dev/null +++ b/third_party/skia/resources/fonts/abc/abc+grave.ttx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + abc+grave + + + Normal + + + ABC+grave-Skia-Test-Font + + + abc+grave + + + abc+graveNormal + + + + + + + + + + + + + + + + diff --git a/third_party/skia/resources/fonts/abc/abc.ttf b/third_party/skia/resources/fonts/abc/abc.ttf new file mode 100644 index 000000000000..3dc9dfd88bb6 Binary files /dev/null and b/third_party/skia/resources/fonts/abc/abc.ttf differ diff --git a/third_party/skia/resources/fonts/abc/abc.ttx b/third_party/skia/resources/fonts/abc/abc.ttx new file mode 100644 index 000000000000..907eb85d7557 --- /dev/null +++ b/third_party/skia/resources/fonts/abc/abc.ttx @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + abc + + + Normal + + + ABC-Skia-Test-Font + + + abc + + + abcNormal + + + + + + + + + + + + + + + + diff --git a/third_party/skia/resources/particles/cube.json b/third_party/skia/resources/particles/cube.json new file mode 100644 index 000000000000..abae33bb339a --- /dev/null +++ b/third_party/skia/resources/particles/cube.json @@ -0,0 +1,94 @@ +{ + "MaxCount": 2000, + "Drawable": { + "Type": "SkCircleDrawable", + "Radius": 4 + }, + "EffectCode": [ + "void effectSpawn(inout Effect effect) {", + " effect.lifetime = 2;", + " effect.rate = 200;", + "}", + "" + ], + "Code": [ + "void spawn(inout Particle p) {", + " p.lifetime = 10;", + "}", + "", + "float4x4 rx(float rad) {", + " float c = cos(rad);", + " float s = sin(rad);", + " return float4x4(1, 0, 0, 0,", + " 0, c, -s, 0,", + " 0, s, c, 0,", + " 0, 0, 0, 1);", + "}", + "", + "float4x4 ry(float rad) {", + " float c = cos(rad);", + " float s = sin(rad);", + " return float4x4(c, 0, -s, 0,", + " 0, 1, 0, 0,", + " s, 0, c, 0,", + " 0, 0, 0, 1);", + "}", + "", + "float4x4 rz(float rad) {", + " float c = cos(rad);", + " float s = sin(rad);", + " return float4x4( c, s, 0, 0,", + " -s, c, 0, 0,", + " 0, 0, 1, 0,", + " 0, 0, 0, 1);", + "}", + "", + "void update(inout Particle p) {", + " float3 pos = float3(rand, rand, rand);", + " if (rand < 0.33) {", + " if (pos.x > 0.5) {", + " pos.x = 1;", + " p.color.rgb = float3(1, 0.2, 0.2);", + " } else {", + " pos.x = 0;", + " p.color.rgb = float3(0.2, 1, 1);", + " }", + " } else if (rand < 0.5) {", + " if (pos.y > 0.5) {", + " pos.y = 1;", + " p.color.rgb = float3(0.2, 0.2, 1);", + " } else {", + " pos.y = 0;", + " p.color.rgb = float3(1, 1, 0.2);", + " }", + " } else {", + " if (pos.z > 0.5) {", + " pos.z = 1;", + " p.color.rgb = float3(0.2, 1, 0.2);", + " } else {", + " pos.z = 0;", + " p.color.rgb = float3(1, 0.2, 1);", + " }", + " }", + "", + " float s = effect.age * 2 - 1;", + " s = s < 0 ? -s : s;", + "", + " pos = pos * 2 - 1;", + " pos = mix(pos, normalize(pos), s);", + " pos = pos * 100;", + "", + " float age = effect.loop + effect.age;", + " float4x4 mat = rx(age * radians(60))", + " * ry(age * radians(70))", + " * rz(age * radians(80));", + " pos = (mat * float4(pos, 1)).xyz;", + "", + " p.pos.x = pos.x;", + " p.pos.y = pos.y;", + " p.scale = ((pos.z + 50) / 100 + 0.5) / 2;", + "}", + "" + ], + "Bindings": [] +} \ No newline at end of file diff --git a/third_party/skia/resources/particles/mandrill.json b/third_party/skia/resources/particles/mandrill.json new file mode 100644 index 000000000000..a53efb898a20 --- /dev/null +++ b/third_party/skia/resources/particles/mandrill.json @@ -0,0 +1,38 @@ +{ + "MaxCount": 4000, + "Drawable": { + "Type": "SkCircleDrawable", + "Radius": 3 + }, + "EffectCode": [ + "void effectSpawn(inout Effect effect) {", + " effect.rate = 4000;", + "}", + "", + "void effectUpdate(inout Effect effect) {", + "}", + "" + ], + "Code": [ + "void spawn(inout Particle p) {", + " p.lifetime = 1;", + " p.pos = float2(rand, rand) * 200;", + " p.vel = float2(rand, rand) * 2 - 1;", + " p.vel *= 20;", + " p.scale = mix(0.25, 1, rand);", + "}", + "", + "void update(inout Particle p) {", + " p.color = img(p.pos / 200);", + "}", + "" + ], + "Bindings": [ + { + "Type": "SkImageBinding", + "Name": "img", + "ImagePath": "images", + "ImageName": "mandrill_128.png" + } + ] +} \ No newline at end of file diff --git a/third_party/skia/resources/particles/orientation.json b/third_party/skia/resources/particles/orientation.json index 885038d8e016..87d629b88e7e 100644 --- a/third_party/skia/resources/particles/orientation.json +++ b/third_party/skia/resources/particles/orientation.json @@ -2,7 +2,8 @@ "MaxCount": 32, "Drawable": { "Type": "SkImageDrawable", - "Path": "resources/images/index8.png", + "Path": "images", + "Name": "index8.png", "Columns": 1, "Rows": 1 }, diff --git a/third_party/skia/resources/particles/sprite_frame.json b/third_party/skia/resources/particles/sprite_frame.json index 645d2b68a5fa..70e56aff182e 100644 --- a/third_party/skia/resources/particles/sprite_frame.json +++ b/third_party/skia/resources/particles/sprite_frame.json @@ -2,7 +2,8 @@ "MaxCount": 32, "Drawable": { "Type": "SkImageDrawable", - "Path": "resources/images/explosion_sprites.png", + "Path": "images", + "Name": "explosion_sprites.png", "Columns": 4, "Rows": 4 }, diff --git a/third_party/skia/resources/particles/writing.json b/third_party/skia/resources/particles/writing.json new file mode 100644 index 000000000000..43682d5857f7 --- /dev/null +++ b/third_party/skia/resources/particles/writing.json @@ -0,0 +1,43 @@ +{ + "MaxCount": 4000, + "Drawable": { + "Type": "SkCircleDrawable", + "Radius": 2 + }, + "EffectCode": [ + "void effectSpawn(inout Effect effect) {", + " effect.lifetime = 4;", + "}", + "", + "void effectUpdate(inout Effect effect) {", + " effect.color.r = 0;", + " effect.color.g = 1 - effect.age;", + " effect.color.b = effect.age;", + "", + " effect.rate = effect.age < 0.75 ? 800 : 0;", + "}", + "" + ], + "Code": [ + "uniform float2 mouse_pos;", + "", + "void spawn(inout Particle p) {", + " p.lifetime = 4;", + " p.pos = mouse_pos;", + " p.frame = effect.age / 0.75 + mix(-0.05, 0.05, rand);", + "}", + "", + "void update(inout Particle p) {", + " p.pos = mix(p.pos, text(p.frame).xy, 0.05);", + "}", + "" + ], + "Bindings": [ + { + "Type": "SkTextBinding", + "Name": "text", + "Text": "HELLO WORLD", + "FontSize": 96 + } + ] +} \ No newline at end of file diff --git a/third_party/skia/resources/skottie/skottie-3d-2planes.json b/third_party/skia/resources/skottie/skottie-3d-2planes.json new file mode 100644 index 000000000000..997ee2363662 --- /dev/null +++ b/third_party/skia/resources/skottie/skottie-3d-2planes.json @@ -0,0 +1,990 @@ +{ + "assets": [ + { + "id": "comp_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": 35 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Shape Layer 1", + "op": 1203, + "shapes": [ + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 6", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + -20, + -20 + ], + "t": 450, + "ti": [ + 0, + -3.333 + ], + "to": [ + 0, + 3.333 + ] + }, + { + "s": [ + -20, + 0 + ], + "t": 570 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 4", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 0, + -20 + ], + "t": 600, + "ti": [ + 3.333, + 0 + ], + "to": [ + -3.333, + 0 + ] + }, + { + "s": [ + -20, + -20 + ], + "t": 720 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 5", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 20, + -20 + ], + "t": 750, + "ti": [ + 3.333, + 0 + ], + "to": [ + -3.333, + 0 + ] + }, + { + "s": [ + 0, + -20 + ], + "t": 870 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 3", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + -20, + 0 + ], + "t": 300, + "ti": [ + -3.333, + 0 + ], + "to": [ + 3.333, + 0 + ] + }, + { + "s": [ + 0, + 0 + ], + "t": 420 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 0, + 0 + ], + "t": 150, + "ti": [ + 0, + -3.333 + ], + "to": [ + 0, + 3.333 + ] + }, + { + "s": [ + 0, + 20 + ], + "t": 270 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 2", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 20, + 0 + ], + "t": 900, + "ti": [ + 0, + 3.333 + ], + "to": [ + 0, + -3.333 + ] + }, + { + "s": [ + 20, + -20 + ], + "t": 1020 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 8", + "p": { + "a": 0, + "ix": 3, + "k": [ + -20, + 20 + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 7", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 0, + 20 + ], + "t": 0, + "ti": [ + -3.333, + 0 + ], + "to": [ + 3.333, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 20, + 20 + ], + "t": 120, + "ti": [ + 0, + 0 + ], + "to": [ + 0, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 20, + 20 + ], + "t": 1050, + "ti": [ + 0, + 3.333 + ], + "to": [ + 0, + -3.333 + ] + }, + { + "s": [ + 20, + 0 + ], + "t": 1170 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "bm": 0, + "c": { + "a": 0, + "ix": 4, + "k": [ + 0, + 1, + 0.263311892748, + 1 + ] + }, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "o": { + "a": 0, + "ix": 5, + "k": 100 + }, + "r": 1, + "ty": "fl" + } + ], + "sr": 1, + "st": 0, + "ty": 4 + } + ] + } + ], + "ddd": 1, + "fr": 60, + "h": 100, + "ip": 0, + "layers": [ + { + "bm": 0, + "ddd": 0, + "ind": 1, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "or": { + "a": 0, + "ix": 7, + "k": [ + 0, + 0, + 0 + ] + }, + "p": { + "a": 1, + "ix": 2, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 50, + 50, + -200 + ], + "t": 0, + "ti": [ + 0, + 0, + 0 + ], + "to": [ + -25, + 41.667, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + -100, + 300, + -200 + ], + "t": 360, + "ti": [ + -41.21, + 68.683, + 0 + ], + "to": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 200, + 300, + -200 + ], + "t": 840, + "ti": [ + -10.083, + 16.805, + 0 + ], + "to": [ + 27.854, + -46.424, + 0 + ] + }, + { + "s": [ + 50, + 50, + -200 + ], + "t": 1200 + } + ] + }, + "rx": { + "a": 0, + "ix": 8, + "k": 0 + }, + "ry": { + "a": 0, + "ix": 9, + "k": 0 + }, + "rz": { + "a": 1, + "ix": 10, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "s": [ + 360 + ], + "t": 1200 + } + ] + } + }, + "nm": "Camera 1", + "op": 1201, + "pe": { + "a": 0, + "ix": 1, + "k": 269 + }, + "sr": 1, + "st": 0, + "ty": 13 + }, + { + "ao": 0, + "bm": 0, + "ddd": 1, + "h": 100, + "ind": 2, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "or": { + "a": 0, + "ix": 7, + "k": [ + 0, + 0, + 0 + ] + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + 20 + ] + }, + "rx": { + "a": 0, + "ix": 8, + "k": 0 + }, + "ry": { + "a": 0, + "ix": 9, + "k": 0 + }, + "rz": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "bottom", + "op": 1201, + "refId": "comp_0", + "sr": 1, + "st": 0, + "tm": { + "a": 1, + "ix": 2, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 20 + ], + "t": 0 + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 0 + ], + "t": 1200 + }, + { + "s": [ + 20.017 + ], + "t": 1201 + } + ] + }, + "ty": 0, + "w": 100 + }, + { + "ao": 0, + "bm": 0, + "ddd": 1, + "h": 100, + "ind": 4, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "or": { + "a": 0, + "ix": 7, + "k": [ + 0, + 0, + 0 + ] + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + -20 + ] + }, + "rx": { + "a": 0, + "ix": 8, + "k": 0 + }, + "ry": { + "a": 0, + "ix": 9, + "k": 0 + }, + "rz": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "top", + "op": 1201, + "refId": "comp_0", + "sr": 1, + "st": 0, + "ty": 0, + "w": 100 + }, + { + "ao": 0, + "bm": 0, + "ddd": 0, + "ind": 5, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Black Solid 1", + "op": 1201, + "sc": "#000000", + "sh": 100, + "sr": 1, + "st": 0, + "sw": 100, + "ty": 1 + } + ], + "markers": [], + "nm": "cube", + "op": 1201, + "v": "5.5.5", + "w": 100 +} \ No newline at end of file diff --git a/third_party/skia/resources/skottie/skottie-3d-3planes.json b/third_party/skia/resources/skottie/skottie-3d-3planes.json new file mode 100644 index 000000000000..733eb2285c69 --- /dev/null +++ b/third_party/skia/resources/skottie/skottie-3d-3planes.json @@ -0,0 +1,1141 @@ +{ + "assets": [ + { + "id": "comp_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": 35 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Shape Layer 1", + "op": 1203, + "shapes": [ + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 6", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + -20, + -20 + ], + "t": 450, + "ti": [ + 0, + -3.333 + ], + "to": [ + 0, + 3.333 + ] + }, + { + "s": [ + -20, + 0 + ], + "t": 570 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 4", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 0, + -20 + ], + "t": 600, + "ti": [ + 3.333, + 0 + ], + "to": [ + -3.333, + 0 + ] + }, + { + "s": [ + -20, + -20 + ], + "t": 720 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 5", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 20, + -20 + ], + "t": 750, + "ti": [ + 3.333, + 0 + ], + "to": [ + -3.333, + 0 + ] + }, + { + "s": [ + 0, + -20 + ], + "t": 870 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 3", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + -20, + 0 + ], + "t": 300, + "ti": [ + -3.333, + 0 + ], + "to": [ + 3.333, + 0 + ] + }, + { + "s": [ + 0, + 0 + ], + "t": 420 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 0, + 0 + ], + "t": 150, + "ti": [ + 0, + -3.333 + ], + "to": [ + 0, + 3.333 + ] + }, + { + "s": [ + 0, + 20 + ], + "t": 270 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 2", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 20, + 0 + ], + "t": 900, + "ti": [ + 0, + 3.333 + ], + "to": [ + 0, + -3.333 + ] + }, + { + "s": [ + 20, + -20 + ], + "t": 1020 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 8", + "p": { + "a": 0, + "ix": 3, + "k": [ + -20, + 20 + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 7", + "p": { + "a": 1, + "ix": 3, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 0, + 20 + ], + "t": 0, + "ti": [ + -3.333, + 0 + ], + "to": [ + 3.333, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 20, + 20 + ], + "t": 120, + "ti": [ + 0, + 0 + ], + "to": [ + 0, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 20, + 20 + ], + "t": 1050, + "ti": [ + 0, + 3.333 + ], + "to": [ + 0, + -3.333 + ] + }, + { + "s": [ + 20, + 0 + ], + "t": 1170 + } + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 16, + 16 + ] + }, + "ty": "rc" + }, + { + "bm": 0, + "c": { + "a": 0, + "ix": 4, + "k": [ + 0, + 1, + 0.263311892748, + 1 + ] + }, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "o": { + "a": 0, + "ix": 5, + "k": 100 + }, + "r": 1, + "ty": "fl" + } + ], + "sr": 1, + "st": 0, + "ty": 4 + } + ] + } + ], + "ddd": 1, + "fr": 60, + "h": 100, + "ip": 0, + "layers": [ + { + "bm": 0, + "ddd": 0, + "ind": 1, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "or": { + "a": 0, + "ix": 7, + "k": [ + 0, + 0, + 0 + ] + }, + "p": { + "a": 1, + "ix": 2, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 50, + 50, + -200 + ], + "t": 0, + "ti": [ + 0, + 0, + 0 + ], + "to": [ + -25, + 41.667, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + -100, + 300, + -200 + ], + "t": 360, + "ti": [ + -41.21, + 68.683, + 0 + ], + "to": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "s": [ + 200, + 300, + -200 + ], + "t": 840, + "ti": [ + -10.083, + 16.805, + 0 + ], + "to": [ + 27.854, + -46.424, + 0 + ] + }, + { + "s": [ + 50, + 50, + -200 + ], + "t": 1200 + } + ] + }, + "rx": { + "a": 0, + "ix": 8, + "k": 0 + }, + "ry": { + "a": 0, + "ix": 9, + "k": 0 + }, + "rz": { + "a": 1, + "ix": 10, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "s": [ + 360 + ], + "t": 1200 + } + ] + } + }, + "nm": "Camera 1", + "op": 1201, + "pe": { + "a": 0, + "ix": 1, + "k": 269 + }, + "sr": 1, + "st": 0, + "ty": 13 + }, + { + "ao": 0, + "bm": 0, + "ddd": 1, + "h": 100, + "ind": 2, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "or": { + "a": 0, + "ix": 7, + "k": [ + 0, + 0, + 0 + ] + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + 20 + ] + }, + "rx": { + "a": 0, + "ix": 8, + "k": 0 + }, + "ry": { + "a": 0, + "ix": 9, + "k": 0 + }, + "rz": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "bottom", + "op": 1201, + "refId": "comp_0", + "sr": 1, + "st": 0, + "tm": { + "a": 1, + "ix": 2, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 20 + ], + "t": 0 + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 0 + ], + "t": 1200 + }, + { + "s": [ + 20.017 + ], + "t": 1201 + } + ] + }, + "ty": 0, + "w": 100 + }, + { + "ao": 0, + "bm": 0, + "ddd": 1, + "h": 100, + "ind": 3, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "or": { + "a": 0, + "ix": 7, + "k": [ + 0, + 0, + 0 + ] + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + 0 + ] + }, + "rx": { + "a": 0, + "ix": 8, + "k": 0 + }, + "ry": { + "a": 0, + "ix": 9, + "k": 0 + }, + "rz": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "mid", + "op": 1201, + "refId": "comp_0", + "sr": 1, + "st": 0, + "tm": { + "a": 1, + "ix": 2, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 5 + ], + "t": 0 + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 15 + ], + "t": 600 + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 5 + ], + "t": 1200 + }, + { + "s": [ + 20.017 + ], + "t": 1201 + } + ] + }, + "ty": 0, + "w": 100 + }, + { + "ao": 0, + "bm": 0, + "ddd": 1, + "h": 100, + "ind": 4, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "or": { + "a": 0, + "ix": 7, + "k": [ + 0, + 0, + 0 + ] + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + -20 + ] + }, + "rx": { + "a": 0, + "ix": 8, + "k": 0 + }, + "ry": { + "a": 0, + "ix": 9, + "k": 0 + }, + "rz": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "top", + "op": 1201, + "refId": "comp_0", + "sr": 1, + "st": 0, + "ty": 0, + "w": 100 + }, + { + "ao": 0, + "bm": 0, + "ddd": 0, + "ind": 5, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 50, + 50, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 50, + 50, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Black Solid 1", + "op": 1201, + "sc": "#000000", + "sh": 100, + "sr": 1, + "st": 0, + "sw": 100, + "ty": 1 + } + ], + "markers": [], + "nm": "cube", + "op": 1201, + "v": "5.5.5", + "w": 100 +} \ No newline at end of file diff --git a/third_party/skia/resources/skottie/skottie-3d-parenting-camera.json b/third_party/skia/resources/skottie/skottie-3d-parenting-camera.json new file mode 100644 index 000000000000..094e574fadfd --- /dev/null +++ b/third_party/skia/resources/skottie/skottie-3d-parenting-camera.json @@ -0,0 +1 @@ +{"v":"5.5.5","fr":60,"ip":0,"op":301,"w":500,"h":500,"nm":"3d parenting","ddd":1,"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":[250,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":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":9,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":50,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":15,"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":[1,0.872441768646,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":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":300,"s":[360]}],"ix":6},"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":"rc","d":1,"s":{"a":0,"k":[100,150],"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":[0.480912983418,0.342815577984,0.959742665291,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},{"ty":"fl","c":{"a":0,"k":[0,0.581096827984,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":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":13,"nm":"Camera 1","sr":1,"pe":{"a":0,"k":1066.667,"ix":1},"ks":{"a":{"a":0,"k":[250,250,0],"ix":1},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[250,250,-1066.667],"to":[-41.667,83.333,61.111],"ti":[-41.667,-83.333,-61.111]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[0,750,-700],"to":[41.667,83.333,61.111],"ti":[-41.667,83.333,61.111]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":210,"s":[500,750,-700],"to":[41.667,-83.333,-61.111],"ti":[41.667,83.333,61.111]},{"t":300,"s":[250,250,-1066.667]}],"ix":2},"or":{"a":0,"k":[0,0,0],"ix":7},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10}},"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"2d -> no parent","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,150,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"3d null","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,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":301,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"2d -> 3d null","parent":3,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-100,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"2d -> 3d layer","parent":6,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[550,50,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":1,"ind":6,"ty":0,"nm":"3d -> no parent","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10},"or":{"a":0,"k":[0,0,0],"ix":7},"p":{"a":0,"k":[100,350,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":3,"nm":"2d null","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,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":301,"st":0,"bm":0},{"ddd":1,"ind":8,"ty":0,"nm":"3d -> 2d null","parent":7,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10},"or":{"a":0,"k":[0,0,0],"ix":7},"p":{"a":0,"k":[0,100,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":1,"ind":9,"ty":0,"nm":"3d -> 2d layer","parent":2,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10},"or":{"a":0,"k":[0,0,0],"ix":7},"p":{"a":0,"k":[550,450,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":1,"nm":"Light Gray Solid 2","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/third_party/skia/resources/skottie/skottie-3d-parenting-nocamera.json b/third_party/skia/resources/skottie/skottie-3d-parenting-nocamera.json new file mode 100644 index 000000000000..3da4dbc02ca1 --- /dev/null +++ b/third_party/skia/resources/skottie/skottie-3d-parenting-nocamera.json @@ -0,0 +1 @@ +{"v":"5.5.5","fr":60,"ip":0,"op":301,"w":500,"h":500,"nm":"3d parenting","ddd":1,"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":[250,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":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":9,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":50,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":15,"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":[1,0.872441768646,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":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":300,"s":[360]}],"ix":6},"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":"rc","d":1,"s":{"a":0,"k":[100,150],"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":[0.480912983418,0.342815577984,0.959742665291,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},{"ty":"fl","c":{"a":0,"k":[0,0.581096827984,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":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":301,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"2d -> no parent","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,150,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"3d null","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,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":301,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"2d -> 3d null","parent":2,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-100,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"2d -> 3d layer","parent":5,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[550,50,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":1,"ind":5,"ty":0,"nm":"3d -> no parent","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10},"or":{"a":0,"k":[0,0,0],"ix":7},"p":{"a":0,"k":[100,350,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":3,"nm":"2d null","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,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":301,"st":0,"bm":0},{"ddd":1,"ind":7,"ty":0,"nm":"3d -> 2d null","parent":6,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10},"or":{"a":0,"k":[0,0,0],"ix":7},"p":{"a":0,"k":[0,100,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":1,"ind":8,"ty":0,"nm":"3d -> 2d layer","parent":1,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10},"or":{"a":0,"k":[0,0,0],"ix":7},"p":{"a":0,"k":[550,450,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":500,"h":500,"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":1,"nm":"Light Gray Solid 2","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/third_party/skia/resources/skottie/skottie-camera-one-node.json b/third_party/skia/resources/skottie/skottie-camera-one-node.json new file mode 100644 index 000000000000..19cbb5c7e3de --- /dev/null +++ b/third_party/skia/resources/skottie/skottie-camera-one-node.json @@ -0,0 +1 @@ +{"v":"5.5.5","fr":60,"ip":0,"op":601,"w":1920,"h":1080,"nm":"Comp 1","ddd":1,"assets":[],"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":0,"k":[960,540,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":"rc","d":1,"s":{"a":0,"k":[1500,750],"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":"rc","d":1,"s":{"a":0,"k":[812,403],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 2","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.171292886138,0.169715076685,0.803477346897,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":601,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":13,"nm":"Camera 1","sr":1,"pe":{"a":0,"k":2133.333,"ix":1},"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[560,740,-2133.333],"to":[133.333,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[1360,740,-2133.333],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[1360,340,-2133.333],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":180,"s":[560,340,-2133.333],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":240,"s":[560,740,-2133.333],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":300,"s":[560,740,-3104.333],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":360,"s":[1360,740,-3104.333],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":420,"s":[1360,340,-3104.333],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":480,"s":[560,340,-3104.333],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":540,"s":[560,740,-3104.333],"to":[0,0,0],"ti":[0,0,0]},{"t":600,"s":[560,740,-2133.3]}],"ix":2},"or":{"a":0,"k":[0,0,0],"ix":7},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10}},"ip":0,"op":601,"st":0,"bm":0},{"ddd":1,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"rx":{"a":0,"k":0,"ix":8},"ry":{"a":0,"k":0,"ix":9},"rz":{"a":0,"k":0,"ix":10},"or":{"a":0,"k":[0,0,0],"ix":7},"p":{"a":0,"k":[960,540,0],"ix":2},"a":{"a":0,"k":[0,0,1000],"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":[35,35],"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":[1,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":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[100,100],"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,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}],"ip":0,"op":603,"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":[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,"sw":1920,"sh":1080,"sc":"#c8c8c8","ip":0,"op":603,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/third_party/skia/resources/skottie/skottie-gradient-opacity.json b/third_party/skia/resources/skottie/skottie-gradient-opacity.json new file mode 100644 index 000000000000..db0057b2559d --- /dev/null +++ b/third_party/skia/resources/skottie/skottie-gradient-opacity.json @@ -0,0 +1,585 @@ +{ + "assets": [], + "ddd": 0, + "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": [ + 250, + 75, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Shape Layer 1", + "op": 301, + "shapes": [ + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "p": { + "a": 0, + "ix": 3, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 400, + 100 + ] + }, + "ty": "rc" + }, + { + "bm": 0, + "e": { + "a": 0, + "ix": 6, + "k": [ + 200, + 0 + ] + }, + "g": { + "k": { + "a": 0, + "ix": 9, + "k": [ + 0.50, 0, 1, 0, + 0.50, 1, 0, 0, + 0.00, 1, + 0.25, 0, + 0.50, 1, + 0.75, 0, + 1.00, 1 + ] + }, + "p": 2 + }, + "hd": false, + "mn": "ADBE Vector Graphic - G-Fill", + "nm": "Gradient Fill 1", + "o": { + "a": 0, + "ix": 10, + "k": 100 + }, + "r": 1, + "s": { + "a": 0, + "ix": 5, + "k": [ + -200, + 0 + ] + }, + "t": 1, + "ty": "gf" + } + ], + "sr": 1, + "st": 0, + "ty": 4 + }, + { + "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": [ + 250, + 190, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Shape Layer 2", + "op": 301, + "shapes": [ + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "p": { + "a": 0, + "ix": 3, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 400, + 100 + ] + }, + "ty": "rc" + }, + { + "bm": 0, + "e": { + "a": 0, + "ix": 6, + "k": [ + 200, + 0 + ] + }, + "g": { + "k": { + "a": 0, + "ix": 9, + "k": [ + 0.00, 0, 1, 0, + 0.25, 1, 0, 0, + 0.50, 0, 0, 1, + 0.75, 1, 0, 0, + 1.00, 0, 1, 0, + + 0.50, 0.35, + 0.50, 1.00 + ] + }, + "p": 5 + }, + "hd": false, + "mn": "ADBE Vector Graphic - G-Fill", + "nm": "Gradient Fill 1", + "o": { + "a": 0, + "ix": 10, + "k": 100 + }, + "r": 1, + "s": { + "a": 0, + "ix": 5, + "k": [ + -200, + 0 + ] + }, + "t": 1, + "ty": "gf" + } + ], + "sr": 1, + "st": 0, + "ty": 4 + }, + { + "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": [ + 250, + 305, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Shape Layer 3", + "op": 301, + "shapes": [ + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "p": { + "a": 0, + "ix": 3, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 400, + 100 + ] + }, + "ty": "rc" + }, + { + "bm": 0, + "e": { + "a": 0, + "ix": 6, + "k": [ + 200, + 0 + ] + }, + "g": { + "k": { + "a": 0, + "ix": 9, + "k": [ + 0.00, 0, 1, 0, + 0.25, 1, 0, 0, + 0.50, 0, 0, 1, + 0.75, 1, 0, 0, + 1.00, 0, 1, 0, + + 0.25, 1, + 0.37, 0, + 0.50, 1, + 0.62, 0, + 0.75, 1 + ] + }, + "p": 5 + }, + "hd": false, + "mn": "ADBE Vector Graphic - G-Fill", + "nm": "Gradient Fill 1", + "o": { + "a": 0, + "ix": 10, + "k": 100 + }, + "r": 1, + "s": { + "a": 0, + "ix": 5, + "k": [ + -200, + 0 + ] + }, + "t": 1, + "ty": "gf" + } + ], + "sr": 1, + "st": 0, + "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": [ + 250, + 425, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Shape Layer 4", + "op": 301, + "shapes": [ + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "p": { + "a": 0, + "ix": 3, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 400, + 100 + ] + }, + "ty": "rc" + }, + { + "bm": 0, + "e": { + "a": 0, + "ix": 6, + "k": [ + 200, + 0 + ] + }, + "g": { + "k": { + "a": 0, + "ix": 9, + "k": [ + 0.25, 0, 1, 0, + 0.37, 1, 0, 0, + 0.50, 0, 0, 1, + 0.62, 1, 0, 0, + 0.75, 0, 1, 0, + + 0.00, 1, + 0.25, 0, + 0.50, 1, + 0.75, 0, + 1.00, 1 + ] + }, + "p": 5 + }, + "hd": false, + "mn": "ADBE Vector Graphic - G-Fill", + "nm": "Gradient Fill 1", + "o": { + "a": 0, + "ix": 10, + "k": 100 + }, + "r": 1, + "s": { + "a": 0, + "ix": 5, + "k": [ + -200, + 0 + ] + }, + "t": 1, + "ty": "gf" + } + ], + "sr": 1, + "st": 0, + "ty": 4 + }, + { + "ao": 0, + "bm": 0, + "ddd": 0, + "ind": 5, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 250, + 250, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 250, + 250, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "White Solid 1", + "op": 301, + "sc": "#ffffff", + "sh": 500, + "sr": 1, + "st": 0, + "sw": 500, + "ty": 1 + } + ], + "markers": [], + "nm": "gradient opacity", + "op": 301, + "v": "5.5.5", + "w": 500 +} diff --git a/third_party/skia/resources/skottie/skottie-matte-blendmode.json b/third_party/skia/resources/skottie/skottie-matte-blendmode.json new file mode 100644 index 000000000000..431fc7ab84c4 --- /dev/null +++ b/third_party/skia/resources/skottie/skottie-matte-blendmode.json @@ -0,0 +1 @@ +{"v":"5.5.5","fr":60,"ip":0,"op":301,"w":500,"h":500,"nm":"matted-blendmode","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"mask","td":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":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":6,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":50,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":162,"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":[1,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":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":300,"s":[120]}],"ix":6},"o":{"a":0,"k":75,"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":[{"d":1,"ty":"el","s":{"a":0,"k":[200,200],"ix":2},"p":{"a":0,"k":[100,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,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":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":300,"s":[-360]}],"ix":6},"o":{"a":0,"k":75,"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":301,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"Red Solid 1","tt":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":"#ff0000","ip":0,"op":301,"st":0,"bm":1},{"ddd":0,"ind":3,"ty":1,"nm":"Green 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":"#00ff00","ip":0,"op":301,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/third_party/skia/resources/skottie/skottie-shift-channels-effect.json b/third_party/skia/resources/skottie/skottie-shift-channels-effect.json new file mode 100644 index 000000000000..a762f8547a4b --- /dev/null +++ b/third_party/skia/resources/skottie/skottie-shift-channels-effect.json @@ -0,0 +1,1254 @@ +{ + "assets": [ + { + "id": "comp_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": [ + 125, + 125, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 50, + 50, + 100 + ] + } + }, + "nm": "Shape Layer 1", + "op": 302.5, + "shapes": [ + { + "bm": 0, + "cix": 2, + "hd": false, + "it": [ + { + "d": 1, + "hd": false, + "ir": { + "a": 0, + "ix": 6, + "k": 35 + }, + "is": { + "a": 0, + "ix": 8, + "k": 0 + }, + "ix": 1, + "mn": "ADBE Vector Shape - Star", + "nm": "Polystar Path 1", + "or": { + "a": 0, + "ix": 7, + "k": 100 + }, + "os": { + "a": 0, + "ix": 9, + "k": 0 + }, + "p": { + "a": 0, + "ix": 4, + "k": [ + 0, + 0 + ] + }, + "pt": { + "a": 0, + "ix": 3, + "k": 9 + }, + "r": { + "a": 0, + "ix": 5, + "k": 0 + }, + "sy": 1, + "ty": "sr" + }, + { + "a": { + "a": 0, + "ix": 8, + "k": 0 + }, + "bm": 0, + "e": { + "a": 0, + "ix": 6, + "k": [ + 100, + 0 + ] + }, + "g": { + "k": { + "a": 0, + "ix": 9, + "k": [ + 0, + 0, + 0.5, + 1, + 1, + 1, + 0, + 0.5 + ] + }, + "p": 2 + }, + "h": { + "a": 0, + "ix": 7, + "k": 0 + }, + "hd": false, + "mn": "ADBE Vector Graphic - G-Fill", + "nm": "Gradient Fill 1", + "o": { + "a": 0, + "ix": 10, + "k": 100 + }, + "r": 1, + "s": { + "a": 0, + "ix": 5, + "k": [ + 0, + 0 + ] + }, + "t": 2, + "ty": "gf" + }, + { + "a": { + "a": 0, + "ix": 1, + "k": [ + 0, + 0 + ] + }, + "nm": "Transform", + "o": { + "a": 0, + "ix": 7, + "k": 75 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 1, + "ix": 6, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "s": [ + 80 + ], + "t": 300 + } + ] + }, + "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": 2, + "ty": "gr" + }, + { + "bm": 0, + "cix": 2, + "hd": false, + "it": [ + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "p": { + "a": 0, + "ix": 3, + "k": [ + -85, + 0 + ] + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 150, + 150 + ] + }, + "ty": "el" + }, + { + "a": { + "a": 0, + "ix": 8, + "k": 0 + }, + "bm": 0, + "e": { + "a": 0, + "ix": 6, + "k": [ + -10, + 0 + ] + }, + "g": { + "k": { + "a": 0, + "ix": 9, + "k": [ + 0, + 0.5, + 1, + 0, + 1, + 0, + 0.5, + 1 + ] + }, + "p": 2 + }, + "h": { + "a": 0, + "ix": 7, + "k": 0 + }, + "hd": false, + "mn": "ADBE Vector Graphic - G-Fill", + "nm": "Gradient Fill 1", + "o": { + "a": 0, + "ix": 10, + "k": 100 + }, + "r": 1, + "s": { + "a": 0, + "ix": 5, + "k": [ + -85, + 0 + ] + }, + "t": 2, + "ty": "gf" + }, + { + "a": { + "a": 0, + "ix": 1, + "k": [ + 0, + 0 + ] + }, + "nm": "Transform", + "o": { + "a": 0, + "ix": 7, + "k": 75 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 1, + "ix": 6, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "s": [ + 360 + ], + "t": 300 + } + ] + }, + "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": 2, + "mn": "ADBE Vector Group", + "nm": "Group 2", + "np": 2, + "ty": "gr" + }, + { + "bm": 0, + "cix": 2, + "hd": false, + "it": [ + { + "d": 1, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "p": { + "a": 0, + "ix": 3, + "k": [ + 75, + 75 + ] + }, + "r": { + "a": 0, + "ix": 4, + "k": 0 + }, + "s": { + "a": 0, + "ix": 2, + "k": [ + 150, + 150 + ] + }, + "ty": "rc" + }, + { + "a": { + "a": 0, + "ix": 8, + "k": 0 + }, + "bm": 0, + "e": { + "a": 0, + "ix": 6, + "k": [ + 160, + 75 + ] + }, + "g": { + "k": { + "a": 0, + "ix": 9, + "k": [ + 0, + 0.5, + 0, + 1, + 1, + 1, + 0.5, + 0 + ] + }, + "p": 2 + }, + "h": { + "a": 0, + "ix": 7, + "k": 0 + }, + "hd": false, + "mn": "ADBE Vector Graphic - G-Fill", + "nm": "Gradient Fill 1", + "o": { + "a": 0, + "ix": 10, + "k": 100 + }, + "r": 1, + "s": { + "a": 0, + "ix": 5, + "k": [ + 75, + 75 + ] + }, + "t": 2, + "ty": "gf" + }, + { + "a": { + "a": 0, + "ix": 1, + "k": [ + 0, + 0 + ] + }, + "nm": "Transform", + "o": { + "a": 0, + "ix": 7, + "k": 75 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 1, + "ix": 6, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "s": [ + -360 + ], + "t": 300 + } + ] + }, + "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": 3, + "mn": "ADBE Vector Group", + "nm": "Group 3", + "np": 2, + "ty": "gr" + } + ], + "sr": 1, + "st": 0, + "ty": 4 + } + ] + } + ], + "ddd": 0, + "fr": 60, + "h": 500, + "ip": 0, + "layers": [ + { + "ao": 0, + "bm": 0, + "ddd": 0, + "h": 250, + "ind": 1, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 125, + 125, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 125, + 125, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "baseline", + "op": 301, + "refId": "comp_0", + "sr": 1, + "st": 0, + "ty": 0, + "w": 250 + }, + { + "ao": 0, + "bm": 0, + "ddd": 0, + "ef": [ + { + "ef": [ + { + "ix": 1, + "mn": "ADBE Shift Channels-0001", + "nm": "Take Alpha From", + "ty": 7, + "v": { + "a": 0, + "ix": 1, + "k": 5 + } + }, + { + "ix": 2, + "mn": "ADBE Shift Channels-0002", + "nm": "Take Red From", + "ty": 7, + "v": { + "a": 0, + "ix": 2, + "k": 3 + } + }, + { + "ix": 3, + "mn": "ADBE Shift Channels-0003", + "nm": "Take Green From", + "ty": 7, + "v": { + "a": 0, + "ix": 3, + "k": 4 + } + }, + { + "ix": 4, + "mn": "ADBE Shift Channels-0004", + "nm": "Take Blue From", + "ty": 7, + "v": { + "a": 0, + "ix": 4, + "k": 2 + } + } + ], + "en": 1, + "ix": 1, + "mn": "ADBE Shift Channels", + "nm": "Shift Channels", + "np": 6, + "ty": 5 + } + ], + "h": 250, + "ind": 2, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 125, + 125, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 125, + 375, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "shift1", + "op": 301, + "refId": "comp_0", + "sr": 1, + "st": 0, + "ty": 0, + "w": 250 + }, + { + "ao": 0, + "bm": 0, + "ddd": 0, + "ef": [ + { + "ef": [ + { + "ix": 1, + "mn": "ADBE Shift Channels-0001", + "nm": "Take Alpha From", + "ty": 7, + "v": { + "a": 0, + "ix": 1, + "k": 2 + } + }, + { + "ix": 2, + "mn": "ADBE Shift Channels-0002", + "nm": "Take Red From", + "ty": 7, + "v": { + "a": 0, + "ix": 2, + "k": 5 + } + }, + { + "ix": 3, + "mn": "ADBE Shift Channels-0003", + "nm": "Take Green From", + "ty": 7, + "v": { + "a": 0, + "ix": 3, + "k": 2 + } + }, + { + "ix": 4, + "mn": "ADBE Shift Channels-0004", + "nm": "Take Blue From", + "ty": 7, + "v": { + "a": 0, + "ix": 4, + "k": 3 + } + } + ], + "en": 1, + "ix": 1, + "mn": "ADBE Shift Channels", + "nm": "Shift Channels", + "np": 6, + "ty": 5 + } + ], + "h": 250, + "ind": 3, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 125, + 125, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 375, + 125, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "shift2", + "op": 301, + "refId": "comp_0", + "sr": 1, + "st": 0, + "ty": 0, + "w": 250 + }, + { + "ao": 0, + "bm": 0, + "ddd": 0, + "ef": [ + { + "ef": [ + { + "ix": 1, + "mn": "ADBE Shift Channels-0001", + "nm": "Take Alpha From", + "ty": 7, + "v": { + "a": 1, + "ix": 1, + "k": [ + { + "h": 1, + "s": [ + 1 + ], + "t": 0 + }, + { + "h": 1, + "s": [ + 2 + ], + "t": 30 + }, + { + "h": 1, + "s": [ + 3 + ], + "t": 75 + }, + { + "h": 1, + "s": [ + 4 + ], + "t": 120 + }, + { + "h": 1, + "s": [ + 5 + ], + "t": 165 + }, + { + "h": 1, + "s": [ + 9 + ], + "t": 210 + }, + { + "h": 1, + "s": [ + 9 + ], + "t": 255 + }, + { + "h": 1, + "s": [ + 9 + ], + "t": 285 + } + ] + } + }, + { + "ix": 2, + "mn": "ADBE Shift Channels-0002", + "nm": "Take Red From", + "ty": 7, + "v": { + "a": 1, + "ix": 2, + "k": [ + { + "h": 1, + "s": [ + 2 + ], + "t": 0 + }, + { + "h": 1, + "s": [ + 3 + ], + "t": 30 + }, + { + "h": 1, + "s": [ + 4 + ], + "t": 75 + }, + { + "h": 1, + "s": [ + 5 + ], + "t": 120 + }, + { + "h": 1, + "s": [ + 9 + ], + "t": 165 + }, + { + "h": 1, + "s": [ + 10 + ], + "t": 210 + }, + { + "h": 1, + "s": [ + 1 + ], + "t": 255 + } + ] + } + }, + { + "ix": 3, + "mn": "ADBE Shift Channels-0003", + "nm": "Take Green From", + "ty": 7, + "v": { + "a": 1, + "ix": 3, + "k": [ + { + "h": 1, + "s": [ + 3 + ], + "t": 0 + }, + { + "h": 1, + "s": [ + 4 + ], + "t": 30 + }, + { + "h": 1, + "s": [ + 5 + ], + "t": 75 + }, + { + "h": 1, + "s": [ + 9 + ], + "t": 120 + }, + { + "h": 1, + "s": [ + 10 + ], + "t": 165 + }, + { + "h": 1, + "s": [ + 1 + ], + "t": 210 + }, + { + "h": 1, + "s": [ + 2 + ], + "t": 255 + } + ] + } + }, + { + "ix": 4, + "mn": "ADBE Shift Channels-0004", + "nm": "Take Blue From", + "ty": 7, + "v": { + "a": 1, + "ix": 4, + "k": [ + { + "h": 1, + "s": [ + 4 + ], + "t": 0 + }, + { + "h": 1, + "s": [ + 5 + ], + "t": 30 + }, + { + "h": 1, + "s": [ + 9 + ], + "t": 75 + }, + { + "h": 1, + "s": [ + 10 + ], + "t": 120 + }, + { + "h": 1, + "s": [ + 1 + ], + "t": 165 + }, + { + "h": 1, + "s": [ + 2 + ], + "t": 210 + }, + { + "h": 1, + "s": [ + 3 + ], + "t": 255 + } + ] + } + } + ], + "en": 1, + "ix": 1, + "mn": "ADBE Shift Channels", + "nm": "Shift Channels", + "np": 6, + "ty": 5 + } + ], + "h": 250, + "ind": 4, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 125, + 125, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 375, + 375, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "shift3", + "op": 301, + "refId": "comp_0", + "sr": 1, + "st": 0, + "ty": 0, + "w": 250 + }, + { + "ao": 0, + "bm": 0, + "ddd": 0, + "ind": 5, + "ip": 0, + "ks": { + "a": { + "a": 0, + "ix": 1, + "k": [ + 250, + 250, + 0 + ] + }, + "o": { + "a": 0, + "ix": 11, + "k": 100 + }, + "p": { + "a": 0, + "ix": 2, + "k": [ + 250, + 250, + 0 + ] + }, + "r": { + "a": 0, + "ix": 10, + "k": 0 + }, + "s": { + "a": 0, + "ix": 6, + "k": [ + 100, + 100, + 100 + ] + } + }, + "nm": "Pale Cyan Solid 1", + "op": 302.5, + "sc": "#e1e8e8", + "sh": 500, + "sr": 1, + "st": 0, + "sw": 500, + "ty": 1 + } + ], + "markers": [], + "nm": "shift channel", + "op": 301, + "v": "5.5.5", + "w": 500 +} \ No newline at end of file diff --git a/third_party/skia/samplecode/SampleAndroidShadows.cpp b/third_party/skia/samplecode/SampleAndroidShadows.cpp index 71eb22affb93..a4518f2356b0 100644 --- a/third_party/skia/samplecode/SampleAndroidShadows.cpp +++ b/third_party/skia/samplecode/SampleAndroidShadows.cpp @@ -53,7 +53,7 @@ class ShadowsView : public Sample { fRRPath.addRRect(SkRRect::MakeRectXY(SkRect::MakeXYWH(-100, -50, 200, 100), 4, 4)); fFunkyRRPath.addRoundRect(SkRect::MakeXYWH(-50, -50, SK_Scalar1 * 100, SK_Scalar1 * 100), 40 * SK_Scalar1, 20 * SK_Scalar1, - SkPath::kCW_Direction); + SkPathDirection::kCW); fCubicPath.cubicTo(100 * SK_Scalar1, 50 * SK_Scalar1, 20 * SK_Scalar1, 100 * SK_Scalar1, 0 * SK_Scalar1, 0 * SK_Scalar1); diff --git a/third_party/skia/samplecode/SampleCCPRGeometry.cpp b/third_party/skia/samplecode/SampleCCPRGeometry.cpp index 2f70ff21e684..dff8ed92f38a 100644 --- a/third_party/skia/samplecode/SampleCCPRGeometry.cpp +++ b/third_party/skia/samplecode/SampleCCPRGeometry.cpp @@ -28,7 +28,7 @@ #include "src/gpu/ccpr/GrVSCoverageProcessor.h" #include "src/gpu/geometry/GrPathUtils.h" #include "src/gpu/gl/GrGLGpu.h" -#include "src/gpu/glsl/GrGLSLFragmentProcessor.h" +#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/ops/GrDrawOp.h" using TriPointInstance = GrCCCoverageProcessor::TriPointInstance; @@ -196,7 +196,7 @@ void CCPRGeometryView::onDrawContent(SkCanvas* canvas) { GrPaint paint; paint.addColorFragmentProcessor( GrSimpleTextureEffect::Make(sk_ref_sp(ccbuff->asTextureProxy()), - ccbuff->colorInfo().colorType(), SkMatrix::I())); + ccbuff->colorInfo().alphaType(), SkMatrix::I())); paint.addColorFragmentProcessor( skstd::make_unique()); paint.setPorterDuffXPFactory(SkBlendMode::kSrcOver); diff --git a/third_party/skia/samplecode/SampleClip.cpp b/third_party/skia/samplecode/SampleClip.cpp index e931881ad0d7..bff770440d91 100644 --- a/third_party/skia/samplecode/SampleClip.cpp +++ b/third_party/skia/samplecode/SampleClip.cpp @@ -135,3 +135,456 @@ class ClipView : public Sample { }; DEF_SAMPLE( return new ClipView(); ) + +/////////////////////////////////////////////////////////////////////////////// + +struct SkHalfPlane { + SkScalar fA, fB, fC; + + SkScalar eval(SkScalar x, SkScalar y) const { + return fA * x + fB * y + fC; + } + SkScalar operator()(SkScalar x, SkScalar y) const { return this->eval(x, y); } + + bool twoPts(SkPoint pts[2]) const { + // normalize plane to help with the perpendicular step, below + SkScalar len = SkScalarSqrt(fA*fA + fB*fB); + if (!len) { + return false; + } + SkScalar denom = SkScalarInvert(len); + SkScalar a = fA * denom; + SkScalar b = fB * denom; + SkScalar c = fC * denom; + + // We compute p0 on the half-plane by setting one of the components to 0 + // We compute p1 by stepping from p0 along a perpendicular to the normal + if (b) { + pts[0] = { 0, -c / b }; + pts[1] = { b, pts[0].fY - a}; + } else if (a) { + pts[0] = { -c / a, 0 }; + pts[1] = { pts[0].fX + b, -a }; + } else { + return false; + } + + SkASSERT(SkScalarNearlyZero(this->operator()(pts[0].fX, pts[0].fY))); + SkASSERT(SkScalarNearlyZero(this->operator()(pts[1].fX, pts[1].fY))); + return true; + } + + enum Result { + kAllNegative, + kAllPositive, + kMixed + }; + Result test(const SkRect& bounds) const { + SkPoint diagMin, diagMax; + if (fA >= 0) { + diagMin.fX = bounds.fLeft; + diagMax.fX = bounds.fRight; + } else { + diagMin.fX = bounds.fRight; + diagMax.fX = bounds.fLeft; + } + if (fB >= 0) { + diagMin.fY = bounds.fTop; + diagMax.fY = bounds.fBottom; + } else { + diagMin.fY = bounds.fBottom; + diagMax.fY = bounds.fTop; + } + SkScalar test = this->eval(diagMin.fX, diagMin.fY); + SkScalar sign = test*this->eval(diagMax.fX, diagMin.fY); + if (sign > 0) { + // the path is either all on one side of the half-plane or the other + if (test < 0) { + return kAllNegative; + } else { + return kAllPositive; + } + } + return kMixed; + } +}; + +#include "src/core/SkEdgeClipper.h" + +static void clip(const SkPath& path, SkPoint p0, SkPoint p1, SkPath* clippedPath) { + SkMatrix mx, inv; + SkVector v = p1 - p0; + mx.setAll(v.fX, -v.fY, p0.fX, + v.fY, v.fX, p0.fY, + 0, 0, 1); + SkAssertResult(mx.invert(&inv)); + + SkPath rotated; + path.transform(inv, &rotated); + + SkScalar big = 1e28f; + SkRect clip = {-big, 0, big, big }; + + struct Rec { + SkPath* fResult; + SkPoint fPrev; + } rec = { clippedPath, {0, 0} }; + + SkEdgeClipper::ClipPath(rotated, clip, false, + [](SkEdgeClipper* clipper, bool newCtr, void* ctx) { + Rec* rec = (Rec*)ctx; + + bool addLineTo = false; + SkPoint pts[4]; + SkPath::Verb verb; + while ((verb = clipper->next(pts)) != SkPath::kDone_Verb) { + if (newCtr) { + rec->fResult->moveTo(pts[0]); + rec->fPrev = pts[0]; + newCtr = false; + } + + if (addLineTo || pts[0] != rec->fPrev) { + rec->fResult->lineTo(pts[0]); + } + + switch (verb) { + case SkPath::kLine_Verb: + rec->fResult->lineTo(pts[1]); + rec->fPrev = pts[1]; + break; + case SkPath::kQuad_Verb: + rec->fResult->quadTo(pts[1], pts[2]); + rec->fPrev = pts[2]; + break; + case SkPath::kCubic_Verb: + rec->fResult->cubicTo(pts[1], pts[2], pts[3]); + rec->fPrev = pts[3]; + break; + default: break; + } + addLineTo = true; + } + }, &rec); + + rec.fResult->transform(mx); +} + +// true means use clippedPath. +// false means there was no clipping -- use the original path +static bool clip(const SkPath& path, const SkHalfPlane& plane, SkPath* clippedPath) { + switch (plane.test(path.getBounds())) { + case SkHalfPlane::kAllPositive: + return false; + case SkHalfPlane::kMixed: { + SkPoint pts[2]; + if (plane.twoPts(pts)) { + clip(path, pts[0], pts[1], clippedPath); + return true; + } + } break; + default: break; // handled outside of the switch + } + // clipped out (or failed) + clippedPath->reset(); + return true; +} + +static void draw_halfplane(SkCanvas* canvas, SkPoint p0, SkPoint p1, SkColor c) { + SkVector v = p1 - p0; + p0 = p0 - v * 1000; + p1 = p1 + v * 1000; + + SkPaint paint; + paint.setColor(c); + canvas->drawLine(p0, p1, paint); +} + +static SkPath make_path() { + SkRandom rand; + auto rand_pt = [&rand]() { return SkPoint{rand.nextF() * 400, rand.nextF() * 400}; }; + + SkPath path; + for (int i = 0; i < 4; ++i) { + path.moveTo(rand_pt()).quadTo(rand_pt(), rand_pt()) + .quadTo(rand_pt(), rand_pt()).lineTo(rand_pt()); + } + return path; +} + +class HalfPlaneView : public Sample { + SkPoint fPts[2]; + SkPath fPath; + + SkString name() override { return SkString("halfplane"); } + + void onOnceBeforeDraw() override { + fPts[0] = {0, 0}; + fPts[1] = {3, 2}; + fPath = make_path(); + } + + void onDrawContent(SkCanvas* canvas) override { + SkPaint paint; + + paint.setColor({0.5f, 0.5f, 0.5f, 1.0f}, nullptr); + canvas->drawPath(fPath, paint); + + paint.setColor({0, 0, 0, 1}, nullptr); + + SkPath clippedPath; + clip(fPath, fPts[0], fPts[1], &clippedPath); + canvas->drawPath(clippedPath, paint); + + draw_halfplane(canvas, fPts[0], fPts[1], SK_ColorRED); + } + + Click* onFindClickHandler(SkScalar x, SkScalar y, skui::ModifierKey modi) override { + return new Click; + } + + bool onClick(Click* click) override { + fPts[0] = click->fCurr; + fPts[1] = fPts[0] + SkPoint{3, 2}; + return true; + } +}; +DEF_SAMPLE( return new HalfPlaneView(); ) + +static void draw_halfplane(SkCanvas* canvas, const SkHalfPlane& p, SkColor c) { + SkPoint pts[2]; + p.twoPts(pts); + draw_halfplane(canvas, pts[0], pts[1], c); +} + +static void compute_half_planes(const SkMatrix& mx, SkScalar W, SkScalar H, + SkHalfPlane planes[4]) { + SkScalar a = mx[0], b = mx[1], c = mx[2], + d = mx[3], e = mx[4], f = mx[5], + g = mx[6], h = mx[7], i = mx[8]; + + planes[0] = { 2*g - 2*a/W, 2*h - 2*b/W, 2*i - 2*c/W }; + planes[1] = { 2*a/W, 2*b/W, 2*c/W }; + planes[2] = { 2*g - 2*d/H, 2*h - 2*e/H, 2*i - 2*f/H }; + planes[3] = { 2*d/H, 2*e/H, 2*f/H }; +} + +class HalfPlaneView2 : public Sample { + SkPoint fPts[4]; + SkPath fPath; + + SkString name() override { return SkString("halfplane2"); } + + void onOnceBeforeDraw() override { + fPath = make_path(); + SkRect r = fPath.getBounds(); + r.toQuad(fPts); + } + + void onDrawContent(SkCanvas* canvas) override { + SkMatrix mx; + { + SkRect r = fPath.getBounds(); + SkPoint src[4]; + r.toQuad(src); + mx.setPolyToPoly(src, fPts, 4); + } + + SkPaint paint; + canvas->drawPath(fPath, paint); + + canvas->save(); + canvas->concat(mx); + paint.setColor(0x40FF0000); + canvas->drawPath(fPath, paint); + canvas->restore(); + + // draw the frame + paint.setStrokeWidth(10); + paint.setColor(SK_ColorGREEN); + canvas->drawPoints(SkCanvas::kPoints_PointMode, 4, fPts, paint); + + // draw the half-planes + SkHalfPlane planes[4]; + compute_half_planes(mx, 400, 400, planes); + for (auto& p : planes) { + draw_halfplane(canvas, p, SK_ColorRED); + } + } + + Click* onFindClickHandler(SkScalar x, SkScalar y, skui::ModifierKey modi) override { + SkScalar r = 8; + SkRect rect = SkRect::MakeXYWH(x - r, y - r, 2*r, 2*r); + for (int i = 0; i < 4; ++i) { + if (rect.contains(fPts[i].fX, fPts[i].fY)) { + Click* c = new Click; + c->fMeta.setS32("index", i); + return c; + } + } + return nullptr; + } + + bool onClick(Click* click) override { + int32_t index; + SkAssertResult(click->fMeta.findS32("index", &index)); + SkASSERT(index >= 0 && index < 4); + fPts[index] = click->fCurr; + return true; + } +}; +DEF_SAMPLE( return new HalfPlaneView2(); ) + +#include "include/core/SkMatrix44.h" +#include "include/utils/Sk3D.h" +#include "tools/Resources.h" + +static SkMatrix44 inv(const SkMatrix44& m) { + SkMatrix44 inverse; + SkAssertResult(m.invert(&inverse)); + return inverse; +} + +#if 0 // Jim's general half-planes math +static void half_planes(const SkMatrix44& m44, SkScalar W, SkScalar H, SkHalfPlane planes[6]) { + float mx[16]; + m44.asColMajorf(mx); + + SkScalar a = mx[0], b = mx[4], /* c = mx[ 8], */ d = mx[12], + e = mx[1], f = mx[5], /* g = mx[ 9], */ h = mx[13], + i = mx[2], j = mx[6], /* k = mx[10], */ l = mx[14], + m = mx[3], n = mx[7], /* o = mx[11], */ p = mx[15]; + + a = 2*a/W - m; b = 2*b/W - n; d = 2*d/W - p; + e = 2*e/H - m; f = 2*f/H - n; h = 2*h/H - p; +// i = 2*i - m; j = 2*j - n; l = 2*l - p; + + planes[0] = { m - a, n - b, p - d }; // w - x + planes[1] = { m + a, n + b, p + d }; // w + x + planes[2] = { m - e, n - f, p - h }; // w - y + planes[3] = { m + e, n + f, p + h }; // w + y + planes[4] = { m - i, n - j, p - l }; // w - z + planes[5] = { m + i, n + j, p + l }; // w + z +} +#endif + +static SkHalfPlane half_plane_w0(const SkMatrix& m) { + return { m[SkMatrix::kMPersp0], m[SkMatrix::kMPersp1], m[SkMatrix::kMPersp2] - 0.05f }; +} + +class HalfPlaneView3 : public Sample { + float fNear = 0.05f; + float fFar = 4; + float fAngle = SK_ScalarPI / 4; + + SkPoint3 fEye { 0, 0, 1.0f/tan(fAngle/2) - 1 }; + SkPoint3 fCOA { 0, 0, 0 }; + SkPoint3 fUp { 0, 1, 0 }; + + SkMatrix44 fRot; + SkPoint3 fTrans; + + SkPath fPath; + sk_sp fShader; + bool fShowUnclipped = false; + + SkString name() override { return SkString("halfplane3"); } + + void onOnceBeforeDraw() override { + fPath = make_path(); + fShader = GetResourceAsImage("images/mandrill_128.png") + ->makeShader(SkMatrix::MakeScale(3, 3)); + } + + void rotate(float x, float y, float z) { + SkMatrix44 r; + if (x) { + r.setRotateAboutUnit(1, 0, 0, x); + } else if (y) { + r.setRotateAboutUnit(0, 1, 0, y); + } else { + r.setRotateAboutUnit(0, 0, 1, z); + } + fRot.postConcat(r); + } + + SkMatrix44 get44() const { + SkMatrix44 camera, + perspective, + translate, + viewport; + + Sk3Perspective(&perspective, fNear, fFar, fAngle); + Sk3LookAt(&camera, fEye, fCOA, fUp); + translate.setTranslate(fTrans.fX, fTrans.fY, fTrans.fZ); + viewport.setScale(200, 200, 1).postTranslate( 200, 200, 0); + + return viewport * perspective * camera * translate * fRot * inv(viewport); + } + + void onDrawContent(SkCanvas* canvas) override { + SkMatrix mx = this->get44(); + + SkPaint paint; + paint.setColor({0.75, 0.75, 0.75, 1}); + canvas->drawPath(fPath, paint); + + paint.setShader(fShader); + + if (fShowUnclipped) { + canvas->save(); + canvas->concat(mx); + paint.setAlphaf(0.33f); + canvas->drawPath(fPath, paint); + paint.setAlphaf(1.f); + canvas->restore(); + } + + SkHalfPlane hpw = half_plane_w0(mx); + + SkColor planeColor = SK_ColorBLUE; + SkPath clippedPath, *path = &fPath; + if (clip(fPath, hpw, &clippedPath)) { + path = &clippedPath; + planeColor = SK_ColorRED; + } + canvas->save(); + canvas->concat(mx); + canvas->drawPath(*path, paint); + canvas->restore(); + + draw_halfplane(canvas, hpw, planeColor); + } + + bool onChar(SkUnichar uni) override { + float delta = SK_ScalarPI / 30; + switch (uni) { + case '8': this->rotate( delta, 0, 0); return true; + case '2': this->rotate(-delta, 0, 0); return true; + case '4': this->rotate(0, delta, 0); return true; + case '6': this->rotate(0, -delta, 0); return true; + case '-': this->rotate(0, 0, delta); return true; + case '+': this->rotate(0, 0, -delta); return true; + + case 'i': fTrans.fZ += 0.1f; SkDebugf("z %g\n", fTrans.fZ); return true; + case 'k': fTrans.fZ -= 0.1f; SkDebugf("z %g\n", fTrans.fZ); return true; + + case 'n': fNear += 0.1f; SkDebugf("near %g\n", fNear); return true; + case 'N': fNear -= 0.1f; SkDebugf("near %g\n", fNear); return true; + case 'f': fFar += 0.1f; SkDebugf("far %g\n", fFar); return true; + case 'F': fFar -= 0.1f; SkDebugf("far %g\n", fFar); return true; + + case 'u': fShowUnclipped = !fShowUnclipped; return true; + default: break; + } + return false; + } + Click* onFindClickHandler(SkScalar x, SkScalar y, skui::ModifierKey modi) override { + return nullptr; + } + + bool onClick(Click* click) override { + return false; + } +}; +DEF_SAMPLE( return new HalfPlaneView3(); ) diff --git a/third_party/skia/samplecode/SampleClock.cpp b/third_party/skia/samplecode/SampleClock.cpp index a90ecf16639d..f7332cec3c1b 100644 --- a/third_party/skia/samplecode/SampleClock.cpp +++ b/third_party/skia/samplecode/SampleClock.cpp @@ -160,7 +160,7 @@ class ClockView : public Sample { #ifdef USE_PATH path.reset(); path.arcTo(rect, 0, 0, false); - path.addOval(rect, SkPath::kCCW_Direction); + path.addOval(rect, SkPathDirection::kCCW); path.arcTo(rect, 360, 0, true); canvas->drawPath(path, paintFill); #else @@ -170,7 +170,7 @@ class ClockView : public Sample { #ifdef USE_PATH path.reset(); path.arcTo(rect, 0, 0, false); - path.addOval(rect, SkPath::kCCW_Direction); + path.addOval(rect, SkPathDirection::kCCW); path.arcTo(rect, 360, 0, true); canvas->drawPath(path, paintStroke); #else @@ -180,7 +180,7 @@ class ClockView : public Sample { #ifdef USE_PATH rect = SkRect::MakeLTRB(-6, -6, 6, 6); path.arcTo(rect, 0, 0, false); - path.addOval(rect, SkPath::kCCW_Direction); + path.addOval(rect, SkPathDirection::kCCW); path.arcTo(rect, 360, 0, true); canvas->drawPath(path, paintFill); #else @@ -196,7 +196,7 @@ class ClockView : public Sample { #ifdef USE_PATH path.reset(); path.arcTo(rect, 0, 0, false); - path.addOval(rect, SkPath::kCCW_Direction); + path.addOval(rect, SkPathDirection::kCCW); path.arcTo(rect, 360, 0, true); canvas->drawPath(path, paintStroke); #else diff --git a/third_party/skia/samplecode/SampleComplexClip.cpp b/third_party/skia/samplecode/SampleComplexClip.cpp index 4e811a05d7b4..d903148f8082 100644 --- a/third_party/skia/samplecode/SampleComplexClip.cpp +++ b/third_party/skia/samplecode/SampleComplexClip.cpp @@ -34,7 +34,7 @@ class ComplexClipView : public Sample { path.quadTo(SkIntToScalar(150), SkIntToScalar(150), SkIntToScalar(125), SkIntToScalar(150)); path.lineTo(SkIntToScalar(50), SkIntToScalar(150)); path.close(); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); SkColor pathColor = SK_ColorBLACK; SkPaint pathPaint; pathPaint.setAntiAlias(true); @@ -99,8 +99,8 @@ class ComplexClipView : public Sample { } canvas->save(); // set clip - clipA.setFillType(invA ? SkPath::kInverseEvenOdd_FillType : - SkPath::kEvenOdd_FillType); + clipA.setFillType(invA ? SkPathFillType::kInverseEvenOdd : + SkPathFillType::kEvenOdd); canvas->clipPath(clipA); canvas->clipPath(clipB, gOps[op].fOp); diff --git a/third_party/skia/samplecode/SampleDegenerateQuads.cpp b/third_party/skia/samplecode/SampleDegenerateQuads.cpp index 131e1198ed79..3d48cec1d3aa 100644 --- a/third_party/skia/samplecode/SampleDegenerateQuads.cpp +++ b/third_party/skia/samplecode/SampleDegenerateQuads.cpp @@ -409,7 +409,7 @@ class DegenerateQuadSample : public Sample { static const GrQuadPerEdgeAA::VertexSpec kSpec = {GrQuad::Type::kGeneral, GrQuadPerEdgeAA::ColorType::kNone, GrQuad::Type::kAxisAligned, false, GrQuadPerEdgeAA::Domain::kNo, - GrAAType::kCoverage, false}; + GrAAType::kCoverage, false, GrQuadPerEdgeAA::IndexBufferOption::kPictureFramed}; static const GrQuad kIgnored(SkRect::MakeEmpty()); GrQuadAAFlags flags = GrQuadAAFlags::kNone; @@ -421,8 +421,9 @@ class DegenerateQuadSample : public Sample { GrQuad quad = GrQuad::MakeFromSkQuad(fCorners, SkMatrix::I()); float vertices[56]; // 2 quads, with x, y, coverage, and geometry domain (7 floats x 8 vert) - GrQuadPerEdgeAA::Tessellate(vertices, kSpec, quad, {1.f, 1.f, 1.f, 1.f}, - GrQuad(SkRect::MakeEmpty()), SkRect::MakeEmpty(), flags); + GrQuadPerEdgeAA::Tessellator tessellator(kSpec, (char*) vertices); + tessellator.append(&quad, nullptr, {1.f, 1.f, 1.f, 1.f}, + SkRect::MakeEmpty(), flags); // The first quad in vertices is the inset, then the outset, but they // are ordered TL, BL, TR, BR so un-interleave coverage and re-arrange diff --git a/third_party/skia/samplecode/SampleEffects.cpp b/third_party/skia/samplecode/SampleEffects.cpp index 1b21d139fd3a..f22aea168529 100644 --- a/third_party/skia/samplecode/SampleEffects.cpp +++ b/third_party/skia/samplecode/SampleEffects.cpp @@ -82,10 +82,6 @@ class EffectsView : public Sample { gPaintProcs[i](&fPaint[i]); } - SkColorMatrix cm; - cm.setRotate(SkColorMatrix::kG_Axis, 180); - cm.setIdentity(); - this->setBGColor(0xFFDDDDDD); } diff --git a/third_party/skia/samplecode/SampleFillType.cpp b/third_party/skia/samplecode/SampleFillType.cpp index 58e954a17d05..230f41bf4de4 100644 --- a/third_party/skia/samplecode/SampleFillType.cpp +++ b/third_party/skia/samplecode/SampleFillType.cpp @@ -27,7 +27,7 @@ class FillTypeView : public Sample { protected: virtual SkString name() { return SkString("FillType"); } - void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft, + void showPath(SkCanvas* canvas, int x, int y, SkPathFillType ft, SkScalar scale, const SkPaint& paint) { const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) }; @@ -45,13 +45,13 @@ class FillTypeView : public Sample { } void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) { - showPath(canvas, 0, 0, SkPath::kWinding_FillType, + showPath(canvas, 0, 0, SkPathFillType::kWinding, scale, paint); - showPath(canvas, 200, 0, SkPath::kEvenOdd_FillType, + showPath(canvas, 200, 0, SkPathFillType::kEvenOdd, scale, paint); - showPath(canvas, 00, 200, SkPath::kInverseWinding_FillType, + showPath(canvas, 00, 200, SkPathFillType::kInverseWinding, scale, paint); - showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType, + showPath(canvas, 200, 200, SkPathFillType::kInverseEvenOdd, scale, paint); } diff --git a/third_party/skia/samplecode/SampleFilterQuality.cpp b/third_party/skia/samplecode/SampleFilterQuality.cpp index 54fe4af698b8..f18a1a633dc4 100644 --- a/third_party/skia/samplecode/SampleFilterQuality.cpp +++ b/third_party/skia/samplecode/SampleFilterQuality.cpp @@ -42,7 +42,7 @@ static sk_sp make_image() { canvas->drawColor(SK_ColorWHITE); SkPath path; - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); path.addRect(SkRect::MakeWH(N/2, N)); path.addRect(SkRect::MakeWH(N, N/2)); diff --git a/third_party/skia/samplecode/SampleLayerMask.cpp b/third_party/skia/samplecode/SampleLayerMask.cpp index 9785e8806242..546c6c432dbd 100644 --- a/third_party/skia/samplecode/SampleLayerMask.cpp +++ b/third_party/skia/samplecode/SampleLayerMask.cpp @@ -42,7 +42,7 @@ class LayerMaskView : public Sample { } else { SkPath p; p.addOval(r); - p.setFillType(SkPath::kInverseWinding_FillType); + p.setFillType(SkPathFillType::kInverseWinding); paint.setBlendMode(SkBlendMode::kDstOut); canvas->drawPath(p, paint); } diff --git a/third_party/skia/samplecode/SampleParagraph.cpp b/third_party/skia/samplecode/SampleParagraph.cpp index e377fd6feade..cc10e03223c0 100644 --- a/third_party/skia/samplecode/SampleParagraph.cpp +++ b/third_party/skia/samplecode/SampleParagraph.cpp @@ -21,6 +21,7 @@ #include "samplecode/Sample.h" #include "src/core/SkOSFile.h" #include "src/shaders/SkColorShader.h" +#include "src/utils/SkOSPath.h" #include "src/utils/SkUTF.h" #include "tools/Resources.h" @@ -33,7 +34,7 @@ class ParagraphView_Base : public Sample { // If we reset font collection we need to reset paragraph cache static sk_sp fFC = nullptr; if (fFC == nullptr) { - fFC = sk_make_sp(GetResourcePath("fonts").c_str()); + fFC = sk_make_sp(GetResourcePath("fonts").c_str(), false, true); } return fFC; } @@ -44,7 +45,16 @@ sk_sp setgrad(const SkRect& r, SkColor c0, SkColor c1) { SkPoint pts[] = {{r.fLeft, r.fTop}, {r.fRight, r.fTop}}; return SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkTileMode::kClamp); } - +/* +void writeHtml(const char* name, Paragraph* paragraph) { + SkString tmpDir = skiatest::GetTmpDir(); + if (!tmpDir.isEmpty()) { + SkString path = SkOSPath::Join(tmpDir.c_str(), name); + SkFILEWStream file(path.c_str()); + file.write(nullptr, 0); + } +} +*/ } // namespace class ParagraphView1 : public ParagraphView_Base { @@ -1118,30 +1128,34 @@ class ParagraphView9 : public ParagraphView_Base { canvas->clipRect(SkRect::MakeWH(w, h)); canvas->drawColor(background); + auto fontCollection = sk_make_sp(); + fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); + fontCollection->enableFontFallback(); + const char* text = "( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)(" " ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)(" " ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)"; - + auto multiplier = 5.67; ParagraphStyle paragraphStyle; paragraphStyle.setTextAlign(TextAlign::kLeft); paragraphStyle.setMaxLines(10); paragraphStyle.turnHintingOff(); TextStyle textStyle; textStyle.setFontFamilies({SkString("Roboto")}); - textStyle.setFontSize(50); + textStyle.setFontSize(5 * multiplier); textStyle.setHeight(1.3f); textStyle.setColor(SK_ColorBLACK); textStyle.setFontStyle(SkFontStyle(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant)); - ParagraphBuilderImpl builder(paragraphStyle, getFontCollection()); + ParagraphBuilderImpl builder(paragraphStyle, fontCollection); builder.pushStyle(textStyle); builder.addText(text, strlen(text)); builder.pop(); auto paragraph = builder.Build(); - paragraph->layout(550); + paragraph->layout(200 * multiplier); std::vector sizes = {0, 1, 2, 8, 19, 21, 22, 30, 150}; @@ -1152,7 +1166,7 @@ class ParagraphView9 : public ParagraphView_Base { RectWidthStyle rect_width_style = RectWidthStyle::kTight; for (size_t i = 0; i < sizes.size() - 1; ++i) { - size_t from = (i == 0 ? 0 : 1) + sizes[i]; + size_t from = sizes[i]; size_t to = sizes[i + 1]; auto boxes = paragraph->getRectsForRange(from, to, rect_height_style, rect_width_style); if (boxes.empty()) { @@ -1190,18 +1204,22 @@ class ParagraphView10 : public ParagraphView_Base { void onDrawContent(SkCanvas* canvas) override { canvas->drawColor(SK_ColorWHITE); - + auto multiplier = 5.67; const char* text = "English English 字典 字典 😀😃😄 😀😃😄"; + + auto fontCollection = sk_make_sp(); + fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); + fontCollection->enableFontFallback(); + ParagraphStyle paragraph_style; paragraph_style.turnHintingOff(); - ParagraphBuilderImpl builder(paragraph_style, getFontCollection()); + ParagraphBuilderImpl builder(paragraph_style, fontCollection); TextStyle text_style; text_style.setFontFamilies({SkString("Roboto"), SkString("Noto Color Emoji"), - SkString("Source Han Serif CN")}); - text_style.setColor(SK_ColorRED); - text_style.setFontSize(60); + SkString("Noto Serif CJK JP")}); + text_style.setFontSize(10 * multiplier); text_style.setLetterSpacing(0); text_style.setWordSpacing(0); text_style.setColor(SK_ColorBLACK); @@ -1214,10 +1232,6 @@ class ParagraphView10 : public ParagraphView_Base { paragraph->layout(width()); paragraph->paint(canvas, 0, 0); - SkDEBUGCODE(auto impl = reinterpret_cast(paragraph.get())); - SkASSERT(impl->runs().size() == 3); - SkASSERT(impl->runs()[0].textRange().end == impl->runs()[1].textRange().start); - SkASSERT(impl->runs()[1].textRange().end == impl->runs()[2].textRange().start); } private: @@ -1232,34 +1246,67 @@ class ParagraphView11 : public ParagraphView_Base { canvas->drawColor(SK_ColorWHITE); auto text = "\U0001f469\U0000200D\U0001f469\U0000200D\U0001f466\U0001f469\U0000200D\U0001f469\U0000200D\U0001f467\U0000200D\U0001f467\U0001f1fa\U0001f1f8"; - TextStyle text_style; - text_style.setFontFamilies({SkString("Ahem")}); - text_style.setColor(SK_ColorBLACK); - text_style.setFontSize(60); - text_style.setLetterSpacing(0); - text_style.setWordSpacing(0); - ParagraphStyle paragraph_style; - paragraph_style.setTextStyle(text_style); - ParagraphBuilderImpl builder(paragraph_style, getFontCollection()); - builder.addText(text, strlen(text)); - auto paragraph = builder.Build(); - paragraph->layout(1000); - paragraph->paint(canvas, 0, 0); - - SkColor colors[] = { SK_ColorRED, SK_ColorBLACK, SK_ColorBLUE, SK_ColorTRANSPARENT, SK_ColorTRANSPARENT }; - SkPoint queries[] = {{ 1, 3},{1, 5}, {1, 9}, { 1, 17}, {1, 33}}; - SkPaint paint; - paint.setColor(SK_ColorRED); - paint.setStyle(SkPaint::kStroke_Style); - paint.setAntiAlias(true); - paint.setStrokeWidth(5); - for (auto& query : queries) { - auto rects = paragraph->getRectsForRange(query.fX, query.fY, RectHeightStyle::kTight, RectWidthStyle::kTight); - paint.setColor(colors[&query - &queries[0]]); - for (auto& rect: rects) { - canvas->drawRect(rect.rect, paint); - } + + TextStyle text_style; + text_style.setFontFamilies({SkString("Ahem")}); + text_style.setColor(SK_ColorBLACK); + text_style.setFontSize(60); + text_style.setLetterSpacing(0); + text_style.setWordSpacing(0); + ParagraphStyle paragraph_style; + paragraph_style.setTextStyle(text_style); + + auto fontCollection = sk_make_sp(GetResourcePath("fonts").c_str(), true, true); + ParagraphBuilderImpl builder(paragraph_style, fontCollection); + builder.addText(text, strlen(text)); + auto paragraph = builder.Build(); + paragraph->layout(1000); + paragraph->paint(canvas, 0, 0); + + struct pair { + unsigned fX; + unsigned fY; + }; + + pair hit1[] = + {{ 0, 8},{1, 33}, {2, 34}, { 3, 19}, {4, 20}, + { 5, 21}, { 6, 22 }, { 7, 23 }, {8, 24 }, { 9, 25}, + { 10, 26}, { 11, 27}, {12, 28}, { 13, 21}, {14, 22 }, + { 15, 23}, {16, 24}, {17, 21}, { 18, 22}, {19, 21}, + { 20, 24}, { 21, 23}, }; + + pair miss[] = + {{ 0, 4},{1, 17}, {2, 18}, { 3, 11}, {4, 12}, + { 5, 13}, { 6, 14 }, { 7, 15 }, {8, 16 }, { 9, 17}, + { 10, 18}, { 11, 19}, {12, 20}, { 13, 17}, {14, 18 }, + { 15, 19}, {16, 20}, {17, 19}, { 18, 20}, + { 20, 22}, }; + + auto rects = paragraph->getRectsForRange(7, 9, RectHeightStyle::kTight, RectWidthStyle::kTight); + SkPaint paint; + paint.setColor(SK_ColorRED); + paint.setStyle(SkPaint::kStroke_Style); + paint.setAntiAlias(true); + paint.setStrokeWidth(1); + if (!rects.empty()) { + canvas->drawRect(rects[0].rect, paint); + } + + for (auto& query : hit1) { + auto rects = paragraph->getRectsForRange(query.fX, query.fY, RectHeightStyle::kTight, RectWidthStyle::kTight); + if (rects.size() >= 1 && rects[0].rect.width() > 0) { + } else { + SkDebugf("+[%d:%d): Bad\n", query.fX, query.fY); } + } + + for (auto& query : miss) { + auto miss = paragraph->getRectsForRange(query.fX, query.fY, RectHeightStyle::kTight, RectWidthStyle::kTight); + if (miss.empty()) { + } else { + SkDebugf("-[%d:%d): Bad\n", query.fX, query.fY); + } + } } private: @@ -1303,65 +1350,6 @@ class ParagraphView12 : public ParagraphView_Base { typedef Sample INHERITED; }; -class ParagraphView13 : public ParagraphView_Base { -protected: - SkString name() override { return SkString("Paragraph13"); } - - void onDrawContent(SkCanvas* canvas) override { - canvas->drawColor(SK_ColorWHITE); - - const char* text = "This\n" - "is a wrapping test. It should wrap at manual newlines, and if softWrap is true, also at spaces."; - TextStyle text_style; - text_style.setFontFamilies({SkString("Ahem")}); - text_style.setColor(SK_ColorBLACK); - text_style.setFontSize(10); - - auto relayout = [&](size_t lines, bool ellipsis, - SkScalar width, SkScalar height, SkScalar minWidth, SkScalar maxWidth, SkColor bg) { - ParagraphStyle paragraph_style; - SkPaint paint; - paint.setColor(bg); - text_style.setForegroundColor(paint); - paragraph_style.setTextStyle(text_style); - paragraph_style.setMaxLines(lines); - if (ellipsis) { - paragraph_style.setEllipsis(u"\u2026"); - } - ParagraphBuilderImpl builder(paragraph_style, getFontCollection()); - builder.addText(text); - auto paragraph = builder.Build(); - paragraph->layout(50); - paragraph->paint(canvas, 0, 0); - canvas->translate(0, paragraph->getHeight() + 10); - - SkASSERT(width == paragraph->getMaxWidth()); - SkASSERT(height == paragraph->getHeight()); - SkASSERT(minWidth == paragraph->getMinIntrinsicWidth()); - SkASSERT(maxWidth == paragraph->getMaxIntrinsicWidth()); - }; - - SkPaint paint; - paint.setColor(SK_ColorLTGRAY); - canvas->drawRect(SkRect::MakeXYWH(0, 0, 50, 500), paint); - - relayout(1, false, 50, 10, 950, 950, SK_ColorRED); - relayout(3, false, 50, 30, 50, 950, SK_ColorBLUE); - relayout(std::numeric_limits::max(), false, 50, 200, 50, 950, SK_ColorGREEN); - - relayout(1, true, 50, 10, 950, 950, SK_ColorYELLOW); - relayout(3, true, 50, 30, 50, 950, SK_ColorMAGENTA); - relayout(std::numeric_limits::max(), true, 50, 20, 950, 950, SK_ColorCYAN); - - relayout(1, false, 50, 10, 950, 950, SK_ColorRED); - relayout(3, false, 50, 30, 50, 950, SK_ColorBLUE); - relayout(std::numeric_limits::max(), false, 50, 200, 50, 950, SK_ColorGREEN); - } - -private: - typedef Sample INHERITED; -}; - class ParagraphView14 : public ParagraphView_Base { protected: SkString name() override { return SkString("Paragraph14"); } @@ -1403,50 +1391,312 @@ class ParagraphView15 : public ParagraphView_Base { void onDrawContent(SkCanvas* canvas) override { canvas->drawColor(SK_ColorWHITE); + TextStyle text_style; - text_style.setFontFamilies({SkString("Ahem")}); - text_style.setColor(SK_ColorBLACK); + text_style.setFontFamilies({SkString("abc.ttf")}); + text_style.setFontSize(50); + + auto fontCollection = sk_make_sp(GetResourcePath("fonts").c_str(), false); + + fontCollection->addFontFromFile("abc/abc.ttf", "abc"); + fontCollection->addFontFromFile("abc/abc+grave.ttf", "abc+grave"); + fontCollection->addFontFromFile("abc/abc+agrave.ttf", "abc+agrave"); + ParagraphStyle paragraph_style; - paragraph_style.setTextStyle(text_style); - ParagraphBuilderImpl builder(paragraph_style, getFontCollection()); - text_style.setFontSize(16); + ParagraphBuilderImpl builder(paragraph_style, fontCollection); + + text_style.setFontFamilies({SkString("abc"), SkString("abc+grave")}); + text_style.setColor(SK_ColorBLUE); builder.pushStyle(text_style); - builder.addText("C "); - text_style.setFontSize(20); + builder.addText(u"a\u0300"); + text_style.setColor(SK_ColorMAGENTA); builder.pushStyle(text_style); - builder.addText("He"); - builder.pop(); - PlaceholderStyle placeholderStyle; - placeholderStyle.fHeight = 55.0f; - placeholderStyle.fWidth = 50.0f; - placeholderStyle.fBaseline = TextBaseline::kAlphabetic; - placeholderStyle.fAlignment = PlaceholderAlignment::kBottom; - builder.addPlaceholder(placeholderStyle); - text_style.setFontSize(16); + builder.addText(u"à"); + + text_style.setFontFamilies({SkString("abc"), SkString("abc+agrave")}); + + text_style.setColor(SK_ColorRED); builder.pushStyle(text_style); - builder.addText("hello world! sieze the day!"); + builder.addText(u"a\u0300"); + text_style.setColor(SK_ColorGREEN); + builder.pushStyle(text_style); + builder.addText(u"à"); + + auto paragraph = builder.Build(); + paragraph->layout(800); + paragraph->paint(canvas, 50, 50); + + } + +private: + typedef Sample INHERITED; +}; + +class ParagraphView16 : public ParagraphView_Base { +protected: + SkString name() override { return SkString("Paragraph16"); } + + void onDrawContent(SkCanvas* canvas) override { + canvas->drawColor(SK_ColorWHITE); + + const char* text = "content"; + + ParagraphStyle paragraph_style; + paragraph_style.setMaxLines(1); + paragraph_style.setEllipsis(u"\u2026"); + //auto fontCollection = sk_make_sp(GetResourcePath("fonts").c_str(), false, true); + auto fontCollection = sk_make_sp(); + fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); + fontCollection->enableFontFallback(); + ParagraphBuilderImpl builder(paragraph_style, fontCollection); + + TextStyle text_style; + text_style.setFontFamilies({SkString(".SF Pro Text")}); + text_style.setColor(SK_ColorBLACK); + text_style.setFontSize(17.0f * 99.0f); + text_style.setLetterSpacing(0.41f); + builder.pushStyle(text_style); + builder.addText(text); + auto paragraph = builder.Build(); - paragraph->layout(400); + paragraph->layout(800); paragraph->paint(canvas, 0, 0); + } + +private: + typedef Sample INHERITED; +}; + +class ParagraphView17 : public ParagraphView_Base { +protected: + SkString name() override { return SkString("Paragraph17"); } + + void onDrawContent(SkCanvas* canvas) override { + canvas->drawColor(SK_ColorWHITE); + + auto fontCollection = sk_make_sp(); + fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); + fontCollection->enableFontFallback(); + auto navy = SkColorSetRGB(0, 0, 139); + auto ltgray = SkColorSetRGB(211, 211, 211); + auto multiplier = 5.67; + + const char* text = ">Sͬ͑̀͐̈͒̈́̋̎ͮͩ̽̓ͬ̂̆̔͗́̓ͣͧ͊ͫ͛̉͌̐̑ͪ͗̚͝҉̴͉͢k̡̊̓ͫͭͩ͂͊ͨͪͬ̑ͫ̍̌̄͛̌̂̑̂̋̊̔ͫ͛̽̑ͨ̍ͭ̓̀ͪͪ̉͐͗̌̓̃̚͟͝҉̢͏̫̞̙͇͖̮͕̗̟͕͇͚̻͈̣̻̪͉̰̲̣̫ͅͅP̴̅̍͒̿͗͗̇ͩ̃͆͌̀̽͏̧̡͕͖̝̖̼̺̰̣̬͔͖͔̼͙̞̦̫͓̘͜a̸̴̸̴̢̢̨̨̫͍͓̥̼̭̼̻̤̯̙̤̻̠͚̍̌͋̂ͦͨ̽̇͌͌͆̀̽̎͒̄ͪ̐ͦ̈ͫ͐͗̓̚̚͜ͅr͐͐ͤͫ̐ͥ͂̈́̿́ͮ̃͗̓̏ͫ̀̿͏̸̵̧́͘̕͟͝͠͞͠҉̷̧͚͢͟a̓̽̎̄͗̔͛̄̐͊͛ͫ͂͌̂̂̈̈̓̔̅̅̄͊̉́ͪ̑̄͆ͬ̍͆ͭ͋̐ͬ͏̷̵̨̢̩̹̖͓̥̳̰͔̱̬͖̙͓̙͇̀̀̕͜͟͟͢͟͜͠͡g̨̅̇ͦ͋̂ͦͨͭ̓͐͆̏̂͛̉ͧ̑ͫ̐̒͛ͫ̍̒͛́̚҉̷̨̛̛̀͜͢͞҉̩̘̲͍͎̯̹̝̭̗̱͇͉̲̱͔̯̠̹̥̻͉̲̜̤̰̪̗̺̖̺r̷͌̓̇̅ͭ̀̐̃̃ͭ͑͗̉̈̇̈́ͥ̓ͣ́ͤ͂ͤ͂̏͌̆̚҉̴̸̧̢̢̛̫͉̦̥̤̙͈͉͈͉͓̙̗̟̳̜͈̗̺̟̠̠͖͓̖̪͕̠̕̕͝ͅả̸̴̡̡̧͠͞͡͞҉̛̕͟͏̷̘̪̱͈̲͉̞̠̞̪̫͎̲̬̖̀̀͟͝͞͞͠p̛͂̈͐̚͠҉̵̸̡̢̢̩̹͙̯͖̙̙̮̥̙͚̠͔̥̭̮̞̣̪̬̥̠̖̝̥̪͎́̀̕͜͡͡ͅͅh̵̷̵̡̛ͤ̂͌̐̓̐̋̋͊̒̆̽́̀̀̀͢͠͞͞҉̷̸̢̕҉͚̯͖̫̜̞̟̠̱͉̝̲̹̼͉̟͉̩̮͔̤͖̞̭̙̹̬ͅ<"; + + ParagraphStyle paragraph_style; + ParagraphBuilderImpl builder(paragraph_style, fontCollection); SkPaint paint; - paint.setColor(SK_ColorRED); - paint.setStyle(SkPaint::kStroke_Style); - paint.setAntiAlias(true); - paint.setStrokeWidth(1); - canvas->drawRect(SkRect::MakeXYWH(0, 0, 400, 200), paint); + paint.setColor(ltgray); + TextStyle text_style; + text_style.setBackgroundColor(paint); + text_style.setColor(navy); + text_style.setFontFamilies({SkString("Roboto")}); + text_style.setFontSize(20 * multiplier); + builder.pushStyle(text_style); + builder.addText(text); + auto paragraph = builder.Build(); + paragraph->layout(10000); + paragraph->paint(canvas, 0, 0); + } + +private: + typedef Sample INHERITED; +}; + +class Zalgo { + private: + std::u16string COMBINING_DOWN = u"\u0316\u0317\u0318\u0319\u031c\u031d\u031e\u031f\u0320\u0324\u0325\u0326\u0329\u032a\u032b\u032c\u032d\u032e\u032f\u0330\u0331\u0332\u0333\u0339\u033a\u033b\u033c\u0345\u0347\u0348\u0349\u034d\u034e\u0353\u0354\u0355\u0356\u0359\u035a\u0323"; + std::u16string COMBINING_UP = u"\u030d\u030e\u0304\u0305\u033f\u0311\u0306\u0310\u0352\u0357\u0351\u0307\u0308\u030a\u0342\u0343\u0344\u034a\u034b\u034c\u0303\u0302\u030c\u0350\u0300\u0301\u030b\u030f\u0312\u0313\u0314\u033d\u0309\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036a\u036b\u036c\u036d\u036e\u035b\u0346\u031a"; + std::u16string COMBINING_MIDDLE = u"\u0315\u031b\u0340\u0341\u0358\u0321\u0322\u0327\u0328\u0334\u0335\u0336\u034f\u035c\u035d\u035e\u035f\u0360\u0362\u0338\u0337\u0361\u0489"; - auto phs = paragraph->getRectsForPlaceholders(); - for (auto& ph : phs) { - paint.setStyle(SkPaint::kFill_Style); - paint.setColor(SK_ColorYELLOW); - canvas->drawRect(ph.rect, paint); + std::u16string randomMarks(std::u16string& combiningMarks) { + std::u16string result; + auto num = std::rand() % (combiningMarks.size() / 1); + for (size_t i = 0; i < num; ++i) { + auto index = std::rand() % combiningMarks.size(); + result += combiningMarks[index]; + } + return result; + } + +public: + std::u16string zalgo(std::string victim) { + std::u16string result; + for (auto& c : victim) { + result += c; + result += randomMarks(COMBINING_UP); + result += randomMarks(COMBINING_MIDDLE); + result += randomMarks(COMBINING_DOWN); + } + return result; + } +}; + +class ParagraphView18 : public ParagraphView_Base { +protected: + SkString name() override { return SkString("Paragraph18"); } + + bool onChar(SkUnichar uni) override { + switch (uni) { + case ' ': + fLimit = 400; + return true; + case 's': + fLimit += 10; + return true; + case 'f': + if (fLimit > 10) { + fLimit -= 10; + } + return true; + default: + break; + } + return false; + } + + bool onAnimate(double nanos) override { + if (++fIndex > fLimit) { + fRedraw = true; + fIndex = 0; + } else { + fRepeat = true; + } + return true; + } + + void onDrawContent(SkCanvas* canvas) override { + canvas->drawColor(SK_ColorWHITE); + + auto navy = SkColorSetRGB(0, 0, 139); + auto ltgray = SkColorSetRGB(211, 211, 211); + + auto multiplier = 5.67; + auto fontCollection = sk_make_sp(); + fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); + fontCollection->enableFontFallback(); + + ParagraphStyle paragraph_style; + TextStyle text_style; + text_style.setFontFamilies({SkString("Roboto")}); + text_style.setFontSize(20 * multiplier); + text_style.setColor(navy); + SkPaint paint; + paint.setColor(ltgray); + text_style.setBackgroundColor(paint); + + Zalgo zalgo; + + if (fRedraw || fRepeat) { + + if (fRedraw || fParagraph.get() == nullptr) { + ParagraphBuilderImpl builder(paragraph_style, fontCollection); + builder.pushStyle(text_style); + auto utf16text = zalgo.zalgo("SkParagraph"); + icu::UnicodeString unicode((UChar*)utf16text.data(), SkToS32(utf16text.size())); + std::string str; + unicode.toUTF8String(str); + SkDebugf("Text:>%s<\n", str.data()); + builder.addText(utf16text); + fParagraph = builder.Build(); + } + + auto impl = static_cast(fParagraph.get()); + impl->setState(InternalState::kUnknown); + fParagraph->layout(1000); + fParagraph->paint(canvas, 300, 200); + + for (auto& run : impl->runs()) { + SkString fontFamily("unresolved"); + if (run.font().getTypeface() != nullptr) { + run.font().getTypeface()->getFamilyName(&fontFamily); + } + if (run.font().getTypeface() != nullptr) { + for (size_t i = 0; i < run.size(); ++i) { + auto glyph = run.glyphs().begin() + i; + if (*glyph == 0) { + SkDebugf("Run[%d] @pos=%d\n", run.index(), i); + SkASSERT(false); + } + } + } else { + SkDebugf("Run[%d]: %s\n", run.index(), fontFamily.c_str()); + SkASSERT(false); + } + } + fRedraw = false; + fRepeat = false; } } private: + bool fRedraw = true; + bool fRepeat = false; + size_t fIndex = 0; + size_t fLimit = 20; + std::unique_ptr fParagraph; typedef Sample INHERITED; }; +class ParagraphView19 : public ParagraphView_Base { +protected: + SkString name() override { return SkString("Paragraph19"); } + + void onDrawContent(SkCanvas* canvas) override { + canvas->drawColor(SK_ColorWHITE); + + auto fontCollection = sk_make_sp(GetResourcePath("fonts").c_str(), false, true); + + const char* text = "World domination is such an ugly phrase - I prefer to call it world optimisation"; + ParagraphStyle paragraph_style; + paragraph_style.setMaxLines(7); + paragraph_style.setEllipsis(u"\u2026"); + ParagraphBuilderImpl builder(paragraph_style, fontCollection); + TextStyle text_style; + text_style.setColor(SK_ColorBLACK); + text_style.setFontFamilies({SkString("Roboto")}); + text_style.setFontSize(40); + builder.pushStyle(text_style); + builder.addText(text); + auto paragraph = builder.Build(); + paragraph->layout(this->width()); + + paragraph->paint(canvas, 0, 0); + } + +private: + typedef Sample INHERITED; +}; + +class ParagraphView20 : public ParagraphView_Base { +protected: + SkString name() override { return SkString("Paragraph20"); } + + void onDrawContent(SkCanvas* canvas) override { + canvas->drawColor(SK_ColorWHITE); + + auto fontCollection = sk_make_sp(GetResourcePath("fonts").c_str(), false, true); + + const char* text = ""; + ParagraphStyle paragraph_style; + paragraph_style.setMaxLines(std::numeric_limits::max()); + //paragraph_style.setEllipsis(u"\u2026"); + ParagraphBuilderImpl builder(paragraph_style, fontCollection); + TextStyle text_style; + text_style.setColor(SK_ColorBLACK); + text_style.setFontFamilies({SkString("Roboto")}); + text_style.setFontSize(40); + builder.pushStyle(text_style); + builder.addText(text); + auto paragraph = builder.Build(); + paragraph->layout(this->width()); + + paragraph->paint(canvas, 0, 0); + } + +private: + typedef Sample INHERITED; +}; ////////////////////////////////////////////////////////////////////////////// DEF_SAMPLE(return new ParagraphView1();) @@ -1461,6 +1711,10 @@ DEF_SAMPLE(return new ParagraphView9();) DEF_SAMPLE(return new ParagraphView10();) DEF_SAMPLE(return new ParagraphView11();) DEF_SAMPLE(return new ParagraphView12();) -DEF_SAMPLE(return new ParagraphView13();) DEF_SAMPLE(return new ParagraphView14();) DEF_SAMPLE(return new ParagraphView15();) +DEF_SAMPLE(return new ParagraphView16();) +DEF_SAMPLE(return new ParagraphView17();) +DEF_SAMPLE(return new ParagraphView18();) +DEF_SAMPLE(return new ParagraphView19();) +DEF_SAMPLE(return new ParagraphView20();) diff --git a/third_party/skia/samplecode/SamplePathText.cpp b/third_party/skia/samplecode/SamplePathText.cpp index 273573a37330..0b8ef027b4c8 100644 --- a/third_party/skia/samplecode/SamplePathText.cpp +++ b/third_party/skia/samplecode/SamplePathText.cpp @@ -278,7 +278,7 @@ class WavyPathText : public MovingPathText { SkPath* backpath = &fBackPaths[i]; backpath->reset(); - backpath->setFillType(SkPath::kEvenOdd_FillType); + backpath->setFillType(SkPathFillType::kEvenOdd); SkPath::RawIter iter(glyph.fPath); SkPath::Verb verb; diff --git a/third_party/skia/samplecode/SampleQuadStroker.cpp b/third_party/skia/samplecode/SampleQuadStroker.cpp index 72dfabc9ddab..6b679e22aae9 100644 --- a/third_party/skia/samplecode/SampleQuadStroker.cpp +++ b/third_party/skia/samplecode/SampleQuadStroker.cpp @@ -488,7 +488,7 @@ class QuadStrokerView : public Sample { paint.setColor(0x3f0f1f3f); canvas->drawPath(path, paint); path.reset(); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); path.addCircle(center.fX, center.fY, maxSide + width / 2); SkRect outside = SkRect::MakeXYWH(center.fX - maxSide - width, center.fY - maxSide - width, (maxSide + width) * 2, (maxSide + width) * 2); @@ -646,9 +646,9 @@ class QuadStrokerView : public Sample { path.reset(); SkRRect rr2; rr.inset(width/2, width/2, &rr2); - path.addRRect(rr2, SkPath::kCCW_Direction); + path.addRRect(rr2, SkPathDirection::kCCW); rr.inset(-width/2, -width/2, &rr2); - path.addRRect(rr2, SkPath::kCW_Direction); + path.addRRect(rr2, SkPathDirection::kCW); SkPaint paint; paint.setAntiAlias(true); paint.setColor(0x40FF8844); diff --git a/third_party/skia/samplecode/SampleRegion.cpp b/third_party/skia/samplecode/SampleRegion.cpp index 58ad5e020ca0..7c16c0116648 100644 --- a/third_party/skia/samplecode/SampleRegion.cpp +++ b/third_party/skia/samplecode/SampleRegion.cpp @@ -32,7 +32,7 @@ static void test_strokerect(SkCanvas* canvas) { SkPath path; path.addRect(0.0f, 0.0f, SkIntToScalar(width), SkIntToScalar(height), - SkPath::kCW_Direction); + SkPathDirection::kCW); SkRect r = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height)); SkCanvas c(bitmap); diff --git a/third_party/skia/samplecode/SampleSlides.cpp b/third_party/skia/samplecode/SampleSlides.cpp index 09cb87cc90cd..d58f4f13a99e 100644 --- a/third_party/skia/samplecode/SampleSlides.cpp +++ b/third_party/skia/samplecode/SampleSlides.cpp @@ -136,9 +136,9 @@ static void patheffect_slide(SkCanvas* canvas) { path.reset(); SkRect r = { 0, 0, 250, 120 }; - path.addOval(r, SkPath::kCW_Direction); + path.addOval(r, SkPathDirection::kCW); r.inset(50, 50); - path.addRect(r, SkPath::kCCW_Direction); + path.addRect(r, SkPathDirection::kCCW); canvas->translate(320, 20); for (i = 0; i < SK_ARRAY_COUNT(gPE2); i++) { diff --git a/third_party/skia/samplecode/SampleStrokePath.cpp b/third_party/skia/samplecode/SampleStrokePath.cpp index 4963f976774a..b22ba8d3b537 100644 --- a/third_party/skia/samplecode/SampleStrokePath.cpp +++ b/third_party/skia/samplecode/SampleStrokePath.cpp @@ -112,8 +112,8 @@ class StrokePathView : public Sample { "Z"; SkParsePath::FromSVGString(str, &fPath); #else - fPath.addCircle(0, 0, SkIntToScalar(50), SkPath::kCW_Direction); - fPath.addCircle(0, SkIntToScalar(-50), SkIntToScalar(30), SkPath::kCW_Direction); + fPath.addCircle(0, 0, SkIntToScalar(50), SkPathDirection::kCW); + fPath.addCircle(0, SkIntToScalar(-50), SkIntToScalar(30), SkPathDirection::kCW); #endif scale_to_width(&fPath, fWidth); @@ -192,11 +192,11 @@ class StrokePathView : public Sample { fPath.offset(100, 0); #endif - fPath.setFillType(SkPath::kWinding_FillType); + fPath.setFillType(SkPathFillType::kWinding); drawSet(canvas, &paint); canvas->translate(0, fPath.getBounds().height() * 5 / 4); - fPath.setFillType(SkPath::kEvenOdd_FillType); + fPath.setFillType(SkPathFillType::kEvenOdd); drawSet(canvas, &paint); } diff --git a/third_party/skia/samplecode/SampleTextEffects.cpp b/third_party/skia/samplecode/SampleTextEffects.cpp index 230328887559..8e57750e6a99 100644 --- a/third_party/skia/samplecode/SampleTextEffects.cpp +++ b/third_party/skia/samplecode/SampleTextEffects.cpp @@ -82,7 +82,7 @@ class InverseFillPE : public SkPathEffect { virtual bool onFilterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect*) const override { *dst = src; - dst->setFillType(SkPath::kInverseWinding_FillType); + dst->setFillType(SkPathFillType::kInverseWinding); return true; } diff --git a/third_party/skia/site/dev/contrib/cqkeywords.md b/third_party/skia/site/dev/contrib/cqkeywords.md index 8f0385a4843d..70561780ef69 100644 --- a/third_party/skia/site/dev/contrib/cqkeywords.md +++ b/third_party/skia/site/dev/contrib/cqkeywords.md @@ -1,19 +1,30 @@ Commit Queue Keywords ===================== -COMMIT +See [CQ +documentation](https://chromium.googlesource.com/chromium/src/+/master/docs/infra/cq.md) +for more information. + +Options in the form "Key: Value" must appear in the last paragraph of the +commit message to be used. + + +Commit ------ If you are working on experimental code and do not want to risk accidentally -submitting the change via the CQ, then you can mark it with "COMMIT=false". +submitting the change via the CQ, then you can mark it with "Commit: false". The CQ will immediately abandon the change if it contains this option. -To do a dry run through the CQ please use Gerrit's [CQ Dry Run](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/G5-X0_tfmok) feature. +To do a dry run through the CQ please use Gerrit's [CQ Dry +Run](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/G5-X0_tfmok) +feature. - COMMIT=false + Commit: false The CQ will run through its list of verifiers (reviewer check, trybots, tree check, presubmit check), and will close the issue instead of committing it. + No-Dependency-Checks -------------------- @@ -22,7 +33,8 @@ No-Dependency-Checks The CQ rejects patchsets with open dependencies. An open dependency exists when a CL depends on another CL that is not yet closed. You can skip this check with this keyword. -CQ_INCLUDE_TRYBOTS + +Cq-Include-Trybots ------------------ Allows you to add arbitrary trybots to the CQ's list of default trybots. @@ -30,25 +42,36 @@ The CQ will block till these tryjobs pass just like the default list of tryjobs. This is the format of the values of this keyword: - CQ_INCLUDE_TRYBOTS=bucket1:bot1,bot2;bucket2:bot3,bot4 + Cq-Include-Trybots: bucket1:bot1,bot2;bucket2:bot3,bot4 + +Multiple lines are allowed: + + Cq-Include-Trybots: bucket1:bot1 + Cq-Include-Trybots: bucket1:bot2 + Cq-Include-Trybots: bucket2:bot3 + Cq-Include-Trybots: bucket2:bot4 Here are some real world examples: - CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_chromium_asan_rel_ng + Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_asan_rel_ng + Cq-Include-Trybots: skia.primary:Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE + Cq-Include-Trybots: luci.skia.skia.primary:Build-Debian9-Clang-x86-devrel-Android_SKQP - CQ_INCLUDE_TRYBOTS=skia.primary:Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE + FIXME: what bucket are skia bots in now? No-Tree-Checks -------------- -If you want to skip the tree status checks, to make the CQ commit a CL even if the tree is closed, -you can add the following line to the CL description: +If you want to skip the tree status checks, to make the CQ commit a CL even if +the tree is closed, you can add the following line to the CL description: No-Tree-Checks: true -This is discouraged, since the tree is closed for a reason. However, in rare cases this is acceptable, -primarily to fix build breakages (i.e., your CL will help in reopening the tree). +This is discouraged, since the tree is closed for a reason. However, in rare +cases this is acceptable, primarily to fix build breakages (i.e., your CL will +help in reopening the tree). + No-Presubmit ------------ @@ -57,20 +80,14 @@ If you want to skip the presubmit checks, add the following line to the CL descr No-Presubmit: true + No-Try ------ -If you cannot wait for the try job results, you can add the following line to the CL description: +If you cannot wait for the try job results, you can add the following line to +the CL description: No-Try: true -The CQ will then not run any try jobs for your change and will commit the CL as soon as the tree is open, assuming the presubmit check passes. - -NO_MERGE_BUILDS ---------------- - -This keyword prevents the Skia build masters from building this commit with others. Use it when your -commit may have effects that you don't want mis-attributed to other commits. Just include the keyword -somewhere in the commit message: - - NO_MERGE_BUILDS +The CQ will then not run any try jobs for your change and will commit the CL as +soon as the tree is open, assuming the presubmit check passes. diff --git a/third_party/skia/site/dev/testing/Cluster.png b/third_party/skia/site/dev/testing/Cluster.png index 12dc4d56fa46..caf8700b8500 100644 Binary files a/third_party/skia/site/dev/testing/Cluster.png and b/third_party/skia/site/dev/testing/Cluster.png differ diff --git a/third_party/skia/site/dev/testing/Perf.png b/third_party/skia/site/dev/testing/Perf.png index bcbc20f2a095..a6885a898c4e 100644 Binary files a/third_party/skia/site/dev/testing/Perf.png and b/third_party/skia/site/dev/testing/Perf.png differ diff --git a/third_party/skia/site/dev/testing/Regression.png b/third_party/skia/site/dev/testing/Regression.png new file mode 100644 index 000000000000..b9f7ac50bb52 Binary files /dev/null and b/third_party/skia/site/dev/testing/Regression.png differ diff --git a/third_party/skia/site/dev/testing/automated_testing.md b/third_party/skia/site/dev/testing/automated_testing.md index 16ff4888cc01..a8620885d6dc 100644 --- a/third_party/skia/site/dev/testing/automated_testing.md +++ b/third_party/skia/site/dev/testing/automated_testing.md @@ -26,7 +26,6 @@ to specify nightly and weekly jobs as well. For convenience, most repos also have a `gen_tasks.go` which will generate `tasks.json`. You will need to [install Go](https://golang.org/doc/install). From the repository root: - $ go get -u go.skia.org/infra/... $ go run infra/bots/gen_tasks.go It is necessary to run `gen_tasks.go` every time it is changed or every time an diff --git a/third_party/skia/site/dev/testing/skiaperf.md b/third_party/skia/site/dev/testing/skiaperf.md index 005b30b0449a..86342490c9a6 100644 --- a/third_party/skia/site/dev/testing/skiaperf.md +++ b/third_party/skia/site/dev/testing/skiaperf.md @@ -1,40 +1,39 @@ Skia Perf ========= -[Skia Perf](https://perf.skia.org) is a Polymer-based web application for -analyzing and viewing performance metrics produced by Skia's testing -infrastructure. +[Skia Perf](https://perf.skia.org) is a web application for analyzing and +viewing performance metrics produced by Skia's testing infrastructure.
Skia tests across a large number of platforms and configurations, and each -commit to Skia generates 240,000 individual values that are sent to Perf, -consisting mostly of performance benchmark results, but also including memory -and coverage data. +commit to Skia generates more than 400,000 individual values that are sent to +Perf, consisting mostly of performance benchmark results, but also including +memory and coverage data. -Perf includes tools for analyzing such a large corpus of data, the most -powerful is [k-means clustering](https://perf.skia.org/t/). This tool groups -large sets of performance metrics together based on how they change over time, -and highlights sets of metrics that have performance regressions. +Perf offers clustering, which is a tool to pick out trends and patterns in large sets of traces. -
+
-Calculations ------------- +And can generate alerts when those trends spot a regression: + +
+ + +## Calculations Skia Perf has the ability to perform calculations over the test data allowing you to build up interesting queries. -This query displays [the ratio of playback time in ms to the number of ops for desk\_wowwiki.skp](https://perf.skia.org/#1876): +This query displays the ratio of playback time in ms to the number of ops for desk\_wowwiki.skp: ratio( ave(fill(filter("name=desk_wowwiki.skp&sub_result=min_ms"))), ave(fill(filter("name=desk_wowwiki.skp&sub_result=ops"))) ) -You can also use the data to answer questions like [how many tests were run per commit](https://perf.skia.org/#1878). +You can also use the data to answer questions like how many tests were run per commit. count(filter("")) -See Skia Perf for the [full list of functions available](https://perf.skia.org/help). - +See Skia Perf for the [full list of functions available](https://perf.skia.org/help/). diff --git a/third_party/skia/site/dev/testing/swarmingbots.md b/third_party/skia/site/dev/testing/swarmingbots.md index a2626f31db48..70db06cba2b2 100644 --- a/third_party/skia/site/dev/testing/swarmingbots.md +++ b/third_party/skia/site/dev/testing/swarmingbots.md @@ -49,7 +49,7 @@ If you need to run code on a specific machine/device to debug an issue, the simp run tryjobs (after adding debugging output to the relevant code). In some cases you may also need to [create or modify tryjobs](automated_testing#adding-new-jobs). -For Googlers: If you need more control (e.g. to run GDB) and need run to directly on a swarming bot then you can use [leasing.skia.org](https://leasing.skia.org).
+For Googlers: If you need more control (e.g. to run GDB) and need to run directly on a swarming bot then you can use [leasing.skia.org](https://leasing.skia.org).
If that does not work then the [current trooper][current trooper] can help you bring the device back to your desk and connect it to GoogleGuest Wifi or the [Google Test Network](http://go/gtn-criteria). @@ -59,9 +59,12 @@ flashed/imaged back to a clean state, but others can not. If a permanent change needs to be made on the machine (such as an OS or driver update), please [file a bug][infra bug] and assign to jcgregorio for reassignment. +For your convenience, the machine skolo-builder is available for checking out and compiling code within the Skolo. See +more info in the [Skolo maintenance doc][remote access] remote access section. + [current trooper]: http://skia-tree-status.appspot.com/trooper [remote access]: - https://docs.google.com/document/d/1zTR1YtrIFBo-fRWgbUgvJNVJ-s_4_sNjTrHIoX2vulo/edit#heading=h.2nq3yd1axg0n + https://docs.google.com/document/d/1zTR1YtrIFBo-fRWgbUgvJNVJ-s_4_sNjTrHIoX2vulo/edit#heading=h.v77cmwbwc5la [infra bug]: https://bugs.chromium.org/p/skia/issues/entry?template=Infrastructure+Bug [remotely debug android]: https://docs.google.com/document/d/1nxn7TobfaLNNfhSTiwstOnjV0jCxYUI1uwW0T_V7BYg/ [vnc to skolo windows]: diff --git a/third_party/skia/site/dev/tools/codesearch.md b/third_party/skia/site/dev/tools/codesearch.md index 8859c7c67957..4484f2e6abc1 100644 --- a/third_party/skia/site/dev/tools/codesearch.md +++ b/third_party/skia/site/dev/tools/codesearch.md @@ -30,7 +30,7 @@ appear here first. Code search option |Search |XRef |History |Repos |Branches |Freshness --------------------|-------|-----|--------|------------------------------|---------|--------------- - [cs.skia.org][1] |regexp | yes |yes |skia |master |last DEPS roll + [cs.skia.org][1] |regexp | yes |yes |skia [buildbot][5] |master |last DEPS roll [Internal][2] |regexp | no |yes |skia buildbot common internal |master |hours [Github][3] |basic | no |yes |skia buildbot |all |hour [googlesource][4] |none | no |yes |all |all |N/A @@ -39,6 +39,7 @@ appear here first. [2]: http://cs/#skia/ "Internal Code Search" [3]: https://github.com/google/skia "Github mirror of skia" [4]: https://skia.googlesource.com/ "Master Skia repos on googlesource.com" +[5]: https://cs.chromium.org/chromium/skia/buildbot/ Client code search ------------------ diff --git a/third_party/skia/site/dev/tools/markdown.md b/third_party/skia/site/dev/tools/markdown.md index fb49339fa937..3aa4d09c6f50 100644 --- a/third_party/skia/site/dev/tools/markdown.md +++ b/third_party/skia/site/dev/tools/markdown.md @@ -23,13 +23,13 @@ preview changes much quicker. You must have a recent version (>=8.9) of you are running on a Google corporate workstation. Installation also means that you have `$GOPATH/bin` [added to your PATH](https://golang.org/doc/code.html#GOPATH). Run: - go get -u go.skia.org/infra/doc/go/docserver - cd $GOPATH/src/go.skia.org/infra/doc + git clone https://skia.googlesource.com/buildbot + cd buildbot/docserverk make And then **from within** the directory of your local Git checkout of Skia run: - docserver --preview --local + docserverk --preview --local Then visit http://localhost:8000 to preview your changes. There is no need to restart the server for file changes, but you will need to restart it if there @@ -39,7 +39,7 @@ to appear in the navigation on the right hand side of the page. If port 8000 is unavailable on your machine you can set the port to use via the --port flag: - docserver --preview --local --port=:8002 + docserverk --preview --local --port=:8002 METADATA -------- diff --git a/third_party/skia/site/user/modules/canvaskit.md b/third_party/skia/site/user/modules/canvaskit.md index d8398a44a82d..b01a74a94206 100644 --- a/third_party/skia/site/user/modules/canvaskit.md +++ b/third_party/skia/site/user/modules/canvaskit.md @@ -29,7 +29,7 @@ Samples margin: 2px; } - #patheffect, #ink { + #patheffect, #ink, #shaping { width: 400px; height: 400px; } @@ -87,13 +87,13 @@ Samples -

Text Shaping using ICU and Harfbuzz

+

SkParagraph (using ICU and Harfbuzz)

- +
- - Text Shaping JSFiddle + SkParagraph JSFiddle
@@ -106,7 +106,7 @@ Samples var locate_file = ''; if (window.WebAssembly && typeof window.WebAssembly.compile === 'function') { console.log('WebAssembly is supported!'); - locate_file = 'https://unpkg.com/canvaskit-wasm@0.4.0/bin/'; + locate_file = 'https://unpkg.com/canvaskit-wasm@0.9.0/bin/'; } else { console.log('WebAssembly is not supported (yet) on this browser.'); document.getElementById('demo').innerHTML = "
WASM not supported by your browser. Try a recent version of Chrome, Firefox, Edge, or Safari.
"; @@ -313,51 +313,87 @@ Samples console.log('Could not make surface'); return; } - const context = CanvasKit.currentContext(); + let robotoData = null; + fetch('https://storage.googleapis.com/skia-cdn/google-web-fonts/Roboto-Regular.ttf').then((resp) => { + resp.arrayBuffer().then((buffer) => { + robotoData = buffer; + requestAnimationFrame(drawFrame); + }); + }); + + let emojiData = null; + fetch('https://storage.googleapis.com/skia-cdn/misc/NotoColorEmoji.ttf').then((resp) => { + resp.arrayBuffer().then((buffer) => { + emojiData = buffer; + requestAnimationFrame(drawFrame); + }); + }); + const skcanvas = surface.getCanvas(); - const paint = new CanvasKit.SkPaint(); - paint.setColor(CanvasKit.BLUE); - paint.setStyle(CanvasKit.PaintStyle.Stroke); - const textPaint = new CanvasKit.SkPaint(); - const bigFont = new CanvasKit.SkFont(null, 30); - const smallFont = new CanvasKit.SkFont(null, 14); + const font = new CanvasKit.SkFont(null, 18); + const fontPaint = new CanvasKit.SkPaint(); + fontPaint.setStyle(CanvasKit.PaintStyle.Fill); + fontPaint.setAntiAlias(true); - const TEXT = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ac leo vitae ipsum hendrerit euismod quis rutrum nibh. Quisque non suscipit urna. Donec enim urna, facilisis vitae volutpat in, mattis at elit. Sed quis augue et dolor dignissim fringilla. Sed non massa eu neque tristique malesuada. '; + skcanvas.drawText(`Fetching Font data...`, 5, 450, fontPaint, font); + surface.flush(); - let X = 280; - let Y = 190; + const context = CanvasKit.currentContext(); + + let paragraph = null; + let X = 10; + let Y = 10; + const str = 'The quick brown fox 🦊 ate a zesty hamburgerfons 🍔.\nThe 👩‍👩‍👧‍👧 laughed.'; function drawFrame() { + if (robotoData && emojiData && !paragraph) { + const fontMgr = CanvasKit.SkFontMgr.FromData([robotoData, emojiData]); + + const paraStyle = new CanvasKit.ParagraphStyle({ + textStyle: { + color: CanvasKit.BLACK, + fontFamilies: ['Roboto', 'Noto Color Emoji'], + fontSize: 50, + }, + textAlign: CanvasKit.TextAlign.Left, + maxLines: 7, + ellipsis: '...', + }); + + const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr); + builder.addText(str); + paragraph = builder.build(); + } + if (!paragraph) { + requestAnimationFrame(drawFrame); + return; + } CanvasKit.setCurrentContext(context); - skcanvas.clear(CanvasKit.TRANSPARENT); - - const shapedText = new CanvasKit.ShapedText({ - font: smallFont, - leftToRight: true, - text: TEXT, - width: X - 10, - }); - - skcanvas.drawRect(CanvasKit.LTRBRect(10, 10, X, Y), paint); - skcanvas.drawText(shapedText, 10, 10, textPaint, smallFont); - skcanvas.drawText('Try dragging the box!', 10, 380, textPaint, bigFont); + skcanvas.clear(CanvasKit.WHITE); + + const wrapTo = 350 + 150 * Math.sin(Date.now() / 2000); + paragraph.layout(wrapTo); + skcanvas.drawParagraph(paragraph, 0, 0); + skcanvas.drawLine(wrapTo, 0, wrapTo, 400, fontPaint); + + let posA = paragraph.getGlyphPositionAtCoordinate(X, Y); + const cp = str.codePointAt(posA.pos); + if (cp) { + const glyph = String.fromCodePoint(cp); + skcanvas.drawText(`At (${X.toFixed(2)}, ${Y.toFixed(2)}) glyph is '${glyph}'`, 5, 450, fontPaint, font); + } surface.flush(); - - shapedText.delete(); - - window.requestAnimationFrame(drawFrame); + requestAnimationFrame(drawFrame); } - window.requestAnimationFrame(drawFrame); // Make animation interactive let interact = (e) => { - if (!e.pressure) { - return; - } - X = e.offsetX; - Y = e.offsetY; + // multiply by 4/5 to account for the difference in the canvas width and the CSS width. + // The 10 accounts for where the mouse actually is compared to where it is drawn. + X = (e.offsetX * 4/5) - 10; + Y = e.offsetY * 4/5; }; document.getElementById('shaping').addEventListener('pointermove', interact); document.getElementById('shaping').addEventListener('pointerdown', interact); diff --git a/third_party/skia/site/user/modules/particles.md b/third_party/skia/site/user/modules/particles.md index fd1d839f9863..aa4cd2daedf4 100644 --- a/third_party/skia/site/user/modules/particles.md +++ b/third_party/skia/site/user/modules/particles.md @@ -31,8 +31,14 @@ Samples
- Trail (Click and Drag!) + Trail (Click and Drag!) +
+
+
+ +
+ Cuboid
@@ -96,6 +102,7 @@ Samples TrailExample(CanvasKit, 'trail', trail); ParticleExample(CanvasKit, 'confetti', confetti, 200, 200); ParticleExample(CanvasKit, 'curves', curves, 200, 300); + ParticleExample(CanvasKit, 'cube', cube, 200, 200); ParticleExample(CanvasKit, 'fireworks', fireworks, 200, 300); ParticleExample(CanvasKit, 'raincloud', raincloud, 200, 100); ParticleExample(CanvasKit, 'text', text, 75, 250); @@ -170,6 +177,101 @@ const confetti ={ "Bindings": [] }; +const cube = { + "MaxCount": 2000, + "Drawable": { + "Type": "SkCircleDrawable", + "Radius": 4 + }, + "EffectCode": [ + "void effectSpawn(inout Effect effect) {", + " effect.lifetime = 2;", + " effect.rate = 200;", + "}", + "" + ], + "Code": [ + "void spawn(inout Particle p) {", + " p.lifetime = 10;", + "}", + "", + "float4x4 rx(float rad) {", + " float c = cos(rad);", + " float s = sin(rad);", + " return float4x4(1, 0, 0, 0,", + " 0, c, -s, 0,", + " 0, s, c, 0,", + " 0, 0, 0, 1);", + "}", + "", + "float4x4 ry(float rad) {", + " float c = cos(rad);", + " float s = sin(rad);", + " return float4x4(c, 0, -s, 0,", + " 0, 1, 0, 0,", + " s, 0, c, 0,", + " 0, 0, 0, 1);", + "}", + "", + "float4x4 rz(float rad) {", + " float c = cos(rad);", + " float s = sin(rad);", + " return float4x4( c, s, 0, 0,", + " -s, c, 0, 0,", + " 0, 0, 1, 0,", + " 0, 0, 0, 1);", + "}", + "", + "void update(inout Particle p) {", + " float3 pos = float3(rand, rand, rand);", + " if (rand < 0.33) {", + " if (pos.x > 0.5) {", + " pos.x = 1;", + " p.color.rgb = float3(1, 0.2, 0.2);", + " } else {", + " pos.x = 0;", + " p.color.rgb = float3(0.2, 1, 1);", + " }", + " } else if (rand < 0.5) {", + " if (pos.y > 0.5) {", + " pos.y = 1;", + " p.color.rgb = float3(0.2, 0.2, 1);", + " } else {", + " pos.y = 0;", + " p.color.rgb = float3(1, 1, 0.2);", + " }", + " } else {", + " if (pos.z > 0.5) {", + " pos.z = 1;", + " p.color.rgb = float3(0.2, 1, 0.2);", + " } else {", + " pos.z = 0;", + " p.color.rgb = float3(1, 0.2, 1);", + " }", + " }", + "", + " float s = effect.age * 2 - 1;", + " s = s < 0 ? -s : s;", + "", + " pos = pos * 2 - 1;", + " pos = mix(pos, normalize(pos), s);", + " pos = pos * 100;", + "", + " float age = effect.loop + effect.age;", + " float4x4 mat = rx(age * radians(60))", + " * ry(age * radians(70))", + " * rz(age * radians(80));", + " pos = (mat * float4(pos, 1)).xyz;", + "", + " p.pos.x = pos.x;", + " p.pos.y = pos.y;", + " p.scale = ((pos.z + 50) / 100 + 0.5) / 2;", + "}", + "" + ], + "Bindings": [] +}; + const curves = { "MaxCount": 1000, "Drawable": { diff --git a/third_party/skia/site/user/modules/skottie.md b/third_party/skia/site/user/modules/skottie.md index a46578b25948..2e89d70faee6 100644 --- a/third_party/skia/site/user/modules/skottie.md +++ b/third_party/skia/site/user/modules/skottie.md @@ -1,4 +1,4 @@ -Animation Player +Skottie - Lottie Animation Player ================ Skia now offers a performant, secure native player for JSON animations derived @@ -41,6 +41,9 @@ Here are some test samples rendering with Skia's animation player: + + + *Sample animations courtesy of the lottiefiles.com community diff --git a/third_party/skia/site/user/release/release_notes.md b/third_party/skia/site/user/release/release_notes.md index 0e1194bcb7ac..36b06bd5dd8e 100644 --- a/third_party/skia/site/user/release/release_notes.md +++ b/third_party/skia/site/user/release/release_notes.md @@ -3,18 +3,89 @@ Milestone Release Notes This page includes a list of high level updates for each milestone release. +* * * + +Milestone 79 +------------ + + * SkTextBlob::Iter to discover the glyph indices and typefaces in each run + https://review.skia.org/246296 + + * Added support for PQ and HLG transfer functions to SkColorSpace. + https://review.skia.org/249000 + + * Added new api on GrContext ComputeImageSize. This replaces the hold static helper + ComputeTextureSize. + https://review.skia.org/247337 + + * New versions of SkSurface async-rescale-and read APIs that allow client to extend + the lifetime of the result data. Old versions are deprecated. + https://review.skia.org/245457 + + * Add SkColorInfo. It's dimensionless SkImageInfo. + https://review.skia.org/245261 + + * Added SkPixmap-based createBackendTexture method to GrContext. This allows clients to create + backend resources (initialized with texture data) that Skia/Ganesh doesn't know about/track. + https://review.skia.org/244676 + + * Add explicit src and dst colorspace parameters to SkColorFilter::filterColor4f() + https://review.skia.org/244882 + + * Remove Vulkan/Metal float32 RGBA texture support + https://review.skia.org/244881 + + * Add SkSurface::MakeFromCAMetalLayer + https://review.skia.org/242563 + + * Added kAlpha_F16_SkColorType, kRG_F16_SkColorType and kRGBA_16161616_SkColorType. + This is intended to help support HDR YUV uses case (e.g., P010 and P016). As such, + the addition is focused on allowing creation of SkPixmaps and SkImages and not + SkSurfaces (i.e., who wants to render to render to these?) + https://review.skia.org/241357 + + * Start to move nested SkPath types (e.g. Direction, Verb) up to root level in SkPathTypes.h + https://review.skia.org/241079 + + * Remove isRectContour and ksNestedFillRects from public + https://review.skia.org/241078 + + * Added kRG_88_SkColorType. This is intended to help support YUV uses case (e.g., NV12). + As such, the addition is focused on allowing creation of SkPixmaps and SkImages and not + SkSurfaces (i.e., who wants to render to RG?) + https://review.skia.org/239930 + https://review.skia.org/235797 + + * Make the size of program/pipeline caches configurable via + GrContextOptions::fRuntimeProgramCacheSize + https://review.skia.org/239756 + + * Added kAlpha_16_SkColorType and kRG_1616_SkColorType. This is intended to help support HDR YUV + uses case (e.g., P010 and P016). As such, the addition is focused on allowing creation of + SkPixmaps and SkImages and not SkSurfaces (i.e., who wants to render to render to these?) + https://review.skia.org/239930 + + * Add GrContext::precompileShader to allow up-front compilation of previously-cached shaders. + https://review.skia.org/239438 + +* * * + Milestone 78 ------------ * Added RELEASE_NOTES.txt file https://review.skia.org/229760 + * SkDrawLooper is no longer supported in SkPaint or SkCanvas. https://review.skia.org/230579 https://review.skia.org/231736 + * SkPath::Iter::next() now ignores its consumDegenerates bools. Those will so go away entirely https://review.skia.org/235104 + * SkImage: new factories: DecodeToRaster, DecodeToTexture https://review.skia.org/234476 + * SkImageFilter API refactor started: - Provide new factory API in include/effects/SkImageFilters - Consolidated enum types to use SkTileMode and SkColorChannel @@ -24,43 +95,58 @@ Milestone 78 https://review.skia.org/230198 https://review.skia.org/230876 https://review.skia.org/231256 + * SkColorFilters::HSLAMatrix - new matrix color filter operating in HSLA space. https://review.skia.org/231736 + * Modify GrBackendFormat getters to not return internal pointers. Use an enum class for GL formats. https://review.skia.org/233160 + * Expose GrContext::dump() when SK_ENABLE_DUMP_GPU is defined. https://review.skia.org/233557 + * Vulkan backend now supports YCbCr sampler for I420 Vulkan images that are not backed by external images. https://review.skia.org/233776 + * Add SkCodec::SelectionPolicy for distinguishing between decoding a still image or an image sequence for a container format that has both (e.g. HEIF). https://review.skia.org/232839 + * SkImage::makeTextureImage and SkImage::MakeCrossContextFromPixmap no longer take an SkColorSpace parameter. It was unused. https://review.skia.org/234579 https://review.skia.org/234912 + * SkImage::reinterpretColorSpace - to reinterpret image contents in a new color space. https://review.skia.org/234328 + * Removed SkImage::MakeCrossContextFromEncoded. https://review.skia.org/234912 + * Add Metal support for GrFence, GrSemaphore, and GrBackendSemaphore https://review.skia.org/233416 + * SkMallocPixelRef: remove MakeDirect and MakeWithProc from API. https://review.skia.org/234660 + * Remove 4-parameter variant of SkRect::join() and intersect(), and noemptycheck variants of intersect(). https://review.skia.org/235832 https://review.skia.org/237142 + * Remove unused sk_sp comparison operators. https://review.skia.org/236942 + * Add SkColor4f variant to experimental_DrawEdgeAAQuad for SkiaRenderer. https://review.skia.org/237492 + * Deprecated maxCount resource cache limit for Ganesh. This hasn't been relevant for a long time. + * Changed GrContextOptions' fDisallowGLSLBinaryCaching to fShaderCacheStrategy, and allow caching SkSL. https://review.skia.org/238856 diff --git a/third_party/skia/src/atlastext/SkAtlasTextTarget.cpp b/third_party/skia/src/atlastext/SkAtlasTextTarget.cpp index 80ef55333311..32802f8a496b 100644 --- a/third_party/skia/src/atlastext/SkAtlasTextTarget.cpp +++ b/third_party/skia/src/atlastext/SkAtlasTextTarget.cpp @@ -218,7 +218,6 @@ void GrAtlasTextOp::finalizeForTextTarget(uint32_t color, const GrCaps& caps) { void GrAtlasTextOp::executeForTextTarget(SkAtlasTextTarget* target) { FlushInfo flushInfo; - SkExclusiveStrikePtr autoGlyphCache; auto& context = target->context()->internal(); auto glyphCache = context.grContext()->priv().getGrStrikeCache(); auto atlasManager = context.grContext()->priv().getAtlasManager(); @@ -232,10 +231,9 @@ void GrAtlasTextOp::executeForTextTarget(SkAtlasTextTarget* target) { for (int i = 0; i < fGeoCount; ++i) { // TODO4F: Preserve float colors GrTextBlob::VertexRegenerator regenerator( - resourceProvider, fGeoData[i].fBlob, fGeoData[i].fRun, fGeoData[i].fSubRun, + resourceProvider, fGeoData[i].fBlob, fGeoData[i].fSubRunPtr, fGeoData[i].fViewMatrix, fGeoData[i].fX, fGeoData[i].fY, - fGeoData[i].fColor.toBytes_RGBA(), &context, glyphCache, atlasManager, - &autoGlyphCache); + fGeoData[i].fColor.toBytes_RGBA(), &context, glyphCache, atlasManager); bool done = false; while (!done) { GrTextBlob::VertexRegenerator::Result result; diff --git a/third_party/skia/src/c/sk_surface.cpp b/third_party/skia/src/c/sk_surface.cpp index b3f203fc24fb..65fe20959c9d 100644 --- a/third_party/skia/src/c/sk_surface.cpp +++ b/third_party/skia/src/c/sk_surface.cpp @@ -56,13 +56,13 @@ static void from_c_matrix(const sk_matrix_t* cmatrix, SkMatrix* matrix) { const struct { sk_path_direction_t fC; - SkPath::Direction fSk; + SkPathDirection fSk; } gPathDirMap[] = { - { CW_SK_PATH_DIRECTION, SkPath::kCW_Direction }, - { CCW_SK_PATH_DIRECTION, SkPath::kCCW_Direction }, + { CW_SK_PATH_DIRECTION, SkPathDirection::kCW }, + { CCW_SK_PATH_DIRECTION, SkPathDirection::kCCW }, }; -static bool from_c_path_direction(sk_path_direction_t cdir, SkPath::Direction* dir) { +static bool from_c_path_direction(sk_path_direction_t cdir, SkPathDirection* dir) { for (size_t i = 0; i < SK_ARRAY_COUNT(gPathDirMap); ++i) { if (gPathDirMap[i].fC == cdir) { if (dir) { @@ -202,7 +202,7 @@ void sk_path_close(sk_path_t* cpath) { } void sk_path_add_rect(sk_path_t* cpath, const sk_rect_t* crect, sk_path_direction_t cdir) { - SkPath::Direction dir; + SkPathDirection dir; if (!from_c_path_direction(cdir, &dir)) { return; } @@ -210,7 +210,7 @@ void sk_path_add_rect(sk_path_t* cpath, const sk_rect_t* crect, sk_path_directio } void sk_path_add_oval(sk_path_t* cpath, const sk_rect_t* crect, sk_path_direction_t cdir) { - SkPath::Direction dir; + SkPathDirection dir; if (!from_c_path_direction(cdir, &dir)) { return; } diff --git a/third_party/skia/src/codec/SkCodec.cpp b/third_party/skia/src/codec/SkCodec.cpp index 4df419057448..6841adb91d69 100644 --- a/third_party/skia/src/codec/SkCodec.cpp +++ b/third_party/skia/src/codec/SkCodec.cpp @@ -26,8 +26,8 @@ #include "src/codec/SkWebpCodec.h" #ifdef SK_HAS_WUFFS_LIBRARY #include "src/codec/SkWuffsCodec.h" -#else -#include "src/codec/SkGifCodec.h" +#elif defined(SK_USE_LIBGIFCODEC) +#include "SkGifCodec.h" #endif struct DecoderProc { @@ -45,7 +45,7 @@ static std::vector* decoders() { #endif #ifdef SK_HAS_WUFFS_LIBRARY { SkWuffsCodec_IsFormat, SkWuffsCodec_MakeFromStream }, - #else + #elif defined(SK_USE_LIBGIFCODEC) { SkGifCodec::IsGif, SkGifCodec::MakeFromStream }, #endif #ifdef SK_HAS_PNG_LIBRARY diff --git a/third_party/skia/src/codec/SkGifCodec.cpp b/third_party/skia/src/codec/SkGifCodec.cpp deleted file mode 100644 index b2185d184ea1..000000000000 --- a/third_party/skia/src/codec/SkGifCodec.cpp +++ /dev/null @@ -1,533 +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. - */ - -/* - * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "include/codec/SkCodecAnimation.h" -#include "include/core/SkStream.h" -#include "include/private/SkColorData.h" -#include "src/codec/SkCodecPriv.h" -#include "src/codec/SkColorTable.h" -#include "src/codec/SkGifCodec.h" -#include "src/codec/SkSwizzler.h" -#include "src/core/SkMakeUnique.h" - -#include - -#define GIF87_STAMP "GIF87a" -#define GIF89_STAMP "GIF89a" -#define GIF_STAMP_LEN 6 - -/* - * Checks the start of the stream to see if the image is a gif - */ -bool SkGifCodec::IsGif(const void* buf, size_t bytesRead) { - if (bytesRead >= GIF_STAMP_LEN) { - if (memcmp(GIF87_STAMP, buf, GIF_STAMP_LEN) == 0 || - memcmp(GIF89_STAMP, buf, GIF_STAMP_LEN) == 0) - { - return true; - } - } - return false; -} - -/* - * Error function - */ -static SkCodec::Result gif_error(const char* msg, SkCodec::Result result = SkCodec::kInvalidInput) { - SkCodecPrintf("Gif Error: %s\n", msg); - return result; -} - -std::unique_ptr SkGifCodec::MakeFromStream(std::unique_ptr stream, - Result* result) { - std::unique_ptr reader(new SkGifImageReader(std::move(stream))); - *result = reader->parse(SkGifImageReader::SkGIFSizeQuery); - if (*result != kSuccess) { - return nullptr; - } - - // If no images are in the data, or the first header is not yet defined, we cannot - // create a codec. In either case, the width and height are not yet known. - auto* frame = reader->frameContext(0); - if (!frame || !frame->isHeaderDefined()) { - *result = kInvalidInput; - return nullptr; - } - - // isHeaderDefined() will not return true if the screen size is empty. - SkASSERT(reader->screenHeight() > 0 && reader->screenWidth() > 0); - - const auto alpha = reader->firstFrameHasAlpha() ? SkEncodedInfo::kBinary_Alpha - : SkEncodedInfo::kOpaque_Alpha; - // Use kPalette since Gifs are encoded with a color table. - // FIXME: Gifs can actually be encoded with 4-bits per pixel. Using 8 works, but we could skip - // expanding to 8 bits and take advantage of the SkSwizzler to work from 4. - auto encodedInfo = SkEncodedInfo::Make(reader->screenWidth(), reader->screenHeight(), - SkEncodedInfo::kPalette_Color, alpha, 8); - return std::unique_ptr(new SkGifCodec(std::move(encodedInfo), reader.release())); -} - -bool SkGifCodec::onRewind() { - fReader->clearDecodeState(); - return true; -} - -SkGifCodec::SkGifCodec(SkEncodedInfo&& encodedInfo, SkGifImageReader* reader) - : INHERITED(std::move(encodedInfo), skcms_PixelFormat_RGBA_8888, nullptr) - , fReader(reader) - , fTmpBuffer(nullptr) - , fSwizzler(nullptr) - , fCurrColorTable(nullptr) - , fCurrColorTableIsReal(false) - , fFilledBackground(false) - , fFirstCallToIncrementalDecode(false) - , fDst(nullptr) - , fDstRowBytes(0) - , fRowsDecoded(0) -{ - reader->setClient(this); -} - -int SkGifCodec::onGetFrameCount() { - fReader->parse(SkGifImageReader::SkGIFFrameCountQuery); - return fReader->imagesCount(); -} - -bool SkGifCodec::onGetFrameInfo(int i, SkCodec::FrameInfo* frameInfo) const { - if (i >= fReader->imagesCount()) { - return false; - } - - const SkGIFFrameContext* frameContext = fReader->frameContext(i); - SkASSERT(frameContext->reachedStartOfData()); - - if (frameInfo) { - frameInfo->fDuration = frameContext->getDuration(); - frameInfo->fRequiredFrame = frameContext->getRequiredFrame(); - frameInfo->fFullyReceived = frameContext->isComplete(); - frameInfo->fAlphaType = frameContext->hasAlpha() ? kUnpremul_SkAlphaType - : kOpaque_SkAlphaType; - frameInfo->fDisposalMethod = frameContext->getDisposalMethod(); - } - return true; -} - -int SkGifCodec::onGetRepetitionCount() { - fReader->parse(SkGifImageReader::SkGIFLoopCountQuery); - return fReader->loopCount(); -} - -static constexpr SkColorType kXformSrcColorType = kRGBA_8888_SkColorType; - -void SkGifCodec::initializeColorTable(const SkImageInfo& dstInfo, int frameIndex) { - SkColorType colorTableColorType = dstInfo.colorType(); - if (this->colorXform()) { - colorTableColorType = kXformSrcColorType; - } - - sk_sp currColorTable = fReader->getColorTable(colorTableColorType, frameIndex); - fCurrColorTableIsReal = static_cast(currColorTable); - if (!fCurrColorTableIsReal) { - // This is possible for an empty frame. Create a dummy with one value (transparent). - SkPMColor color = SK_ColorTRANSPARENT; - fCurrColorTable.reset(new SkColorTable(&color, 1)); - } else if (this->colorXform() && !this->xformOnDecode()) { - SkPMColor dstColors[256]; - this->applyColorXform(dstColors, currColorTable->readColors(), - currColorTable->count()); - fCurrColorTable.reset(new SkColorTable(dstColors, currColorTable->count())); - } else { - fCurrColorTable = std::move(currColorTable); - } -} - - -SkCodec::Result SkGifCodec::prepareToDecode(const SkImageInfo& dstInfo, const Options& opts) { - if (opts.fSubset) { - return gif_error("Subsets not supported.\n", kUnimplemented); - } - - const int frameIndex = opts.fFrameIndex; - if (frameIndex > 0 && kRGB_565_SkColorType == dstInfo.colorType()) { - // FIXME: In theory, we might be able to support this, but it's not clear that it - // is necessary (Chromium does not decode to 565, and Android does not decode - // frames beyond the first). Disabling it because it is somewhat difficult: - // - If there is a transparent pixel, and this frame draws on top of another frame - // (if the frame is independent with a transparent pixel, we should not decode to - // 565 anyway, since it is not opaque), we need to skip drawing the transparent - // pixels (see writeTransparentPixels in haveDecodedRow). We currently do this by - // first swizzling into temporary memory, then copying into the destination. (We - // let the swizzler handle it first because it may need to sample.) After - // swizzling to 565, we do not know which pixels in our temporary memory - // correspond to the transparent pixel, so we do not know what to skip. We could - // special case the non-sampled case (no need to swizzle), but as this is - // currently unused we can just not support it. - return gif_error("Cannot decode multiframe gif (except frame 0) as 565.\n", - kInvalidConversion); - } - - const auto* frame = fReader->frameContext(frameIndex); - SkASSERT(frame); - if (0 == frameIndex) { - // SkCodec does not have a way to just parse through frame 0, so we - // have to do so manually, here. - fReader->parse((SkGifImageReader::SkGIFParseQuery) 0); - if (!frame->reachedStartOfData()) { - // We have parsed enough to know that there is a color map, but cannot - // parse the map itself yet. Exit now, so we do not build an incorrect - // table. - return gif_error("color map not available yet\n", kIncompleteInput); - } - } else { - // Parsing happened in SkCodec::getPixels. - SkASSERT(frameIndex < fReader->imagesCount()); - SkASSERT(frame->reachedStartOfData()); - } - - if (this->xformOnDecode()) { - fXformBuffer.reset(new uint32_t[dstInfo.width()]); - sk_bzero(fXformBuffer.get(), dstInfo.width() * sizeof(uint32_t)); - } - - fTmpBuffer.reset(new uint8_t[dstInfo.minRowBytes()]); - - this->initializeColorTable(dstInfo, frameIndex); - this->initializeSwizzler(dstInfo, frameIndex); - - SkASSERT(fCurrColorTable); - return kSuccess; -} - -void SkGifCodec::initializeSwizzler(const SkImageInfo& dstInfo, int frameIndex) { - const SkGIFFrameContext* frame = fReader->frameContext(frameIndex); - // This is only called by prepareToDecode, which ensures frameIndex is in range. - SkASSERT(frame); - - const int xBegin = frame->xOffset(); - const int xEnd = std::min(frame->frameRect().right(), fReader->screenWidth()); - - // CreateSwizzler only reads left and right of the frame. We cannot use the frame's raw - // frameRect, since it might extend beyond the edge of the frame. - SkIRect swizzleRect = SkIRect::MakeLTRB(xBegin, 0, xEnd, 0); - - SkImageInfo swizzlerInfo = dstInfo; - if (this->colorXform()) { - swizzlerInfo = swizzlerInfo.makeColorType(kXformSrcColorType); - if (kPremul_SkAlphaType == dstInfo.alphaType()) { - swizzlerInfo = swizzlerInfo.makeAlphaType(kUnpremul_SkAlphaType); - } - } - - // The default Options should be fine: - // - we'll ignore if the memory is zero initialized - unless we're the first frame, this won't - // matter anyway. - // - subsets are not supported for gif - // - the swizzler does not need to know about the frame. - // We may not be able to use the real Options anyway, since getPixels does not store it (due to - // a bug). - fSwizzler = SkSwizzler::Make(this->getEncodedInfo(), fCurrColorTable->readColors(), - swizzlerInfo, Options(), &swizzleRect); - SkASSERT(fSwizzler.get()); -} - -/* - * Initiates the gif decode - */ -SkCodec::Result SkGifCodec::onGetPixels(const SkImageInfo& dstInfo, - void* pixels, size_t dstRowBytes, - const Options& opts, - int* rowsDecoded) { - Result result = this->prepareToDecode(dstInfo, opts); - switch (result) { - case kSuccess: - break; - case kIncompleteInput: - // onStartIncrementalDecode treats this as incomplete, since it may - // provide more data later, but in this case, no more data will be - // provided, and there is nothing to draw. We also cannot return - // kIncompleteInput, which will make SkCodec attempt to fill - // remaining rows, but that requires an SkSwizzler, which we have - // not created. - return kInvalidInput; - default: - return result; - } - - if (dstInfo.dimensions() != this->dimensions()) { - return gif_error("Scaling not supported.\n", kInvalidScale); - } - - fDst = pixels; - fDstRowBytes = dstRowBytes; - - return this->decodeFrame(true, opts, rowsDecoded); -} - -SkCodec::Result SkGifCodec::onStartIncrementalDecode(const SkImageInfo& dstInfo, - void* pixels, size_t dstRowBytes, - const SkCodec::Options& opts) { - Result result = this->prepareToDecode(dstInfo, opts); - if (result != kSuccess) { - return result; - } - - fDst = pixels; - fDstRowBytes = dstRowBytes; - - fFirstCallToIncrementalDecode = true; - - return kSuccess; -} - -SkCodec::Result SkGifCodec::onIncrementalDecode(int* rowsDecoded) { - // It is possible the client has appended more data. Parse, if needed. - const auto& options = this->options(); - const int frameIndex = options.fFrameIndex; - fReader->parse((SkGifImageReader::SkGIFParseQuery) frameIndex); - - const bool firstCallToIncrementalDecode = fFirstCallToIncrementalDecode; - fFirstCallToIncrementalDecode = false; - return this->decodeFrame(firstCallToIncrementalDecode, options, rowsDecoded); -} - -SkCodec::Result SkGifCodec::decodeFrame(bool firstAttempt, const Options& opts, int* rowsDecoded) { - const SkImageInfo& dstInfo = this->dstInfo(); - const int scaledHeight = get_scaled_dimension(dstInfo.height(), fSwizzler->sampleY()); - - const int frameIndex = opts.fFrameIndex; - SkASSERT(frameIndex < fReader->imagesCount()); - const SkGIFFrameContext* frameContext = fReader->frameContext(frameIndex); - if (firstAttempt) { - // rowsDecoded reports how many rows have been initialized, so a layer above - // can fill the rest. In some cases, we fill the background before decoding - // (or it is already filled for us), so we report rowsDecoded to be the full - // height. - bool filledBackground = false; - if (frameContext->getRequiredFrame() == kNoFrame) { - // We may need to clear to transparent for one of the following reasons: - // - The frameRect does not cover the full bounds. haveDecodedRow will - // only draw inside the frameRect, so we need to clear the rest. - // - The frame is interlaced. There is no obvious way to fill - // afterwards for an incomplete image. (FIXME: Does the first pass - // cover all rows? If so, we do not have to fill here.) - // - There is no color table for this frame. In that case will not - // draw anything, so we need to fill. - if (frameContext->frameRect() != this->bounds() - || frameContext->interlaced() || !fCurrColorTableIsReal) { - auto fillInfo = dstInfo.makeWH(fSwizzler->fillWidth(), scaledHeight); - SkSampler::Fill(fillInfo, fDst, fDstRowBytes, opts.fZeroInitialized); - filledBackground = true; - } - } else { - // Not independent. - // SkCodec ensured that the prior frame has been decoded. - filledBackground = true; - } - - fFilledBackground = filledBackground; - if (filledBackground) { - // Report the full (scaled) height, since the client will never need to fill. - fRowsDecoded = scaledHeight; - } else { - // This will be updated by haveDecodedRow. - fRowsDecoded = 0; - } - } - - if (!fCurrColorTableIsReal) { - // Nothing to draw this frame. - return kSuccess; - } - - bool frameDecoded = false; - const bool fatalError = !fReader->decode(frameIndex, &frameDecoded); - if (fatalError || !frameDecoded || fRowsDecoded != scaledHeight) { - if (rowsDecoded) { - *rowsDecoded = fRowsDecoded; - } - if (fatalError) { - return kErrorInInput; - } - return kIncompleteInput; - } - - return kSuccess; -} - -void SkGifCodec::applyXformRow(const SkImageInfo& dstInfo, void* dst, const uint8_t* src) const { - if (this->xformOnDecode()) { - SkASSERT(this->colorXform()); - fSwizzler->swizzle(fXformBuffer.get(), src); - - const int xformWidth = get_scaled_dimension(dstInfo.width(), fSwizzler->sampleX()); - this->applyColorXform(dst, fXformBuffer.get(), xformWidth); - } else { - fSwizzler->swizzle(dst, src); - } -} - -template -static void blend_line(void* dstAsVoid, const void* srcAsVoid, int width) { - T* dst = reinterpret_cast(dstAsVoid); - const T* src = reinterpret_cast(srcAsVoid); - while (width --> 0) { - if (*src != 0) { // GIF pixels are either transparent (== 0) or opaque (!= 0). - *dst = *src; - } - src++; - dst++; - } -} - -void SkGifCodec::haveDecodedRow(int frameIndex, const unsigned char* rowBegin, - int rowNumber, int repeatCount, bool writeTransparentPixels) -{ - const SkGIFFrameContext* frameContext = fReader->frameContext(frameIndex); - // The pixel data and coordinates supplied to us are relative to the frame's - // origin within the entire image size, i.e. - // (frameContext->xOffset, frameContext->yOffset). There is no guarantee - // that width == (size().width() - frameContext->xOffset), so - // we must ensure we don't run off the end of either the source data or the - // row's X-coordinates. - const int width = frameContext->width(); - const int xBegin = frameContext->xOffset(); - const int yBegin = frameContext->yOffset() + rowNumber; - const int xEnd = std::min(xBegin + width, this->dimensions().width()); - const int yEnd = std::min(yBegin + rowNumber + repeatCount, this->dimensions().height()); - // FIXME: No need to make the checks on width/xBegin/xEnd for every row. We could instead do - // this once in prepareToDecode. - if (!width || (xBegin < 0) || (yBegin < 0) || (xEnd <= xBegin) || (yEnd <= yBegin)) - return; - - // yBegin is the first row in the non-sampled image. dstRow will be the row in the output, - // after potentially scaling it. - int dstRow = yBegin; - - const int sampleY = fSwizzler->sampleY(); - if (sampleY > 1) { - // Check to see whether this row or one that falls in the repeatCount is needed in the - // output. - bool foundNecessaryRow = false; - for (int i = 0; i < repeatCount; i++) { - const int potentialRow = yBegin + i; - if (fSwizzler->rowNeeded(potentialRow)) { - dstRow = potentialRow / sampleY; - const int scaledHeight = get_scaled_dimension(this->dstInfo().height(), sampleY); - if (dstRow >= scaledHeight) { - return; - } - - foundNecessaryRow = true; - repeatCount -= i; - - repeatCount = (repeatCount - 1) / sampleY + 1; - - // Make sure the repeatCount does not take us beyond the end of the dst - if (dstRow + repeatCount > scaledHeight) { - repeatCount = scaledHeight - dstRow; - SkASSERT(repeatCount >= 1); - } - break; - } - } - - if (!foundNecessaryRow) { - return; - } - } else { - // Make sure the repeatCount does not take us beyond the end of the dst - SkASSERT(this->dstInfo().height() >= yBegin); - repeatCount = SkTMin(repeatCount, this->dstInfo().height() - yBegin); - } - - if (!fFilledBackground) { - // At this point, we are definitely going to write the row, so count it towards the number - // of rows decoded. - // We do not consider the repeatCount, which only happens for interlaced, in which case we - // have already set fRowsDecoded to the proper value (reflecting that we have filled the - // background). - fRowsDecoded++; - } - - // decodeFrame will early exit if this is false, so this method will not be - // called. - SkASSERT(fCurrColorTableIsReal); - - // The swizzler takes care of offsetting into the dst width-wise. - void* dstLine = SkTAddOffset(fDst, dstRow * fDstRowBytes); - - // We may or may not need to write transparent pixels to the buffer. - // If we're compositing against a previous image, it's wrong, but if - // we're decoding an interlaced gif and displaying it "Haeberli"-style, - // we must write these for passes beyond the first, or the initial passes - // will "show through" the later ones. - const auto dstInfo = this->dstInfo(); - if (writeTransparentPixels) { - this->applyXformRow(dstInfo, dstLine, rowBegin); - } else { - this->applyXformRow(dstInfo, fTmpBuffer.get(), rowBegin); - - size_t offsetBytes = fSwizzler->swizzleOffsetBytes(); - if (dstInfo.colorType() == kRGBA_F16_SkColorType) { - // Account for the fact that post-swizzling we converted to F16, - // which is twice as wide. - offsetBytes *= 2; - } - const void* src = SkTAddOffset(fTmpBuffer.get(), offsetBytes); - void* dst = SkTAddOffset(dstLine, offsetBytes); - - switch (dstInfo.colorType()) { - case kBGRA_8888_SkColorType: - case kRGBA_8888_SkColorType: - blend_line(dst, src, fSwizzler->swizzleWidth()); - break; - case kRGBA_F16_SkColorType: - blend_line(dst, src, fSwizzler->swizzleWidth()); - break; - default: - SkASSERT(false); - return; - } - } - - // Tell the frame to copy the row data if need be. - if (repeatCount > 1) { - const size_t bytesPerPixel = this->dstInfo().bytesPerPixel(); - const size_t bytesToCopy = fSwizzler->swizzleWidth() * bytesPerPixel; - void* copiedLine = SkTAddOffset(dstLine, fSwizzler->swizzleOffsetBytes()); - void* dst = copiedLine; - for (int i = 1; i < repeatCount; i++) { - dst = SkTAddOffset(dst, fDstRowBytes); - memcpy(dst, copiedLine, bytesToCopy); - } - } -} diff --git a/third_party/skia/src/codec/SkGifCodec.h b/third_party/skia/src/codec/SkGifCodec.h deleted file mode 100644 index 1a825fa166a2..000000000000 --- a/third_party/skia/src/codec/SkGifCodec.h +++ /dev/null @@ -1,156 +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 SkGifCodec_DEFINED -#define SkGifCodec_DEFINED - -#include "include/codec/SkCodec.h" -#include "include/codec/SkCodecAnimation.h" -#include "include/core/SkColorSpace.h" -#include "include/core/SkImageInfo.h" -#include "src/codec/SkColorTable.h" -#include "src/codec/SkSwizzler.h" - -#include "third_party/gif/SkGifImageReader.h" - -/* - * - * This class implements the decoding for gif images - * - */ -class SkGifCodec : public SkCodec { -public: - static bool IsGif(const void*, size_t); - - /* - * Assumes IsGif was called and returned true - * Reads enough of the stream to determine the image format - */ - static std::unique_ptr MakeFromStream(std::unique_ptr, Result*); - - // Callback for SkGifImageReader when a row is available. - void haveDecodedRow(int frameIndex, const unsigned char* rowBegin, - int rowNumber, int repeatCount, bool writeTransparentPixels); -protected: - /* - * Performs the full gif decode - */ - Result onGetPixels(const SkImageInfo&, void*, size_t, const Options&, - int*) override; - - SkEncodedImageFormat onGetEncodedFormat() const override { - return SkEncodedImageFormat::kGIF; - } - - bool onRewind() override; - - int onGetFrameCount() override; - bool onGetFrameInfo(int, FrameInfo*) const override; - int onGetRepetitionCount() override; - - Result onStartIncrementalDecode(const SkImageInfo& /*dstInfo*/, void*, size_t, - const SkCodec::Options&) override; - - Result onIncrementalDecode(int*) override; - - const SkFrameHolder* getFrameHolder() const override { - return fReader.get(); - } - -private: - - /* - * Initializes the color table that we will use for decoding. - * - * @param dstInfo Contains the requested dst color type. - * @param frameIndex Frame whose color table to use. - */ - void initializeColorTable(const SkImageInfo& dstInfo, int frameIndex); - - /* - * Does necessary setup, including setting up the color table and swizzler. - */ - Result prepareToDecode(const SkImageInfo& dstInfo, const Options& opts); - - /* - * Initializes the swizzler. - * - * @param dstInfo Output image information. Dimensions may have been - * adjusted if the image frame size does not match the size - * indicated in the header. - * @param frameIndex Which frame we are decoding. This determines the frameRect - * to use. - */ - void initializeSwizzler(const SkImageInfo& dstInfo, int frameIndex); - - SkSampler* getSampler(bool createIfNecessary) override { - SkASSERT(fSwizzler); - return fSwizzler.get(); - } - - /* - * Recursive function to decode a frame. - * - * @param firstAttempt Whether this is the first call to decodeFrame since - * starting. e.g. true in onGetPixels, and true in the - * first call to onIncrementalDecode after calling - * onStartIncrementalDecode. - * When true, this method may have to initialize the - * frame, for example by filling or decoding the prior - * frame. - * @param opts Options for decoding. May be different from - * this->options() for decoding prior frames. Specifies - * the frame to decode and whether the prior frame has - * already been decoded to fDst. If not, and the frame - * is not independent, this method will recursively - * decode the frame it depends on. - * @param rowsDecoded Out-parameter to report the total number of rows - * that have been decoded (or at least written to, if - * it had to fill), including rows decoded by prior - * calls to onIncrementalDecode. - * @return kSuccess if the frame is complete, kIncompleteInput - * otherwise. - */ - Result decodeFrame(bool firstAttempt, const Options& opts, int* rowsDecoded); - - /* - * Swizzles and color xforms (if necessary) into dst. - */ - void applyXformRow(const SkImageInfo& dstInfo, void* dst, const uint8_t* src) const; - - /* - * Creates an instance of the decoder - * Called only by NewFromStream - * Takes ownership of the SkGifImageReader - */ - SkGifCodec(SkEncodedInfo&&, SkGifImageReader*); - - std::unique_ptr fReader; - std::unique_ptr fTmpBuffer; - std::unique_ptr fSwizzler; - sk_sp fCurrColorTable; - // We may create a dummy table if there is not a Map in the input data. In - // that case, we set this value to false, and we can skip a lot of decoding - // work (which would not be meaningful anyway). We create a "fake"/"dummy" - // one in that case, so the client and the swizzler have something to draw. - bool fCurrColorTableIsReal; - // Whether the background was filled. - bool fFilledBackground; - // True on the first call to onIncrementalDecode. This value is passed to - // decodeFrame. - bool fFirstCallToIncrementalDecode; - - void* fDst; - size_t fDstRowBytes; - - // Updated inside haveDecodedRow when rows are decoded, unless we filled - // the background, in which case it is set once and left alone. - int fRowsDecoded; - std::unique_ptr fXformBuffer; - - typedef SkCodec INHERITED; -}; -#endif // SkGifCodec_DEFINED diff --git a/third_party/skia/src/codec/SkWuffsCodec.cpp b/third_party/skia/src/codec/SkWuffsCodec.cpp index f7ada1f548ff..ac62b20efd77 100644 --- a/third_party/skia/src/codec/SkWuffsCodec.cpp +++ b/third_party/skia/src/codec/SkWuffsCodec.cpp @@ -83,6 +83,55 @@ static SkCodecAnimation::DisposalMethod wuffs_disposal_to_skia_disposal( } } +static SkAlphaType to_alpha_type(bool opaque) { + return opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; +} + +static SkCodec::Result reset_and_decode_image_config(wuffs_gif__decoder* decoder, + wuffs_base__image_config* imgcfg, + wuffs_base__io_buffer* b, + SkStream* s) { + // Calling decoder->initialize will memset it to zero. + const char* status = decoder->initialize(sizeof__wuffs_gif__decoder(), WUFFS_VERSION, 0); + if (status != nullptr) { + SkCodecPrintf("initialize: %s", status); + return SkCodec::kInternalError; + } + while (true) { + status = decoder->decode_image_config(imgcfg, b); + if (status == nullptr) { + break; + } else if (status != wuffs_base__suspension__short_read) { + SkCodecPrintf("decode_image_config: %s", status); + return SkCodec::kErrorInInput; + } else if (!fill_buffer(b, s)) { + return SkCodec::kIncompleteInput; + } + } + + // 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; + switch (kN32_SkColorType) { + case kBGRA_8888_SkColorType: + pixfmt = WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL; + break; + case kRGBA_8888_SkColorType: + pixfmt = WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL; + break; + default: + return SkCodec::kInternalError; + } + if (imgcfg) { + imgcfg->pixcfg.set(pixfmt, WUFFS_BASE__PIXEL_SUBSAMPLING__NONE, imgcfg->pixcfg.width(), + imgcfg->pixcfg.height()); + } + + return SkCodec::kSuccess; +} + // -------------------------------- Class definitions class SkWuffsCodec; @@ -129,6 +178,7 @@ class SkWuffsCodec final : public SkScalingCodec { std::unique_ptr stream, std::unique_ptr dec, std::unique_ptr pixbuf_ptr, + bool pixbuf_zeroed, std::unique_ptr workbuf_ptr, size_t workbuf_len, wuffs_base__image_config imgcfg, @@ -138,6 +188,37 @@ class SkWuffsCodec final : public SkScalingCodec { const SkWuffsFrame* frame(int i) const; private: + // It is valid, in terms of the SkCodec API, to call SkCodec::getFrameCount + // while in an incremental decode (after onStartIncrementalDecode returns + // and before the rest of the image is decoded). Some Skia users expect + // getFrameCount to increase, and the SkStream to advance, when given more + // data. + // + // On the other hand, while in an incremental decode, the underlying Wuffs + // object is suspended in a coroutine. To keep its internal proof-of-safety + // invariants consistent, there's only two things you can safely do with a + // suspended Wuffs object: resume the coroutine, or reset all state (memset + // to zero and start again). + // + // The Wuffs API provides a limited, optional form of seeking, to the start + // of an animation frame's data, but does not provide arbitrary save and + // load of its internal state whilst in the middle of an animation frame. + // + // SkWuffsCodec therefore uses two Wuffs decoders: a primary decoder + // (kIncrDecode) to support startIncrementalDecode / incrementalDecode, and + // a secondary decoder (kFrameCount) to support getFrameCount. The two + // decoders' states can change independently. + // + // As of Wuffs version 0.2, both of these decoders have the same type. A + // future Wuffs version might let us use a different type for kFrameCount, + // one that is much lighter weight (in terms of memory requirements), as it + // doesn't have to handle decompressing pixel data. + enum WhichDecoder { + kIncrDecode, + kFrameCount, + kNumDecoders, + }; + // SkCodec overrides. SkEncodedImageFormat onGetEncodedFormat() const override; Result onGetPixels(const SkImageInfo&, void*, size_t, const Options&, int*) override; @@ -151,46 +232,55 @@ class SkWuffsCodec final : public SkScalingCodec { bool onGetFrameInfo(int, FrameInfo*) const override; int onGetRepetitionCount() override; - void readFrames(); - Result seekFrame(int frameIndex); + Result seekFrame(WhichDecoder which, int frameIndex); + + void onGetFrameCountInternal(); + Result onIncrementalDecodeInternal(int* rowsDecoded); - Result resetDecoder(); - const char* decodeFrameConfig(); - const char* decodeFrame(); - void updateNumFullyReceivedFrames(); + Result resetDecoder(WhichDecoder which); + const char* decodeFrameConfig(WhichDecoder which); + const char* decodeFrame(WhichDecoder which); + void updateNumFullyReceivedFrames(WhichDecoder which); - SkWuffsFrameHolder fFrameHolder; - std::unique_ptr fStream; - std::unique_ptr fDecoder; - std::unique_ptr fPixbufPtr; - std::unique_ptr fWorkbufPtr; - size_t fWorkbufLen; + SkWuffsFrameHolder fFrameHolder; + std::unique_ptr fStream; + std::unique_ptr fPixbufPtr; + std::unique_ptr fWorkbufPtr; + size_t fWorkbufLen; + + std::unique_ptr fDecoders[WhichDecoder::kNumDecoders]; const uint64_t fFirstFrameIOPosition; - wuffs_base__frame_config fFrameConfig; + wuffs_base__frame_config fFrameConfigs[WhichDecoder::kNumDecoders]; wuffs_base__pixel_buffer fPixelBuffer; wuffs_base__io_buffer fIOBuffer; // Incremental decoding state. uint8_t* fIncrDecDst; + uint64_t fIncrDecReaderIOPosition; size_t fIncrDecRowBytes; bool fFirstCallToIncrementalDecode; + uint64_t fFrameCountReaderIOPosition; uint64_t fNumFullyReceivedFrames; std::vector fFrames; bool fFramesComplete; - // If calling an fDecoder method returns an incomplete status, then - // fDecoder is suspended in a coroutine (i.e. waiting on I/O or halted on a - // non-recoverable error). To keep its internal proof-of-safety invariants - // consistent, there's only two things you can safely do with a suspended - // Wuffs object: resume the coroutine, or reset all state (memset to zero - // and start again). + // True if fPixelBuffer's contents are known to be already zeroed. This is + // conservative, and may be false even if the buffer is zeroed. + bool fPixbufZeroed; + + // If calling an fDecoders[which] method returns an incomplete status, then + // fDecoders[which] is suspended in a coroutine (i.e. waiting on I/O or + // halted on a non-recoverable error). To keep its internal proof-of-safety + // invariants consistent, there's only two things you can safely do with a + // suspended Wuffs object: resume the coroutine, or reset all state (memset + // to zero and start again). // - // If fDecoderIsSuspended, and we aren't sure that we're going to resume - // the coroutine, then we will need to call this->resetDecoder before - // calling other fDecoder methods. - bool fDecoderIsSuspended; + // If fDecoderIsSuspended[which], and we aren't sure that we're going to + // resume the coroutine, then we will need to call this->resetDecoder + // before calling other fDecoders[which] methods. + bool fDecoderIsSuspended[WhichDecoder::kNumDecoders]; uint8_t fBuffer[SK_WUFFS_CODEC_BUFFER_SIZE]; @@ -247,6 +337,7 @@ SkWuffsCodec::SkWuffsCodec(SkEncodedInfo&& std::unique_ptr stream, std::unique_ptr dec, std::unique_ptr pixbuf_ptr, + bool pixbuf_zeroed, std::unique_ptr workbuf_ptr, size_t workbuf_len, wuffs_base__image_config imgcfg, @@ -260,20 +351,32 @@ SkWuffsCodec::SkWuffsCodec(SkEncodedInfo&& nullptr), fFrameHolder(), fStream(std::move(stream)), - fDecoder(std::move(dec)), fPixbufPtr(std::move(pixbuf_ptr)), fWorkbufPtr(std::move(workbuf_ptr)), fWorkbufLen(workbuf_len), + fDecoders{ + std::move(dec), + std::unique_ptr(nullptr, sk_free), + }, fFirstFrameIOPosition(imgcfg.first_frame_io_position()), - fFrameConfig(wuffs_base__null_frame_config()), + fFrameConfigs{ + wuffs_base__null_frame_config(), + wuffs_base__null_frame_config(), + }, fPixelBuffer(pixbuf), fIOBuffer(wuffs_base__empty_io_buffer()), fIncrDecDst(nullptr), + fIncrDecReaderIOPosition(0), fIncrDecRowBytes(0), fFirstCallToIncrementalDecode(false), + fFrameCountReaderIOPosition(0), fNumFullyReceivedFrames(0), fFramesComplete(false), - fDecoderIsSuspended(false) { + fPixbufZeroed(pixbuf_zeroed), + fDecoderIsSuspended{ + false, + false, + } { fFrameHolder.init(this, imgcfg.pixcfg.width(), imgcfg.pixcfg.height()); // Initialize fIOBuffer's fields, copying any outstanding data from iobuf to @@ -325,12 +428,12 @@ SkCodec::Result SkWuffsCodec::onStartIncrementalDecode(const SkImageInfo& d if (options.fFrameIndex > 0 && SkColorTypeIsAlwaysOpaque(dstInfo.colorType())) { return SkCodec::kInvalidConversion; } - SkCodec::Result result = this->seekFrame(options.fFrameIndex); + SkCodec::Result result = this->seekFrame(WhichDecoder::kIncrDecode, options.fFrameIndex); if (result != SkCodec::kSuccess) { return result; } - const char* status = this->decodeFrameConfig(); + const char* status = this->decodeFrameConfig(WhichDecoder::kIncrDecode); if (status == wuffs_base__suspension__short_read) { return SkCodec::kIncompleteInput; } else if (status != nullptr) { @@ -346,33 +449,71 @@ SkCodec::Result SkWuffsCodec::onStartIncrementalDecode(const SkImageInfo& d size_t src_bytes_per_pixel = src_bits_per_pixel / 8; // Zero-initialize Wuffs' buffer covering the frame rect. - wuffs_base__rect_ie_u32 frame_rect = fFrameConfig.bounds(); - wuffs_base__table_u8 pixels = fPixelBuffer.plane(0); - for (uint32_t y = frame_rect.min_incl_y; y < frame_rect.max_excl_y; y++) { - sk_bzero(pixels.ptr + (y * pixels.stride) + (frame_rect.min_incl_x * src_bytes_per_pixel), - frame_rect.width() * src_bytes_per_pixel); + if (!fPixbufZeroed) { + wuffs_base__rect_ie_u32 frame_rect = fFrameConfigs[WhichDecoder::kIncrDecode].bounds(); + wuffs_base__table_u8 pixels = fPixelBuffer.plane(0); + + uint8_t* ptr = pixels.ptr + (frame_rect.min_incl_y * pixels.stride) + + (frame_rect.min_incl_x * src_bytes_per_pixel); + size_t len = frame_rect.width() * src_bytes_per_pixel; + + // As an optimization, issue a single sk_bzero call, if possible. + // Otherwise, zero out each row separately. + if ((len == pixels.stride) && (frame_rect.min_incl_y < frame_rect.max_excl_y)) { + sk_bzero(ptr, len * (frame_rect.max_excl_y - frame_rect.min_incl_y)); + } else { + for (uint32_t y = frame_rect.min_incl_y; y < frame_rect.max_excl_y; y++) { + sk_bzero(ptr, len); + ptr += pixels.stride; + } + } } + // The buffer is zeroed now, but this onStartIncrementalDecode call will + // almost certainly be followed by some onIncrementalDecode calls that can + // modify fPixelBuffer's contents. We set fPixbufZeroed to false so that + // the next onStartIncrementalDecode call will zero-initialize the buffer. + fPixbufZeroed = false; fIncrDecDst = static_cast(dst); + fIncrDecReaderIOPosition = fIOBuffer.reader_io_position(); fIncrDecRowBytes = rowBytes; fFirstCallToIncrementalDecode = true; return SkCodec::kSuccess; } -static SkAlphaType to_alpha_type(bool opaque) { - return opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; -} - SkCodec::Result SkWuffsCodec::onIncrementalDecode(int* rowsDecoded) { if (!fIncrDecDst) { return SkCodec::kInternalError; } + // If multiple SkCodec::incrementalDecode calls are made consecutively (or + // if SkCodec::incrementalDecode is called immediately after + // SkCodec::startIncrementalDecode), then this seek should be a no-op. + // However, it is possible to interleave SkCodec::getFrameCount calls in + // between SkCodec::incrementalDecode calls, and those other calls may + // advance the stream. This seek restores the stream to where the last + // SkCodec::startIncrementalDecode or SkCodec::incrementalDecode stopped. + if (!seek_buffer(&fIOBuffer, fStream.get(), fIncrDecReaderIOPosition)) { + return SkCodec::kInternalError; + } + + SkCodec::Result result = this->onIncrementalDecodeInternal(rowsDecoded); + if (result == SkCodec::kSuccess) { + fIncrDecDst = nullptr; + fIncrDecReaderIOPosition = 0; + fIncrDecRowBytes = 0; + } else { + fIncrDecReaderIOPosition = fIOBuffer.reader_io_position(); + } + return result; +} + +SkCodec::Result SkWuffsCodec::onIncrementalDecodeInternal(int* rowsDecoded) { SkCodec::Result result = SkCodec::kSuccess; - const char* status = this->decodeFrame(); - bool independent; - SkAlphaType alphaType; - const int index = options().fFrameIndex; + const char* status = this->decodeFrame(WhichDecoder::kIncrDecode); + bool independent; + SkAlphaType alphaType; + const int index = options().fFrameIndex; if (index == 0) { independent = true; alphaType = to_alpha_type(getEncodedInfo().opaque()); @@ -403,7 +544,7 @@ SkCodec::Result SkWuffsCodec::onIncrementalDecode(int* rowsDecoded) { } size_t src_bytes_per_pixel = src_bits_per_pixel / 8; - wuffs_base__rect_ie_u32 frame_rect = fFrameConfig.bounds(); + wuffs_base__rect_ie_u32 frame_rect = fFrameConfigs[WhichDecoder::kIncrDecode].bounds(); if (fFirstCallToIncrementalDecode) { if (frame_rect.width() > (SIZE_MAX / src_bytes_per_pixel)) { return SkCodec::kInternalError; @@ -415,8 +556,7 @@ SkCodec::Result SkWuffsCodec::onIncrementalDecode(int* rowsDecoded) { // If the frame rect does not fill the output, ensure that those pixels are not // left uninitialized. if (independent && (bounds != this->bounds() || result != kSuccess)) { - SkSampler::Fill(dstInfo(), fIncrDecDst, fIncrDecRowBytes, - options().fZeroInitialized); + SkSampler::Fill(dstInfo(), fIncrDecDst, fIncrDecRowBytes, options().fZeroInitialized); } fFirstCallToIncrementalDecode = false; } else { @@ -436,7 +576,7 @@ SkCodec::Result SkWuffsCodec::onIncrementalDecode(int* rowsDecoded) { } // If the frame's dirty rect is empty, no need to swizzle. - wuffs_base__rect_ie_u32 dirty_rect = fDecoder->frame_dirty_rect(); + wuffs_base__rect_ie_u32 dirty_rect = fDecoders[WhichDecoder::kIncrDecode]->frame_dirty_rect(); if (!dirty_rect.is_empty()) { wuffs_base__table_u8 pixels = fPixelBuffer.plane(0); @@ -446,16 +586,16 @@ SkCodec::Result SkWuffsCodec::onIncrementalDecode(int* rowsDecoded) { // // To get from the start (in the X-direction) of the image to the start // of the dirty_rect, we adjust s by (dirty_rect.min_incl_x * src_bytes_per_pixel). - uint8_t* s = pixels.ptr + (dirty_rect.min_incl_y * pixels.stride) - + (dirty_rect.min_incl_x * src_bytes_per_pixel); + uint8_t* s = pixels.ptr + (dirty_rect.min_incl_y * pixels.stride) + + (dirty_rect.min_incl_x * src_bytes_per_pixel); // Currently, this is only used for GIF, which will never have an ICC profile. When it is // used for other formats that might have one, we will need to transform from profiles that // do not have corresponding SkColorSpaces. SkASSERT(!getEncodedInfo().profile()); - auto srcInfo = getInfo().makeWH(dirty_rect.width(), dirty_rect.height()) - .makeAlphaType(alphaType); + auto srcInfo = + getInfo().makeWH(dirty_rect.width(), dirty_rect.height()).makeAlphaType(alphaType); SkBitmap src; src.installPixels(srcInfo, s, pixels.stride); SkPaint paint; @@ -475,52 +615,62 @@ SkCodec::Result SkWuffsCodec::onIncrementalDecode(int* rowsDecoded) { SkMatrix translate = SkMatrix::MakeTrans(dirty_rect.min_incl_x, dirty_rect.min_incl_y); draw.drawBitmap(src, translate, nullptr, paint); } - - if (result == SkCodec::kSuccess) { - fIncrDecDst = nullptr; - fIncrDecRowBytes = 0; - } return result; } int SkWuffsCodec::onGetFrameCount() { - // It is valid, in terms of the SkCodec API, to call SkCodec::getFrameCount - // while in an incremental decode (after onStartIncrementalDecode returns - // and before onIncrementalDecode returns kSuccess). - // - // We should not advance the SkWuffsCodec' stream while doing so, even - // though other SkCodec implementations can return increasing values from - // onGetFrameCount when given more data. If we tried to do so, the - // subsequent resume of the incremental decode would continue reading from - // a different position in the I/O stream, leading to an incorrect error. - // - // Other SkCodec implementations can move the stream forward during - // onGetFrameCount because they assume that the stream is rewindable / - // seekable. For example, an alternative GIF implementation may choose to - // store, for each frame walked past when merely counting the number of - // frames, the I/O position of each of the frame's GIF data blocks. (A GIF - // frame's compressed data can have multiple data blocks, each at most 255 - // bytes in length). Obviously, this can require O(numberOfFrames) extra - // memory to store these I/O positions. The constant factor is small, but - // it's still O(N), not O(1). - // - // Wuffs and SkWuffsCodec tries to minimize relying on the rewindable / - // seekable assumption. By design, Wuffs per se aims for O(1) memory use - // (after any pixel buffers are allocated) instead of O(N), and its I/O - // type, wuffs_base__io_buffer, is not necessarily rewindable or seekable. - // - // The Wuffs API provides a limited, optional form of seeking, to the start - // of an animation frame's data, but does not provide arbitrary save and - // load of its internal state whilst in the middle of an animation frame. - bool incrementalDecodeIsInProgress = fIncrDecDst != nullptr; - - if (!fFramesComplete && !incrementalDecodeIsInProgress) { - this->readFrames(); - this->updateNumFullyReceivedFrames(); + if (!fFramesComplete && seek_buffer(&fIOBuffer, fStream.get(), fFrameCountReaderIOPosition)) { + this->onGetFrameCountInternal(); + fFrameCountReaderIOPosition = + fDecoders[WhichDecoder::kFrameCount] ? fIOBuffer.reader_io_position() : 0; } return fFrames.size(); } +void SkWuffsCodec::onGetFrameCountInternal() { + if (!fDecoders[WhichDecoder::kFrameCount]) { + void* decoder_raw = sk_malloc_canfail(sizeof__wuffs_gif__decoder()); + if (!decoder_raw) { + return; + } + std::unique_ptr decoder( + reinterpret_cast(decoder_raw), &sk_free); + reset_and_decode_image_config(decoder.get(), nullptr, &fIOBuffer, fStream.get()); + fDecoders[WhichDecoder::kFrameCount] = std::move(decoder); + } + + // Iterate through the frames, converting from Wuffs' + // wuffs_base__frame_config type to Skia's SkWuffsFrame type. + while (true) { + const char* status = this->decodeFrameConfig(WhichDecoder::kFrameCount); + if (status == nullptr) { + // No-op. + } else if (status == wuffs_base__warning__end_of_data) { + break; + } else { + return; + } + + uint64_t i = fDecoders[WhichDecoder::kFrameCount]->num_decoded_frame_configs(); + if (i > INT_MAX) { + break; + } + if ((i == 0) || (static_cast(i - 1) != fFrames.size())) { + continue; + } + fFrames.emplace_back(&fFrameConfigs[WhichDecoder::kFrameCount]); + SkWuffsFrame* f = &fFrames[fFrames.size() - 1]; + fFrameHolder.setAlphaAndRequiredFrame(f); + } + + fFramesComplete = true; + + // We've seen the end of the animation. There'll be no more frames, so we + // no longer need the kFrameCount decoder. Releasing it earlier than the + // SkWuffsCodec destructor might help peak memory use. + fDecoders[WhichDecoder::kFrameCount].reset(nullptr); +} + bool SkWuffsCodec::onGetFrameInfo(int i, SkCodec::FrameInfo* frameInfo) const { const SkWuffsFrame* f = this->frame(i); if (!f) { @@ -537,7 +687,7 @@ int SkWuffsCodec::onGetRepetitionCount() { // number is how many times to play the loop. Skia's int number is how many // times to play the loop *after the first play*. Wuffs and Skia use 0 and // kRepetitionCountInfinite respectively to mean loop forever. - uint32_t n = fDecoder->num_animation_loops(); + uint32_t n = fDecoders[WhichDecoder::kIncrDecode]->num_animation_loops(); if (n == 0) { return SkCodec::kRepetitionCountInfinite; } @@ -545,39 +695,9 @@ int SkWuffsCodec::onGetRepetitionCount() { return n < INT_MAX ? n : INT_MAX; } -void SkWuffsCodec::readFrames() { - size_t n = fFrames.size(); - int i = n ? n - 1 : 0; - if (this->seekFrame(i) != SkCodec::kSuccess) { - return; - } - - // Iterate through the frames, converting from Wuffs' - // wuffs_base__frame_config type to Skia's SkWuffsFrame type. - for (; i < INT_MAX; i++) { - const char* status = this->decodeFrameConfig(); - if (status == nullptr) { - // No-op. - } else if (status == wuffs_base__warning__end_of_data) { - break; - } else { - return; - } - - if (static_cast(i) < fFrames.size()) { - continue; - } - fFrames.emplace_back(&fFrameConfig); - SkWuffsFrame* f = &fFrames[fFrames.size() - 1]; - fFrameHolder.setAlphaAndRequiredFrame(f); - } - - fFramesComplete = true; -} - -SkCodec::Result SkWuffsCodec::seekFrame(int frameIndex) { - if (fDecoderIsSuspended) { - SkCodec::Result res = this->resetDecoder(); +SkCodec::Result SkWuffsCodec::seekFrame(WhichDecoder which, int frameIndex) { + if (fDecoderIsSuspended[which]) { + SkCodec::Result res = this->resetDecoder(which); if (res != SkCodec::kSuccess) { return res; } @@ -597,7 +717,8 @@ SkCodec::Result SkWuffsCodec::seekFrame(int frameIndex) { if (!seek_buffer(&fIOBuffer, fStream.get(), pos)) { return SkCodec::kInternalError; } - const char* status = fDecoder->restart_frame(frameIndex, fIOBuffer.reader_io_position()); + const char* status = + fDecoders[which]->restart_frame(frameIndex, fIOBuffer.reader_io_position()); if (status != nullptr) { return SkCodec::kInternalError; } @@ -663,102 +784,58 @@ SkCodec::Result SkWuffsCodec::seekFrame(int frameIndex) { // restart_frame, call decode_image_config. The io_buffer and its associated // stream will also need to be rewound. -static SkCodec::Result reset_and_decode_image_config(wuffs_gif__decoder* decoder, - wuffs_base__image_config* imgcfg, - wuffs_base__io_buffer* b, - SkStream* s) { - // Calling decoder->initialize will memset it to zero. - const char* status = decoder->initialize(sizeof__wuffs_gif__decoder(), WUFFS_VERSION, 0); - if (status != nullptr) { - SkCodecPrintf("initialize: %s", status); - return SkCodec::kInternalError; - } - while (true) { - status = decoder->decode_image_config(imgcfg, b); - if (status == nullptr) { - break; - } else if (status != wuffs_base__suspension__short_read) { - SkCodecPrintf("decode_image_config: %s", status); - return SkCodec::kErrorInInput; - } else if (!fill_buffer(b, s)) { - return SkCodec::kIncompleteInput; - } - } - - // 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; - switch (kN32_SkColorType) { - case kBGRA_8888_SkColorType: - pixfmt = WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL; - break; - case kRGBA_8888_SkColorType: - pixfmt = WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL; - break; - default: - return SkCodec::kInternalError; - } - if (imgcfg) { - imgcfg->pixcfg.set(pixfmt, WUFFS_BASE__PIXEL_SUBSAMPLING__NONE, imgcfg->pixcfg.width(), - imgcfg->pixcfg.height()); - } - - return SkCodec::kSuccess; -} - -SkCodec::Result SkWuffsCodec::resetDecoder() { +SkCodec::Result SkWuffsCodec::resetDecoder(WhichDecoder which) { if (!fStream->rewind()) { return SkCodec::kInternalError; } fIOBuffer.meta = wuffs_base__empty_io_buffer_meta(); SkCodec::Result result = - reset_and_decode_image_config(fDecoder.get(), nullptr, &fIOBuffer, fStream.get()); + reset_and_decode_image_config(fDecoders[which].get(), nullptr, &fIOBuffer, fStream.get()); if (result == SkCodec::kIncompleteInput) { return SkCodec::kInternalError; } else if (result != SkCodec::kSuccess) { return result; } - fDecoderIsSuspended = false; + fDecoderIsSuspended[which] = false; return SkCodec::kSuccess; } -const char* SkWuffsCodec::decodeFrameConfig() { +const char* SkWuffsCodec::decodeFrameConfig(WhichDecoder which) { while (true) { - const char* status = fDecoder->decode_frame_config(&fFrameConfig, &fIOBuffer); + const char* status = + fDecoders[which]->decode_frame_config(&fFrameConfigs[which], &fIOBuffer); if ((status == wuffs_base__suspension__short_read) && fill_buffer(&fIOBuffer, fStream.get())) { continue; } - fDecoderIsSuspended = !wuffs_base__status__is_complete(status); - this->updateNumFullyReceivedFrames(); + fDecoderIsSuspended[which] = !wuffs_base__status__is_complete(status); + this->updateNumFullyReceivedFrames(which); return status; } } -const char* SkWuffsCodec::decodeFrame() { +const char* SkWuffsCodec::decodeFrame(WhichDecoder which) { while (true) { - const char* status = - fDecoder->decode_frame(&fPixelBuffer, &fIOBuffer, - wuffs_base__make_slice_u8(fWorkbufPtr.get(), fWorkbufLen), NULL); + const char* status = fDecoders[which]->decode_frame( + &fPixelBuffer, &fIOBuffer, wuffs_base__make_slice_u8(fWorkbufPtr.get(), fWorkbufLen), + NULL); if ((status == wuffs_base__suspension__short_read) && fill_buffer(&fIOBuffer, fStream.get())) { continue; } - fDecoderIsSuspended = !wuffs_base__status__is_complete(status); - this->updateNumFullyReceivedFrames(); + fDecoderIsSuspended[which] = !wuffs_base__status__is_complete(status); + this->updateNumFullyReceivedFrames(which); return status; } } -void SkWuffsCodec::updateNumFullyReceivedFrames() { +void SkWuffsCodec::updateNumFullyReceivedFrames(WhichDecoder which) { // num_decoded_frames's return value, n, can change over time, both up and // down, as we seek back and forth in the underlying stream. // fNumFullyReceivedFrames is the highest n we've seen. - uint64_t n = fDecoder->num_decoded_frames(); + uint64_t n = fDecoders[which]->num_decoded_frames(); if (fNumFullyReceivedFrames < n) { fNumFullyReceivedFrames = n; } @@ -833,8 +910,10 @@ std::unique_ptr SkWuffsCodec_MakeFromStream(std::unique_ptr s std::unique_ptr workbuf_ptr( reinterpret_cast(workbuf_ptr_raw), &sk_free); - uint64_t pixbuf_len = imgcfg.pixcfg.pixbuf_len(); - void* pixbuf_ptr_raw = pixbuf_len <= SIZE_MAX ? sk_malloc_canfail(pixbuf_len) : nullptr; + constexpr int pixbuf_sk_malloc_flags = SK_MALLOC_ZERO_INITIALIZE; + uint64_t pixbuf_len = imgcfg.pixcfg.pixbuf_len(); + void* pixbuf_ptr_raw = + pixbuf_len <= SIZE_MAX ? sk_malloc_flags(pixbuf_len, pixbuf_sk_malloc_flags) : nullptr; if (!pixbuf_ptr_raw) { *result = SkCodec::kInternalError; return nullptr; @@ -866,5 +945,6 @@ std::unique_ptr SkWuffsCodec_MakeFromStream(std::unique_ptr s *result = SkCodec::kSuccess; return std::unique_ptr(new SkWuffsCodec( std::move(encodedInfo), std::move(stream), std::move(decoder), std::move(pixbuf_ptr), - std::move(workbuf_ptr), workbuf_len, imgcfg, pixbuf, iobuf)); + (pixbuf_sk_malloc_flags & SK_MALLOC_ZERO_INITIALIZE) != 0, std::move(workbuf_ptr), + workbuf_len, imgcfg, pixbuf, iobuf)); } diff --git a/third_party/skia/src/core/SkAAClip.cpp b/third_party/skia/src/core/SkAAClip.cpp index 2f39a2445705..c33ea9510d60 100644 --- a/third_party/skia/src/core/SkAAClip.cpp +++ b/third_party/skia/src/core/SkAAClip.cpp @@ -14,7 +14,6 @@ #include "src/core/SkBlitter.h" #include "src/core/SkRectPriv.h" #include "src/core/SkScan.h" -#include "src/utils/SkUTF.h" #include #include diff --git a/third_party/skia/src/core/SkAutoPixmapStorage.cpp b/third_party/skia/src/core/SkAutoPixmapStorage.cpp index 0a63385e55ca..3e20f0c07bc3 100644 --- a/third_party/skia/src/core/SkAutoPixmapStorage.cpp +++ b/third_party/skia/src/core/SkAutoPixmapStorage.cpp @@ -14,6 +14,10 @@ SkAutoPixmapStorage::~SkAutoPixmapStorage() { this->freeStorage(); } +SkAutoPixmapStorage::SkAutoPixmapStorage(SkAutoPixmapStorage&& other) : fStorage(nullptr) { + *this = std::move(other); +} + SkAutoPixmapStorage& SkAutoPixmapStorage::operator=(SkAutoPixmapStorage&& other) { this->fStorage = other.fStorage; this->INHERITED::reset(other.info(), this->fStorage, other.rowBytes()); diff --git a/third_party/skia/src/core/SkAutoPixmapStorage.h b/third_party/skia/src/core/SkAutoPixmapStorage.h index 494e0a93f9b0..ae869c0f79d3 100644 --- a/third_party/skia/src/core/SkAutoPixmapStorage.h +++ b/third_party/skia/src/core/SkAutoPixmapStorage.h @@ -16,6 +16,8 @@ class SkAutoPixmapStorage : public SkPixmap { SkAutoPixmapStorage(); ~SkAutoPixmapStorage(); + SkAutoPixmapStorage(SkAutoPixmapStorage&& other); + /** * Leave the moved-from object in a free-but-valid state. */ diff --git a/third_party/skia/src/core/SkBitmapDevice.cpp b/third_party/skia/src/core/SkBitmapDevice.cpp index 9bf45a0fbe48..285ff54fa658 100644 --- a/third_party/skia/src/core/SkBitmapDevice.cpp +++ b/third_party/skia/src/core/SkBitmapDevice.cpp @@ -91,7 +91,7 @@ class SkDrawTiler { // fSrcBounds = devBounds.roundOut(); // The problem being that the promotion of clipR to SkRect was unreliable // - fSrcBounds = dev->ctm().mapRect(*bounds).roundOut(); + fSrcBounds = dev->localToDevice().mapRect(*bounds).roundOut(); if (fSrcBounds.intersect(clipR)) { // Check again, now that we have computed srcbounds. fNeedsTiling = fSrcBounds.right() > kMaxDim || fSrcBounds.bottom() > kMaxDim; @@ -113,7 +113,7 @@ class SkDrawTiler { } else { // don't reference fSrcBounds, as it may not have been set fDraw.fDst = fRootPixmap; - fDraw.fMatrix = &dev->ctm(); + fDraw.fMatrix = &dev->localToDevice(); fDraw.fRC = &dev->fRCStack.rc(); fOrigin.set(0, 0); @@ -165,7 +165,7 @@ class SkDrawTiler { SkASSERT_RELEASE(success); // now don't use bounds, since fDst has the clipped dimensions. - fTileMatrix = fDevice->ctm(); + fTileMatrix = fDevice->localToDevice(); fTileMatrix.postTranslate(SkIntToScalar(-fOrigin.x()), SkIntToScalar(-fOrigin.y())); fDevice->fRCStack.rc().translate(-fOrigin.x(), -fOrigin.y(), &fTileRC); fTileRC.op(SkIRect::MakeWH(fDraw.fDst.width(), fDraw.fDst.height()), @@ -192,7 +192,7 @@ class SkBitmapDevice::BDDraw : public SkDraw { // NoDrawDevice uses us (why?) so we have to catch this case w/ no pixels fDst.reset(dev->imageInfo(), nullptr, 0); } - fMatrix = &dev->ctm(); + fMatrix = &dev->localToDevice(); fRC = &dev->fRCStack.rc(); fCoverage = dev->accessCoverage(); } @@ -446,7 +446,7 @@ void SkBitmapDevice::drawBitmapRect(const SkBitmap& bitmap, } matrix.setRectToRect(tmpSrc, dst, SkMatrix::kFill_ScaleToFit); - LogDrawScaleFactor(this->ctm(), matrix, paint.getFilterQuality()); + LogDrawScaleFactor(this->localToDevice(), matrix, paint.getFilterQuality()); const SkRect* dstPtr = &dst; const SkBitmap* bitmapPtr = &bitmap; @@ -565,7 +565,8 @@ void SkBitmapDevice::drawDevice(SkBaseDevice* device, int x, int y, const SkPain // todo: can we unify with similar adjustment in SkGpuDevice? SkTCopyOnFirstWrite paint(origPaint); if (paint->getMaskFilter()) { - paint.writable()->setMaskFilter(paint->getMaskFilter()->makeWithMatrix(this->ctm())); + paint.writable()->setMaskFilter( + paint->getMaskFilter()->makeWithMatrix(this->localToDevice())); } // hack to test coverage @@ -603,20 +604,20 @@ class SkAutoDeviceClipRestore { public: SkAutoDeviceClipRestore(SkBaseDevice* device, const SkIRect& clip) : fDevice(device) - , fPrevCTM(device->ctm()) { + , fPrevLocalToDevice(device->localToDevice()) { fDevice->save(); - fDevice->setCTM(SkMatrix::I()); + fDevice->setLocalToDevice(SkMatrix::I()); fDevice->clipRect(SkRect::Make(clip), SkClipOp::kIntersect, false); - fDevice->setCTM(fPrevCTM); + fDevice->setLocalToDevice(fPrevLocalToDevice); } ~SkAutoDeviceClipRestore() { - fDevice->restore(fPrevCTM); + fDevice->restoreLocal(fPrevLocalToDevice); } private: SkBaseDevice* fDevice; - const SkMatrix fPrevCTM; + const SkMatrix fPrevLocalToDevice; }; } // anonymous ns @@ -631,7 +632,7 @@ void SkBitmapDevice::drawSpecial(SkSpecialImage* src, int x, int y, const SkPain if (SkImageFilter* filter = paint->getImageFilter()) { SkIPoint offset = SkIPoint::Make(0, 0); const SkMatrix matrix = SkMatrix::Concat( - SkMatrix::MakeTrans(SkIntToScalar(-x), SkIntToScalar(-y)), this->ctm()); + SkMatrix::MakeTrans(SkIntToScalar(-x), SkIntToScalar(-y)), this->localToDevice()); const SkIRect clipBounds = fRCStack.rc().getBounds().makeOffset(-x, -y); sk_sp cache(this->getImageFilterCache()); SkImageFilter_Base::Context ctx(matrix, clipBounds, cache.get(), fBitmap.colorType(), @@ -649,7 +650,8 @@ void SkBitmapDevice::drawSpecial(SkSpecialImage* src, int x, int y, const SkPain } if (paint->getMaskFilter()) { - paint.writable()->setMaskFilter(paint->getMaskFilter()->makeWithMatrix(this->ctm())); + paint.writable()->setMaskFilter( + paint->getMaskFilter()->makeWithMatrix(this->localToDevice())); } if (!clipImage) { @@ -666,7 +668,7 @@ void SkBitmapDevice::drawSpecial(SkSpecialImage* src, int x, int y, const SkPain return; } - const SkMatrix totalMatrix = SkMatrix::Concat(this->ctm(), clipMatrix); + 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); @@ -708,7 +710,7 @@ void SkBitmapDevice::drawSpecial(SkSpecialImage* src, int x, int y, const SkPain shaderMatrix = SkMatrix::MakeTrans(x - maskBounds.x(), y - maskBounds.y()); } - SkAutoDeviceCTMRestore adctmr(this, maskMatrix); + SkAutoDeviceTransformRestore adr(this, maskMatrix); paint.writable()->setShader(srcImage->makeShader(&shaderMatrix)); this->drawImageRect(mask.get(), nullptr, SkRect::MakeXYWH(maskBounds.x(), maskBounds.y(), @@ -756,15 +758,15 @@ void SkBitmapDevice::onRestore() { } void SkBitmapDevice::onClipRect(const SkRect& rect, SkClipOp op, bool aa) { - fRCStack.clipRect(this->ctm(), rect, op, aa); + fRCStack.clipRect(this->localToDevice(), rect, op, aa); } void SkBitmapDevice::onClipRRect(const SkRRect& rrect, SkClipOp op, bool aa) { - fRCStack.clipRRect(this->ctm(), rrect, op, aa); + fRCStack.clipRRect(this->localToDevice(), rrect, op, aa); } void SkBitmapDevice::onClipPath(const SkPath& path, SkClipOp op, bool aa) { - fRCStack.clipPath(this->ctm(), path, op, aa); + fRCStack.clipPath(this->localToDevice(), path, op, aa); } void SkBitmapDevice::onClipRegion(const SkRegion& rgn, SkClipOp op) { diff --git a/third_party/skia/src/core/SkBitmapProcState.cpp b/third_party/skia/src/core/SkBitmapProcState.cpp old mode 100644 new mode 100755 index 42ebe3a06afd..cfc2c8b94bc5 --- a/third_party/skia/src/core/SkBitmapProcState.cpp +++ b/third_party/skia/src/core/SkBitmapProcState.cpp @@ -27,8 +27,7 @@ static void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const void* sIn, int x, int y, SkPMColor* dst, int count) { const SkBitmapProcState& s = *static_cast(sIn); - SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | - SkMatrix::kScale_Mask)) == 0); + SkASSERT(s.fInvMatrix.isScaleTranslate()); SkASSERT(s.fAlphaScale == 256); const unsigned maxX = s.fPixmap.width() - 1; @@ -78,7 +77,7 @@ static void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const void* sIn, int x, static void S32_alpha_D32_nofilter_DX(const SkBitmapProcState& s, const uint32_t* xy, int count, SkPMColor* colors) { SkASSERT(count > 0 && colors != nullptr); - SkASSERT(s.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); + SkASSERT(s.fInvMatrix.isScaleTranslate()); SkASSERT(kNone_SkFilterQuality == s.fFilterQuality); SkASSERT(4 == s.fPixmap.info().bytesPerPixel()); SkASSERT(s.fAlphaScale <= 256); @@ -119,6 +118,26 @@ static void S32_alpha_D32_nofilter_DX(const SkBitmapProcState& s, } } +static void S32_alpha_D32_nofilter_DXDY(const SkBitmapProcState& s, + const uint32_t* xy, int count, SkPMColor* colors) { + SkASSERT(count > 0 && colors != nullptr); + SkASSERT(kNone_SkFilterQuality == s.fFilterQuality); + SkASSERT(4 == s.fPixmap.info().bytesPerPixel()); + SkASSERT(s.fAlphaScale <= 256); + + auto src = (const char*)s.fPixmap.addr(); + size_t rb = s.fPixmap.rowBytes(); + + while (count --> 0) { + uint32_t XY = *xy++, + x = XY & 0xffff, + y = XY >> 16; + SkASSERT(x < (unsigned)s.fPixmap.width ()); + SkASSERT(y < (unsigned)s.fPixmap.height()); + *colors++ = ((const SkPMColor*)(src + y*rb))[x]; + } +} + SkBitmapProcInfo::SkBitmapProcInfo(const SkImage_Base* image, SkTileMode tmx, SkTileMode tmy) : fImage(image) , fTileModeX(tmx) @@ -166,7 +185,8 @@ static bool valid_for_filtering(unsigned dimension) { } bool SkBitmapProcInfo::init(const SkMatrix& inv, const SkPaint& paint) { - SkASSERT(inv.isScaleTranslate()); + SkASSERT(!inv.hasPerspective()); + SkASSERT(SkOpts::S32_alpha_D32_filter_DXDY || inv.isScaleTranslate()); fPixmap.reset(); fInvMatrix = inv; @@ -180,7 +200,6 @@ bool SkBitmapProcInfo::init(const SkMatrix& inv, const SkPaint& paint) { } fPixmap = fBMState->pixmap(); fInvMatrix = fBMState->invMatrix(); - fRealInvMatrix = fBMState->invMatrix(); fPaintColor = paint.getColor(); fFilterQuality = fBMState->quality(); SkASSERT(fFilterQuality <= kLow_SkFilterQuality); @@ -218,8 +237,6 @@ bool SkBitmapProcInfo::init(const SkMatrix& inv, const SkPaint& paint) { integral_translate_only = just_trans_integral(fInvMatrix); } - fInvType = fInvMatrix.getType(); - if (kLow_SkFilterQuality == fFilterQuality && (!valid_for_filtering(fPixmap.width() | fPixmap.height()) || integral_translate_only)) { @@ -240,19 +257,18 @@ bool SkBitmapProcInfo::init(const SkMatrix& inv, const SkPaint& paint) { * and may be removed. */ bool SkBitmapProcState::chooseProcs() { - SkASSERT(fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); + SkASSERT(!fInvMatrix.hasPerspective()); + SkASSERT(SkOpts::S32_alpha_D32_filter_DXDY || fInvMatrix.isScaleTranslate()); SkASSERT(fPixmap.colorType() == kN32_SkColorType); SkASSERT(fPixmap.alphaType() == kPremul_SkAlphaType || fPixmap.alphaType() == kOpaque_SkAlphaType); - SkASSERT(fTileModeX == fTileModeY); + SkASSERT(fTileModeX != SkTileMode::kDecal); SkASSERT(fFilterQuality < kHigh_SkFilterQuality); fInvProc = SkMatrixPriv::GetMapXYProc(fInvMatrix); - fInvSx = SkScalarToFixed (fInvMatrix.getScaleX()); fInvSxFractionalInt = SkScalarToFractionalInt(fInvMatrix.getScaleX()); - fInvKy = SkScalarToFixed (fInvMatrix.getSkewY()); - fInvKyFractionalInt = SkScalarToFractionalInt(fInvMatrix.getSkewY()); + fInvKyFractionalInt = SkScalarToFractionalInt(fInvMatrix.getSkewY ()); fAlphaScale = SkAlpha255To256(SkColorGetA(fPaintColor)); @@ -260,17 +276,21 @@ bool SkBitmapProcState::chooseProcs() { fMatrixProc = this->chooseMatrixProc(translate_only); SkASSERT(fMatrixProc); - if (fFilterQuality > kNone_SkFilterQuality) { - fSampleProc32 = SkOpts::S32_alpha_D32_filter_DX; + const bool filter = fFilterQuality > kNone_SkFilterQuality; + if (fInvMatrix.isScaleTranslate()) { + fSampleProc32 = filter ? SkOpts::S32_alpha_D32_filter_DX : S32_alpha_D32_nofilter_DX ; } else { - fSampleProc32 = S32_alpha_D32_nofilter_DX; + fSampleProc32 = filter ? SkOpts::S32_alpha_D32_filter_DXDY : S32_alpha_D32_nofilter_DXDY; } + SkASSERT(fSampleProc32); // our special-case shaderprocs // TODO: move this one into chooseShaderProc32() or pull all that in here. if (fAlphaScale == 256 && fFilterQuality == kNone_SkFilterQuality - && SkTileMode::kClamp == fTileModeX) { + && SkTileMode::kClamp == fTileModeX + && SkTileMode::kClamp == fTileModeY + && fInvMatrix.isScaleTranslate()) { fShaderProc32 = Clamp_S32_opaque_D32_nofilter_DX_shaderproc; } else { fShaderProc32 = this->chooseShaderProc32(); @@ -284,8 +304,7 @@ static void Clamp_S32_D32_nofilter_trans_shaderproc(const void* sIn, SkPMColor* colors, int count) { const SkBitmapProcState& s = *static_cast(sIn); - SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); - SkASSERT(s.fInvKy == 0); + SkASSERT(s.fInvMatrix.isTranslate()); SkASSERT(count > 0 && colors != nullptr); SkASSERT(kNone_SkFilterQuality == s.fFilterQuality); @@ -347,8 +366,7 @@ static void Repeat_S32_D32_nofilter_trans_shaderproc(const void* sIn, SkPMColor* colors, int count) { const SkBitmapProcState& s = *static_cast(sIn); - SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); - SkASSERT(s.fInvKy == 0); + SkASSERT(s.fInvMatrix.isTranslate()); SkASSERT(count > 0 && colors != nullptr); SkASSERT(kNone_SkFilterQuality == s.fFilterQuality); @@ -401,8 +419,7 @@ static void S32_D32_constX_shaderproc(const void* sIn, SkPMColor* colors, int count) { const SkBitmapProcState& s = *static_cast(sIn); - SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) == 0); - SkASSERT(s.fInvKy == 0); + SkASSERT(s.fInvMatrix.isScaleTranslate()); SkASSERT(count > 0 && colors != nullptr); SkASSERT(1 == s.fPixmap.width()); @@ -422,7 +439,9 @@ static void S32_D32_constX_shaderproc(const void* sIn, } else { int yTemp; - if (s.fInvType > SkMatrix::kTranslate_Mask) { + if (s.fInvMatrix.isTranslate()) { + yTemp = s.fFilterOneY + y; + } else{ const SkBitmapProcStateAutoMapper mapper(s, x, y); // When the matrix has a scale component the setup code in @@ -434,8 +453,6 @@ static void S32_D32_constX_shaderproc(const void* sIn, } else { yTemp = mapper.intY(); } - } else { - yTemp = s.fFilterOneY + y; } const int stopY = s.fPixmap.height(); @@ -457,7 +474,7 @@ static void S32_D32_constX_shaderproc(const void* sIn, const SkBitmapProcStateAutoMapper mapper(s, x, y); int iY2; - if (s.fInvType > SkMatrix::kTranslate_Mask && + if (!s.fInvMatrix.isTranslate() && (SkTileMode::kClamp != s.fTileModeX || SkTileMode::kClamp != s.fTileModeY)) { iY2 = SkFractionalIntToInt(mapper.fractionalIntY() * s.fPixmap.height()); } else { @@ -534,11 +551,9 @@ SkBitmapProcState::ShaderProc32 SkBitmapProcState::chooseShaderProc32() { return nullptr; } - static const unsigned kMask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask; - - if (1 == fPixmap.width() && 0 == (fInvType & ~kMask)) { + if (1 == fPixmap.width() && fInvMatrix.isScaleTranslate()) { if (kNone_SkFilterQuality == fFilterQuality && - fInvType <= SkMatrix::kTranslate_Mask && + fInvMatrix.isTranslate() && !this->setupForTranslate()) { return DoNothing_shaderproc; } @@ -548,7 +563,7 @@ SkBitmapProcState::ShaderProc32 SkBitmapProcState::chooseShaderProc32() { if (fAlphaScale < 256) { return nullptr; } - if (fInvType > SkMatrix::kTranslate_Mask) { + if (!fInvMatrix.isTranslate()) { return nullptr; } if (kNone_SkFilterQuality != fFilterQuality) { @@ -603,6 +618,32 @@ static void check_scale_filter(uint32_t bitmapXY[], int count, } } +static void check_affine_nofilter(uint32_t bitmapXY[], int count, unsigned mx, unsigned my) { + for (int i = 0; i < count; ++i) { + uint32_t XY = bitmapXY[i]; + unsigned x = XY & 0xFFFF; + unsigned y = XY >> 16; + SkASSERT(x < mx); + SkASSERT(y < my); + } +} + +static void check_affine_filter(uint32_t bitmapXY[], int count, unsigned mx, unsigned my) { + for (int i = 0; i < count; ++i) { + uint32_t YY = *bitmapXY++; + unsigned y0 = YY >> 18; + unsigned y1 = YY & 0x3FFF; + SkASSERT(y0 < my); + SkASSERT(y1 < my); + + uint32_t XX = *bitmapXY++; + unsigned x0 = XX >> 18; + unsigned x1 = XX & 0x3FFF; + SkASSERT(x0 < mx); + SkASSERT(x1 < mx); + } +} + void SkBitmapProcState::DebugMatrixProc(const SkBitmapProcState& state, uint32_t bitmapXY[], int count, int x, int y) { @@ -613,11 +654,13 @@ void SkBitmapProcState::DebugMatrixProc(const SkBitmapProcState& state, void (*proc)(uint32_t bitmapXY[], int count, unsigned mx, unsigned my); - // There are two formats possible: - // filter -vs- nofilter - SkASSERT(state.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); - proc = state.fFilterQuality != kNone_SkFilterQuality ? - check_scale_filter : check_scale_nofilter; + const bool filter = state.fFilterQuality > kNone_SkFilterQuality; + if (state.fInvMatrix.isScaleTranslate()) { + proc = filter ? check_scale_filter : check_scale_nofilter; + } else { + proc = filter ? check_affine_filter : check_affine_nofilter; + } + proc(bitmapXY, count, state.fPixmap.width(), state.fPixmap.height()); } @@ -640,7 +683,7 @@ int SkBitmapProcState::maxCountForBufferSize(size_t bufferSize) const { int32_t size = static_cast(bufferSize); size &= ~3; // only care about 4-byte aligned chunks - if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) { + if (fInvMatrix.isScaleTranslate()) { size -= 4; // the shared Y (or YY) coordinate if (size < 0) { size = 0; diff --git a/third_party/skia/src/core/SkBitmapProcState.h b/third_party/skia/src/core/SkBitmapProcState.h index c1df4877409e..ebf6396c79d7 100644 --- a/third_party/skia/src/core/SkBitmapProcState.h +++ b/third_party/skia/src/core/SkBitmapProcState.h @@ -35,13 +35,10 @@ struct SkBitmapProcInfo { SkPixmap fPixmap; SkMatrix fInvMatrix; // This changes based on tile mode. - // TODO: combine fInvMatrix and fRealInvMatrix. - SkMatrix fRealInvMatrix; // The actual inverse matrix. SkColor fPaintColor; SkTileMode fTileModeX; SkTileMode fTileModeY; SkFilterQuality fFilterQuality; - SkMatrix::TypeMask fInvType; bool init(const SkMatrix& inverse, const SkPaint&); @@ -80,9 +77,6 @@ struct SkBitmapProcState : public SkBitmapProcInfo { SkFixed fFilterOneX; SkFixed fFilterOneY; - SkFixed fInvSx; // chooseProcs - SkFixed fInvKy; // chooseProcs - SkPMColor fPaintPMColor; // chooseProcs - A8 config uint16_t fAlphaScale; // chooseProcs /** Given the byte size of the index buffer to be passed to the matrix proc, diff --git a/third_party/skia/src/core/SkBitmapProcState_matrixProcs.cpp b/third_party/skia/src/core/SkBitmapProcState_matrixProcs.cpp old mode 100644 new mode 100755 index 4baa5d3a444a..0e0cd6dec6f0 --- a/third_party/skia/src/core/SkBitmapProcState_matrixProcs.cpp +++ b/third_party/skia/src/core/SkBitmapProcState_matrixProcs.cpp @@ -5,14 +5,6 @@ * found in the LICENSE file. */ -// The copyright below was added in 2009, but I see no record of moto contributions...? - -/* NEON optimized code (C) COPYRIGHT 2009 Motorola - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - #include "include/core/SkShader.h" #include "include/private/SkTo.h" #include "src/core/SkBitmapProcState.h" @@ -78,17 +70,16 @@ static void decal_nofilter_scale(uint32_t dst[], SkFixed fx, SkFixed dx, int cou } // A generic implementation for unfiltered scale+translate, templated on tiling method. -template +template static void nofilter_scale(const SkBitmapProcState& s, uint32_t xy[], int count, int x, int y) { - SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | - SkMatrix::kScale_Mask)) == 0); + SkASSERT(s.fInvMatrix.isScaleTranslate()); // Write out our 32-bit y, and get our intial fx. SkFractionalInt fx; { const SkBitmapProcStateAutoMapper mapper(s, x, y); - *xy++ = tile(mapper.fixedY(), s.fPixmap.height() - 1); + *xy++ = tiley(mapper.fixedY(), s.fPixmap.height() - 1); fx = mapper.fractionalIntX(); } @@ -113,52 +104,76 @@ static void nofilter_scale(const SkBitmapProcState& s, // Remember, each x-coordinate is 16-bit. for (; count >= 2; count -= 2) { - *xy++ = pack_two_shorts(tile(SkFractionalIntToFixed(fx ), maxX), - tile(SkFractionalIntToFixed(fx + dx), maxX)); + *xy++ = pack_two_shorts(tilex(SkFractionalIntToFixed(fx ), maxX), + tilex(SkFractionalIntToFixed(fx + dx), maxX)); fx += dx+dx; } auto xx = (uint16_t*)xy; while (count --> 0) { - *xx++ = tile(SkFractionalIntToFixed(fx), maxX); + *xx++ = tilex(SkFractionalIntToFixed(fx), maxX); fx += dx; } } +template +static void nofilter_affine(const SkBitmapProcState& s, + uint32_t xy[], int count, int x, int y) { + SkASSERT(!s.fInvMatrix.hasPerspective()); + + const SkBitmapProcStateAutoMapper mapper(s, x, y); + + SkFractionalInt fx = mapper.fractionalIntX(), + fy = mapper.fractionalIntY(), + dx = s.fInvSxFractionalInt, + dy = s.fInvKyFractionalInt; + int maxX = s.fPixmap.width () - 1, + maxY = s.fPixmap.height() - 1; + + while (count --> 0) { + *xy++ = (tiley(SkFractionalIntToFixed(fy), maxY) << 16) + | (tilex(SkFractionalIntToFixed(fx), maxX) ); + fx += dx; + fy += dy; + } +} + +// used when both tilex and tiley are clamp // Extract the high four fractional bits from fx, the lerp parameter when filtering. -static unsigned extract_low_bits_clamp(SkFixed fx, int /*max*/) { +static unsigned extract_low_bits_clamp_clamp(SkFixed fx, int /*max*/) { // If we're already scaled up to by max like clamp/decal, // just grab the high four fractional bits. return (fx >> 12) & 0xf; } -static unsigned extract_low_bits_repeat_mirror(SkFixed fx, int max) { + +//used when one of tilex and tiley is not clamp +static unsigned extract_low_bits_general(SkFixed fx, int max) { // In repeat or mirror fx is in [0,1], so scale up by max first. // TODO: remove the +1 here and the -1 at the call sites... - return extract_low_bits_clamp((fx & 0xffff) * (max+1), max); + return extract_low_bits_clamp_clamp((fx & 0xffff) * (max+1), max); +} + +template +static uint32_t pack(SkFixed f, unsigned max, SkFixed one) { + uint32_t packed = tile(f, max); // low coordinate in high bits + packed = (packed << 4) | extract_low_bits(f, max); // (lerp weight _is_ coord fractional part) + packed = (packed << 14) | tile((f + one), max); // high coordinate in low bits + return packed; } -template +template static void filter_scale(const SkBitmapProcState& s, uint32_t xy[], int count, int x, int y) { - SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | - SkMatrix::kScale_Mask)) == 0); - SkASSERT(s.fInvKy == 0); - - auto pack = [](SkFixed f, unsigned max, SkFixed one) { - unsigned i = tile(f, max); - i = (i << 4) | extract_low_bits(f, max); - return (i << 14) | (tile((f + one), max)); - }; + SkASSERT(s.fInvMatrix.isScaleTranslate()); const unsigned maxX = s.fPixmap.width() - 1; const SkFractionalInt dx = s.fInvSxFractionalInt; SkFractionalInt fx; { const SkBitmapProcStateAutoMapper mapper(s, x, y); - const SkFixed fy = mapper.fixedY(); const unsigned maxY = s.fPixmap.height() - 1; // compute our two Y values up front - *xy++ = pack(fy, maxY, s.fFilterOneY); + *xy++ = pack(mapper.fixedY(), maxY, s.fFilterOneY); // now initialize fx fx = mapper.fractionalIntX(); } @@ -178,8 +193,32 @@ static void filter_scale(const SkBitmapProcState& s, } while (count --> 0) { - SkFixed fixedFx = SkFractionalIntToFixed(fx); - *xy++ = pack(fixedFx, maxX, s.fFilterOneX); + *xy++ = pack(SkFractionalIntToFixed(fx), maxX, s.fFilterOneX); + fx += dx; + } +} + +template +static void filter_affine(const SkBitmapProcState& s, + uint32_t xy[], int count, int x, int y) { + SkASSERT(!s.fInvMatrix.hasPerspective()); + + const SkBitmapProcStateAutoMapper mapper(s, x, y); + + SkFixed oneX = s.fFilterOneX, + oneY = s.fFilterOneY; + + SkFractionalInt fx = mapper.fractionalIntX(), + fy = mapper.fractionalIntY(), + dx = s.fInvSxFractionalInt, + dy = s.fInvKyFractionalInt; + unsigned maxX = s.fPixmap.width () - 1, + maxY = s.fPixmap.height() - 1; + while (count --> 0) { + *xy++ = pack(SkFractionalIntToFixed(fy), maxY, oneY); + *xy++ = pack(SkFractionalIntToFixed(fx), maxX, oneX); + + fy += dy; fx += dx; } } @@ -190,9 +229,6 @@ static inline unsigned SK_USHIFT16(unsigned x) { return x >> 16; } -static unsigned clamp(SkFixed fx, int max) { - return SkClampMax(fx >> 16, max); -} static unsigned repeat(SkFixed fx, int max) { SkASSERT(max < 65535); return SK_USHIFT16((unsigned)(fx & 0xFFFF) * (max + 1)); @@ -206,389 +242,31 @@ static unsigned mirror(SkFixed fx, int max) { return SK_USHIFT16( ((fx ^ s) & 0xFFFF) * (max + 1) ); } -// Mirror/Mirror's always just portable code. -static const SkBitmapProcState::MatrixProc MirrorX_MirrorY_Procs[] = { - nofilter_scale, - filter_scale, -}; - -// Clamp/Clamp and Repeat/Repeat have NEON or portable implementations. -#if defined(SK_ARM_HAS_NEON) - #include - - // TODO: this is a fine drop-in for decal_nofilter_scale() generally. - static void decal_nofilter_scale_neon(uint32_t dst[], SkFixed fx, SkFixed dx, int count) { - if (count >= 8) { - // SkFixed is 16.16 fixed point - SkFixed dx8 = dx * 8; - int32x4_t vdx8 = vdupq_n_s32(dx8); - - // setup lbase and hbase - int32x4_t lbase, hbase; - lbase = vdupq_n_s32(fx); - lbase = vsetq_lane_s32(fx + dx, lbase, 1); - lbase = vsetq_lane_s32(fx + dx + dx, lbase, 2); - lbase = vsetq_lane_s32(fx + dx + dx + dx, lbase, 3); - hbase = lbase + vdupq_n_s32(4 * dx); - - do { - // store the upper 16 bits - vst1q_u32(dst, vreinterpretq_u32_s16( - vuzpq_s16(vreinterpretq_s16_s32(lbase), vreinterpretq_s16_s32(hbase)).val[1] - )); - - // on to the next group of 8 - lbase += vdx8; - hbase += vdx8; - dst += 4; // we did 8 elements but the result is twice smaller - count -= 8; - fx += dx8; - } while (count >= 8); - } - - uint16_t* xx = (uint16_t*)dst; - for (int i = count; i > 0; --i) { - *xx++ = SkToU16(fx >> 16); fx += dx; - } - } - - static void decal_filter_scale_neon(uint32_t dst[], SkFixed fx, SkFixed dx, int count) { - if (count >= 8) { - SkFixed dx8 = dx * 8; - int32x4_t vdx8 = vdupq_n_s32(dx8); - - int32x4_t wide_fx, wide_fx2; - wide_fx = vdupq_n_s32(fx); - wide_fx = vsetq_lane_s32(fx + dx, wide_fx, 1); - wide_fx = vsetq_lane_s32(fx + dx + dx, wide_fx, 2); - wide_fx = vsetq_lane_s32(fx + dx + dx + dx, wide_fx, 3); - - wide_fx2 = vaddq_s32(wide_fx, vdupq_n_s32(4 * dx)); - - while (count >= 8) { - int32x4_t wide_out; - int32x4_t wide_out2; - - wide_out = vshlq_n_s32(vshrq_n_s32(wide_fx, 12), 14); - wide_out = wide_out | (vshrq_n_s32(wide_fx,16) + vdupq_n_s32(1)); - - wide_out2 = vshlq_n_s32(vshrq_n_s32(wide_fx2, 12), 14); - wide_out2 = wide_out2 | (vshrq_n_s32(wide_fx2,16) + vdupq_n_s32(1)); - - vst1q_u32(dst, vreinterpretq_u32_s32(wide_out)); - vst1q_u32(dst+4, vreinterpretq_u32_s32(wide_out2)); - - dst += 8; - fx += dx8; - wide_fx += vdx8; - wide_fx2 += vdx8; - count -= 8; - } - } - - if (count & 1) - { - SkASSERT((fx >> (16 + 14)) == 0); - *dst++ = (fx >> 12 << 14) | ((fx >> 16) + 1); - fx += dx; - } - while ((count -= 2) >= 0) - { - SkASSERT((fx >> (16 + 14)) == 0); - *dst++ = (fx >> 12 << 14) | ((fx >> 16) + 1); - fx += dx; - - *dst++ = (fx >> 12 << 14) | ((fx >> 16) + 1); - fx += dx; - } - } - - static inline int16x8_t clamp8(int32x4_t low, int32x4_t high, unsigned max) { - int16x8_t res; - - // get the hi 16s of all those 32s - res = vuzpq_s16(vreinterpretq_s16_s32(low), vreinterpretq_s16_s32(high)).val[1]; - - // clamp - res = vmaxq_s16(res, vdupq_n_s16(0)); - res = vminq_s16(res, vdupq_n_s16(max)); - - return res; - } - - static inline int32x4_t clamp4(int32x4_t f, unsigned max) { - int32x4_t res; - - // get the hi 16s of all those 32s - res = vshrq_n_s32(f, 16); - - // clamp - res = vmaxq_s32(res, vdupq_n_s32(0)); - res = vminq_s32(res, vdupq_n_s32(max)); - - return res; - } - - static inline int32x4_t extract_low_bits_clamp4(int32x4_t fx, unsigned) { - int32x4_t ret; - - ret = vshrq_n_s32(fx, 12); - - /* We don't need the mask below because the caller will - * overwrite the non-masked bits - */ - //ret = vandq_s32(ret, vdupq_n_s32(0xF)); - - return ret; - } - - static inline int16x8_t repeat8(int32x4_t low, int32x4_t high, unsigned max) { - uint16x8_t res; - uint32x4_t tmpl, tmph; - - // get the lower 16 bits - res = vuzpq_u16(vreinterpretq_u16_s32(low), vreinterpretq_u16_s32(high)).val[0]; - - // bare multiplication, not SkFixedMul - tmpl = vmull_u16(vget_low_u16(res), vdup_n_u16(max+1)); - tmph = vmull_u16(vget_high_u16(res), vdup_n_u16(max+1)); - - // extraction of the 16 upper bits - res = vuzpq_u16(vreinterpretq_u16_u32(tmpl), vreinterpretq_u16_u32(tmph)).val[1]; - - return vreinterpretq_s16_u16(res); - } - - static inline int32x4_t repeat4(int32x4_t f, unsigned max) { - uint16x4_t res; - uint32x4_t tmp; - - // get the lower 16 bits - res = vmovn_u32(vreinterpretq_u32_s32(f)); - - // bare multiplication, not SkFixedMul - tmp = vmull_u16(res, vdup_n_u16(max+1)); - - // extraction of the 16 upper bits - tmp = vshrq_n_u32(tmp, 16); - - return vreinterpretq_s32_u32(tmp); - } - - static inline int32x4_t extract_low_bits_repeat_mirror4(int32x4_t fx, unsigned max) { - uint16x4_t res; - uint32x4_t tmp; - int32x4_t ret; - - // get the lower 16 bits - res = vmovn_u32(vreinterpretq_u32_s32(fx)); - - // bare multiplication, not SkFixedMul - tmp = vmull_u16(res, vdup_n_u16(max + 1)); - - // shift and mask - ret = vshrq_n_s32(vreinterpretq_s32_u32(tmp), 12); - - /* We don't need the mask below because the caller will - * overwrite the non-masked bits - */ - //ret = vandq_s32(ret, vdupq_n_s32(0xF)); - - return ret; - } - - template - static void nofilter_scale_neon(const SkBitmapProcState& s, - uint32_t xy[], int count, int x, int y) { - SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | - SkMatrix::kScale_Mask)) == 0); - - // we store y, x, x, x, x, x - const unsigned maxX = s.fPixmap.width() - 1; - SkFractionalInt fx; - { - const SkBitmapProcStateAutoMapper mapper(s, x, y); - const unsigned maxY = s.fPixmap.height() - 1; - *xy++ = tile(mapper.fixedY(), maxY); - fx = mapper.fractionalIntX(); - } - - if (0 == maxX) { - // all of the following X values must be 0 - memset(xy, 0, count * sizeof(uint16_t)); - return; - } - - const SkFractionalInt dx = s.fInvSxFractionalInt; - - // test if we don't need to apply the tile proc - const SkFixed fixedFx = SkFractionalIntToFixed(fx); - const SkFixed fixedDx = SkFractionalIntToFixed(dx); - if (tryDecal && can_truncate_to_fixed_for_decal(fixedFx, fixedDx, count, maxX)) { - decal_nofilter_scale_neon(xy, fixedFx, fixedDx, count); - return; - } - - if (count >= 8) { - SkFractionalInt dx2 = dx+dx; - SkFractionalInt dx4 = dx2+dx2; - SkFractionalInt dx8 = dx4+dx4; - - // now build fx/fx+dx/fx+2dx/fx+3dx - SkFractionalInt fx1, fx2, fx3; - int32x4_t lbase, hbase; - int16_t *dst16 = (int16_t *)xy; - - fx1 = fx+dx; - fx2 = fx1+dx; - fx3 = fx2+dx; - - lbase = vdupq_n_s32(SkFractionalIntToFixed(fx)); - lbase = vsetq_lane_s32(SkFractionalIntToFixed(fx1), lbase, 1); - lbase = vsetq_lane_s32(SkFractionalIntToFixed(fx2), lbase, 2); - lbase = vsetq_lane_s32(SkFractionalIntToFixed(fx3), lbase, 3); - hbase = vaddq_s32(lbase, vdupq_n_s32(SkFractionalIntToFixed(dx4))); - - // store & bump - while (count >= 8) { - - int16x8_t fx8; - - fx8 = tile8(lbase, hbase, maxX); - - vst1q_s16(dst16, fx8); - - // but preserving base & on to the next - lbase = vaddq_s32 (lbase, vdupq_n_s32(SkFractionalIntToFixed(dx8))); - hbase = vaddq_s32 (hbase, vdupq_n_s32(SkFractionalIntToFixed(dx8))); - dst16 += 8; - count -= 8; - fx += dx8; - } - xy = (uint32_t *) dst16; - } - - uint16_t* xx = (uint16_t*)xy; - for (int i = count; i > 0; --i) { - *xx++ = tile(SkFractionalIntToFixed(fx), maxX); - fx += dx; - } - } - - template - static void filter_scale_neon(const SkBitmapProcState& s, - uint32_t xy[], int count, int x, int y) { - SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | - SkMatrix::kScale_Mask)) == 0); - SkASSERT(s.fInvKy == 0); - - auto pack = [&](SkFixed f, unsigned max, SkFixed one) { - unsigned i = tile(f, max); - i = (i << 4) | extract_low_bits(f, max); - return (i << 14) | (tile((f + one), max)); - }; - - auto pack4 = [&](int32x4_t f, unsigned max, SkFixed one) { - int32x4_t ret, res; - - res = tile4(f, max); - - ret = extract_low_bits4(f, max); - ret = vsliq_n_s32(ret, res, 4); - - res = tile4(f + vdupq_n_s32(one), max); - ret = vorrq_s32(vshlq_n_s32(ret, 14), res); - - return ret; - }; - - const unsigned maxX = s.fPixmap.width() - 1; - const SkFixed one = s.fFilterOneX; - const SkFractionalInt dx = s.fInvSxFractionalInt; - SkFractionalInt fx; - - { - const SkBitmapProcStateAutoMapper mapper(s, x, y); - const SkFixed fy = mapper.fixedY(); - const unsigned maxY = s.fPixmap.height() - 1; - // compute our two Y values up front - *xy++ = pack(fy, maxY, s.fFilterOneY); - // now initialize fx - fx = mapper.fractionalIntX(); - } - - // test if we don't need to apply the tile proc - const SkFixed fixedFx = SkFractionalIntToFixed(fx); - const SkFixed fixedDx = SkFractionalIntToFixed(dx); - if (tryDecal && can_truncate_to_fixed_for_decal(fixedFx, fixedDx, count, maxX)) { - decal_filter_scale_neon(xy, fixedFx, fixedDx, count); - return; - } - - if (count >= 4) { - int32x4_t wide_fx; - - wide_fx = vdupq_n_s32(SkFractionalIntToFixed(fx)); - wide_fx = vsetq_lane_s32(SkFractionalIntToFixed(fx+dx), wide_fx, 1); - wide_fx = vsetq_lane_s32(SkFractionalIntToFixed(fx+dx+dx), wide_fx, 2); - wide_fx = vsetq_lane_s32(SkFractionalIntToFixed(fx+dx+dx+dx), wide_fx, 3); - - while (count >= 4) { - int32x4_t res; - - res = pack4(wide_fx, maxX, one); - - vst1q_u32(xy, vreinterpretq_u32_s32(res)); - - wide_fx += vdupq_n_s32(SkFractionalIntToFixed(dx+dx+dx+dx)); - fx += dx+dx+dx+dx; - xy += 4; - count -= 4; - } - } - - while (--count >= 0) { - *xy++ = pack(SkFractionalIntToFixed(fx), maxX, one); - fx += dx; - } - } - - static const SkBitmapProcState::MatrixProc ClampX_ClampY_Procs[] = { - nofilter_scale_neon, - filter_scale_neon, - }; - - static const SkBitmapProcState::MatrixProc RepeatX_RepeatY_Procs[] = { - nofilter_scale_neon, - filter_scale_neon, - }; +static unsigned clamp(SkFixed fx, int max) { + return SkClampMax(fx >> 16, max); +} -#else - static const SkBitmapProcState::MatrixProc ClampX_ClampY_Procs[] = { - nofilter_scale, - filter_scale, - }; - - static const SkBitmapProcState::MatrixProc RepeatX_RepeatY_Procs[] = { - nofilter_scale, - filter_scale, - }; +#if defined(SK_SUPPORT_LEGACY_TILED_BITMAPS) + // For use with extract_low_bits_general(), where clamp() above expects extract_low_bits_clamp_clamp() +static unsigned general_clamp(SkFixed fx, int max) +{ + return repeat(SkClampMax(fx, 0xFFFF), max); +} #endif +static const SkBitmapProcState::MatrixProc ClampX_ClampY_Procs[] = { + nofilter_scale , filter_scale , + nofilter_affine, filter_affine, +}; +static const SkBitmapProcState::MatrixProc RepeatX_RepeatY_Procs[] = { + nofilter_scale , filter_scale , + nofilter_affine, filter_affine +}; +static const SkBitmapProcState::MatrixProc MirrorX_MirrorY_Procs[] = { + nofilter_scale , filter_scale , + nofilter_affine, filter_affine, +}; + /////////////////////////////////////////////////////////////////////////////// // This next chunk has some specializations for unfiltered translate-only matrices. @@ -643,12 +321,13 @@ static void fill_backwards(uint16_t xptr[], int pos, int count) { } } +template< U16CPU (tiley)(int x, int n) > static void clampx_nofilter_trans(const SkBitmapProcState& s, uint32_t xy[], int count, int x, int y) { - SkASSERT((s.fInvType & ~SkMatrix::kTranslate_Mask) == 0); + SkASSERT(s.fInvMatrix.isTranslate()); const SkBitmapProcStateAutoMapper mapper(s, x, y); - *xy++ = int_clamp(mapper.intY(), s.fPixmap.height()); + *xy++ = tiley(mapper.intY(), s.fPixmap.height()); int xpos = mapper.intX(); const int width = s.fPixmap.width(); @@ -694,12 +373,13 @@ static void clampx_nofilter_trans(const SkBitmapProcState& s, sk_memset16(xptr, width - 1, count); } +template< U16CPU (tiley)(int x, int n) > static void repeatx_nofilter_trans(const SkBitmapProcState& s, uint32_t xy[], int count, int x, int y) { - SkASSERT((s.fInvType & ~SkMatrix::kTranslate_Mask) == 0); + SkASSERT(s.fInvMatrix.isTranslate()); const SkBitmapProcStateAutoMapper mapper(s, x, y); - *xy++ = int_repeat(mapper.intY(), s.fPixmap.height()); + *xy++ = tiley(mapper.intY(), s.fPixmap.height()); int xpos = mapper.intX(); const int width = s.fPixmap.width(); @@ -730,12 +410,13 @@ static void repeatx_nofilter_trans(const SkBitmapProcState& s, } } +template< U16CPU (tiley)(int x, int n) > static void mirrorx_nofilter_trans(const SkBitmapProcState& s, uint32_t xy[], int count, int x, int y) { - SkASSERT((s.fInvType & ~SkMatrix::kTranslate_Mask) == 0); + SkASSERT(s.fInvMatrix.isTranslate()); const SkBitmapProcStateAutoMapper mapper(s, x, y); - *xy++ = int_mirror(mapper.intY(), s.fPixmap.height()); + *xy++ = tiley(mapper.intY(), s.fPixmap.height()); int xpos = mapper.intX(); const int width = s.fPixmap.width(); @@ -790,41 +471,127 @@ static void mirrorx_nofilter_trans(const SkBitmapProcState& s, } } + +#if defined(SK_SUPPORT_LEGACY_TILED_BITMAPS) + +// below table is arranged as given below +// first special optimized translate only MatrixProcs are put for all tilex and tiley configurations +// then nofilter_scale MatrixProcs are put for all tilex and tiley configurations +// then filter_scale MatrixProcs are put for all tilex and tiley configurations +// then nofilter_affine MatrixProcs are put for all tilex and tiley configurations +// then filter_affine MatrixProcs are put for all tilex and tiley configurations +static const SkBitmapProcState::MatrixProc GeneralProcs[] = { + // below entries are configured using translateOnlyMatrixProcType + clampx_nofilter_trans, + clampx_nofilter_trans, + repeatx_nofilter_trans, + repeatx_nofilter_trans, + mirrorx_nofilter_trans, + mirrorx_nofilter_trans, + // below proc entries are configured using nofilter_scale< tilex, tiley, tryDecal > + nofilter_scale< general_clamp, repeat, false>, + nofilter_scale< general_clamp, mirror, false>, + nofilter_scale< repeat, general_clamp, false>, + nofilter_scale< repeat, mirror, false>, + nofilter_scale< mirror, general_clamp, false>, + nofilter_scale< mirror, repeat, false>, + // below proc entries are configured using filter_scale< tilex, tiley, extract_low_bits, tryDecal > + filter_scale< general_clamp, repeat, extract_low_bits_general, false>, + filter_scale< general_clamp, mirror, extract_low_bits_general, false>, + filter_scale< repeat, general_clamp, extract_low_bits_general, false>, + filter_scale< repeat, mirror, extract_low_bits_general, false>, + filter_scale< mirror, general_clamp, extract_low_bits_general, false>, + filter_scale< mirror, repeat, extract_low_bits_general, false>, + // below proc entries are configured using nofilter_affine< tilex, tiley > + nofilter_affine, + nofilter_affine, + nofilter_affine, + nofilter_affine, + nofilter_affine, + nofilter_affine, + // below proc entries are configured using filter_affine< tilex, tiley, extract_low_bits > + filter_affine< general_clamp, repeat, extract_low_bits_general>, + filter_affine< general_clamp, mirror, extract_low_bits_general>, + filter_affine< repeat, general_clamp, extract_low_bits_general>, + filter_affine< repeat, mirror, extract_low_bits_general>, + filter_affine< mirror, general_clamp, extract_low_bits_general>, + filter_affine< mirror, repeat, extract_low_bits_general>}; +#endif + /////////////////////////////////////////////////////////////////////////////// // The main entry point to the file, choosing between everything above. SkBitmapProcState::MatrixProc SkBitmapProcState::chooseMatrixProc(bool translate_only_matrix) { - SkASSERT(fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)); - SkASSERT(fTileModeX == fTileModeY); + SkASSERT(!fInvMatrix.hasPerspective()); SkASSERT(fTileModeX != SkTileMode::kDecal); - // 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); - case SkTileMode::kClamp: return clampx_nofilter_trans; - case SkTileMode::kRepeat: return repeatx_nofilter_trans; - case SkTileMode::kMirror: return mirrorx_nofilter_trans; + if( fTileModeX == fTileModeY ) { + // 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); + case SkTileMode::kClamp: return clampx_nofilter_trans; + case SkTileMode::kRepeat: return repeatx_nofilter_trans; + case SkTileMode::kMirror: return mirrorx_nofilter_trans; + } + } + + // The arrays are all [ nofilter, filter ]. + int index = fFilterQuality > kNone_SkFilterQuality ? 1 : 0; + if (!fInvMatrix.isScaleTranslate()) { + index |= 2; } + + if (fTileModeX == SkTileMode::kClamp) { + // clamp gets special version of filterOne, working in non-normalized space (allowing decal) + fFilterOneX = SK_Fixed1; + fFilterOneY = SK_Fixed1; + return ClampX_ClampY_Procs[index]; + } + + // all remaining procs use this form for filterOne, putting them into normalized space. + fFilterOneX = SK_Fixed1 / fPixmap.width(); + fFilterOneY = SK_Fixed1 / fPixmap.height(); + + if (fTileModeX == SkTileMode::kRepeat) { + return RepeatX_RepeatY_Procs[index]; + } + + return MirrorX_MirrorY_Procs[index]; + } + + +#if defined(SK_SUPPORT_LEGACY_TILED_BITMAPS) + + int index = translate_only_matrix && kNone_SkFilterQuality == fFilterQuality ? 0 : 6; + + index += ( fFilterQuality > kNone_SkFilterQuality ? 6 : 0 ); + + if (!fInvMatrix.isScaleTranslate()) { + index += 2 * 6; } - // The arrays are all [ nofilter, filter ]. - int index = fFilterQuality > kNone_SkFilterQuality ? 1 : 0; + if (fTileModeX == SkTileMode::kRepeat) { + index = index + 2; + } + else if (fTileModeX == SkTileMode::kMirror) { + index = index + 4; + } - if (fTileModeX == SkTileMode::kClamp) { - // clamp gets special version of filterOne, working in non-normalized space (allowing decal) - fFilterOneX = SK_Fixed1; - fFilterOneY = SK_Fixed1; - return ClampX_ClampY_Procs[index]; + if (fTileModeY == SkTileMode::kMirror || + (fTileModeY == SkTileMode::kRepeat && fTileModeX == SkTileMode::kMirror)) { + index += 1; } - // all remaining procs use this form for filterOne, putting them into normalized space. fFilterOneX = SK_Fixed1 / fPixmap.width(); fFilterOneY = SK_Fixed1 / fPixmap.height(); - if (fTileModeX == SkTileMode::kRepeat) { - return RepeatX_RepeatY_Procs[index]; - } + return GeneralProcs[ index ]; - return MirrorX_MirrorY_Procs[index]; +#else + + SkASSERT(fTileModeX == fTileModeY); + return nullptr; + +#endif } diff --git a/third_party/skia/src/core/SkBlendModePriv.h b/third_party/skia/src/core/SkBlendModePriv.h index c5e688adb610..b19e5659e8eb 100644 --- a/third_party/skia/src/core/SkBlendModePriv.h +++ b/third_party/skia/src/core/SkBlendModePriv.h @@ -23,23 +23,6 @@ static inline bool SkBlendMode_CaresAboutRBOrder(SkBlendMode mode) { bool SkBlendMode_ShouldPreScaleCoverage(SkBlendMode, bool rgb_coverage); void SkBlendMode_AppendStages(SkBlendMode, SkRasterPipeline*); -enum class SkBlendModeCoeff { - kZero, /** 0 */ - kOne, /** 1 */ - kSC, /** src color */ - kISC, /** inverse src color (i.e. 1 - sc) */ - kDC, /** dst color */ - kIDC, /** inverse dst color (i.e. 1 - dc) */ - kSA, /** src alpha */ - kISA, /** inverse src alpha (i.e. 1 - sa) */ - kDA, /** dst alpha */ - kIDA, /** inverse dst alpha (i.e. 1 - da) */ - - kCoeffCount -}; - -bool SkBlendMode_AsCoeff(SkBlendMode mode, SkBlendModeCoeff* src, SkBlendModeCoeff* dst); - SkPMColor4f SkBlendMode_Apply(SkBlendMode, const SkPMColor4f& src, const SkPMColor4f& dst); #if SK_SUPPORT_GPU diff --git a/third_party/skia/src/core/SkBlitter.cpp b/third_party/skia/src/core/SkBlitter.cpp index 6cebb11b22b3..41c048915aa6 100644 --- a/third_party/skia/src/core/SkBlitter.cpp +++ b/third_party/skia/src/core/SkBlitter.cpp @@ -14,7 +14,6 @@ #include "include/private/SkTo.h" #include "src/core/SkAntiRun.h" #include "src/core/SkArenaAlloc.h" -#include "src/core/SkColorSpacePriv.h" #include "src/core/SkMask.h" #include "src/core/SkMaskFilterBase.h" #include "src/core/SkPaintPriv.h" @@ -720,14 +719,10 @@ SkBlitter* SkBlitter::Choose(const SkPixmap& device, } #ifndef SK_SUPPORT_LEGACY_COLORFILTER_NO_SHADER - if (paint->getColorFilter() && !paint->getShader()) { - // apply the filter to the paint's color, and then remove the filter - auto dstCS = device.colorSpace(); - SkPaint* p = paint.writable(); - p->setColor(p->getColorFilter()->filterColor4f(p->getColor4f(), sk_srgb_singleton(), dstCS), - dstCS); - p->setColorFilter(nullptr); + if (paint->getColorFilter()) { + SkPaintPriv::RemoveColorFilter(paint.writable(), device.colorSpace()); } + SkASSERT(!paint->getColorFilter()); #endif if (drawCoverage) { diff --git a/third_party/skia/src/core/SkBlitter_RGB565.cpp b/third_party/skia/src/core/SkBlitter_RGB565.cpp index 3df8217f699e..80087a768788 100644 --- a/third_party/skia/src/core/SkBlitter_RGB565.cpp +++ b/third_party/skia/src/core/SkBlitter_RGB565.cpp @@ -10,7 +10,6 @@ #include "include/private/SkColorData.h" #include "src/core/SkCoreBlitters.h" #include "src/core/SkXfermodePriv.h" -#include "src/utils/SkUTF.h" #include "include/private/SkNx.h" diff --git a/third_party/skia/src/core/SkBlitter_Sprite.cpp b/third_party/skia/src/core/SkBlitter_Sprite.cpp index 8a309bc2f9b5..64cd4d495802 100644 --- a/third_party/skia/src/core/SkBlitter_Sprite.cpp +++ b/third_party/skia/src/core/SkBlitter_Sprite.cpp @@ -57,7 +57,7 @@ class SkSpriteBlitter_Memcpy final : public SkSpriteBlitter { public: static bool Supports(const SkPixmap& dst, const SkPixmap& src, const SkPaint& paint) { // the caller has already inspected the colorspace on src and dst - SkASSERT(!SkColorSpaceXformSteps::Required(src.colorSpace(), dst.colorSpace())); + SkASSERT(0 == SkColorSpaceXformSteps(src,dst).flags.mask()); if (dst.colorType() != src.colorType()) { return false; @@ -178,13 +178,14 @@ SkBlitter* SkBlitter::ChooseSprite(const SkPixmap& dst, const SkPaint& paint, */ SkASSERT(allocator != nullptr); + // TODO: in principle SkRasterPipelineSpriteBlitter could be made to handle this. if (source.alphaType() == kUnpremul_SkAlphaType) { return nullptr; } SkSpriteBlitter* blitter = nullptr; - if (!SkColorSpaceXformSteps::Required(source.colorSpace(), dst.colorSpace())) { + if (0 == SkColorSpaceXformSteps(source,dst).flags.mask()) { if (!blitter && SkSpriteBlitter_Memcpy::Supports(dst, source, paint)) { blitter = allocator->make(source); } diff --git a/third_party/skia/src/core/SkBlurMF.cpp b/third_party/skia/src/core/SkBlurMF.cpp index d385af8ae066..cb19ea411947 100644 --- a/third_party/skia/src/core/SkBlurMF.cpp +++ b/third_party/skia/src/core/SkBlurMF.cpp @@ -370,7 +370,7 @@ static bool draw_rects_into_mask(const SkRect rects[], int count, SkMask* mask) SkPath path; path.addRect(rects[0]); path.addRect(rects[1]); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); canvas.drawPath(path, paint); } return true; @@ -901,9 +901,8 @@ sk_sp SkBlurMaskFilterImpl::filterMaskGPU(GrRecordingContext* co if (!isNormalBlur) { GrPaint paint; // Blend pathTexture over blurTexture. - paint.addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(std::move(srcProxy), - srcColorType, - SkMatrix::I())); + paint.addCoverageFragmentProcessor( + GrSimpleTextureEffect::Make(std::move(srcProxy), srcAlphaType, SkMatrix::I())); if (kInner_SkBlurStyle == fBlurStyle) { // inner: dst = dst * src paint.setCoverageSetOpXPFactory(SkRegion::kIntersect_Op); diff --git a/third_party/skia/src/core/SkBlurMask.h b/third_party/skia/src/core/SkBlurMask.h index 55c999e4e15c..b7f790e96290 100644 --- a/third_party/skia/src/core/SkBlurMask.h +++ b/third_party/skia/src/core/SkBlurMask.h @@ -46,9 +46,9 @@ class SkBlurMask { SkBlurStyle, SkIPoint* margin = nullptr); // If radius > 0, return the corresponding sigma, else return 0 - static SkScalar SK_API ConvertRadiusToSigma(SkScalar radius); + static SkScalar SK_SPI ConvertRadiusToSigma(SkScalar radius); // If sigma > 0.5, return the corresponding radius, else return 0 - static SkScalar SK_API ConvertSigmaToRadius(SkScalar sigma); + static SkScalar SK_SPI ConvertSigmaToRadius(SkScalar sigma); /* Helper functions for analytic rectangle blurs */ diff --git a/third_party/skia/src/core/SkCanvas.cpp b/third_party/skia/src/core/SkCanvas.cpp index 1916b06d98b0..f5b772f92f68 100644 --- a/third_party/skia/src/core/SkCanvas.cpp +++ b/third_party/skia/src/core/SkCanvas.cpp @@ -54,6 +54,9 @@ #define RETURN_ON_NULL(ptr) do { if (nullptr == (ptr)) return; } while (0) #define RETURN_ON_FALSE(pred) do { if (!(pred)) return; } while (0) +// This is a test: static_assert with no message is a c++17 feature. +static_assert(true); + /////////////////////////////////////////////////////////////////////////////////////////////////// /* @@ -616,6 +619,10 @@ void SkCanvas::onFlush() { } } +SkSurface* SkCanvas::getSurface() const { + return fSurfaceBase; +} + SkISize SkCanvas::getBaseLayerSize() const { SkBaseDevice* d = this->getDevice(); return d ? SkISize::Make(d->width(), d->height()) : SkISize::Make(0, 0); @@ -1028,11 +1035,11 @@ void SkCanvas::DrawDeviceWithFilter(SkBaseDevice* src, const SkImageFilter* filt // Manually setting the device's CTM requires accounting for the device's origin. // TODO (michaelludwig) - This could be simpler if the dst device had its origin configured - // before filtering the backdrop device, and if SkAutoDeviceCTMRestore had a way to accept + // before filtering the backdrop device, and if SkAutoDeviceTransformRestore had a way to accept // a global CTM instead of a device CTM. SkMatrix dstCTM = toRoot; dstCTM.postTranslate(-dstOrigin.x(), -dstOrigin.y()); - SkAutoDeviceCTMRestore acr(dst, dstCTM); + SkAutoDeviceTransformRestore adr(dst, dstCTM); // And because devices don't have a special-image draw function that supports arbitrary // matrices, we are abusing the asImage() functionality here... @@ -2448,7 +2455,7 @@ void SkCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const S const SkPaint& pnt = draw.paint(); if (special) { SkPoint pt; - iter.fDevice->ctm().mapXY(x, y, &pt); + iter.fDevice->localToDevice().mapXY(x, y, &pt); iter.fDevice->drawSpecial(special.get(), SkScalarRoundToInt(pt.fX), SkScalarRoundToInt(pt.fY), pnt, @@ -2526,7 +2533,7 @@ void SkCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y, cons const SkPaint& pnt = draw.paint(); if (special) { SkPoint pt; - iter.fDevice->ctm().mapXY(x, y, &pt); + iter.fDevice->localToDevice().mapXY(x, y, &pt); iter.fDevice->drawSpecial(special.get(), SkScalarRoundToInt(pt.fX), SkScalarRoundToInt(pt.fY), pnt, @@ -3017,7 +3024,7 @@ SkBaseDevice* SkCanvas::LayerIter::device() const { } const SkMatrix& SkCanvas::LayerIter::matrix() const { - return fImpl->fDevice->ctm(); + return fImpl->fDevice->localToDevice(); } const SkPaint& SkCanvas::LayerIter::paint() const { diff --git a/third_party/skia/src/core/SkClipStack.cpp b/third_party/skia/src/core/SkClipStack.cpp index 9219f67b04d7..f8dad044b34e 100644 --- a/third_party/skia/src/core/SkClipStack.cpp +++ b/third_party/skia/src/core/SkClipStack.cpp @@ -129,13 +129,13 @@ void SkClipStack::Element::invertShapeFillType() { case DeviceSpaceType::kRect: fDeviceSpacePath.init(); fDeviceSpacePath.get()->addRect(this->getDeviceSpaceRect()); - fDeviceSpacePath.get()->setFillType(SkPath::kInverseEvenOdd_FillType); + fDeviceSpacePath.get()->setFillType(SkPathFillType::kInverseEvenOdd); fDeviceSpaceType = DeviceSpaceType::kPath; break; case DeviceSpaceType::kRRect: fDeviceSpacePath.init(); fDeviceSpacePath.get()->addRRect(fDeviceSpaceRRect); - fDeviceSpacePath.get()->setFillType(SkPath::kInverseEvenOdd_FillType); + fDeviceSpacePath.get()->setFillType(SkPathFillType::kInverseEvenOdd); fDeviceSpaceType = DeviceSpaceType::kPath; break; case DeviceSpaceType::kPath: @@ -752,7 +752,7 @@ bool SkClipStack::asPath(SkPath *path) const { bool isAA = false; path->reset(); - path->setFillType(SkPath::kInverseEvenOdd_FillType); + path->setFillType(SkPathFillType::kInverseEvenOdd); SkClipStack::Iter iter(*this, SkClipStack::Iter::kBottom_IterStart); while (const SkClipStack::Element* element = iter.next()) { diff --git a/third_party/skia/src/core/SkClipStackDevice.cpp b/third_party/skia/src/core/SkClipStackDevice.cpp index 72bfd1bb6ce5..673475638360 100644 --- a/third_party/skia/src/core/SkClipStackDevice.cpp +++ b/third_party/skia/src/core/SkClipStackDevice.cpp @@ -28,15 +28,15 @@ void SkClipStackDevice::onRestore() { } void SkClipStackDevice::onClipRect(const SkRect& rect, SkClipOp op, bool aa) { - fClipStack.clipRect(rect, this->ctm(), op, aa); + fClipStack.clipRect(rect, this->localToDevice(), op, aa); } void SkClipStackDevice::onClipRRect(const SkRRect& rrect, SkClipOp op, bool aa) { - fClipStack.clipRRect(rrect, this->ctm(), op, aa); + fClipStack.clipRRect(rrect, this->localToDevice(), op, aa); } void SkClipStackDevice::onClipPath(const SkPath& path, SkClipOp op, bool aa) { - fClipStack.clipPath(path, this->ctm(), op, aa); + fClipStack.clipPath(path, this->localToDevice(), op, aa); } void SkClipStackDevice::onClipRegion(const SkRegion& rgn, SkClipOp op) { diff --git a/third_party/skia/src/core/SkColorFilter.cpp b/third_party/skia/src/core/SkColorFilter.cpp index babab34a5ea3..8920bdee57a0 100644 --- a/third_party/skia/src/core/SkColorFilter.cpp +++ b/third_party/skia/src/core/SkColorFilter.cpp @@ -17,6 +17,7 @@ #include "src/core/SkColorSpaceXformSteps.h" #include "src/core/SkRasterPipeline.h" #include "src/core/SkReadBuffer.h" +#include "src/core/SkVM.h" #include "src/core/SkWriteBuffer.h" #if SK_SUPPORT_GPU @@ -43,6 +44,13 @@ bool SkColorFilter::appendStages(const SkStageRec& rec, bool shaderIsOpaque) con return this->onAppendStages(rec, shaderIsOpaque); } +bool SkColorFilter::program(skvm::Builder*, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const { + return false; +} + SkColor SkColorFilter::filterColor(SkColor c) const { // This is mostly meaningless. We should phase-out this call entirely. SkColorSpace* cs = nullptr; diff --git a/third_party/skia/src/core/SkColorFilterPriv.h b/third_party/skia/src/core/SkColorFilterPriv.h index a386e6ccb202..ca6ad35ae3f0 100644 --- a/third_party/skia/src/core/SkColorFilterPriv.h +++ b/third_party/skia/src/core/SkColorFilterPriv.h @@ -14,7 +14,7 @@ using SkRuntimeColorFilterFn = void(*)(float[4], const void*); -class SK_API SkRuntimeColorFilterFactory { +class SK_SPI SkRuntimeColorFilterFactory { public: /** * Creates a factory which creates runtime color filters. The SkSL must define a 'main' function diff --git a/third_party/skia/src/core/SkColorFilter_Matrix.cpp b/third_party/skia/src/core/SkColorFilter_Matrix.cpp index cdc15dd018a1..53368fbdf869 100644 --- a/third_party/skia/src/core/SkColorFilter_Matrix.cpp +++ b/third_party/skia/src/core/SkColorFilter_Matrix.cpp @@ -79,18 +79,76 @@ bool SkColorFilter_Matrix::onAppendStages(const SkStageRec& rec, bool shaderIsOp return true; } +bool SkColorFilter_Matrix::program(skvm::Builder* p, + SkColorSpace* /*dstCS*/, + skvm::Uniforms* uniforms, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const { + // TODO: specialize generated code on the 0/1 values of fMatrix? + if (fDomain == Domain::kRGBA) { + // Unpremul. + skvm::F32 invA = p->div(p->splat(1.0f), *a), + inf = p->bit_cast(p->splat(0x7f800000)); + + // If *a is 0, so are *r,*g,*b, so set invA to 0 to avoid 0*inf=NaN (instead 0*0 = 0). + invA = p->bit_cast(p->bit_and(p->lt(invA, inf), + p->bit_cast(invA))); + *r = p->mul(*r, invA); + *g = p->mul(*g, invA); + *b = p->mul(*b, invA); + + // Apply matrix. + skvm::Builder::Uniform u = uniforms->pushF(fMatrix, 20); + auto m = [&](int i) { return p->uniformF(u.ptr, u.offset + 4*i); }; + + skvm::F32 rgba[4]; + for (int j = 0; j < 4; j++) { + rgba[j] = m(4+j*5); + rgba[j] = p->mad(m(3+j*5), *a, rgba[j]); + rgba[j] = p->mad(m(2+j*5), *b, rgba[j]); + rgba[j] = p->mad(m(1+j*5), *g, rgba[j]); + rgba[j] = p->mad(m(0+j*5), *r, rgba[j]); + } + *r = rgba[0]; + *g = rgba[1]; + *b = rgba[2]; + *a = rgba[3]; + + // Premul. + *r = p->mul(*r, *a); + *g = p->mul(*g, *a); + *b = p->mul(*b, *a); + + return true; + } + return false; +} + #if SK_SUPPORT_GPU #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 { - if (fDomain == Domain::kHSLA) { - // TODO - return nullptr; + 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)); + } } - return GrColorMatrixFragmentProcessor::Make(fMatrix, - /* premulInput = */ true, - /* clampRGBOutput = */ true, - /* premulOutput = */ true); + + SkUNREACHABLE; } #endif @@ -109,7 +167,7 @@ sk_sp SkColorFilters::Matrix(const float array[20]) { } sk_sp SkColorFilters::Matrix(const SkColorMatrix& cm) { - return MakeMatrix(cm.fMat, SkColorFilter_Matrix::Domain::kRGBA); + return MakeMatrix(cm.fMat.data(), SkColorFilter_Matrix::Domain::kRGBA); } sk_sp SkColorFilters::HSLAMatrix(const float array[20]) { diff --git a/third_party/skia/src/core/SkColorFilter_Matrix.h b/third_party/skia/src/core/SkColorFilter_Matrix.h index 7f019882a86a..5fe5dd83d113 100644 --- a/third_party/skia/src/core/SkColorFilter_Matrix.h +++ b/third_party/skia/src/core/SkColorFilter_Matrix.h @@ -26,14 +26,17 @@ class SkColorFilter_Matrix : public SkColorFilter { static void RegisterFlattenables(); -protected: +private: void flatten(SkWriteBuffer&) const override; bool onAsAColorMatrix(float matrix[20]) const override; -private: SK_FLATTENABLE_HOOKS(SkColorFilter_Matrix) bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override; + bool program(skvm::Builder*, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const override; float fMatrix[20]; uint16_t fFlags; diff --git a/third_party/skia/src/core/SkColorSpace.cpp b/third_party/skia/src/core/SkColorSpace.cpp index 4e77d7c3ec9c..cb72953ba2d7 100644 --- a/third_party/skia/src/core/SkColorSpace.cpp +++ b/third_party/skia/src/core/SkColorSpace.cpp @@ -15,13 +15,12 @@ bool SkColorSpacePrimaries::toXYZD50(skcms_Matrix3x3* toXYZ_D50) const { return skcms_PrimariesToXYZD50(fRX, fRY, fGX, fGY, fBX, fBY, fWX, fWY, toXYZ_D50); } -SkColorSpace::SkColorSpace(const float transferFn[7], - const skcms_Matrix3x3& toXYZD50) { - memcpy(fToXYZD50_3x3, &toXYZD50.vals[0][0], 9*sizeof(float)); - fToXYZD50Hash = SkOpts::hash_fn(fToXYZD50_3x3, 9*sizeof(float), 0); - - memcpy(fTransferFn, transferFn, 7*sizeof(float)); - fTransferFnHash = SkOpts::hash_fn(fTransferFn, 7*sizeof(float), 0); +SkColorSpace::SkColorSpace(const skcms_TransferFunction& transferFn, + const skcms_Matrix3x3& toXYZD50) + : fTransferFn(transferFn) + , fToXYZD50(toXYZD50) { + fTransferFnHash = SkOpts::hash_fn(&fTransferFn, 7*sizeof(float), 0); + fToXYZD50Hash = SkOpts::hash_fn(&fToXYZD50, 9*sizeof(float), 0); } static bool xyz_almost_equal(const skcms_Matrix3x3& mA, const skcms_Matrix3x3& mB) { @@ -42,30 +41,30 @@ sk_sp SkColorSpace::MakeRGB(const skcms_TransferFunction& transfer return nullptr; } - const float* tf = &transferFn.g; + const skcms_TransferFunction* tf = &transferFn; if (is_almost_srgb(transferFn)) { if (xyz_almost_equal(toXYZ, SkNamedGamut::kSRGB)) { return SkColorSpace::MakeSRGB(); } - tf = &SkNamedTransferFn::kSRGB.g; + tf = &SkNamedTransferFn::kSRGB; } else if (is_almost_2dot2(transferFn)) { - tf = &SkNamedTransferFn::k2Dot2.g; + tf = &SkNamedTransferFn::k2Dot2; } else if (is_almost_linear(transferFn)) { if (xyz_almost_equal(toXYZ, SkNamedGamut::kSRGB)) { return SkColorSpace::MakeSRGBLinear(); } - tf = &SkNamedTransferFn::kLinear.g; + tf = &SkNamedTransferFn::kLinear; } - return sk_sp(new SkColorSpace(tf, toXYZ)); + return sk_sp(new SkColorSpace(*tf, toXYZ)); } class SkColorSpaceSingletonFactory { public: static SkColorSpace* Make(const skcms_TransferFunction& transferFn, const skcms_Matrix3x3& to_xyz) { - return new SkColorSpace(&transferFn.g, to_xyz); + return new SkColorSpace(transferFn, to_xyz); } }; @@ -94,22 +93,17 @@ void SkColorSpace::computeLazyDstFields() const { // Invert 3x3 gamut, defaulting to sRGB if we can't. { - skcms_Matrix3x3 fwd, inv; - memcpy(&fwd, fToXYZD50_3x3, 9*sizeof(float)); - if (!skcms_Matrix3x3_invert(&fwd, &inv)) { - SkAssertResult(skcms_Matrix3x3_invert(&skcms_sRGB_profile()->toXYZD50, &inv)); + if (!skcms_Matrix3x3_invert(&fToXYZD50, &fFromXYZD50)) { + SkAssertResult(skcms_Matrix3x3_invert(&skcms_sRGB_profile()->toXYZD50, + &fFromXYZD50)); } - memcpy(fFromXYZD50_3x3, &inv, 9*sizeof(float)); } // Invert transfer function, defaulting to sRGB if we can't. { - skcms_TransferFunction fwd, inv; - this->transferFn(&fwd.g); - if (!skcms_TransferFunction_invert(&fwd, &inv)) { - inv = *skcms_sRGB_Inverse_TransferFunction(); + if (!skcms_TransferFunction_invert(&fTransferFn, &fInvTransferFn)) { + fInvTransferFn = *skcms_sRGB_Inverse_TransferFunction(); } - memcpy(fInvTransferFn, &inv, 7*sizeof(float)); } }); @@ -119,7 +113,7 @@ bool SkColorSpace::isNumericalTransferFn(skcms_TransferFunction* coeffs) const { // TODO: Change transferFn/invTransferFn to just operate on skcms_TransferFunction (all callers // already pass pointers to an skcms struct). Then remove this function, and update the two // remaining callers to do the right thing with transferFn and classify. - this->transferFn(&coeffs->g); + this->transferFn(coeffs); return classify_transfer_fn(*coeffs) == sRGBish_TF; } @@ -127,32 +121,23 @@ void SkColorSpace::transferFn(float gabcdef[7]) const { memcpy(gabcdef, &fTransferFn, 7*sizeof(float)); } -void SkColorSpace::invTransferFn(float gabcdef[7]) const { - this->computeLazyDstFields(); - memcpy(gabcdef, &fInvTransferFn, 7*sizeof(float)); +void SkColorSpace::transferFn(skcms_TransferFunction* fn) const { + *fn = fTransferFn; } -bool SkColorSpace::toXYZD50(SkMatrix44* toXYZD50) const { - toXYZD50->set3x3RowMajorf(fToXYZD50_3x3); - return true; +void SkColorSpace::invTransferFn(skcms_TransferFunction* fn) const { + this->computeLazyDstFields(); + *fn = fInvTransferFn; } bool SkColorSpace::toXYZD50(skcms_Matrix3x3* toXYZD50) const { - memcpy(toXYZD50, fToXYZD50_3x3, 9*sizeof(float)); + *toXYZD50 = fToXYZD50; return true; } -void SkColorSpace::gamutTransformTo(const SkColorSpace* dst, float src_to_dst[9]) const { +void SkColorSpace::gamutTransformTo(const SkColorSpace* dst, skcms_Matrix3x3* src_to_dst) const { dst->computeLazyDstFields(); - - skcms_Matrix3x3 toXYZD50, - fromXYZD50; - - memcpy(& toXYZD50, this-> fToXYZD50_3x3, 9*sizeof(float)); - memcpy(&fromXYZD50, dst ->fFromXYZD50_3x3, 9*sizeof(float)); - - skcms_Matrix3x3 srcToDst = skcms_Matrix3x3_concat(&fromXYZD50, &toXYZD50); - memcpy(src_to_dst, &srcToDst, 9*sizeof(float)); + *src_to_dst = skcms_Matrix3x3_concat(&dst->fFromXYZD50, &fToXYZD50); } bool SkColorSpace::isSRGB() const { @@ -161,30 +146,26 @@ bool SkColorSpace::isSRGB() const { bool SkColorSpace::gammaCloseToSRGB() const { // Nearly-equal transfer functions were snapped at construction time, so just do an exact test - return memcmp(fTransferFn, &SkNamedTransferFn::kSRGB.g, 7*sizeof(float)) == 0; + return memcmp(&fTransferFn, &SkNamedTransferFn::kSRGB, 7*sizeof(float)) == 0; } bool SkColorSpace::gammaIsLinear() const { // Nearly-equal transfer functions were snapped at construction time, so just do an exact test - return memcmp(fTransferFn, &SkNamedTransferFn::kLinear.g, 7*sizeof(float)) == 0; + return memcmp(&fTransferFn, &SkNamedTransferFn::kLinear, 7*sizeof(float)) == 0; } sk_sp SkColorSpace::makeLinearGamma() const { if (this->gammaIsLinear()) { return sk_ref_sp(const_cast(this)); } - skcms_Matrix3x3 gamut; - this->toXYZD50(&gamut); - return SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, gamut); + return SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, fToXYZD50); } sk_sp SkColorSpace::makeSRGBGamma() const { if (this->gammaCloseToSRGB()) { return sk_ref_sp(const_cast(this)); } - skcms_Matrix3x3 gamut; - this->toXYZD50(&gamut); - return SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, gamut); + return SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, fToXYZD50); } sk_sp SkColorSpace::makeColorSpin() const { @@ -194,24 +175,15 @@ sk_sp SkColorSpace::makeColorSpin() const { { 0, 1, 0 }, }}; - skcms_Matrix3x3 toXYZ; - this->toXYZD50(&toXYZ); - - skcms_Matrix3x3 spun = skcms_Matrix3x3_concat(&toXYZ, &spin); + skcms_Matrix3x3 spun = skcms_Matrix3x3_concat(&fToXYZD50, &spin); return sk_sp(new SkColorSpace(fTransferFn, spun)); } void SkColorSpace::toProfile(skcms_ICCProfile* profile) const { - skcms_TransferFunction tf; - skcms_Matrix3x3 toXYZD50; - - memcpy(&tf, fTransferFn, 7*sizeof(float)); - memcpy(&toXYZD50, fToXYZD50_3x3, 9*sizeof(float)); - skcms_Init (profile); - skcms_SetTransferFunction(profile, &tf); - skcms_SetXYZD50 (profile, &toXYZD50); + skcms_SetTransferFunction(profile, &fTransferFn); + skcms_SetXYZD50 (profile, &fToXYZD50); } sk_sp SkColorSpace::Make(const skcms_ICCProfile& profile) { @@ -289,10 +261,10 @@ size_t SkColorSpace::writeToMemory(void* memory) const { *((ColorSpaceHeader*) memory) = ColorSpaceHeader(); memory = SkTAddOffset(memory, sizeof(ColorSpaceHeader)); - memcpy(memory, fTransferFn, 7 * sizeof(float)); + memcpy(memory, &fTransferFn, 7 * sizeof(float)); memory = SkTAddOffset(memory, 7 * sizeof(float)); - memcpy(memory, fToXYZD50_3x3, 9 * sizeof(float)); + memcpy(memory, &fToXYZD50, 9 * sizeof(float)); } return sizeof(ColorSpaceHeader) + 16 * sizeof(float); @@ -408,10 +380,12 @@ bool SkColorSpace::Equals(const SkColorSpace* x, const SkColorSpace* y) { if (x->hash() == y->hash()) { for (int i = 0; i < 7; i++) { - SkASSERT(x-> fTransferFn[i] == y-> fTransferFn[i] && "Hash collsion"); + SkASSERT((&x->fTransferFn.g)[i] == (&y->fTransferFn.g)[i] && "Hash collsion"); } - for (int i = 0; i < 9; i++) { - SkASSERT(x->fToXYZD50_3x3[i] == y->fToXYZD50_3x3[i] && "Hash collsion"); + for (int r = 0; r < 3; r++) { + for (int c = 0; c < 3; ++c) { + SkASSERT(x->fToXYZD50.vals[r][c] == y->fToXYZD50.vals[r][c] && "Hash collsion"); + } } return true; } diff --git a/third_party/skia/src/core/SkColorSpacePriv.h b/third_party/skia/src/core/SkColorSpacePriv.h index 425357db7bfe..2e8728ca6b06 100644 --- a/third_party/skia/src/core/SkColorSpacePriv.h +++ b/third_party/skia/src/core/SkColorSpacePriv.h @@ -41,10 +41,10 @@ enum TFKind { Bad_TF, sRGBish_TF, PQish_TF, HLGish_TF, HLGinvish_TF }; static inline TFKind classify_transfer_fn(const skcms_TransferFunction& tf) { if (tf.g < 0 && (int)tf.g == tf.g) { // TODO: sanity checks for PQ/HLG like we do for sRGBish. - switch (-(int)tf.g) { - case PQish_TF: return PQish_TF; - case HLGish_TF: return HLGish_TF; - case HLGinvish_TF: return HLGinvish_TF; + switch ((int)tf.g) { + case -PQish_TF: return PQish_TF; + case -HLGish_TF: return HLGish_TF; + case -HLGinvish_TF: return HLGinvish_TF; } return Bad_TF; } diff --git a/third_party/skia/src/core/SkColorSpaceXform.cpp b/third_party/skia/src/core/SkColorSpaceXform.cpp deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/core/SkColorSpaceXformSteps.cpp b/third_party/skia/src/core/SkColorSpaceXformSteps.cpp index fe03bca043f4..37f93643be4f 100644 --- a/third_party/skia/src/core/SkColorSpaceXformSteps.cpp +++ b/third_party/skia/src/core/SkColorSpaceXformSteps.cpp @@ -12,14 +12,6 @@ // TODO(mtklein): explain the logic of this file -bool SkColorSpaceXformSteps::Required(SkColorSpace* src, SkColorSpace* dst) { - // Any SkAlphaType will work fine here as long as we use the same one. - SkAlphaType at = kPremul_SkAlphaType; - return 0 != SkColorSpaceXformSteps(src, at, - dst, at).flags.mask(); - // TODO(mtklein): quicker impl. that doesn't construct an SkColorSpaceXformSteps? -} - SkColorSpaceXformSteps::SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType srcAT, SkColorSpace* dst, SkAlphaType dstAT) { // Opaque outputs are treated as the same alpha type as the source input. @@ -45,20 +37,20 @@ SkColorSpaceXformSteps::SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType sr this->flags.premul = srcAT != kOpaque_SkAlphaType && dstAT == kPremul_SkAlphaType; if (this->flags.gamut_transform) { - float row_major[9]; // TODO: switch src_to_dst_matrix to row-major - src->gamutTransformTo(dst, row_major); + skcms_Matrix3x3 src_to_dst; // TODO: switch src_to_dst_matrix to row-major + src->gamutTransformTo(dst, &src_to_dst); - this->src_to_dst_matrix[0] = row_major[0]; - this->src_to_dst_matrix[1] = row_major[3]; - this->src_to_dst_matrix[2] = row_major[6]; + this->src_to_dst_matrix[0] = src_to_dst.vals[0][0]; + this->src_to_dst_matrix[1] = src_to_dst.vals[1][0]; + this->src_to_dst_matrix[2] = src_to_dst.vals[2][0]; - this->src_to_dst_matrix[3] = row_major[1]; - this->src_to_dst_matrix[4] = row_major[4]; - this->src_to_dst_matrix[5] = row_major[7]; + this->src_to_dst_matrix[3] = src_to_dst.vals[0][1]; + this->src_to_dst_matrix[4] = src_to_dst.vals[1][1]; + this->src_to_dst_matrix[5] = src_to_dst.vals[2][1]; - this->src_to_dst_matrix[6] = row_major[2]; - this->src_to_dst_matrix[7] = row_major[5]; - this->src_to_dst_matrix[8] = row_major[8]; + this->src_to_dst_matrix[6] = src_to_dst.vals[0][2]; + this->src_to_dst_matrix[7] = src_to_dst.vals[1][2]; + this->src_to_dst_matrix[8] = src_to_dst.vals[2][2]; } else { #ifdef SK_DEBUG skcms_Matrix3x3 srcM, dstM; @@ -69,8 +61,8 @@ SkColorSpaceXformSteps::SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType sr } // Fill out all the transfer functions we'll use. - src-> transferFn(&this->srcTF .g); - dst->invTransferFn(&this->dstTFInv.g); + src-> transferFn(&this->srcTF ); + dst->invTransferFn(&this->dstTFInv); this->srcTF_is_sRGB = src->gammaCloseToSRGB(); this->dstTF_is_sRGB = dst->gammaCloseToSRGB(); @@ -82,10 +74,10 @@ SkColorSpaceXformSteps::SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType sr src->transferFnHash() == dst->transferFnHash()) { #ifdef SK_DEBUG - float dstTF[7]; - dst->transferFn(dstTF); + skcms_TransferFunction dstTF; + dst->transferFn(&dstTF); for (int i = 0; i < 7; i++) { - SkASSERT( (&srcTF.g)[i] == dstTF[i] && "Hash collision" ); + SkASSERT( (&srcTF.g)[i] == (&dstTF.g)[i] && "Hash collision" ); } #endif this->flags.linearize = false; diff --git a/third_party/skia/src/core/SkColorSpaceXformSteps.h b/third_party/skia/src/core/SkColorSpaceXformSteps.h index 1a1564383943..e470885cc6f5 100644 --- a/third_party/skia/src/core/SkColorSpaceXformSteps.h +++ b/third_party/skia/src/core/SkColorSpaceXformSteps.h @@ -10,13 +10,11 @@ #include "include/core/SkColorSpace.h" #include "include/core/SkImageInfo.h" +#include "include/private/SkImageInfoPriv.h" class SkRasterPipeline; struct SkColorSpaceXformSteps { - // Returns true if SkColorSpaceXformSteps must be applied - // to draw content in `src` into a destination in `dst`. - static bool Required(SkColorSpace* src, SkColorSpace* dst); struct Flags { bool unpremul = false; @@ -37,17 +35,16 @@ struct SkColorSpaceXformSteps { SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType srcAT, SkColorSpace* dst, SkAlphaType dstAT); + template + SkColorSpaceXformSteps(const S& src, const D& dst) + : SkColorSpaceXformSteps(src.colorSpace(), src.alphaType(), + dst.colorSpace(), dst.alphaType()) {} + void apply(float rgba[4]) const; void apply(SkRasterPipeline*, bool src_is_normalized) const; void apply(SkRasterPipeline* p, SkColorType srcCT) const { - #if 0 - this->apply(p, srcCT < kRGBA_F16_SkColorType); - #else - // F16Norm is normalized, but to make diffing with F16 easier we - // intentionally take the slower, non-normalized path here. - this->apply(p, srcCT < kRGBA_F16Norm_SkColorType); - #endif + return this->apply(p, SkColorTypeIsNormalized(srcCT)); } Flags flags; diff --git a/third_party/skia/src/core/SkDeferredDisplayList.cpp b/third_party/skia/src/core/SkDeferredDisplayList.cpp index c89cd990bb0a..c718433bfe08 100644 --- a/third_party/skia/src/core/SkDeferredDisplayList.cpp +++ b/third_party/skia/src/core/SkDeferredDisplayList.cpp @@ -8,6 +8,7 @@ #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" #include "include/private/SkDeferredDisplayList.h" +#include "src/core/SkArenaAlloc.h" #include class SkSurfaceCharacterization; diff --git a/third_party/skia/src/core/SkDescriptor.cpp b/third_party/skia/src/core/SkDescriptor.cpp index 28eb677105fb..90406e7336e7 100644 --- a/third_party/skia/src/core/SkDescriptor.cpp +++ b/third_party/skia/src/core/SkDescriptor.cpp @@ -86,19 +86,36 @@ uint32_t SkDescriptor::ComputeChecksum(const SkDescriptor* desc) { } bool SkDescriptor::isValid() const { - uint32_t count = 0; + uint32_t count = fCount; + size_t lengthRemaining = this->fLength; + if (lengthRemaining < sizeof(SkDescriptor)) { + return false; + } + lengthRemaining -= sizeof(SkDescriptor); size_t offset = sizeof(SkDescriptor); - while (offset < fLength) { + while (lengthRemaining > 0 && count > 0) { + if (lengthRemaining < sizeof(Entry)) { + return false; + } + lengthRemaining -= sizeof(Entry); + const Entry* entry = (const Entry*)(reinterpret_cast(this) + offset); + + if (lengthRemaining < entry->fLen) { + return false; + } + lengthRemaining -= entry->fLen; + // rec tags are always a known size. if (entry->fTag == kRec_SkDescriptorTag && entry->fLen != sizeof(SkScalerContextRec)) { return false; } + offset += sizeof(Entry) + entry->fLen; - count++; + count--; } - return offset <= fLength && count == fCount; + return lengthRemaining == 0 && count == 0; } SkAutoDescriptor::SkAutoDescriptor() = default; diff --git a/third_party/skia/src/core/SkDevice.cpp b/third_party/skia/src/core/SkDevice.cpp index 094f273e91b8..6a31aeef7a10 100644 --- a/third_party/skia/src/core/SkDevice.cpp +++ b/third_party/skia/src/core/SkDevice.cpp @@ -37,19 +37,19 @@ SkBaseDevice::SkBaseDevice(const SkImageInfo& info, const SkSurfaceProps& surfac , fSurfaceProps(surfaceProps) { fOrigin = {0, 0}; - fCTM.reset(); + fLocalToDevice.reset(); } void SkBaseDevice::setOrigin(const SkMatrix& globalCTM, int x, int y) { fOrigin.set(x, y); - fCTM = globalCTM; - fCTM.postTranslate(SkIntToScalar(-x), SkIntToScalar(-y)); + fLocalToDevice = globalCTM; + fLocalToDevice.postTranslate(SkIntToScalar(-x), SkIntToScalar(-y)); } void SkBaseDevice::setGlobalCTM(const SkMatrix& ctm) { - fCTM = ctm; + fLocalToDevice = ctm; if (fOrigin.fX | fOrigin.fY) { - fCTM.postTranslate(-SkIntToScalar(fOrigin.fX), -SkIntToScalar(fOrigin.fY)); + fLocalToDevice.postTranslate(-SkIntToScalar(fOrigin.fX), -SkIntToScalar(fOrigin.fY)); } } @@ -83,12 +83,12 @@ static inline bool is_int(float x) { } void SkBaseDevice::drawRegion(const SkRegion& region, const SkPaint& paint) { - const SkMatrix& ctm = this->ctm(); - bool isNonTranslate = ctm.getType() & ~(SkMatrix::kTranslate_Mask); + const SkMatrix& localToDevice = this->localToDevice(); + bool isNonTranslate = localToDevice.getType() & ~(SkMatrix::kTranslate_Mask); bool complexPaint = paint.getStyle() != SkPaint::kFill_Style || paint.getMaskFilter() || paint.getPathEffect(); - bool antiAlias = paint.isAntiAlias() && (!is_int(ctm.getTranslateX()) || - !is_int(ctm.getTranslateY())); + bool antiAlias = paint.isAntiAlias() && (!is_int(localToDevice.getTranslateX()) || + !is_int(localToDevice.getTranslateY())); if (isNonTranslate || complexPaint || antiAlias) { SkPath path; region.getBoundaryPath(&path); @@ -117,7 +117,7 @@ void SkBaseDevice::drawDRRect(const SkRRect& outer, SkPath path; path.addRRect(outer); path.addRRect(inner); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); path.setIsVolatile(true); this->drawPath(path, paint, true); @@ -125,7 +125,7 @@ void SkBaseDevice::drawDRRect(const SkRRect& outer, void SkBaseDevice::drawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], SkBlendMode bmode, const SkPaint& paint) { - SkISize lod = SkPatchUtils::GetLevelOfDetail(cubics, &this->ctm()); + SkISize lod = SkPatchUtils::GetLevelOfDetail(cubics, &this->localToDevice()); auto vertices = SkPatchUtils::MakeVertices(cubics, colors, texCoords, lod.width(), lod.height(), this->imageInfo().colorSpace()); if (vertices) { @@ -270,7 +270,7 @@ void SkBaseDevice::drawEdgeAAImageSet(const SkCanvas::ImageSetEntry images[], in SkASSERT(!paint.getPathEffect()); SkPaint entryPaint = paint; - const SkMatrix baseCTM = this->ctm(); + const SkMatrix baseLocalToDevice = this->localToDevice(); int clipIndex = 0; for (int i = 0; i < count; ++i) { // TODO: Handle per-edge AA. Right now this mirrors the SkiaRenderer component of Chrome @@ -283,8 +283,8 @@ void SkBaseDevice::drawEdgeAAImageSet(const SkCanvas::ImageSetEntry images[], in SkASSERT(images[i].fMatrixIndex < 0 || preViewMatrices); if (images[i].fMatrixIndex >= 0) { this->save(); - this->setGlobalCTM(SkMatrix::Concat( - baseCTM, preViewMatrices[images[i].fMatrixIndex])); + this->setLocalToDevice(SkMatrix::Concat( + baseLocalToDevice, preViewMatrices[images[i].fMatrixIndex])); needsRestore = true; } @@ -303,7 +303,7 @@ void SkBaseDevice::drawEdgeAAImageSet(const SkCanvas::ImageSetEntry images[], in this->drawImageRect(images[i].fImage.get(), &images[i].fSrcRect, images[i].fDstRect, entryPaint, constraint); if (needsRestore) { - this->restore(baseCTM); + this->restoreLocal(baseLocalToDevice); } } } @@ -366,8 +366,8 @@ bool SkBaseDevice::peekPixels(SkPixmap* pmap) { void SkBaseDevice::drawGlyphRunRSXform(const SkFont& font, const SkGlyphID glyphs[], const SkRSXform xform[], int count, SkPoint origin, const SkPaint& paint) { - const SkMatrix originalCTM = this->ctm(); - if (!originalCTM.isFinite() || !SkScalarIsFinite(font.getSize()) || + const SkMatrix originalLocalToDevice = this->localToDevice(); + if (!originalLocalToDevice.isFinite() || !SkScalarIsFinite(font.getSize()) || !SkScalarIsFinite(font.getScaleX()) || !SkScalarIsFinite(font.getSkewX())) { return; @@ -387,8 +387,8 @@ void SkBaseDevice::drawGlyphRunRSXform(const SkFont& font, const SkGlyphID glyph glyphID = glyphs[i]; // now "glyphRun" is pointing at the current glyphID - SkMatrix ctm; - ctm.setRSXform(xform[i]).postTranslate(origin.fX, origin.fY); + SkMatrix glyphToDevice; + glyphToDevice.setRSXform(xform[i]).postTranslate(origin.fX, origin.fY); // We want to rotate each glyph by the rsxform, but we don't want to rotate "space" // (i.e. the shader that cares about the ctm) so we have to undo our little ctm trick @@ -397,19 +397,19 @@ void SkBaseDevice::drawGlyphRunRSXform(const SkFont& font, const SkGlyphID glyph auto shader = transformingPaint.getShader(); if (shader) { SkMatrix inverse; - if (ctm.invert(&inverse)) { + if (glyphToDevice.invert(&inverse)) { transformingPaint.setShader(shader->makeWithLocalMatrix(inverse)); } else { transformingPaint.setShader(nullptr); // can't handle this xform } } - ctm.setConcat(originalCTM, ctm); - this->setCTM(ctm); + glyphToDevice.postConcat(originalLocalToDevice); + this->setLocalToDevice(glyphToDevice); this->drawGlyphRunList(SkGlyphRunList{glyphRun, transformingPaint}); } - this->setCTM(originalCTM); + this->setLocalToDevice(originalLocalToDevice); } ////////////////////////////////////////////////////////////////////////////////////////// diff --git a/third_party/skia/src/core/SkDevice.h b/third_party/skia/src/core/SkDevice.h index ce2629fd80d7..c03e9eb9fda1 100644 --- a/third_party/skia/src/core/SkDevice.h +++ b/third_party/skia/src/core/SkDevice.h @@ -103,6 +103,10 @@ class SkBaseDevice : public SkRefCnt { this->onRestore(); this->setGlobalCTM(ctm); } + void restoreLocal(const SkMatrix& localToDevice) { + this->onRestore(); + this->setLocalToDevice(localToDevice); + } void clipRect(const SkRect& rect, SkClipOp op, bool aa) { this->onClipRect(rect, op, aa); } @@ -120,9 +124,9 @@ class SkBaseDevice : public SkRefCnt { } bool clipIsWideOpen() const; - const SkMatrix& ctm() const { return fCTM; } - void setCTM(const SkMatrix& ctm) { - fCTM = ctm; + const SkMatrix& localToDevice() const { return fLocalToDevice; } + void setLocalToDevice(const SkMatrix& localToDevice) { + fLocalToDevice = localToDevice; } void setGlobalCTM(const SkMatrix& ctm); virtual void validateDevBounds(const SkIRect&) {} @@ -372,7 +376,7 @@ class SkBaseDevice : public SkRefCnt { SkIPoint fOrigin; const SkImageInfo fInfo; const SkSurfaceProps fSurfaceProps; - SkMatrix fCTM; + SkMatrix fLocalToDevice; typedef SkRefCnt INHERITED; }; @@ -432,21 +436,21 @@ class SkNoPixelsDevice : public SkBaseDevice { typedef SkBaseDevice INHERITED; }; -class SkAutoDeviceCTMRestore : SkNoncopyable { +class SkAutoDeviceTransformRestore : SkNoncopyable { public: - SkAutoDeviceCTMRestore(SkBaseDevice* device, const SkMatrix& ctm) + SkAutoDeviceTransformRestore(SkBaseDevice* device, const SkMatrix& localToDevice) : fDevice(device) - , fPrevCTM(device->ctm()) + , fPrevLocalToDevice(device->localToDevice()) { - fDevice->setCTM(ctm); + fDevice->setLocalToDevice(localToDevice); } - ~SkAutoDeviceCTMRestore() { - fDevice->setCTM(fPrevCTM); + ~SkAutoDeviceTransformRestore() { + fDevice->setLocalToDevice(fPrevLocalToDevice); } private: SkBaseDevice* fDevice; - const SkMatrix fPrevCTM; + const SkMatrix fPrevLocalToDevice; }; #endif diff --git a/third_party/skia/src/core/SkDiscardableMemory.h b/third_party/skia/src/core/SkDiscardableMemory.h index 613dbd763fab..ac5c9536d6c3 100644 --- a/third_party/skia/src/core/SkDiscardableMemory.h +++ b/third_party/skia/src/core/SkDiscardableMemory.h @@ -15,7 +15,7 @@ * Interface for discardable memory. Implementation is provided by the * embedder. */ -class SK_API SkDiscardableMemory { +class SK_SPI SkDiscardableMemory { public: /** * Factory method that creates, initializes and locks an SkDiscardableMemory diff --git a/third_party/skia/src/core/SkDraw.cpp b/third_party/skia/src/core/SkDraw.cpp index e094da64d243..296329a52dc4 100644 --- a/third_party/skia/src/core/SkDraw.cpp +++ b/third_party/skia/src/core/SkDraw.cpp @@ -598,7 +598,7 @@ static void draw_rect_as_path(const SkDraw& orig, const SkRect& prePaintRect, draw.fMatrix = matrix; SkPath tmp; tmp.addRect(prePaintRect); - tmp.setFillType(SkPath::kWinding_FillType); + tmp.setFillType(SkPathFillType::kWinding); draw.drawPath(tmp, paint, nullptr, true); } diff --git a/third_party/skia/src/core/SkDraw_text.cpp b/third_party/skia/src/core/SkDraw_text.cpp index a3540818e438..d192952eb804 100644 --- a/third_party/skia/src/core/SkDraw_text.cpp +++ b/third_party/skia/src/core/SkDraw_text.cpp @@ -50,11 +50,10 @@ void SkDraw::paintMasks(SkDrawableGlyphBuffer* drawables, const SkPaint& paint) bool useRegion = fRC->isBW() && !fRC->isRect(); if (useRegion) { - for (auto t : drawables->drawable()) { - SkGlyphVariant glyph; SkPoint pos; - std::tie(glyph, pos) = t; + for (auto [variant, pos] : drawables->drawable()) { + SkGlyph* glyph = variant.glyph(); if (check_glyph_position(pos)) { - SkMask mask = glyph.glyph()->mask(pos); + SkMask mask = glyph->mask(pos); SkRegion::Cliperator clipper(fRC->bwRgn(), mask.fBounds); @@ -78,11 +77,10 @@ void SkDraw::paintMasks(SkDrawableGlyphBuffer* drawables, const SkPaint& paint) } else { SkIRect clipBounds = fRC->isBW() ? fRC->bwRgn().getBounds() : fRC->aaRgn().getBounds(); - for (auto t : drawables->drawable()) { - SkGlyphVariant glyph; SkPoint pos; - std::tie(glyph, pos) = t; + for (auto [variant, pos] : drawables->drawable()) { + SkGlyph* glyph = variant.glyph(); if (check_glyph_position(pos)) { - SkMask mask = glyph.glyph()->mask(pos); + SkMask mask = glyph->mask(pos); SkIRect storage; const SkIRect* bounds = &mask.fBounds; @@ -112,12 +110,11 @@ void SkDraw::paintMasks(SkDrawableGlyphBuffer* drawables, const SkPaint& paint) void SkDraw::paintPaths(SkDrawableGlyphBuffer* drawables, SkScalar scale, const SkPaint& paint) const { - for (auto t : drawables->drawable()) { - SkGlyphVariant path; SkPoint pos; - std::tie(path, pos) = t; + for (auto [variant, pos] : drawables->drawable()) { + const SkPath* path = variant.path(); SkMatrix m; m.setScaleTranslate(scale, scale, pos.x(), pos.y()); - this->drawPath(*path.path(), paint, &m, false); + this->drawPath(*path, paint, &m, false); } } diff --git a/third_party/skia/src/core/SkEdgeBuilder.cpp b/third_party/skia/src/core/SkEdgeBuilder.cpp index 721217d90546..365e7c33004e 100644 --- a/third_party/skia/src/core/SkEdgeBuilder.cpp +++ b/third_party/skia/src/core/SkEdgeBuilder.cpp @@ -294,56 +294,32 @@ int SkEdgeBuilder::build(const SkPath& path, const SkIRect* iclip, bool canCullT SkPathEdgeIter iter(path); if (iclip) { SkRect clip = this->recoverClip(*iclip); - SkEdgeClipper clipper(canCullToTheRight); + struct Rec { + SkEdgeBuilder* fBuilder; + bool fIsFinite; + } rec = { this, true }; - auto apply_clipper = [this, &clipper, &is_finite] { + SkEdgeClipper::ClipPath(path, clip, canCullToTheRight, + [](SkEdgeClipper* clipper, bool, void* ctx) { + Rec* rec = (Rec*)ctx; SkPoint pts[4]; SkPath::Verb verb; - while ((verb = clipper.next(pts)) != SkPath::kDone_Verb) { + while ((verb = clipper->next(pts)) != SkPath::kDone_Verb) { const int count = SkPathPriv::PtsInIter(verb); if (!SkScalarsAreFinite(&pts[0].fX, count*2)) { - is_finite = false; + rec->fIsFinite = false; return; } switch (verb) { - case SkPath::kLine_Verb: this->addLine (pts); break; - case SkPath::kQuad_Verb: this->addQuad (pts); break; - case SkPath::kCubic_Verb: this->addCubic(pts); break; + case SkPath::kLine_Verb: rec->fBuilder->addLine (pts); break; + case SkPath::kQuad_Verb: rec->fBuilder->addQuad (pts); break; + case SkPath::kCubic_Verb: rec->fBuilder->addCubic(pts); break; default: break; } } - }; - - while (auto e = iter.next()) { - switch (e.fEdge) { - case SkPathEdgeIter::Edge::kLine: - if (clipper.clipLine(e.fPts[0], e.fPts[1], clip)) { - apply_clipper(); - } - break; - case SkPathEdgeIter::Edge::kQuad: - if (clipper.clipQuad(e.fPts, clip)) { - apply_clipper(); - } - break; - case SkPathEdgeIter::Edge::kConic: { - const SkPoint* quadPts = quadder.computeQuads( - e.fPts, iter.conicWeight(), conicTol); - for (int i = 0; i < quadder.countQuads(); ++i) { - if (clipper.clipQuad(quadPts, clip)) { - apply_clipper(); - } - quadPts += 2; - } - } break; - case SkPathEdgeIter::Edge::kCubic: - if (clipper.clipCubic(e.fPts, clip)) { - apply_clipper(); - } - break; - } - } + }, &rec); + is_finite = rec.fIsFinite; } else { auto handle_quad = [this](const SkPoint pts[3]) { SkPoint monoX[5]; diff --git a/third_party/skia/src/core/SkEdgeClipper.cpp b/third_party/skia/src/core/SkEdgeClipper.cpp index fcadd3e9866e..ef660d16da97 100644 --- a/third_party/skia/src/core/SkEdgeClipper.cpp +++ b/third_party/skia/src/core/SkEdgeClipper.cpp @@ -555,3 +555,43 @@ void sk_assert_monotonic_x(const SkPoint pts[], int count) { } } #endif + +#include "src/core/SkPathPriv.h" + +void SkEdgeClipper::ClipPath(const SkPath& path, const SkRect& clip, bool canCullToTheRight, + void (*consume)(SkEdgeClipper*, bool newCtr, void* ctx), void* ctx) { + SkAutoConicToQuads quadder; + const SkScalar conicTol = SK_Scalar1 / 4; + + SkPathEdgeIter iter(path); + SkEdgeClipper clipper(canCullToTheRight); + + while (auto e = iter.next()) { + switch (e.fEdge) { + case SkPathEdgeIter::Edge::kLine: + if (clipper.clipLine(e.fPts[0], e.fPts[1], clip)) { + consume(&clipper, e.fIsNewContour, ctx); + } + break; + case SkPathEdgeIter::Edge::kQuad: + if (clipper.clipQuad(e.fPts, clip)) { + consume(&clipper, e.fIsNewContour, ctx); + } + break; + case SkPathEdgeIter::Edge::kConic: { + const SkPoint* quadPts = quadder.computeQuads(e.fPts, iter.conicWeight(), conicTol); + for (int i = 0; i < quadder.countQuads(); ++i) { + if (clipper.clipQuad(quadPts, clip)) { + consume(&clipper, e.fIsNewContour, ctx); + } + quadPts += 2; + } + } break; + case SkPathEdgeIter::Edge::kCubic: + if (clipper.clipCubic(e.fPts, clip)) { + consume(&clipper, e.fIsNewContour, ctx); + } + break; + } + } +} diff --git a/third_party/skia/src/core/SkEdgeClipper.h b/third_party/skia/src/core/SkEdgeClipper.h index 2718ed774c42..4d3a87cd9f84 100644 --- a/third_party/skia/src/core/SkEdgeClipper.h +++ b/third_party/skia/src/core/SkEdgeClipper.h @@ -26,6 +26,13 @@ class SkEdgeClipper { bool canCullToTheRight() const { return fCanCullToTheRight; } + /** + * Clips each segment from the path, and passes the result (in a clipper) to the + * consume proc. + */ + static void ClipPath(const SkPath& path, const SkRect& clip, bool canCullToTheRight, + void (*consume)(SkEdgeClipper*, bool newCtr, void* ctx), void* ctx); + private: SkPoint* fCurrPoint; SkPath::Verb* fCurrVerb; diff --git a/third_party/skia/src/core/SkEnumerate.h b/third_party/skia/src/core/SkEnumerate.h index 801aa54946ed..52e19d6fea33 100644 --- a/third_party/skia/src/core/SkEnumerate.h +++ b/third_party/skia/src/core/SkEnumerate.h @@ -14,11 +14,20 @@ #include "include/private/SkTLogic.h" -// SkEnumerate returns a tuple with an index and the value returned by the iterator. The index always -// starts at 0. template class SkEnumerate { - using Result = std::tuple())>; + using Captured = decltype(*std::declval()); + template struct is_tuple : std::false_type {}; + template struct is_tuple> : std::true_type {}; + static constexpr auto MakeResult(size_t i, Captured&& v) { + if constexpr (is_tuple::value) { + return std::tuple_cat(std::tuple{i}, std::forward(v)); + } else { + return std::tuple_cat(std::tuple{i}, + std::make_tuple(std::forward(v))); + } + } + using Result = decltype(MakeResult(0, std::declval())); class Iterator { public: @@ -33,7 +42,7 @@ class SkEnumerate { constexpr Iterator operator++(int) { Iterator tmp(*this); operator++(); return tmp; } constexpr bool operator==(const Iterator& rhs) const { return fIt == rhs.fIt; } constexpr bool operator!=(const Iterator& rhs) const { return fIt != rhs.fIt; } - constexpr reference operator*() { return std::forward_as_tuple(fIndex, *fIt); } + constexpr reference operator*() { return MakeResult(fIndex, *fIt); } private: ptrdiff_t fIndex; @@ -49,7 +58,8 @@ class SkEnumerate { constexpr SkEnumerate(const SkEnumerate& that) = default; constexpr SkEnumerate& operator=(const SkEnumerate& that) { fBegin = that.fBegin; - fEnd = that.fEnd; return *this; + fEnd = that.fEnd; + return *this; } constexpr Iterator begin() const { return Iterator{0, fBegin}; } constexpr Iterator end() const { return Iterator{fEnd - fBegin, fEnd}; } diff --git a/third_party/skia/src/core/SkFont.cpp b/third_party/skia/src/core/SkFont.cpp index fdfbf66a96ac..e2e3ef99f592 100644 --- a/third_party/skia/src/core/SkFont.cpp +++ b/third_party/skia/src/core/SkFont.cpp @@ -432,112 +432,3 @@ void SkFontPriv::GlyphsToUnichars(const SkFont& font, const SkGlyphID glyphs[], text[i] = (id < numGlyphsInTypeface) ? unichars[id] : 0xFFFD; } } - -/////////////////////////////////////////////////////////////////////////////////////////////////// -#include "src/core/SkReadBuffer.h" -#include "src/core/SkWriteBuffer.h" - -// packed int at the beginning of the serialized font: -// -// control_bits:8 size_as_byte:8 flags:12 edging:2 hinting:2 - -enum { - kSize_Is_Byte_Bit = 1 << 31, - kHas_ScaleX_Bit = 1 << 30, - kHas_SkewX_Bit = 1 << 29, - kHas_Typeface_Bit = 1 << 28, - - kShift_for_Size = 16, - kMask_For_Size = 0xFF, - - kShift_For_Flags = 4, - kMask_For_Flags = 0xFFF, - - kShift_For_Edging = 2, - kMask_For_Edging = 0x3, - - kShift_For_Hinting = 0, - kMask_For_Hinting = 0x3 -}; - -static bool scalar_is_byte(SkScalar x) { - int ix = (int)x; - return ix == x && ix >= 0 && ix <= kMask_For_Size; -} - -void SkFontPriv::Flatten(const SkFont& font, SkWriteBuffer& buffer) { - SkASSERT(font.fFlags <= SkFont::kAllFlags); - SkASSERT((font.fFlags & ~kMask_For_Flags) == 0); - SkASSERT((font.fEdging & ~kMask_For_Edging) == 0); - SkASSERT((font.fHinting & ~kMask_For_Hinting) == 0); - - uint32_t packed = 0; - packed |= font.fFlags << kShift_For_Flags; - packed |= font.fEdging << kShift_For_Edging; - packed |= font.fHinting << kShift_For_Hinting; - - if (scalar_is_byte(font.fSize)) { - packed |= kSize_Is_Byte_Bit; - packed |= (int)font.fSize << kShift_for_Size; - } - if (font.fScaleX != 1) { - packed |= kHas_ScaleX_Bit; - } - if (font.fSkewX != 0) { - packed |= kHas_SkewX_Bit; - } - if (font.fTypeface) { - packed |= kHas_Typeface_Bit; - } - - buffer.write32(packed); - if (!(packed & kSize_Is_Byte_Bit)) { - buffer.writeScalar(font.fSize); - } - if (packed & kHas_ScaleX_Bit) { - buffer.writeScalar(font.fScaleX); - } - if (packed & kHas_SkewX_Bit) { - buffer.writeScalar(font.fSkewX); - } - if (packed & kHas_Typeface_Bit) { - buffer.writeTypeface(font.fTypeface.get()); - } -} - -bool SkFontPriv::Unflatten(SkFont* font, SkReadBuffer& buffer) { - const uint32_t packed = buffer.read32(); - - if (packed & kSize_Is_Byte_Bit) { - font->fSize = (packed >> kShift_for_Size) & kMask_For_Size; - } else { - font->fSize = buffer.readScalar(); - } - if (packed & kHas_ScaleX_Bit) { - font->fScaleX = buffer.readScalar(); - } - if (packed & kHas_SkewX_Bit) { - font->fSkewX = buffer.readScalar(); - } - if (packed & kHas_Typeface_Bit) { - font->fTypeface = buffer.readTypeface(); - } - - SkASSERT(SkFont::kAllFlags <= kMask_For_Flags); - // we & with kAllFlags, to clear out any unknown flag bits - font->fFlags = SkToU8((packed >> kShift_For_Flags) & SkFont::kAllFlags); - - unsigned edging = (packed >> kShift_For_Edging) & kMask_For_Edging; - if (edging > (unsigned)SkFont::Edging::kSubpixelAntiAlias) { - edging = 0; - } - font->fEdging = SkToU8(edging); - - unsigned hinting = (packed >> kShift_For_Hinting) & kMask_For_Hinting; - if (hinting > (unsigned)SkFontHinting::kFull) { - hinting = 0; - } - font->fHinting = SkToU8(hinting); - - return buffer.isValid(); -} diff --git a/third_party/skia/src/core/SkFontPriv.h b/third_party/skia/src/core/SkFontPriv.h index 42fdc2968849..9f3d243b7669 100644 --- a/third_party/skia/src/core/SkFontPriv.h +++ b/third_party/skia/src/core/SkFontPriv.h @@ -76,6 +76,8 @@ class SkFontPriv { static void Flatten(const SkFont&, SkWriteBuffer& buffer); static bool Unflatten(SkFont*, SkReadBuffer& buffer); + + static inline uint8_t Flags(const SkFont& font) { return font.fFlags; } }; class SkAutoToGlyphs { diff --git a/third_party/skia/src/core/SkFont_serial.cpp b/third_party/skia/src/core/SkFont_serial.cpp new file mode 100644 index 000000000000..040b81a2a016 --- /dev/null +++ b/third_party/skia/src/core/SkFont_serial.cpp @@ -0,0 +1,117 @@ +/* + * Copyright 2014 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/SkTypeface.h" +#include "include/private/SkTo.h" +#include "src/core/SkFontPriv.h" +#include "src/core/SkReadBuffer.h" +#include "src/core/SkWriteBuffer.h" + +// packed int at the beginning of the serialized font: +// +// control_bits:8 size_as_byte:8 flags:12 edging:2 hinting:2 + +enum { + kSize_Is_Byte_Bit = 1 << 31, + kHas_ScaleX_Bit = 1 << 30, + kHas_SkewX_Bit = 1 << 29, + kHas_Typeface_Bit = 1 << 28, + + kShift_for_Size = 16, + kMask_For_Size = 0xFF, + + kShift_For_Flags = 4, + kMask_For_Flags = 0xFFF, + + kShift_For_Edging = 2, + kMask_For_Edging = 0x3, + + kShift_For_Hinting = 0, + kMask_For_Hinting = 0x3 +}; + +static bool scalar_is_byte(SkScalar x) { + int ix = (int)x; + return ix == x && ix >= 0 && ix <= kMask_For_Size; +} + +void SkFontPriv::Flatten(const SkFont& font, SkWriteBuffer& buffer) { + SkASSERT(font.fFlags <= SkFont::kAllFlags); + SkASSERT((font.fFlags & ~kMask_For_Flags) == 0); + SkASSERT((font.fEdging & ~kMask_For_Edging) == 0); + SkASSERT((font.fHinting & ~kMask_For_Hinting) == 0); + + uint32_t packed = 0; + packed |= font.fFlags << kShift_For_Flags; + packed |= font.fEdging << kShift_For_Edging; + packed |= font.fHinting << kShift_For_Hinting; + + if (scalar_is_byte(font.fSize)) { + packed |= kSize_Is_Byte_Bit; + packed |= (int)font.fSize << kShift_for_Size; + } + if (font.fScaleX != 1) { + packed |= kHas_ScaleX_Bit; + } + if (font.fSkewX != 0) { + packed |= kHas_SkewX_Bit; + } + if (font.fTypeface) { + packed |= kHas_Typeface_Bit; + } + + buffer.write32(packed); + if (!(packed & kSize_Is_Byte_Bit)) { + buffer.writeScalar(font.fSize); + } + if (packed & kHas_ScaleX_Bit) { + buffer.writeScalar(font.fScaleX); + } + if (packed & kHas_SkewX_Bit) { + buffer.writeScalar(font.fSkewX); + } + if (packed & kHas_Typeface_Bit) { + buffer.writeTypeface(font.fTypeface.get()); + } +} + +bool SkFontPriv::Unflatten(SkFont* font, SkReadBuffer& buffer) { + const uint32_t packed = buffer.read32(); + + if (packed & kSize_Is_Byte_Bit) { + font->fSize = (packed >> kShift_for_Size) & kMask_For_Size; + } else { + font->fSize = buffer.readScalar(); + } + if (packed & kHas_ScaleX_Bit) { + font->fScaleX = buffer.readScalar(); + } + if (packed & kHas_SkewX_Bit) { + font->fSkewX = buffer.readScalar(); + } + if (packed & kHas_Typeface_Bit) { + font->fTypeface = buffer.readTypeface(); + } + + SkASSERT(SkFont::kAllFlags <= kMask_For_Flags); + // we & with kAllFlags, to clear out any unknown flag bits + font->fFlags = SkToU8((packed >> kShift_For_Flags) & SkFont::kAllFlags); + + unsigned edging = (packed >> kShift_For_Edging) & kMask_For_Edging; + if (edging > (unsigned)SkFont::Edging::kSubpixelAntiAlias) { + edging = 0; + } + font->fEdging = SkToU8(edging); + + unsigned hinting = (packed >> kShift_For_Hinting) & kMask_For_Hinting; + if (hinting > (unsigned)SkFontHinting::kFull) { + hinting = 0; + } + font->fHinting = SkToU8(hinting); + + return buffer.isValid(); +} diff --git a/third_party/skia/src/core/SkGeometry.h b/third_party/skia/src/core/SkGeometry.h index 23bdbc1c4259..afb96923256c 100644 --- a/third_party/skia/src/core/SkGeometry.h +++ b/third_party/skia/src/core/SkGeometry.h @@ -89,7 +89,7 @@ int SkChopQuadAtMaxCurvature(const SkPoint src[3], SkPoint dst[5]); convert it into the cubic fitting the same curve. The new cubic curve is returned in dst[0..3]. */ -SK_API void SkConvertQuadToCubic(const SkPoint src[3], SkPoint dst[4]); +void SkConvertQuadToCubic(const SkPoint src[3], SkPoint dst[4]); /////////////////////////////////////////////////////////////////////////////// @@ -273,13 +273,13 @@ struct SkConic { * return the power-of-2 number of quads needed to approximate this conic * with a sequence of quads. Will be >= 0. */ - int SK_API computeQuadPOW2(SkScalar tol) const; + int SK_SPI computeQuadPOW2(SkScalar tol) const; /** * Chop this conic into N quads, stored continguously in pts[], where * N = 1 << pow2. The amount of storage needed is (1 + 2 * N) */ - int SK_API SK_WARN_UNUSED_RESULT chopIntoQuadsPOW2(SkPoint pts[], int pow2) const; + int SK_SPI SK_WARN_UNUSED_RESULT chopIntoQuadsPOW2(SkPoint pts[], int pow2) const; bool findXExtrema(SkScalar* t) const; bool findYExtrema(SkScalar* t) const; diff --git a/third_party/skia/src/core/SkGlyph.cpp b/third_party/skia/src/core/SkGlyph.cpp index 35218f4e5a98..7e109155ec78 100644 --- a/third_party/skia/src/core/SkGlyph.cpp +++ b/third_party/skia/src/core/SkGlyph.cpp @@ -13,6 +13,8 @@ #include "src/pathops/SkPathOpsCubic.h" #include "src/pathops/SkPathOpsQuad.h" +constexpr SkIPoint SkPackedGlyphID::kXYFieldMask; + SkMask SkGlyph::mask() const { // getMetrics had to be called. SkASSERT(fMaskFormat != MASK_FORMAT_UNKNOWN); @@ -123,7 +125,9 @@ bool SkGlyph::setMetricsAndImage(SkArenaAlloc* alloc, const SkGlyph& from) { fLeft = from.fLeft; fForceBW = from.fForceBW; fMaskFormat = from.fMaskFormat; - return this->setImage(alloc, from.image()); + + // From glyph may not have an image because the glyph is too large. + return from.fImage != nullptr && this->setImage(alloc, from.image()); } return false; } diff --git a/third_party/skia/src/core/SkGlyph.h b/third_party/skia/src/core/SkGlyph.h index 7a1318b335bd..6065a643e612 100644 --- a/third_party/skia/src/core/SkGlyph.h +++ b/third_party/skia/src/core/SkGlyph.h @@ -13,6 +13,7 @@ #include "include/private/SkChecksum.h" #include "include/private/SkFixed.h" #include "include/private/SkTo.h" +#include "include/private/SkVx.h" #include "src/core/SkMask.h" class SkArenaAlloc; @@ -32,9 +33,9 @@ struct SkPackedGlyphID { kSubPixelPosLen = 2u, // Bit positions - kGlyphID = 0u, - kSubPixelY = kGlyphIDLen, - kSubPixelX = kGlyphIDLen + kSubPixelPosLen, + kSubPixelX = 0u, + kGlyphID = kSubPixelPosLen, + kSubPixelY = kGlyphIDLen + kSubPixelPosLen, kEndData = kGlyphIDLen + 2 * kSubPixelPosLen, // Masks @@ -47,16 +48,24 @@ struct SkPackedGlyphID { kFixedPointSubPixelPosBits = kFixedPointBinaryPointPos - kSubPixelPosLen, }; + static constexpr SkScalar kSubpixelRound = 1.f / (1u << (SkPackedGlyphID::kSubPixelPosLen + 1)); + + static constexpr SkIPoint kXYFieldMask{kSubPixelPosMask << kSubPixelX, + kSubPixelPosMask << kSubPixelY}; + constexpr explicit SkPackedGlyphID(SkGlyphID glyphID) - : fID{glyphID} { } + : fID{(uint32_t)glyphID << kGlyphID} { } constexpr SkPackedGlyphID(SkGlyphID glyphID, SkFixed x, SkFixed y) - : fID {PackIDXY(glyphID, x, y)} { - SkASSERT(fID != kImpossibleID); - } + : fID {PackIDXY(glyphID, x, y)} { } + + constexpr SkPackedGlyphID(SkGlyphID glyphID, uint32_t x, uint32_t y) + : fID {PackIDSubXSubY(glyphID, x, y)} { } - constexpr SkPackedGlyphID(SkGlyphID code, SkIPoint pt) - : SkPackedGlyphID(code, pt.fX, pt.fY) { } + SkPackedGlyphID(SkGlyphID glyphID, SkPoint pt, SkIPoint mask) + : fID{PackIDSkPoint(glyphID, pt, mask)} { } + + constexpr explicit SkPackedGlyphID(uint32_t v) : fID{v & kMaskAll} { } constexpr SkPackedGlyphID() : fID{kImpossibleID} {} @@ -70,8 +79,8 @@ struct SkPackedGlyphID { return this->fID < that.fID; } - uint32_t code() const { - return fID & kGlyphIDMask; + SkGlyphID glyphID() const { + return (fID >> kGlyphID) & kGlyphIDMask; } uint32_t value() const { @@ -92,15 +101,51 @@ struct SkPackedGlyphID { SkString dump() const { SkString str; - str.appendf("code: %d, x: %d, y:%d", code(), getSubXFixed(), getSubYFixed()); + str.appendf("glyphID: %d, x: %d, y:%d", glyphID(), getSubXFixed(), getSubYFixed()); return str; } private: + static constexpr uint32_t PackIDSubXSubY(SkGlyphID glyphID, uint32_t x, uint32_t y) { + SkASSERT(x < (1u << kSubPixelPosLen)); + SkASSERT(y < (1u << kSubPixelPosLen)); + + return (x << kSubPixelX) | (y << kSubPixelY) | (glyphID << kGlyphID); + } + + // Assumptions: pt is properly rounded. mask is set for the x or y fields. + // + // A sub-pixel field is a number on the interval [2^kSubPixel, 2^(kSubPixel + kSubPixelPosLen)). + // Where kSubPixel is either kSubPixelX or kSubPixelY. Given a number x on [0, 1) we can + // generate a sub-pixel field using: + // sub-pixel-field = x * 2^(kSubPixel + kSubPixelPosLen) + // + // We can generate the integer sub-pixel field by &-ing the integer part of sub-filed with the + // sub-pixel field mask. + // int-sub-pixel-field = int(sub-pixel-field) & (kSubPixelPosMask << kSubPixel) + // + // The last trick is to extend the range from [0, 1) to [0, 2). The extend range is + // necessary because the modulo 1 calculation (pt - floor(pt)) generates numbers on [-1, 1). + // This does not round (floor) properly when converting to integer. Adding one to the range + // causes truncation and floor to be the same. Coincidentally, masking to produce the field also + // removes the +1. + static uint32_t PackIDSkPoint(SkGlyphID glyphID, SkPoint pt, SkIPoint mask) { + using namespace skvx; + using XY = Vec<2, float>; + using SubXY = Vec<2, int>; + const XY magic = {1.f * (1u << (kSubPixelPosLen + kSubPixelX)), + 1.f * (1u << (kSubPixelPosLen + kSubPixelY))}; + XY pos{pt.x(), pt.y()}; + XY subPos = (pos - floor(pos)) + 1.0f; + SubXY sub = cast(subPos * magic) & SubXY{mask.x(), mask.y()}; + SkASSERT(sub[0] / (1u << kSubPixelX) < (1u << kSubPixelPosLen)); + SkASSERT(sub[1] / (1u << kSubPixelY) < (1u << kSubPixelPosLen)); + + return (glyphID << kGlyphID) | sub[0] | sub[1]; + } + static constexpr uint32_t PackIDXY(SkGlyphID glyphID, SkFixed x, SkFixed y) { - return (FixedToSub(x) << kSubPixelX) - | (FixedToSub(y) << kSubPixelY) - | glyphID; + return PackIDSubXSubY(glyphID, FixedToSub(x), FixedToSub(y)); } static constexpr uint32_t FixedToSub(SkFixed n) { @@ -119,8 +164,6 @@ struct SkGlyphPrototype; class SkGlyph { public: - static constexpr SkFixed kSubpixelRound = SK_FixedHalf >> SkPackedGlyphID::kSubPixelPosLen; - // SkGlyph() is used for testing. constexpr SkGlyph() : fID{SkPackedGlyphID()} { } constexpr explicit SkGlyph(SkPackedGlyphID id) : fID{id} { } @@ -130,7 +173,7 @@ class SkGlyph { SkScalar advanceX() const { return fAdvanceX; } SkScalar advanceY() const { return fAdvanceY; } - SkGlyphID getGlyphID() const { return fID.code(); } + SkGlyphID getGlyphID() const { return fID.glyphID(); } SkPackedGlyphID getPackedID() const { return fID; } SkFixed getSubXFixed() const { return fID.getSubXFixed(); } SkFixed getSubYFixed() const { return fID.getSubYFixed(); } diff --git a/third_party/skia/src/core/SkGlyphBuffer.cpp b/third_party/skia/src/core/SkGlyphBuffer.cpp index a3ef7fb804bc..1b2453e60248 100644 --- a/third_party/skia/src/core/SkGlyphBuffer.cpp +++ b/third_party/skia/src/core/SkGlyphBuffer.cpp @@ -9,6 +9,11 @@ #include "src/core/SkGlyphRunPainter.h" #include "src/core/SkStrikeForGPU.h" +void SkSourceGlyphBuffer::reset() { + fRejectedGlyphIDs.reset(); + fRejectedPositions.reset(); +} + void SkDrawableGlyphBuffer::ensureSize(size_t size) { if (size > fMaxSize) { fMultiBuffer.reset(size); @@ -54,18 +59,14 @@ void SkDrawableGlyphBuffer::startDevice( matrix.mapPoints(fPositions, positions.data(), positions.size()); // Mask for controlling axis alignment. - SkIPoint mask = roundingSpec.ignorePositionMask; + SkIPoint mask = roundingSpec.ignorePositionFieldMask; // Convert glyph ids and positions to packed glyph ids. SkZip withMappedPos = SkMakeZip(source.get<0>(), fPositions.get()); SkGlyphVariant* packedIDCursor = fMultiBuffer; - for (auto t : withMappedPos) { - SkGlyphID glyphID; SkPoint pos; - std::tie(glyphID, pos) = t; - SkFixed subX = SkScalarToFixed(pos.x()) & mask.x(), - subY = SkScalarToFixed(pos.y()) & mask.y(); - *packedIDCursor++ = SkPackedGlyphID{glyphID, subX, subY}; + for (auto [glyphID, pos] : withMappedPos) { + *packedIDCursor++ = SkPackedGlyphID{glyphID, pos, mask}; } SkDEBUGCODE(fPhase = kInput); } diff --git a/third_party/skia/src/core/SkGlyphBuffer.h b/third_party/skia/src/core/SkGlyphBuffer.h index ca7541a623c7..026b91a08e7c 100644 --- a/third_party/skia/src/core/SkGlyphBuffer.h +++ b/third_party/skia/src/core/SkGlyphBuffer.h @@ -8,12 +8,77 @@ #ifndef SkGlyphBuffer_DEFINED #define SkGlyphBuffer_DEFINED +#include "src/core/SkEnumerate.h" #include "src/core/SkGlyph.h" #include "src/core/SkZip.h" class SkStrikeForGPU; struct SkGlyphPositionRoundingSpec; +// SkSourceGlyphBuffer is the source of glyphs between the different stages of character drawing. +// It starts with the glyphs and positions from the SkGlyphRun as the first source. When glyphs +// are reject by a stage they become the source for the next stage. +class SkSourceGlyphBuffer { +public: + SkSourceGlyphBuffer() = default; + + void setSource(SkZip source) { + this->~SkSourceGlyphBuffer(); + new (this) SkSourceGlyphBuffer{source}; + } + + void reset(); + + void reject(size_t index) { + SkASSERT(index < fSource.size()); + if (!this->sourceIsRejectBuffers()) { + // Need to expand the buffers for first use. All other reject sets will be fewer than + // this one. + auto [glyphID, pos] = fSource[index]; + fRejectedGlyphIDs.push_back(glyphID); + fRejectedPositions.push_back(pos); + fRejectSize++; + } else { + SkASSERT(fRejectSize < fRejects.size()); + fRejects[fRejectSize++] = fSource[index]; + } + } + + void reject(size_t index, int rejectedMaxDimension) { + fRejectedMaxDimension = SkTMax(fRejectedMaxDimension, rejectedMaxDimension); + this->reject(index); + } + + SkZip flipRejectsToSource() { + fRejects = SkMakeZip(fRejectedGlyphIDs, fRejectedPositions).first(fRejectSize); + fSource = fRejects; + fRejectSize = 0; + fSourceMaxDimension = fRejectedMaxDimension; + fRejectedMaxDimension = 0; + return fSource; + } + + SkZip source() const { return fSource; } + + int rejectedMaxDimension() const { return fSourceMaxDimension; } + +private: + SkSourceGlyphBuffer(const SkZip& source) { + fSource = source; + } + bool sourceIsRejectBuffers() const { + return fSource.get<0>().data() == fRejectedGlyphIDs.data(); + } + + SkZip fSource; + size_t fRejectSize{0}; + int fSourceMaxDimension{0}; + int fRejectedMaxDimension{0}; + SkZip fRejects; + SkSTArray<4, SkGlyphID> fRejectedGlyphIDs; + SkSTArray<4, SkPoint> fRejectedPositions; +}; + // A memory format that allows an SkPackedGlyphID, SkGlyph*, and SkPath* to occupy the same // memory. This allows SkPackedGlyphIDs as input, and SkGlyph*/SkPath* as output using the same // memory. @@ -123,6 +188,13 @@ class SkDrawableGlyphBuffer { void reset(); + template + void forEachGlyphID(Fn&& fn) { + for (auto [i, packedID, pos] : SkMakeEnumerate(this->input())) { + fn(i, packedID.packedID(), pos); + } + } + private: size_t fMaxSize{0}; size_t fInputSize{0}; diff --git a/third_party/skia/src/core/SkGlyphRunPainter.cpp b/third_party/skia/src/core/SkGlyphRunPainter.cpp index cb63a0f91663..7ca379483dc4 100644 --- a/third_party/skia/src/core/SkGlyphRunPainter.cpp +++ b/third_party/skia/src/core/SkGlyphRunPainter.cpp @@ -26,6 +26,7 @@ #include "src/core/SkDevice.h" #include "src/core/SkDistanceFieldGen.h" #include "src/core/SkDraw.h" +#include "src/core/SkEnumerate.h" #include "src/core/SkFontPriv.h" #include "src/core/SkRasterClip.h" #include "src/core/SkStrike.h" @@ -76,57 +77,15 @@ SkGlyphRunListPainter::SkGlyphRunListPainter(const GrRenderTargetContext& rtc) #endif -SkSpan SkGlyphRunListPainter::DeviceSpacePackedGlyphIDs( - const SkGlyphPositionRoundingSpec& roundingSpec, - const SkMatrix& viewMatrix, - const SkPoint& origin, - int n, - const SkGlyphID* glyphIDs, - const SkPoint* positions, - SkPoint* mappedPositions, - SkPackedGlyphID* results) { - // Add rounding and origin. - SkMatrix matrix = viewMatrix; - matrix.preTranslate(origin.x(), origin.y()); - SkPoint rounding = roundingSpec.halfAxisSampleFreq; - matrix.postTranslate(rounding.x(), rounding.y()); - matrix.mapPoints(mappedPositions, positions, n); - - SkIPoint mask = roundingSpec.ignorePositionMask; - - for (int i = 0; i < n; i++) { - SkFixed subX = SkScalarToFixed(mappedPositions[i].x()) & mask.x(), - subY = SkScalarToFixed(mappedPositions[i].y()) & mask.y(); - results[i] = SkPackedGlyphID{glyphIDs[i], subX, subY}; - } - - return SkSpan{results, SkTo(n)}; -} - -SkSpan SkGlyphRunListPainter::SourceSpacePackedGlyphIDs( - const SkPoint& origin, - int n, - const SkGlyphID* glyphIDs, - const SkPoint* positions, - SkPoint* mappedPositions, - SkPackedGlyphID* results) { - - SkMatrix::MakeTrans(origin.x(), origin.y()).mapPoints( - mappedPositions, positions, n); - - SkPackedGlyphID* cursor = results; - for (int i = 0; i < n; i++) { - *cursor++ = SkPackedGlyphID{glyphIDs[i]}; - } - - return SkSpan{results, SkTo(n)}; -} - void SkGlyphRunListPainter::drawForBitmapDevice( const SkGlyphRunList& glyphRunList, const SkMatrix& deviceMatrix, const BitmapDevicePainter* bitmapDevice) { ScopedBuffers _ = this->ensureBuffers(glyphRunList); + // TODO: fStrikeCache is only used for GPU, and some compilers complain about it during the no + // gpu build. Remove when SkGlyphRunListPainter is split into GPU and CPU version. + (void)fStrikeCache; + const SkPaint& runPaint = glyphRunList.paint(); // The bitmap blitters can only draw lcd text to a N32 bitmap in srcOver. Otherwise, // convert the lcd text into A8 text. The props communicates this to the scaler. @@ -138,6 +97,8 @@ void SkGlyphRunListPainter::drawForBitmapDevice( for (auto& glyphRun : glyphRunList) { const SkFont& runFont = glyphRun.font(); + fRejects.setSource(glyphRun.source()); + if (SkStrikeSpec::ShouldDrawAsPath(runPaint, runFont, deviceMatrix)) { SkStrikeSpec strikeSpec = SkStrikeSpec::MakePath( @@ -145,8 +106,9 @@ void SkGlyphRunListPainter::drawForBitmapDevice( auto strike = strikeSpec.findOrCreateExclusiveStrike(); - fDrawable.startSource(glyphRun.source(), origin); - strike->prepareForDrawingPathsCPU(&fDrawable); + fDrawable.startSource(fRejects.source(), origin); + strike->prepareForPathDrawing(&fDrawable, &fRejects); + fRejects.flipRejectsToSource(); // The paint we draw paths with must have the same anti-aliasing state as the runFont // allowing the paths to have the same edging as the glyph masks. @@ -154,123 +116,20 @@ void SkGlyphRunListPainter::drawForBitmapDevice( pathPaint.setAntiAlias(runFont.hasSomeAntiAliasing()); bitmapDevice->paintPaths(&fDrawable, strikeSpec.strikeToSourceRatio(), pathPaint); - } else { + } + if (!fRejects.source().empty()) { SkStrikeSpec strikeSpec = SkStrikeSpec::MakeMask( runFont, runPaint, props, fScalerContextFlags, deviceMatrix); auto strike = strikeSpec.findOrCreateExclusiveStrike(); - fDrawable.startDevice(glyphRun.source(), origin, deviceMatrix, strike->roundingSpec()); + fDrawable.startDevice(fRejects.source(), origin, deviceMatrix, strike->roundingSpec()); strike->prepareForDrawingMasksCPU(&fDrawable); bitmapDevice->paintMasks(&fDrawable, runPaint); } - } -} - -// Getting glyphs to the screen in a fallback situation can be complex. Here is the set of -// transformations that have to happen. Normally, they would all be accommodated by the font -// scaler, but the atlas has an upper limit to the glyphs it can handle. So the GPU is used to -// make up the difference from the smaller atlas size to the larger size needed by the final -// transform. Here are the transformations that are applied. -// -// final transform = [view matrix] * [text scale] * [text size] -// -// There are three cases: -// * Go Fast - view matrix is scale and translate, and all the glyphs are small enough -// Just scale the positions, and have the glyph cache handle the view matrix transformation. -// The text scale is 1. -// * It's complicated - view matrix is not scale and translate, and the glyphs are small enough -// The glyph cache does not handle the view matrix, but stores the glyphs at the text size -// specified by the run paint. The GPU handles the rotation, etc. specified by the view matrix. -// The text scale is 1. -// * Too big - The glyphs are too big to fit in the atlas -// Reduce the text size so the glyphs will fit in the atlas, but don't apply any -// transformations from the view matrix. Calculate a text scale based on that reduction. This -// scale factor is used to increase the size of the destination rectangles. The destination -// rectangles are then scaled, rotated, etc. by the GPU using the view matrix. -void SkGlyphRunListPainter::processARGBFallback(SkScalar maxSourceGlyphDimension, - const SkPaint& runPaint, - const SkFont& runFont, - const SkMatrix& viewMatrix, - SkGlyphRunPainterInterface* process) { - SkASSERT(!fARGBGlyphsIDs.empty()); - - // if maxSourceGlyphDimension then no pixels will change. - if (maxSourceGlyphDimension == 0) { return; } - - SkScalar maxScale = viewMatrix.getMaxScale(); - - // This is a linear estimate of the longest dimension among all the glyph widths and heights. - SkScalar conservativeMaxGlyphDimension = maxSourceGlyphDimension * maxScale; - - // If the situation that the matrix is simple, and all the glyphs are small enough. Go fast! - // N.B. If the matrix has scale, that will be reflected in the strike through the viewMatrix - // in the useFastPath case. - bool useDeviceCache = - viewMatrix.isScaleTranslate() - && conservativeMaxGlyphDimension <= SkStrikeCommon::kSkSideTooBigForAtlas; - - // A scaled and translated transform is the common case, and is handled directly in fallback. - // Even if the transform is scale and translate, fallback must be careful to use glyphs that - // fit in the atlas. If a glyph will not fit in the atlas, then the general transform case is - // used to render the glyphs. - if (useDeviceCache) { - // Translate the positions to device space. - // TODO: this code is dubious - viewMatrix.mapPoints(fARGBPositions.data(), fARGBPositions.size()); - for (SkPoint& point : fARGBPositions) { - point.fX = SkScalarFloorToScalar(point.fX); - point.fY = SkScalarFloorToScalar(point.fY); - } - - SkStrikeSpec strikeSpec = SkStrikeSpec::MakeMask( - runFont, runPaint, fDeviceProps, fScalerContextFlags, viewMatrix); - - SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); - - SkPackedGlyphID* cursor = fPackedGlyphIDs; - for (auto glyphID : fARGBGlyphsIDs) { - *cursor++ = SkPackedGlyphID{glyphID}; - } - - SkSpan glyphPosSpan = strike->prepareForDrawingRemoveEmpty( - fPackedGlyphIDs, - fARGBPositions.data(), - fARGBGlyphsIDs.size(), - SkStrikeCommon::kSkSideTooBigForAtlas, - fGlyphPos); - - if (process) { - process->processDeviceFallback(glyphPosSpan, strikeSpec); - } - - } else { - // If the matrix is complicated or if scaling is used to fit the glyphs in the cache, - // then this case is used. - SkStrikeSpec strikeSpec = SkStrikeSpec::MakeSourceFallback( - runFont, runPaint, fDeviceProps, fScalerContextFlags, maxSourceGlyphDimension); - - SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); - - SkPackedGlyphID* cursor = fPackedGlyphIDs; - for (auto glyphID : fARGBGlyphsIDs) { - *cursor++ = SkPackedGlyphID{glyphID}; - } - - auto glyphPosSpan = strike->prepareForDrawingRemoveEmpty( - fPackedGlyphIDs, - fARGBPositions.data(), - fARGBGlyphsIDs.size(), - SkStrikeCommon::kSkSideTooBigForAtlas, - fGlyphPos); - - if (process) { - process->processSourceFallback( - glyphPosSpan, - strikeSpec, - viewMatrix.hasPerspective()); - } + // TODO: have the mask stage above reject the glyphs that are too big, and handle the + // rejects in a more sophisticated stage. } } @@ -284,204 +143,167 @@ void SkGlyphRunListPainter::processGlyphRunList(const SkGlyphRunList& glyphRunLi SkPoint origin = glyphRunList.origin(); const SkPaint& runPaint = glyphRunList.paint(); + ScopedBuffers _ = this->ensureBuffers(glyphRunList); for (const auto& glyphRun : glyphRunList) { - SkScalar maxFallbackDimension{-SK_ScalarInfinity}; - ScopedBuffers _ = this->ensureBuffers(glyphRun); - - auto addFallback = [this, &maxFallbackDimension] - (const SkGlyph& glyph, SkPoint sourcePosition) { - maxFallbackDimension = std::max(maxFallbackDimension, - SkIntToScalar(glyph.maxDimension())); - fARGBGlyphsIDs.push_back(glyph.getGlyphID()); - fARGBPositions.push_back(sourcePosition); - }; - + fRejects.setSource(glyphRun.source()); const SkFont& runFont = glyphRun.font(); + bool useSDFT = GrTextContext::CanDrawAsDistanceFields( runPaint, runFont, viewMatrix, props, contextSupportsDistanceFieldText, options); - if (process) { - process->startRun(glyphRun, useSDFT); - } - if (useSDFT) { - SkScalar minScale, maxScale; - SkStrikeSpec strikeSpec; - std::tie(strikeSpec, minScale, maxScale) = - SkStrikeSpec::MakeSDFT( - runFont, runPaint,fDeviceProps, viewMatrix, options); + bool usePaths = + useSDFT ? false : SkStrikeSpec::ShouldDrawAsPath(runPaint, runFont, viewMatrix); + + if (!useSDFT && !usePaths) { + // Process masks - this should be the 99.99% case. + + SkStrikeSpec strikeSpec = SkStrikeSpec::MakeMask( + runFont, runPaint, fDeviceProps, fScalerContextFlags, viewMatrix); SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); - auto packedGlyphIDs = SourceSpacePackedGlyphIDs( - origin, - glyphRun.runSize(), - glyphRun.glyphsIDs().data(), - glyphRun.positions().data(), - fPositions, - fPackedGlyphIDs); - - SkSpan glyphPosSpan = strike->prepareForDrawingRemoveEmpty( - packedGlyphIDs.data(), - fPositions, - glyphRun.runSize(), - SkStrikeCommon::kSkSideTooBigForAtlas, - fGlyphPos); - - size_t glyphsWithMaskCount = 0; - for (const SkGlyphPos& glyphPos : glyphPosSpan) { - const SkGlyph& glyph = *glyphPos.glyph; - SkPoint position = glyphPos.position; - - // The SDF scaler context system ensures that a glyph is empty, kSDF_Format, or - // kARGB32_Format. The following if statements use this assumption. - SkASSERT(glyph.maskFormat() == SkMask::kSDF_Format || glyph.isColor()); - - if (SkStrikeForGPU::CanDrawAsSDFT(glyph)) { - // SDF mask will work. - fGlyphPos[glyphsWithMaskCount++] = glyphPos; - } else if (SkStrikeForGPU::CanDrawAsPath(glyph)) { - // If not color but too big, use a path. - fPaths.push_back(glyphPos); - } else { - // If no path, or it is color, then fallback. - addFallback(glyph, position); - } - } + fDrawable.startDevice(fRejects.source(), origin, viewMatrix, strike->roundingSpec()); + strike->prepareForMaskDrawing(&fDrawable, &fRejects); + fRejects.flipRejectsToSource(); if (process) { - bool hasWCoord = - viewMatrix.hasPerspective() || options.fDistanceFieldVerticesAlwaysHaveW; - - // processSourceSDFT must be called even if there are no glyphs to make sure runs + // processDeviceMasks must be called even if there are no glyphs to make sure runs // are set correctly. - process->processSourceSDFT( - SkSpan{fGlyphPos, glyphsWithMaskCount}, - strikeSpec, - runFont, - minScale, - maxScale, - hasWCoord); - - if (!fPaths.empty()) { - process->processSourcePaths( - SkMakeSpan(fPaths), - strikeSpec); - } + process->processDeviceMasks(fDrawable.drawable(), strikeSpec); } + } else if (useSDFT) { + // Process SDFT - This should be the .009% case. + SkScalar minScale, maxScale; + SkStrikeSpec strikeSpec; + std::tie(strikeSpec, minScale, maxScale) = + SkStrikeSpec::MakeSDFT(runFont, runPaint, fDeviceProps, viewMatrix, options); - // fGlyphPos will be reused here. - if (!fARGBGlyphsIDs.empty()) { - this->processARGBFallback(maxFallbackDimension * strikeSpec.strikeToSourceRatio(), - runPaint, runFont, viewMatrix, process); - } - } else if (SkStrikeSpec::ShouldDrawAsPath(runPaint, runFont, viewMatrix)) { - SkStrikeSpec strikeSpec = SkStrikeSpec::MakePath( - runFont, runPaint, fDeviceProps, fScalerContextFlags); + if (!strikeSpec.isEmpty()) { + SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); - SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); + fDrawable.startSource(fRejects.source(), origin); + strike->prepareForSDFTDrawing(&fDrawable, &fRejects); + fRejects.flipRejectsToSource(); - auto packedGlyphIDs = SourceSpacePackedGlyphIDs( - origin, - glyphRun.runSize(), - glyphRun.glyphsIDs().data(), - glyphRun.positions().data(), - fPositions, - fPackedGlyphIDs); - - SkSpan glyphPosSpan = strike->prepareForDrawingRemoveEmpty( - packedGlyphIDs.data(), - fPositions, - glyphRun.runSize(), - 0, - fGlyphPos); - - // As opposed to SDF and mask, path handling puts paths in fGlyphPos instead of fPaths. - size_t glyphsWithPathCount = 0; - for (const SkGlyphPos& glyphPos : glyphPosSpan) { - const SkGlyph& glyph = *glyphPos.glyph; - SkPoint position = glyphPos.position; - if (SkStrikeForGPU::CanDrawAsPath(glyph)) { - // Place paths in fGlyphPos - fGlyphPos[glyphsWithPathCount++] = glyphPos; - } else { - addFallback(glyph, position); + if (process) { + // processSourceSDFT must be called even if there are no glyphs to make sure + // runs are set correctly. + process->processSourceSDFT( + fDrawable.drawable(), strikeSpec, runFont, minScale, maxScale); } } + } - if (process) { - // processSourcePaths must be called even if there are no glyphs to make sure runs - // are set correctly. - process->processSourcePaths( - SkSpan{fGlyphPos, glyphsWithPathCount}, - strikeSpec); - } + // Glyphs are generated in different scales relative to the source space. Masks are drawn + // in device space, and SDFT and Paths are draw in a fixed constant space. This is the + // factor used to scale the generated glyphs back to source space. + SkScalar maxDimensionInSourceSpace = 0.0; + if (!fRejects.source().empty()) { + // Path case + SkStrikeSpec strikeSpec = SkStrikeSpec::MakePath( + runFont, runPaint, fDeviceProps, fScalerContextFlags); - // fGlyphPos will be reused here. - if (!fARGBGlyphsIDs.empty()) { - this->processARGBFallback(maxFallbackDimension * strikeSpec.strikeToSourceRatio(), - runPaint, runFont, viewMatrix, process); - } - } else { - SkStrikeSpec strikeSpec = - SkStrikeSpec::MakeMask(runFont, runPaint, - fDeviceProps, fScalerContextFlags, viewMatrix); + if (!strikeSpec.isEmpty()) { + SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); - SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); + fDrawable.startSource(fRejects.source(), origin); + strike->prepareForPathDrawing(&fDrawable, &fRejects); + fRejects.flipRejectsToSource(); + maxDimensionInSourceSpace = + fRejects.rejectedMaxDimension() * strikeSpec.strikeToSourceRatio(); - auto packedGlyphIDs = DeviceSpacePackedGlyphIDs( - strike->roundingSpec(), - viewMatrix, - origin, - glyphRun.runSize(), - glyphRun.glyphsIDs().data(), - glyphRun.positions().data(), - fPositions, - fPackedGlyphIDs); - - // Lookup all the glyphs from the cache. Strip empty glyphs. - SkSpan glyphPosSpan = strike->prepareForDrawingRemoveEmpty( - packedGlyphIDs.data(), - fPositions, - glyphRun.runSize(), - SkStrikeCommon::kSkSideTooBigForAtlas, - fGlyphPos); - - // Sort glyphs into the three bins: mask (fGlyphPos), path (fPaths), and fallback. - size_t glyphsWithMaskCount = 0; - for (const SkGlyphPos& glyphPos : glyphPosSpan) { - const SkGlyph& glyph = *glyphPos.glyph; - const SkPoint position = glyphPos.position; - - // Does the glyph have work to do or is the code able to position the glyph? - if (!SkScalarsAreFinite(position.x(), position.y())) { - // Do nothing; - } else if (SkStrikeForGPU::CanDrawAsMask(glyph)) { - fGlyphPos[glyphsWithMaskCount++] = glyphPos; - } else if (SkStrikeForGPU::CanDrawAsPath(glyph)) { - fPaths.push_back(glyphPos); - } else { - addFallback(glyph, origin + glyphRun.positions()[glyphPos.index]); + if (process) { + // processSourcePaths must be called even if there are no glyphs to make sure + // runs are set correctly. + process->processSourcePaths(fDrawable.drawable(), runFont, strikeSpec); } } + } - if (process) { - // processDeviceMasks must be called even if there are no glyphs to make sure runs - // are set correctly. - process->processDeviceMasks( - SkSpan{fGlyphPos, glyphsWithMaskCount}, strikeSpec); - if (!fPaths.empty()) { - process->processDevicePaths(SkMakeSpan(fPaths)); + // Getting glyphs to the screen in a fallback situation can be complex. Here is the set of + // transformations that have to happen. Normally, they would all be accommodated by the font + // scaler, but the atlas has an upper limit to the glyphs it can handle. So the GPU is used + // to make up the difference from the smaller atlas size to the larger size needed by the + // final transform. Here are the transformations that are applied. + // + // final transform = [view matrix] * [text scale] * [text size] + // + // There are three cases: + // * Go Fast - view matrix is scale and translate, and all the glyphs are small enough + // Just scale the positions, and have the glyph cache handle the view matrix + // transformation. + // The text scale is 1. + // * It's complicated - view matrix is not scale and translate, and the glyphs are small + // enough The glyph cache does not handle the view matrix, but stores the glyphs at the + // text size specified by the run paint. The GPU handles the rotation, etc. specified + // by the view matrix. + // The text scale is 1. + // * Too big - The glyphs are too big to fit in the atlas + // Reduce the text size so the glyphs will fit in the atlas, but don't apply any + // transformations from the view matrix. Calculate a text scale based on that reduction. + // This scale factor is used to increase the size of the destination rectangles. The + // destination rectangles are then scaled, rotated, etc. by the GPU using the view matrix. + + if (!fRejects.source().empty() && maxDimensionInSourceSpace != 0) { + + SkScalar maxScale = viewMatrix.getMaxScale(); + + // This is a linear estimate of the longest dimension among all the glyph widths and + // heights. + SkScalar conservativeMaxGlyphDimension = maxDimensionInSourceSpace * maxScale; + + // If the situation that the matrix is simple, and all the glyphs are small enough. + // Go fast! + // N.B. If the matrix has scale, that will be reflected in the strike through the + // viewMatrix in the useFastPath case. + bool useDeviceCache = + viewMatrix.isScaleTranslate() + && conservativeMaxGlyphDimension <= SkStrikeCommon::kSkSideTooBigForAtlas; + + // A scaled and translated transform is the common case, and is handled directly in + // fallback. Even if the transform is scale and translate, fallback must be careful + // to use glyphs that fit in the atlas. If a glyph will not fit in the atlas, then + // the general transform case is used to render the glyphs. + if (useDeviceCache) { + SkStrikeSpec strikeSpec = SkStrikeSpec::MakeMask( + runFont, runPaint, fDeviceProps, fScalerContextFlags, viewMatrix); + + SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); + + fDrawable.startDevice( + fRejects.source(), origin, viewMatrix, strike->roundingSpec()); + + strike->prepareForMaskDrawing(&fDrawable, &fRejects); + fRejects.flipRejectsToSource(); + SkASSERT(fRejects.source().empty()); + + if (process) { + process->processDeviceMasks(fDrawable.drawable(), strikeSpec); } - } + } else { + // If the matrix is complicated or if scaling is used to fit the glyphs in the + // atlas, then this case is used. + + SkStrikeSpec strikeSpec = SkStrikeSpec::MakeSourceFallback( + runFont, runPaint, fDeviceProps, + fScalerContextFlags, maxDimensionInSourceSpace); + + if (!strikeSpec.isEmpty()) { + SkScopedStrikeForGPU strike = strikeSpec.findOrCreateScopedStrike(fStrikeCache); + + fDrawable.startSource(fRejects.source(), origin); + strike->prepareForMaskDrawing(&fDrawable, &fRejects); + fRejects.flipRejectsToSource(); + SkASSERT(fRejects.source().empty()); - // fGlyphPos will be reused here. - if (!fARGBGlyphsIDs.empty()) { - this->processARGBFallback(maxFallbackDimension / viewMatrix.getMaxScale(), - runPaint, runFont, viewMatrix, process); + if (process) { + process->processSourceMasks(fDrawable.drawable(), strikeSpec); + } + } } - } // Mask case + } } // For all glyph runs } #endif // SK_SUPPORT_GPU @@ -565,6 +387,7 @@ void GrTextContext::drawGlyphRunList( cacheBlob = textBlobCache->find(key); } + bool forceW = fOptions.fDistanceFieldVerticesAlwaysHaveW; if (cacheBlob) { if (cacheBlob->mustRegenerate(listPaint, glyphRunList.anyRunsSubpixelPositioned(), blurRec, viewMatrix, origin.x(),origin.y())) { @@ -573,21 +396,21 @@ void GrTextContext::drawGlyphRunList( // but we'd have to clear the subrun information textBlobCache->remove(cacheBlob.get()); cacheBlob = textBlobCache->makeCachedBlob( - glyphRunList, key, blurRec, listPaint, color, grStrikeCache); + glyphRunList, grStrikeCache, key, blurRec, viewMatrix, color, forceW); cacheBlob->generateFromGlyphRunList( *context->priv().caps()->shaderCaps(), fOptions, - listPaint, scalerContextFlags, viewMatrix, props, + listPaint, viewMatrix, props, glyphRunList, target->glyphPainter()); } else { textBlobCache->makeMRU(cacheBlob.get()); if (CACHE_SANITY_CHECK) { sk_sp sanityBlob(textBlobCache->makeBlob( - glyphRunList, color, grStrikeCache)); + glyphRunList, grStrikeCache, viewMatrix, color, forceW)); sanityBlob->setupKey(key, blurRec, listPaint); cacheBlob->generateFromGlyphRunList( *context->priv().caps()->shaderCaps(), fOptions, - listPaint, scalerContextFlags, viewMatrix, props, glyphRunList, + listPaint, viewMatrix, props, glyphRunList, target->glyphPainter()); GrTextBlob::AssertEqual(*sanityBlob, *cacheBlob); } @@ -595,13 +418,14 @@ void GrTextContext::drawGlyphRunList( } else { if (canCache) { cacheBlob = textBlobCache->makeCachedBlob( - glyphRunList, key, blurRec, listPaint, color, grStrikeCache); + glyphRunList, grStrikeCache, key, blurRec, viewMatrix, color, forceW); } else { - cacheBlob = textBlobCache->makeBlob(glyphRunList, color, grStrikeCache); + cacheBlob = textBlobCache->makeBlob( + glyphRunList, grStrikeCache, viewMatrix, color, forceW); } cacheBlob->generateFromGlyphRunList( *context->priv().caps()->shaderCaps(), fOptions, listPaint, - scalerContextFlags, viewMatrix, props, glyphRunList, + viewMatrix, props, glyphRunList, target->glyphPainter()); } @@ -609,105 +433,15 @@ void GrTextContext::drawGlyphRunList( clip, viewMatrix, origin.x(), origin.y()); } -void GrTextBlob::SubRun::appendGlyph(GrGlyph* glyph, SkRect dstRect) { - - this->joinGlyphBounds(dstRect); - - GrTextBlob* blob = fRun->fBlob; - - bool hasW = this->hasWCoord(); - // glyphs drawn in perspective must always have a w coord. - SkASSERT(hasW || !blob->fInitialViewMatrix.hasPerspective()); - auto maskFormat = this->maskFormat(); - size_t vertexStride = GetVertexStride(maskFormat, hasW); - - intptr_t vertex = reinterpret_cast(blob->fVertices + fVertexEndIndex); - - // We always write the third position component used by SDFs. If it is unused it gets - // overwritten. Similarly, we always write the color and the blob will later overwrite it - // with texture coords if it is unused. - size_t colorOffset = hasW ? sizeof(SkPoint3) : sizeof(SkPoint); - // V0 - *reinterpret_cast(vertex) = {dstRect.fLeft, dstRect.fTop, 1.f}; - *reinterpret_cast(vertex + colorOffset) = fColor; - vertex += vertexStride; - - // V1 - *reinterpret_cast(vertex) = {dstRect.fLeft, dstRect.fBottom, 1.f}; - *reinterpret_cast(vertex + colorOffset) = fColor; - vertex += vertexStride; - - // V2 - *reinterpret_cast(vertex) = {dstRect.fRight, dstRect.fTop, 1.f}; - *reinterpret_cast(vertex + colorOffset) = fColor; - vertex += vertexStride; - - // V3 - *reinterpret_cast(vertex) = {dstRect.fRight, dstRect.fBottom, 1.f}; - *reinterpret_cast(vertex + colorOffset) = fColor; - - fVertexEndIndex += vertexStride * kVerticesPerGlyph; - blob->fGlyphs[fGlyphEndIndex++] = glyph; -} - -void GrTextBlob::Run::switchSubRunIfNeededAndAppendGlyph(GrGlyph* glyph, - const sk_sp& strike, - const SkRect& destRect, - bool needsTransform) { - GrMaskFormat format = glyph->fMaskFormat; - - SubRun* subRun = &fSubRunInfo.back(); - if (fInitialized && subRun->maskFormat() != format) { - subRun = pushBackSubRun(fStrikeSpec, fColor); - subRun->setStrike(strike); - } else if (!fInitialized) { - subRun->setStrike(strike); - } - - fInitialized = true; - subRun->setMaskFormat(format); - subRun->setNeedsTransform(needsTransform); - subRun->appendGlyph(glyph, destRect); -} - -void GrTextBlob::Run::appendDeviceSpaceGlyph(const sk_sp& strike, - const SkGlyph& skGlyph, SkPoint origin) { - if (GrGlyph* glyph = strike->getGlyph(skGlyph)) { - - SkRect glyphRect = glyph->destRect(origin); - - if (!glyphRect.isEmpty()) { - this->switchSubRunIfNeededAndAppendGlyph(glyph, strike, glyphRect, false); - } - } -} - -void GrTextBlob::Run::appendSourceSpaceGlyph(const sk_sp& strike, - const SkGlyph& skGlyph, - SkPoint origin, - SkScalar textScale) { - if (GrGlyph* glyph = strike->getGlyph(skGlyph)) { - - SkRect glyphRect = glyph->destRect(origin, textScale); - - if (!glyphRect.isEmpty()) { - this->switchSubRunIfNeededAndAppendGlyph(glyph, strike, glyphRect, true); - } - } -} - void GrTextBlob::generateFromGlyphRunList(const GrShaderCaps& shaderCaps, const GrTextContext::Options& options, const SkPaint& paint, - SkScalerContextFlags scalerContextFlags, const SkMatrix& viewMatrix, const SkSurfaceProps& props, const SkGlyphRunList& glyphRunList, SkGlyphRunListPainter* glyphPainter) { - SkPoint origin = glyphRunList.origin(); const SkPaint& runPaint = glyphRunList.paint(); - this->initReusableBlob(SkPaintPriv::ComputeLuminanceColor(runPaint), viewMatrix, - origin.x(), origin.y()); + this->initReusableBlob(SkPaintPriv::ComputeLuminanceColor(runPaint)); glyphPainter->processGlyphRunList(glyphRunList, viewMatrix, @@ -717,107 +451,192 @@ void GrTextBlob::generateFromGlyphRunList(const GrShaderCaps& shaderCaps, this); } -GrTextBlob::Run* GrTextBlob::currentRun() { - return &fRuns[fRunCount - 1]; +GrTextBlob::SubRun::SubRun(SubRunType type, GrTextBlob* textBlob, const SkStrikeSpec& strikeSpec, + GrMaskFormat format, const GrTextBlob::SubRunBufferSpec& bufferSpec, + sk_sp&& grStrike) + : fType{type} + , fBlob{textBlob} + , fMaskFormat{format} + , fGlyphStartIndex{std::get<0>(bufferSpec)} + , fGlyphEndIndex{std::get<1>(bufferSpec)} + , fVertexStartIndex{std::get<2>(bufferSpec)} + , fVertexEndIndex{std::get<3>(bufferSpec)} + , fStrikeSpec{strikeSpec} + , fStrike{grStrike} + , fColor{textBlob->fColor} + , fX{textBlob->fInitialOrigin.x()} + , fY{textBlob->fInitialOrigin.y()} + , fCurrentViewMatrix{textBlob->fInitialViewMatrix} { + SkASSERT(type != kTransformedPath); } -void GrTextBlob::startRun(const SkGlyphRun& glyphRun, bool useSDFT) { - if (useSDFT) { - this->setHasDistanceField(); - } - Run* run = this->pushBackRun(); - run->setRunFontAntiAlias(glyphRun.font().hasSomeAntiAliasing()); -} +GrTextBlob::SubRun::SubRun(GrTextBlob* textBlob, const SkStrikeSpec& strikeSpec) + : fType{kTransformedPath} + , fBlob{textBlob} + , fMaskFormat{kA8_GrMaskFormat} + , fGlyphStartIndex{0} + , fGlyphEndIndex{0} + , fVertexStartIndex{0} + , fVertexEndIndex{0} + , fStrikeSpec{strikeSpec} + , fStrike{nullptr} + , fColor{textBlob->fColor} + , fPaths{} { } + +class GrTextBlob::SubRun* GrTextBlob::makeSubRun(SubRunType type, + const SkZip& drawables, + const SkStrikeSpec& strikeSpec, + GrMaskFormat format) { + bool hasW = this->hasW(type); + uint32_t glyphsStart = fGlyphsCursor; + fGlyphsCursor += drawables.size(); + uint32_t glyphsEnd = fGlyphsCursor; + size_t verticesStart = fVerticesCursor; + fVerticesCursor += drawables.size() * GetVertexStride(format, hasW) * kVerticesPerGlyph; + size_t verticesEnd = fVerticesCursor; + + SubRunBufferSpec bufferSpec = std::make_tuple( + glyphsStart, glyphsEnd, verticesStart, verticesEnd); -void GrTextBlob::processDeviceMasks(SkSpan masks, - const SkStrikeSpec& strikeSpec) { - Run* run = this->currentRun(); - this->setHasBitmap(); - run->setupFont(strikeSpec); - sk_sp currStrike = strikeSpec.findOrCreateGrStrike(fStrikeCache); - for (const auto& mask : masks) { - SkPoint pt{SkScalarFloorToScalar(mask.position.fX), - SkScalarFloorToScalar(mask.position.fY)}; - run->appendDeviceSpaceGlyph(currStrike, *mask.glyph, pt); - } + sk_sp grStrike = strikeSpec.findOrCreateGrStrike(fStrikeCache); + + SubRun& subRun = fSubRuns.emplace_back( + type, this, strikeSpec, format, bufferSpec, std::move(grStrike)); + + subRun.appendGlyphs(drawables); + + return &subRun; } -void GrTextBlob::processSourcePaths(SkSpan paths, - const SkStrikeSpec& strikeSpec) { - Run* run = this->currentRun(); - this->setHasBitmap(); - run->setupFont(strikeSpec); - for (const auto& path : paths) { - if (const SkPath* glyphPath = path.glyph->path()) { - run->appendPathGlyph(*glyphPath, path.position, strikeSpec.strikeToSourceRatio(), - false); +void GrTextBlob::SubRun::appendGlyphs(const SkZip& drawables) { + GrTextStrike* grStrike = fStrike.get(); + SkScalar strikeToSource = fStrikeSpec.strikeToSourceRatio(); + uint32_t glyphCursor = fGlyphStartIndex; + size_t vertexCursor = fVertexStartIndex; + bool hasW = this->hasW(); + GrColor color = this->color(); + // glyphs drawn in perspective must always have a w coord. + SkASSERT(hasW || !fBlob->fInitialViewMatrix.hasPerspective()); + size_t vertexStride = GetVertexStride(fMaskFormat, hasW); + // We always write the third position component used by SDFs. If it is unused it gets + // overwritten. Similarly, we always write the color and the blob will later overwrite it + // with texture coords if it is unused. + size_t colorOffset = hasW ? sizeof(SkPoint3) : sizeof(SkPoint); + for (auto [variant, pos] : drawables) { + SkGlyph* skGlyph = variant; + GrGlyph* grGlyph = grStrike->getGlyph(*skGlyph); + // Only floor the device coordinates. + SkRect dstRect; + if (!this->needsTransform()) { + pos = {SkScalarFloorToScalar(pos.x()), SkScalarFloorToScalar(pos.y())}; + dstRect = grGlyph->destRect(pos); + } else { + dstRect = grGlyph->destRect(pos, strikeToSource); } + + this->joinGlyphBounds(dstRect); + + intptr_t vertex = reinterpret_cast(fBlob->fVertices + vertexCursor); + + // V0 + *reinterpret_cast(vertex) = {dstRect.fLeft, dstRect.fTop, 1.f}; + *reinterpret_cast(vertex + colorOffset) = color; + vertex += vertexStride; + + // V1 + *reinterpret_cast(vertex) = {dstRect.fLeft, dstRect.fBottom, 1.f}; + *reinterpret_cast(vertex + colorOffset) = color; + vertex += vertexStride; + + // V2 + *reinterpret_cast(vertex) = {dstRect.fRight, dstRect.fTop, 1.f}; + *reinterpret_cast(vertex + colorOffset) = color; + vertex += vertexStride; + + // V3 + *reinterpret_cast(vertex) = {dstRect.fRight, dstRect.fBottom, 1.f}; + *reinterpret_cast(vertex + colorOffset) = color; + + vertexCursor += vertexStride * kVerticesPerGlyph; + fBlob->fGlyphs[glyphCursor++] = grGlyph; } + SkASSERT(glyphCursor == fGlyphEndIndex); + SkASSERT(vertexCursor == fVertexEndIndex); +} + +void GrTextBlob::addSingleMaskFormat( + SubRunType type, + const SkZip& drawables, + const SkStrikeSpec& strikeSpec, + GrMaskFormat format) { + this->makeSubRun(type, drawables, strikeSpec, format); } -void GrTextBlob::processDevicePaths(SkSpan paths) { - Run* run = this->currentRun(); +void GrTextBlob::addMultiMaskFormat( + SubRunType type, + const SkZip& drawables, + const SkStrikeSpec& strikeSpec) { this->setHasBitmap(); - for (const auto& path : paths) { - SkPoint pt{SkScalarFloorToScalar(path.position.fX), - SkScalarFloorToScalar(path.position.fY)}; - // TODO: path should always be set. Remove when proven. - if (const SkPath* glyphPath = path.glyph->path()) { - run->appendPathGlyph(*glyphPath, pt, SK_Scalar1, true); + if (drawables.empty()) { return; } + + auto glyphSpan = drawables.get<0>(); + SkGlyph* glyph = glyphSpan[0]; + GrMaskFormat format = GrGlyph::FormatFromSkGlyph(glyph->maskFormat()); + size_t startIndex = 0; + for (size_t i = 1; i < drawables.size(); i++) { + glyph = glyphSpan[i]; + GrMaskFormat nextFormat = GrGlyph::FormatFromSkGlyph(glyph->maskFormat()); + if (format != nextFormat) { + auto sameFormat = drawables.subspan(startIndex, i - startIndex); + this->addSingleMaskFormat(type, sameFormat, strikeSpec, format); + format = nextFormat; + startIndex = i; } } + auto sameFormat = drawables.last(drawables.size() - startIndex); + this->addSingleMaskFormat(type, sameFormat, strikeSpec, format); } -void GrTextBlob::processSourceSDFT(SkSpan masks, - const SkStrikeSpec& strikeSpec, - const SkFont& runFont, - SkScalar minScale, - SkScalar maxScale, - bool hasWCoord) { - - Run* run = this->currentRun(); - run->setSubRunHasDistanceFields( - runFont.getEdging() == SkFont::Edging::kSubpixelAntiAlias, - runFont.hasSomeAntiAliasing(), - hasWCoord); +void GrTextBlob::addSDFT(const SkZip& drawables, + const SkStrikeSpec& strikeSpec, + const SkFont& runFont, + SkScalar minScale, + SkScalar maxScale) { + this->setHasDistanceField(); this->setMinAndMaxScale(minScale, maxScale); - run->setupFont(strikeSpec); - sk_sp currStrike = strikeSpec.findOrCreateGrStrike(fStrikeCache); - for (const auto& mask : masks) { - run->appendSourceSpaceGlyph( - currStrike, *mask.glyph, mask.position, strikeSpec.strikeToSourceRatio()); - } -} -void GrTextBlob::processSourceFallback(SkSpan masks, - const SkStrikeSpec& strikeSpec, - bool hasW) { - Run* run = this->currentRun(); + SubRun* subRun = this->makeSubRun(kTransformedSDFT, drawables, strikeSpec, kA8_GrMaskFormat); + subRun->setUseLCDText(runFont.getEdging() == SkFont::Edging::kSubpixelAntiAlias); + subRun->setAntiAliased(runFont.hasSomeAntiAliasing()); +} - auto subRun = run->initARGBFallback(); - sk_sp grStrike = strikeSpec.findOrCreateGrStrike(fStrikeCache); - subRun->setStrike(grStrike); - subRun->setHasWCoord(hasW); +void GrTextBlob::processDeviceMasks(const SkZip& drawables, + const SkStrikeSpec& strikeSpec) { + this->addMultiMaskFormat(kDirectMask, drawables, strikeSpec); +} +void GrTextBlob::processSourcePaths(const SkZip& drawables, + const SkFont& runFont, + const SkStrikeSpec& strikeSpec) { this->setHasBitmap(); - run->setupFont(strikeSpec); - for (const auto& mask : masks) { - run->appendSourceSpaceGlyph - (grStrike, *mask.glyph, mask.position, strikeSpec.strikeToSourceRatio()); + SubRun& subRun = fSubRuns.emplace_back(this, strikeSpec); + subRun.setAntiAliased(runFont.hasSomeAntiAliasing()); + for (auto [variant, pos] : drawables) { + subRun.fPaths.emplace_back(*variant.path(), pos); } } -void GrTextBlob::processDeviceFallback(SkSpan masks, - const SkStrikeSpec& strikeSpec) { - Run* run = this->currentRun(); - this->setHasBitmap(); - sk_sp grStrike = strikeSpec.findOrCreateGrStrike(fStrikeCache); - auto subRun = run->initARGBFallback(); - run->setupFont(strikeSpec); - subRun->setStrike(grStrike); - for (const auto& mask : masks) { - run->appendDeviceSpaceGlyph(grStrike, *mask.glyph, mask.position); - } +void GrTextBlob::processSourceSDFT(const SkZip& drawables, + const SkStrikeSpec& strikeSpec, + const SkFont& runFont, + SkScalar minScale, + SkScalar maxScale) { + this->addSDFT(drawables, strikeSpec, runFont, minScale, maxScale); +} + +void GrTextBlob::processSourceMasks(const SkZip& drawables, + const SkStrikeSpec& strikeSpec) { + this->addMultiMaskFormat(kTransformedMask, drawables, strikeSpec); } #if GR_TEST_UTILS @@ -855,16 +674,15 @@ std::unique_ptr GrTextContext::createOp_TestingOnly(GrRecordingContext auto glyphRunList = builder.useGlyphRunList(); sk_sp blob; if (!glyphRunList.empty()) { - blob = direct->priv().getTextBlobCache()->makeBlob(glyphRunList, color, strikeCache); - // Use the text and textLen below, because we don't want to mess with the paint. - SkScalerContextFlags scalerContextFlags = ComputeScalerContextFlags(rtc->colorInfo()); + blob = direct->priv().getTextBlobCache()->makeBlob( + glyphRunList, strikeCache, viewMatrix, color, false); blob->generateFromGlyphRunList( *context->priv().caps()->shaderCaps(), textContext->fOptions, - skPaint, scalerContextFlags, viewMatrix, surfaceProps, + skPaint, viewMatrix, surfaceProps, glyphRunList, rtc->textTarget()->glyphPainter()); } - return blob->test_makeOp(textLen, 0, 0, viewMatrix, x, y, skPaint, filteredColor, surfaceProps, + return blob->test_makeOp(textLen, viewMatrix, x, y, skPaint, filteredColor, surfaceProps, textContext->dfAdjustTable(), rtc->textTarget()); } @@ -874,44 +692,24 @@ std::unique_ptr GrTextContext::createOp_TestingOnly(GrRecordingContext SkGlyphRunListPainter::ScopedBuffers::ScopedBuffers(SkGlyphRunListPainter* painter, size_t size) : fPainter{painter} { fPainter->fDrawable.ensureSize(size); - if (fPainter->fMaxRunSize < size) { - fPainter->fMaxRunSize = size; - - fPainter->fPositions.reset(size); - fPainter->fPackedGlyphIDs.reset(size); - fPainter->fGlyphPos.reset(size); - } } SkGlyphRunListPainter::ScopedBuffers::~ScopedBuffers() { fPainter->fDrawable.reset(); - fPainter->fPaths.clear(); - fPainter->fARGBGlyphsIDs.clear(); - fPainter->fARGBPositions.clear(); - - if (fPainter->fMaxRunSize > 200) { - fPainter->fMaxRunSize = 0; - fPainter->fPositions.reset(); - fPainter->fPackedGlyphIDs.reset(); - fPainter->fGlyphPos.reset(); - fPainter->fPaths.shrink_to_fit(); - fPainter->fARGBGlyphsIDs.shrink_to_fit(); - fPainter->fARGBPositions.shrink_to_fit(); - } + fPainter->fRejects.reset(); } SkVector SkGlyphPositionRoundingSpec::HalfAxisSampleFreq(bool isSubpixel, SkAxisAlignment axisAlignment) { if (!isSubpixel) { return {SK_ScalarHalf, SK_ScalarHalf}; } else { - static constexpr SkScalar kSubpixelRounding = SkFixedToScalar(SkGlyph::kSubpixelRound); switch (axisAlignment) { case kX_SkAxisAlignment: - return {kSubpixelRounding, SK_ScalarHalf}; + return {SkPackedGlyphID::kSubpixelRound, SK_ScalarHalf}; case kY_SkAxisAlignment: - return {SK_ScalarHalf, kSubpixelRounding}; + return {SK_ScalarHalf, SkPackedGlyphID::kSubpixelRound}; case kNone_SkAxisAlignment: - return {kSubpixelRounding, kSubpixelRounding}; + return {SkPackedGlyphID::kSubpixelRound, SkPackedGlyphID::kSubpixelRound}; } } @@ -925,8 +723,16 @@ SkIPoint SkGlyphPositionRoundingSpec::IgnorePositionMask( (!isSubpixel || axisAlignment == kX_SkAxisAlignment) ? 0 : ~0); } -SkGlyphPositionRoundingSpec::SkGlyphPositionRoundingSpec(bool isSubpixel, - SkAxisAlignment axisAlignment) - : halfAxisSampleFreq{HalfAxisSampleFreq(isSubpixel, axisAlignment)} - , ignorePositionMask{IgnorePositionMask(isSubpixel, axisAlignment)} { +SkIPoint SkGlyphPositionRoundingSpec::IgnorePositionFieldMask(bool isSubpixel, + SkAxisAlignment axisAlignment) { + SkIPoint ignoreMask = IgnorePositionMask(isSubpixel, axisAlignment); + SkIPoint answer{ignoreMask.x() & SkPackedGlyphID::kXYFieldMask.x(), + ignoreMask.y() & SkPackedGlyphID::kXYFieldMask.y()}; + return answer; } + +SkGlyphPositionRoundingSpec::SkGlyphPositionRoundingSpec( + bool isSubpixel,SkAxisAlignment axisAlignment) + : halfAxisSampleFreq{HalfAxisSampleFreq(isSubpixel, axisAlignment)} + , ignorePositionMask{IgnorePositionMask(isSubpixel, axisAlignment)} + , ignorePositionFieldMask {IgnorePositionFieldMask(isSubpixel, axisAlignment)}{ } diff --git a/third_party/skia/src/core/SkGlyphRunPainter.h b/third_party/skia/src/core/SkGlyphRunPainter.h index a5aff15cd5fd..5866a9f52ceb 100644 --- a/third_party/skia/src/core/SkGlyphRunPainter.h +++ b/third_party/skia/src/core/SkGlyphRunPainter.h @@ -35,10 +35,12 @@ struct SkGlyphPositionRoundingSpec { SkGlyphPositionRoundingSpec(bool isSubpixel, SkAxisAlignment axisAlignment); const SkVector halfAxisSampleFreq; const SkIPoint ignorePositionMask; + const SkIPoint ignorePositionFieldMask; private: static SkVector HalfAxisSampleFreq(bool isSubpixel, SkAxisAlignment axisAlignment); static SkIPoint IgnorePositionMask(bool isSubpixel, SkAxisAlignment axisAlignment); + static SkIPoint IgnorePositionFieldMask(bool isSubpixel, SkAxisAlignment axisAlignment); }; class SkStrikeCommon { @@ -103,37 +105,6 @@ class SkGlyphRunListPainter { // TODO: Remove once I can hoist ensureBuffers above the list for loop in all cases. ScopedBuffers SK_WARN_UNUSED_RESULT ensureBuffers(const SkGlyphRun& glyphRun); - /** - * @param fARGBPositions in source space - * @param fARGBGlyphsIDs the glyphs to process - * @param fGlyphPos used as scratch space - * @param maxSourceGlyphDimension the longest dimension of any glyph as if all fARGBGlyphsIDs - * were drawn in source space (as if viewMatrix were identity) - */ - void processARGBFallback(SkScalar maxSourceGlyphDimension, - const SkPaint& runPaint, - const SkFont& runFont, - const SkMatrix& viewMatrix, - SkGlyphRunPainterInterface* process); - - static SkSpan DeviceSpacePackedGlyphIDs( - const SkGlyphPositionRoundingSpec& roundingSpec, - const SkMatrix& viewMatrix, - const SkPoint& origin, - int n, - const SkGlyphID* glyphIDs, - const SkPoint* positions, - SkPoint* mappedPositions, - SkPackedGlyphID* results); - - static SkSpan SourceSpacePackedGlyphIDs( - const SkPoint& origin, - int n, - const SkGlyphID* glyphIDs, - const SkPoint* positions, - SkPoint* mappedPositions, - SkPackedGlyphID* results); - // The props as on the actual device. const SkSurfaceProps fDeviceProps; // The props for when the bitmap device can't draw LCD text. @@ -144,17 +115,7 @@ class SkGlyphRunListPainter { SkStrikeForGPUCacheInterface* const fStrikeCache; SkDrawableGlyphBuffer fDrawable; - - size_t fMaxRunSize{0}; - SkAutoTMalloc fPositions; - SkAutoTMalloc fPackedGlyphIDs; - SkAutoTMalloc fGlyphPos; - - std::vector fPaths; - - // Vectors for tracking ARGB fallback information. - std::vector fARGBGlyphsIDs; - std::vector fARGBPositions; + SkSourceGlyphBuffer fRejects; }; // SkGlyphRunPainterInterface are all the ways that Ganesh generates glyphs. The first @@ -173,30 +134,21 @@ class SkGlyphRunPainterInterface { public: virtual ~SkGlyphRunPainterInterface() = default; - virtual void startRun(const SkGlyphRun& glyphRun, bool useSDFT) = 0; - - virtual void processDeviceMasks(SkSpan masks, + virtual void processDeviceMasks(const SkZip& drawables, const SkStrikeSpec& strikeSpec) = 0; - virtual void processSourcePaths(SkSpan paths, + virtual void processSourceMasks(const SkZip& drawables, const SkStrikeSpec& strikeSpec) = 0; - virtual void processDevicePaths(SkSpan paths) = 0; + virtual void processSourcePaths(const SkZip& drawables, + const SkFont& runFont, + const SkStrikeSpec& strikeSpec) = 0; - virtual void processSourceSDFT(SkSpan masks, + virtual void processSourceSDFT(const SkZip& drawables, const SkStrikeSpec& strikeSpec, const SkFont& runFont, SkScalar minScale, - SkScalar maxScale, - bool hasWCoord) = 0; - - virtual void processSourceFallback(SkSpan masks, - const SkStrikeSpec& strikeSpec, - bool hasW) = 0; - - virtual void processDeviceFallback(SkSpan masks, - const SkStrikeSpec& strikeSpec) = 0; - + SkScalar maxScale) = 0; }; #endif // SkGlyphRunPainter_DEFINED diff --git a/third_party/skia/src/core/SkGpuBlurUtils.cpp b/third_party/skia/src/core/SkGpuBlurUtils.cpp index f7556019af03..2b709233443c 100644 --- a/third_party/skia/src/core/SkGpuBlurUtils.cpp +++ b/third_party/skia/src/core/SkGpuBlurUtils.cpp @@ -76,7 +76,7 @@ static void convolve_gaussian_1d(GrRenderTargetContext* renderTargetContext, const SkIRect& dstRect, const SkIPoint& srcOffset, sk_sp proxy, - GrColorType srcColorType, + SkAlphaType srcAlphaType, Direction direction, int radius, float sigma, @@ -84,7 +84,7 @@ static void convolve_gaussian_1d(GrRenderTargetContext* renderTargetContext, int bounds[2]) { GrPaint paint; std::unique_ptr conv(GrGaussianConvolutionFragmentProcessor::Make( - std::move(proxy), srcColorType, direction, radius, sigma, mode, bounds)); + std::move(proxy), srcAlphaType, direction, radius, sigma, mode, bounds)); paint.addColorFragmentProcessor(std::move(conv)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); SkMatrix localMatrix = SkMatrix::MakeTrans(-SkIntToScalar(srcOffset.x()), @@ -152,6 +152,7 @@ static std::unique_ptr convolve_gaussian_2d(GrRecordingCo static std::unique_ptr convolve_gaussian(GrRecordingContext* context, sk_sp srcProxy, GrColorType srcColorType, + SkAlphaType srcAlphaType, const SkIPoint& proxyOffset, const SkIRect& srcRect, const SkIPoint& srcOffset, @@ -190,7 +191,7 @@ static std::unique_ptr convolve_gaussian(GrRecordingConte if (GrTextureDomain::kIgnore_Mode == mode) { *contentRect = dstRect; convolve_gaussian_1d(dstRenderTargetContext.get(), clip, dstRect, netOffset, - std::move(srcProxy), srcColorType, direction, radius, sigma, + std::move(srcProxy), srcAlphaType, direction, radius, sigma, GrTextureDomain::kIgnore_Mode, bounds); return dstRenderTargetContext; } @@ -245,16 +246,16 @@ static std::unique_ptr convolve_gaussian(GrRecordingConte if (midRect.isEmpty()) { // Blur radius covers srcBounds; use bounds over entire draw convolve_gaussian_1d(dstRenderTargetContext.get(), clip, dstRect, netOffset, - std::move(srcProxy), srcColorType, direction, radius, sigma, mode, + std::move(srcProxy), srcAlphaType, direction, radius, sigma, mode, bounds); } else { // Draw right and left margins with bounds; middle without. - convolve_gaussian_1d(dstRenderTargetContext.get(), clip, leftRect, netOffset, - srcProxy, srcColorType, direction, radius, sigma, mode, bounds); - convolve_gaussian_1d(dstRenderTargetContext.get(), clip, rightRect, netOffset, - srcProxy, srcColorType, direction, radius, sigma, mode, bounds); + convolve_gaussian_1d(dstRenderTargetContext.get(), clip, leftRect, netOffset, srcProxy, + srcAlphaType, direction, radius, sigma, mode, bounds); + convolve_gaussian_1d(dstRenderTargetContext.get(), clip, rightRect, netOffset, srcProxy, + srcAlphaType, direction, radius, sigma, mode, bounds); convolve_gaussian_1d(dstRenderTargetContext.get(), clip, midRect, netOffset, - std::move(srcProxy), srcColorType, direction, radius, sigma, + std::move(srcProxy), srcAlphaType, direction, radius, sigma, GrTextureDomain::kIgnore_Mode, bounds); } @@ -267,6 +268,7 @@ static std::unique_ptr convolve_gaussian(GrRecordingConte static sk_sp decimate(GrRecordingContext* context, sk_sp srcProxy, GrColorType srcColorType, + SkAlphaType srcAlphaType, const SkIPoint& proxyOffset, SkIPoint* srcOffset, SkIRect* contentRect, @@ -318,8 +320,10 @@ static sk_sp decimate(GrRecordingContext* context, } GrPaint paint; + auto fp = GrSimpleTextureEffect::Make(std::move(srcProxy), srcAlphaType, SkMatrix::I(), + GrSamplerState::Filter::kBilerp); if (GrTextureDomain::kIgnore_Mode != mode && i == 1) { - // GrTextureDomainEffect does not support kRepeat_Mode with GrSamplerState::Filter. + // GrDomainEffect does not support kRepeat_Mode with GrSamplerState::Filter. GrTextureDomain::Mode modeForScaling = GrTextureDomain::kRepeat_Mode == mode ? GrTextureDomain::kDecal_Mode : mode; @@ -335,21 +339,13 @@ static sk_sp decimate(GrRecordingContext* context, domain.fTop = domain.fBottom = SkScalarAve(domain.fTop, domain.fBottom); } domain.offset(proxyOffset.x(), proxyOffset.y()); - auto fp = GrTextureDomainEffect::Make(std::move(srcProxy), - srcColorType, - SkMatrix::I(), - domain, - modeForScaling, - GrSamplerState::Filter::kBilerp); - paint.addColorFragmentProcessor(std::move(fp)); + fp = GrDomainEffect::Make(std::move(fp), domain, modeForScaling, true); srcRect.offset(-(*srcOffset)); // TODO: consume the srcOffset in both first draws and always set it to zero // back in GaussianBlur srcOffset->set(0, 0); - } else { - paint.addColorTextureProcessor(std::move(srcProxy), srcColorType, SkMatrix::I(), - GrSamplerState::ClampBilerp()); } + paint.addColorFragmentProcessor(std::move(fp)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); dstRenderTargetContext->fillRectToRect(GrFixedClip::Disabled(), std::move(paint), GrAA::kNo, @@ -391,6 +387,7 @@ static std::unique_ptr reexpand( } GrColorType srcColorType = srcRenderTargetContext->colorInfo().colorType(); + SkAlphaType srcAlphaType = srcRenderTargetContext->colorInfo().alphaType(); srcRenderTargetContext = nullptr; // no longer needed @@ -404,9 +401,9 @@ static std::unique_ptr reexpand( GrPaint paint; SkRect domain = GrTextureDomain::MakeTexelDomain(localSrcBounds, GrTextureDomain::kClamp_Mode, GrTextureDomain::kClamp_Mode); - auto fp = GrTextureDomainEffect::Make(std::move(srcProxy), srcColorType, SkMatrix::I(), domain, - GrTextureDomain::kClamp_Mode, + auto fp = GrSimpleTextureEffect::Make(std::move(srcProxy), srcAlphaType, SkMatrix::I(), GrSamplerState::Filter::kBilerp); + fp = GrDomainEffect::Make(std::move(fp), domain, GrTextureDomain::kClamp_Mode, true); paint.addColorFragmentProcessor(std::move(fp)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); GrFixedClip clip(SkIRect::MakeWH(finalW, finalH)); @@ -426,7 +423,7 @@ namespace SkGpuBlurUtils { std::unique_ptr GaussianBlur(GrRecordingContext* context, sk_sp srcProxy, GrColorType srcColorType, - SkAlphaType srcAT, + SkAlphaType srcAlphaType, const SkIPoint& proxyOffset, sk_sp colorSpace, const SkIRect& dstBounds, @@ -484,9 +481,10 @@ std::unique_ptr GaussianBlur(GrRecordingContext* context, GrTextureDomain::Mode currDomainMode = mode; if (scaleFactorX > 1 || scaleFactorY > 1) { - srcProxy = decimate(context, std::move(srcProxy), srcColorType, localProxyOffset, - &srcOffset, &localSrcBounds, scaleFactorX, scaleFactorY, radiusX, - radiusY, currDomainMode, finalW, finalH, colorSpace); + srcProxy = + decimate(context, std::move(srcProxy), srcColorType, srcAlphaType, localProxyOffset, + &srcOffset, &localSrcBounds, scaleFactorX, scaleFactorY, radiusX, radiusY, + currDomainMode, finalW, finalH, colorSpace); if (!srcProxy) { return nullptr; } @@ -504,9 +502,9 @@ std::unique_ptr GaussianBlur(GrRecordingContext* context, scale_irect_roundout(&srcRect, 1.0f / scaleFactorX, 1.0f / scaleFactorY); if (sigmaX > 0.0f) { dstRenderTargetContext = convolve_gaussian( - context, std::move(srcProxy), srcColorType, localProxyOffset, srcRect, srcOffset, - Direction::kX, radiusX, sigmaX, &localSrcBounds, currDomainMode, finalW, finalH, - colorSpace, xFit); + context, std::move(srcProxy), srcColorType, srcAlphaType, localProxyOffset, srcRect, + srcOffset, Direction::kX, radiusX, sigmaX, &localSrcBounds, currDomainMode, finalW, + finalH, colorSpace, xFit); if (!dstRenderTargetContext) { return nullptr; } @@ -528,9 +526,9 @@ std::unique_ptr GaussianBlur(GrRecordingContext* context, if (sigmaY > 0.0f) { dstRenderTargetContext = convolve_gaussian( - context, std::move(srcProxy), srcColorType, localProxyOffset, srcRect, srcOffset, - Direction::kY, radiusY, sigmaY, &localSrcBounds, currDomainMode, finalW, finalH, - colorSpace, yFit); + context, std::move(srcProxy), srcColorType, srcAlphaType, localProxyOffset, srcRect, + srcOffset, Direction::kY, radiusY, sigmaY, &localSrcBounds, currDomainMode, finalW, + finalH, colorSpace, yFit); if (!dstRenderTargetContext) { return nullptr; } diff --git a/third_party/skia/src/core/SkGraphics.cpp b/third_party/skia/src/core/SkGraphics.cpp index 5db7daa1fe37..9bc1fdc695f8 100644 --- a/third_party/skia/src/core/SkGraphics.cpp +++ b/third_party/skia/src/core/SkGraphics.cpp @@ -26,7 +26,6 @@ #include "src/core/SkStrikeCache.h" #include "src/core/SkTSearch.h" #include "src/core/SkTypefaceCache.h" -#include "src/utils/SkUTF.h" #include diff --git a/third_party/skia/src/core/SkICC.cpp b/third_party/skia/src/core/SkICC.cpp index 78e4a90f06c3..d6a29fcde330 100644 --- a/third_party/skia/src/core/SkICC.cpp +++ b/third_party/skia/src/core/SkICC.cpp @@ -266,16 +266,21 @@ const char* get_color_profile_description(const skcms_TransferFunction& fn, } static void get_color_profile_tag(char dst[kICCDescriptionTagSize], - const skcms_TransferFunction& fn, - const skcms_Matrix3x3& toXYZD50) { + const skcms_TransferFunction& fn, + const skcms_Matrix3x3& toXYZD50) { SkASSERT(dst); if (const char* description = get_color_profile_description(fn, toXYZD50)) { SkASSERT(strlen(description) < kICCDescriptionTagSize); - strncpy(dst, description, kICCDescriptionTagSize); + + // Without these extra (), GCC would warn us something like + // ... sepecified bound 44 equals destination size ... + // which, yeah, is exactly what we're trying to do, copy the string + // and zero the rest of the destination if any. Sheesh. + (strncpy(dst, description, kICCDescriptionTagSize)); // "If the length of src is less than n, strncpy() writes additional // null bytes to dest to ensure that a total of n bytes are written." } else { - strncpy(dst, kDescriptionTagBodyPrefix, sizeof(kDescriptionTagBodyPrefix)); + memcpy(dst, kDescriptionTagBodyPrefix, sizeof(kDescriptionTagBodyPrefix)); SkMD5 md5; md5.write(&toXYZD50, sizeof(toXYZD50)); static_assert(sizeof(fn) == sizeof(float) * 7, "packed"); diff --git a/third_party/skia/src/core/SkImagePriv.h b/third_party/skia/src/core/SkImagePriv.h index 0fd44338df34..deeb86a637f3 100644 --- a/third_party/skia/src/core/SkImagePriv.h +++ b/third_party/skia/src/core/SkImagePriv.h @@ -52,7 +52,7 @@ sk_sp SkMakeBitmapShaderForPaint(const SkPaint& paint, const SkBitmap& * SkImageInfo, or the bitmap's pixels cannot be accessed, this will return * nullptr. */ -extern SK_API sk_sp SkMakeImageFromRasterBitmap(const SkBitmap&, SkCopyPixelsMode); +extern SK_SPI sk_sp SkMakeImageFromRasterBitmap(const SkBitmap&, SkCopyPixelsMode); // Given an image created from SkNewImageFromBitmap, return its pixelref. This // may be called to see if the surface and the image share the same pixelref, diff --git a/third_party/skia/src/core/SkLatticeIter.h b/third_party/skia/src/core/SkLatticeIter.h index 16eef21b7a61..7bcfe98a4ecf 100644 --- a/third_party/skia/src/core/SkLatticeIter.h +++ b/third_party/skia/src/core/SkLatticeIter.h @@ -18,7 +18,7 @@ struct SkRect; /** * Disect a lattice request into an sequence of src-rect / dst-rect pairs */ -class SK_API SkLatticeIter { +class SK_SPI SkLatticeIter { public: static bool Valid(int imageWidth, int imageHeight, const SkCanvas::Lattice& lattice); diff --git a/third_party/skia/src/core/SkMalloc.cpp b/third_party/skia/src/core/SkMalloc.cpp new file mode 100644 index 000000000000..b32242ad6a1a --- /dev/null +++ b/third_party/skia/src/core/SkMalloc.cpp @@ -0,0 +1,22 @@ +// 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 "include/private/SkMalloc.h" + +#include "src/core/SkSafeMath.h" + +void* sk_calloc_throw(size_t count, size_t elemSize) { + return sk_calloc_throw(SkSafeMath::Mul(count, elemSize)); +} + +void* sk_malloc_throw(size_t count, size_t elemSize) { + return sk_malloc_throw(SkSafeMath::Mul(count, elemSize)); +} + +void* sk_realloc_throw(void* buffer, size_t count, size_t elemSize) { + return sk_realloc_throw(buffer, SkSafeMath::Mul(count, elemSize)); +} + +void* sk_malloc_canfail(size_t count, size_t elemSize) { + return sk_malloc_canfail(SkSafeMath::Mul(count, elemSize)); +} diff --git a/third_party/skia/src/core/SkMallocPixelRef.cpp b/third_party/skia/src/core/SkMallocPixelRef.cpp index a9e14780cf58..d998029a2be4 100644 --- a/third_party/skia/src/core/SkMallocPixelRef.cpp +++ b/third_party/skia/src/core/SkMallocPixelRef.cpp @@ -10,25 +10,6 @@ #include "include/core/SkData.h" #include "include/core/SkImageInfo.h" #include "include/private/SkMalloc.h" -#include "src/core/SkSafeMath.h" - -void* sk_calloc_throw(size_t count, size_t elemSize) { - return sk_calloc_throw(SkSafeMath::Mul(count, elemSize)); -} - -void* sk_malloc_throw(size_t count, size_t elemSize) { - return sk_malloc_throw(SkSafeMath::Mul(count, elemSize)); -} - -void* sk_realloc_throw(void* buffer, size_t count, size_t elemSize) { - return sk_realloc_throw(buffer, SkSafeMath::Mul(count, elemSize)); -} - -void* sk_malloc_canfail(size_t count, size_t elemSize) { - return sk_malloc_canfail(SkSafeMath::Mul(count, elemSize)); -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// static bool is_valid(const SkImageInfo& info) { if (info.width() < 0 || info.height() < 0 || diff --git a/third_party/skia/src/core/SkMatrix44.cpp b/third_party/skia/src/core/SkMatrix44.cpp index 67e710bf0ed4..3af3747aeaf3 100644 --- a/third_party/skia/src/core/SkMatrix44.cpp +++ b/third_party/skia/src/core/SkMatrix44.cpp @@ -255,33 +255,35 @@ void SkMatrix44::set4x4(SkMScalar m_00, SkMScalar m_10, SkMScalar m_20, SkMScala /////////////////////////////////////////////////////////////////////////////// -void SkMatrix44::setTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { +SkMatrix44& SkMatrix44::setTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { this->setIdentity(); if (!dx && !dy && !dz) { - return; + return *this; } fMat[3][0] = dx; fMat[3][1] = dy; fMat[3][2] = dz; this->setTypeMask(kTranslate_Mask); + return *this; } -void SkMatrix44::preTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { +SkMatrix44& SkMatrix44::preTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { if (!dx && !dy && !dz) { - return; + return *this; } for (int i = 0; i < 4; ++i) { fMat[3][i] = fMat[0][i] * dx + fMat[1][i] * dy + fMat[2][i] * dz + fMat[3][i]; } this->recomputeTypeMask(); + return *this; } -void SkMatrix44::postTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { +SkMatrix44& SkMatrix44::postTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { if (!dx && !dy && !dz) { - return; + return *this; } if (this->getType() & kPerspective_Mask) { @@ -296,26 +298,28 @@ void SkMatrix44::postTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { fMat[3][2] += dz; this->recomputeTypeMask(); } + return *this; } /////////////////////////////////////////////////////////////////////////////// -void SkMatrix44::setScale(SkMScalar sx, SkMScalar sy, SkMScalar sz) { +SkMatrix44& SkMatrix44::setScale(SkMScalar sx, SkMScalar sy, SkMScalar sz) { this->setIdentity(); if (1 == sx && 1 == sy && 1 == sz) { - return; + return *this; } fMat[0][0] = sx; fMat[1][1] = sy; fMat[2][2] = sz; this->setTypeMask(kScale_Mask); + return *this; } -void SkMatrix44::preScale(SkMScalar sx, SkMScalar sy, SkMScalar sz) { +SkMatrix44& SkMatrix44::preScale(SkMScalar sx, SkMScalar sy, SkMScalar sz) { if (1 == sx && 1 == sy && 1 == sz) { - return; + return *this; } // The implementation matrix * pureScale can be shortcut @@ -327,11 +331,12 @@ void SkMatrix44::preScale(SkMScalar sx, SkMScalar sy, SkMScalar sz) { fMat[2][i] *= sz; } this->recomputeTypeMask(); + return *this; } -void SkMatrix44::postScale(SkMScalar sx, SkMScalar sy, SkMScalar sz) { +SkMatrix44& SkMatrix44::postScale(SkMScalar sx, SkMScalar sy, SkMScalar sz) { if (1 == sx && 1 == sy && 1 == sz) { - return; + return *this; } for (int i = 0; i < 4; i++) { @@ -340,6 +345,7 @@ void SkMatrix44::postScale(SkMScalar sx, SkMScalar sy, SkMScalar sz) { fMat[i][2] *= sz; } this->recomputeTypeMask(); + return *this; } /////////////////////////////////////////////////////////////////////////////// diff --git a/third_party/skia/src/core/SkMetaData.cpp b/third_party/skia/src/core/SkMetaData.cpp deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/core/SkModeColorFilter.cpp b/third_party/skia/src/core/SkModeColorFilter.cpp index bad042be1ccb..9712c9923618 100644 --- a/third_party/skia/src/core/SkModeColorFilter.cpp +++ b/third_party/skia/src/core/SkModeColorFilter.cpp @@ -19,7 +19,6 @@ #include "src/core/SkReadBuffer.h" #include "src/core/SkValidationUtils.h" #include "src/core/SkWriteBuffer.h" -#include "src/utils/SkUTF.h" ////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/third_party/skia/src/core/SkMultiPictureDraw.cpp b/third_party/skia/src/core/SkMultiPictureDraw.cpp deleted file mode 100644 index 837aa600b9cf..000000000000 --- a/third_party/skia/src/core/SkMultiPictureDraw.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright 2014 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/SkCanvas.h" -#include "include/core/SkMultiPictureDraw.h" -#include "include/core/SkPicture.h" -#include "src/core/SkCanvasPriv.h" -#include "src/core/SkTaskGroup.h" - -void SkMultiPictureDraw::DrawData::draw() { - fCanvas->drawPicture(fPicture, &fMatrix, fPaint); -} - -void SkMultiPictureDraw::DrawData::init(SkCanvas* canvas, const SkPicture* picture, - const SkMatrix* matrix, const SkPaint* paint) { - fPicture = SkRef(picture); - fCanvas = canvas; - if (matrix) { - fMatrix = *matrix; - } else { - fMatrix.setIdentity(); - } - if (paint) { - fPaint = new SkPaint(*paint); - } else { - fPaint = nullptr; - } -} - -void SkMultiPictureDraw::DrawData::Reset(SkTDArray& data) { - for (int i = 0; i < data.count(); ++i) { - data[i].fPicture->unref(); - delete data[i].fPaint; - } - data.rewind(); -} - -////////////////////////////////////////////////////////////////////////////////////// - -SkMultiPictureDraw::SkMultiPictureDraw(int reserve) { - if (reserve > 0) { - fGPUDrawData.setReserve(reserve); - fThreadSafeDrawData.setReserve(reserve); - } -} - -void SkMultiPictureDraw::reset() { - DrawData::Reset(fGPUDrawData); - DrawData::Reset(fThreadSafeDrawData); -} - -void SkMultiPictureDraw::add(SkCanvas* canvas, - const SkPicture* picture, - const SkMatrix* matrix, - const SkPaint* paint) { - if (nullptr == canvas || nullptr == picture) { - SkDEBUGFAIL("parameters to SkMultiPictureDraw::add should be non-nullptr"); - return; - } - - SkTDArray& array = canvas->getGrContext() ? fGPUDrawData : fThreadSafeDrawData; - array.append()->init(canvas, picture, matrix, paint); -} - -class AutoMPDReset : SkNoncopyable { - SkMultiPictureDraw* fMPD; -public: - AutoMPDReset(SkMultiPictureDraw* mpd) : fMPD(mpd) {} - ~AutoMPDReset() { fMPD->reset(); } -}; - -//#define FORCE_SINGLE_THREAD_DRAWING_FOR_TESTING - -void SkMultiPictureDraw::draw(bool flush) { - AutoMPDReset mpdreset(this); - -#ifdef FORCE_SINGLE_THREAD_DRAWING_FOR_TESTING - for (int i = 0; i < fThreadSafeDrawData.count(); ++i) { - fThreadSafeDrawData[i].draw(); - } -#else - SkTaskGroup().batch(fThreadSafeDrawData.count(), [&](int i) { - fThreadSafeDrawData[i].draw(); - }); -#endif - - // N.B. we could get going on any GPU work from this main thread while the CPU work runs. - // But in practice, we've either got GPU work or CPU work, not both. - - const int count = fGPUDrawData.count(); - if (0 == count) { - return; - } - - for (int i = 0; i < count; ++i) { - const DrawData& data = fGPUDrawData[i]; - SkCanvas* canvas = data.fCanvas; - const SkPicture* picture = data.fPicture; - - canvas->drawPicture(picture, &data.fMatrix, data.fPaint); - if (flush) { - canvas->flush(); - } - } -} diff --git a/third_party/skia/src/core/SkNormalFlatSource.h b/third_party/skia/src/core/SkNormalFlatSource.h index a7960b0ac603..7fce88966271 100644 --- a/third_party/skia/src/core/SkNormalFlatSource.h +++ b/third_party/skia/src/core/SkNormalFlatSource.h @@ -10,7 +10,7 @@ #include "src/core/SkNormalSource.h" -class SK_API SkNormalFlatSourceImpl : public SkNormalSource { +class SkNormalFlatSourceImpl : public SkNormalSource { public: SkNormalFlatSourceImpl(){} diff --git a/third_party/skia/src/core/SkNormalSource.h b/third_party/skia/src/core/SkNormalSource.h index 49a5257779f5..1ef51b36acb3 100644 --- a/third_party/skia/src/core/SkNormalSource.h +++ b/third_party/skia/src/core/SkNormalSource.h @@ -20,7 +20,7 @@ class GrFragmentProcessor; /** Abstract class that generates or reads in normals for use by SkLightingShader. */ -class SK_API SkNormalSource : public SkFlattenable { +class SkNormalSource : public SkFlattenable { public: virtual ~SkNormalSource() override; diff --git a/third_party/skia/src/core/SkOSFile.h b/third_party/skia/src/core/SkOSFile.h index d2e59d002a6a..064cf7d60d09 100644 --- a/third_party/skia/src/core/SkOSFile.h +++ b/third_party/skia/src/core/SkOSFile.h @@ -22,8 +22,9 @@ #include "include/core/SkString.h" enum SkFILE_Flags { - kRead_SkFILE_Flag = 0x01, - kWrite_SkFILE_Flag = 0x02 + kRead_SkFILE_Flag = 0x01, + kWrite_SkFILE_Flag = 0x02, + kAppend_SkFILE_Flag = 0x04 }; SkFile* sk_fopen(const char path[], SkFILE_Flags); diff --git a/third_party/skia/src/core/SkOpts.cpp b/third_party/skia/src/core/SkOpts.cpp index ff330324a562..fe4344d8429a 100644 --- a/third_party/skia/src/core/SkOpts.cpp +++ b/third_party/skia/src/core/SkOpts.cpp @@ -84,6 +84,7 @@ namespace SkOpts { DEFINE_DEFAULT(hash_fn); DEFINE_DEFAULT(S32_alpha_D32_filter_DX); + DEFINE_DEFAULT(S32_alpha_D32_filter_DXDY); #undef DEFINE_DEFAULT #define M(st) (StageFn)SK_OPTS_NS::st, diff --git a/third_party/skia/src/core/SkOpts.h b/third_party/skia/src/core/SkOpts.h index 309b55018e16..dd1cc9d59298 100644 --- a/third_party/skia/src/core/SkOpts.h +++ b/third_party/skia/src/core/SkOpts.h @@ -45,7 +45,7 @@ namespace SkOpts { grayA_to_rgbA; // i.e. expand to color channels and premultiply extern void (*memset16)(uint16_t[], uint16_t, int); - extern void SK_API (*memset32)(uint32_t[], uint32_t, int); + extern void SK_SPI(*memset32)(uint32_t[], uint32_t, int); extern void (*memset64)(uint64_t[], uint64_t, int); extern void (*rect_memset16)(uint16_t[], uint16_t, int, size_t, int); @@ -61,9 +61,10 @@ namespace SkOpts { } // SkBitmapProcState optimized Shader, Sample, or Matrix procs. - // This is the only one that can use anything past SSE2/NEON. extern void (*S32_alpha_D32_filter_DX)(const SkBitmapProcState&, const uint32_t* xy, int count, SkPMColor*); + extern void (*S32_alpha_D32_filter_DXDY)(const SkBitmapProcState&, + const uint32_t* xy, int count, SkPMColor*); #define M(st) +1 // We can't necessarily express the type of SkJumper stage functions here, diff --git a/third_party/skia/src/core/SkPaintPriv.cpp b/third_party/skia/src/core/SkPaintPriv.cpp index cce22aad7935..4bf000235863 100644 --- a/third_party/skia/src/core/SkPaintPriv.cpp +++ b/third_party/skia/src/core/SkPaintPriv.cpp @@ -7,8 +7,10 @@ #include "include/core/SkColorFilter.h" #include "include/core/SkPaint.h" +#include "src/core/SkColorSpacePriv.h" #include "src/core/SkPaintPriv.h" #include "src/core/SkXfermodePriv.h" +#include "src/shaders/SkColorFilterShader.h" #include "src/shaders/SkShaderBase.h" static bool changes_alpha(const SkPaint& paint) { @@ -84,3 +86,19 @@ SkColor SkPaintPriv::ComputeLuminanceColor(const SkPaint& paint) { } return c; } + +void SkPaintPriv::RemoveColorFilter(SkPaint* p, SkColorSpace* dstCS) { + if (SkColorFilter* filter = p->getColorFilter()) { + if (SkShader* shader = p->getShader()) { + // SkColorFilterShader will modulate the shader color by paint alpha + // before applying the filter, so we'll reset it to opaque. + p->setShader(sk_make_sp(sk_ref_sp(shader), + p->getAlphaf(), + sk_ref_sp(filter))); + p->setAlphaf(1.0f); + } else { + p->setColor(filter->filterColor4f(p->getColor4f(), sk_srgb_singleton(), dstCS), dstCS); + } + p->setColorFilter(nullptr); + } +} diff --git a/third_party/skia/src/core/SkPaintPriv.h b/third_party/skia/src/core/SkPaintPriv.h index 1befb699d1ef..db6f635a1995 100644 --- a/third_party/skia/src/core/SkPaintPriv.h +++ b/third_party/skia/src/core/SkPaintPriv.h @@ -67,6 +67,13 @@ class SkPaintPriv { */ static SkReadPaintResult Unflatten(SkPaint* paint, SkReadBuffer& buffer, SkFont* font); + // If this paint has any color filter, fold it into the shader and/or paint color + // so that it draws the same but getColorFilter() returns nullptr. + // + // Since we may be filtering now, we need to know what color space to filter in, + // typically the color space of the device we're drawing into. + static void RemoveColorFilter(SkPaint*, SkColorSpace* dstCS); + private: static SkReadPaintResult Unflatten_PreV68(SkPaint* paint, SkReadBuffer& buffer, SkFont*); }; diff --git a/third_party/skia/src/core/SkPath.cpp b/third_party/skia/src/core/SkPath.cpp index 0847ea59108b..5679a9d18289 100644 --- a/third_party/skia/src/core/SkPath.cpp +++ b/third_party/skia/src/core/SkPath.cpp @@ -107,8 +107,8 @@ class SkAutoPathBoundsUpdate { } ~SkAutoPathBoundsUpdate() { - fPath->setConvexity(fDegenerate ? SkPath::kConvex_Convexity - : SkPath::kUnknown_Convexity); + fPath->setConvexityType(fDegenerate ? SkPathConvexityType::kConvex + : SkPathConvexityType::kUnknown); if ((fEmpty || fHasValidBounds) && fRect.isFinite()) { fPath->setBounds(fRect); } @@ -151,8 +151,8 @@ SkPath::SkPath() void SkPath::resetFields() { //fPathRef is assumed to have been emptied by the caller. fLastMoveToIndex = INITIAL_LASTMOVETOINDEX_VALUE; - fFillType = kWinding_FillType; - this->setConvexity(kUnknown_Convexity); + fFillType = SkToU8(SkPathFillType::kWinding); + this->setConvexityType(SkPathConvexityType::kUnknown); this->setFirstDirection(SkPathPriv::kUnknown_FirstDirection); // We don't touch Android's fSourcePath. It's used to track texture garbage collection, so we @@ -187,7 +187,7 @@ void SkPath::copyFields(const SkPath& that) { fIsVolatile = that.fIsVolatile; // Non-atomic assignment of atomic values. - this->setConvexity(that.getConvexityOrUnknown()); + this->setConvexityType(that.getConvexityTypeOrUnknown()); this->setFirstDirection(that.getFirstDirection()); } @@ -212,9 +212,9 @@ void SkPath::swap(SkPath& that) { that.fIsVolatile = iv; // Non-atomic swaps of atomic values. - Convexity c = this->getConvexityOrUnknown(); - this->setConvexity(that.getConvexityOrUnknown()); - that.setConvexity(c); + SkPathConvexityType c = this->getConvexityTypeOrUnknown(); + this->setConvexityType(that.getConvexityTypeOrUnknown()); + that.setConvexityType(c); uint8_t fd = this->getFirstDirection(); this->setFirstDirection(that.getFirstDirection()); @@ -271,7 +271,7 @@ static inline bool check_edge_against_rect(const SkPoint& p0, bool SkPath::conservativelyContainsRect(const SkRect& rect) const { // This only handles non-degenerate convex paths currently. - if (kConvex_Convexity != this->getConvexity()) { + if (!this->isConvex()) { return false; } @@ -455,7 +455,7 @@ static int rect_make_dir(SkScalar dx, SkScalar dy) { return ((0 != dx) << 0) | ((dx > 0 || dy > 0) << 1); } -bool SkPath::isRect(SkRect* rect, bool* isClosed, Direction* direction) const { +bool SkPath::isRect(SkRect* rect, bool* isClosed, SkPathDirection* direction) const { SkDEBUGCODE(this->validate();) int currVerb = 0; const SkPoint* pts = fPathRef->points(); @@ -559,13 +559,13 @@ void SkPath::setLastPt(SkScalar x, SkScalar y) { } // This is the public-facing non-const setConvexity(). -void SkPath::setConvexity(Convexity c) { - fConvexity.store(c, std::memory_order_relaxed); +void SkPath::setConvexityType(SkPathConvexityType c) { + fConvexity.store((uint8_t)c, std::memory_order_relaxed); } // Const hooks for working with fConvexity and fFirstDirection from const methods. -void SkPath::setConvexity(Convexity c) const { - fConvexity.store(c, std::memory_order_relaxed); +void SkPath::setConvexityType(SkPathConvexityType c) const { + fConvexity.store((uint8_t)c, std::memory_order_relaxed); } void SkPath::setFirstDirection(uint8_t d) const { fFirstDirection.store(d, std::memory_order_relaxed); @@ -579,7 +579,7 @@ uint8_t SkPath::getFirstDirection() const { #define DIRTY_AFTER_EDIT \ do { \ - this->setConvexity(kUnknown_Convexity); \ + this->setConvexityType(SkPathConvexityType::kUnknown); \ this->setFirstDirection(SkPathPriv::kUnknown_FirstDirection); \ } while (0) @@ -760,20 +760,20 @@ SkPath& SkPath::close() { /////////////////////////////////////////////////////////////////////////////// -static void assert_known_direction(int dir) { - SkASSERT(SkPath::kCW_Direction == dir || SkPath::kCCW_Direction == dir); +static void assert_known_direction(SkPathDirection dir) { + SkASSERT(SkPathDirection::kCW == dir || SkPathDirection::kCCW == dir); } -SkPath& SkPath::addRect(const SkRect& rect, Direction dir) { +SkPath& SkPath::addRect(const SkRect& rect, SkPathDirection dir) { return this->addRect(rect, dir, 0); } SkPath& SkPath::addRect(SkScalar left, SkScalar top, SkScalar right, - SkScalar bottom, Direction dir) { + SkScalar bottom, SkPathDirection dir) { return this->addRect(SkRect::MakeLTRB(left, top, right, bottom), dir, 0); } -SkPath& SkPath::addRect(const SkRect &rect, Direction dir, unsigned startIndex) { +SkPath& SkPath::addRect(const SkRect &rect, SkPathDirection dir, unsigned startIndex) { assert_known_direction(dir); this->setFirstDirection(this->hasOnlyMoveTos() ? (SkPathPriv::FirstDirection)dir : SkPathPriv::kUnknown_FirstDirection); @@ -903,18 +903,18 @@ static int build_arc_conics(const SkRect& oval, const SkVector& start, const SkV } SkPath& SkPath::addRoundRect(const SkRect& rect, const SkScalar radii[], - Direction dir) { + SkPathDirection dir) { SkRRect rrect; rrect.setRectRadii(rect, (const SkVector*) radii); return this->addRRect(rrect, dir); } -SkPath& SkPath::addRRect(const SkRRect& rrect, Direction dir) { +SkPath& SkPath::addRRect(const SkRRect& rrect, SkPathDirection dir) { // legacy start indices: 6 (CW) and 7(CCW) - return this->addRRect(rrect, dir, dir == kCW_Direction ? 6 : 7); + return this->addRRect(rrect, dir, dir == SkPathDirection::kCW ? 6 : 7); } -SkPath& SkPath::addRRect(const SkRRect &rrect, Direction dir, unsigned startIndex) { +SkPath& SkPath::addRRect(const SkRRect &rrect, SkPathDirection dir, unsigned startIndex) { assert_known_direction(dir); bool isRRect = hasOnlyMoveTos(); @@ -934,7 +934,7 @@ SkPath& SkPath::addRRect(const SkRRect &rrect, Direction dir, unsigned startInde SkAutoDisableDirectionCheck addc(this); // we start with a conic on odd indices when moving CW vs. even indices when moving CCW - const bool startsWithConic = ((startIndex & 1) == (dir == kCW_Direction)); + const bool startsWithConic = ((startIndex & 1) == (dir == SkPathDirection::kCW)); const SkScalar weight = SK_ScalarRoot2Over2; SkDEBUGCODE(int initialVerbCount = this->countVerbs()); @@ -946,7 +946,7 @@ SkPath& SkPath::addRRect(const SkRRect &rrect, Direction dir, unsigned startInde SkPath_RRectPointIterator rrectIter(rrect, dir, startIndex); // Corner iterator indices follow the collapsed radii model, // adjusted such that the start pt is "behind" the radii start pt. - const unsigned rectStartIndex = startIndex / 2 + (dir == kCW_Direction ? 0 : 1); + const unsigned rectStartIndex = startIndex / 2 + (dir == SkPathDirection::kCW ? 0 : 1); SkPath_RectPointIterator rectIter(bounds, dir, rectStartIndex); this->moveTo(rrectIter.current()); @@ -966,7 +966,7 @@ SkPath& SkPath::addRRect(const SkRRect &rrect, Direction dir, unsigned startInde this->close(); SkPathRef::Editor ed(&fPathRef); - ed.setIsRRect(isRRect, dir, startIndex % 8); + ed.setIsRRect(isRRect, dir == SkPathDirection::kCCW, startIndex % 8); SkASSERT(this->countVerbs() == initialVerbCount + kVerbs); } @@ -1006,7 +1006,7 @@ bool SkPath::isZeroLengthSincePoint(int startPtIndex) const { } SkPath& SkPath::addRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, - Direction dir) { + SkPathDirection dir) { assert_known_direction(dir); if (rx < 0 || ry < 0) { @@ -1018,12 +1018,12 @@ SkPath& SkPath::addRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry, return this->addRRect(rrect, dir); } -SkPath& SkPath::addOval(const SkRect& oval, Direction dir) { +SkPath& SkPath::addOval(const SkRect& oval, SkPathDirection dir) { // legacy start index: 1 return this->addOval(oval, dir, 1); } -SkPath& SkPath::addOval(const SkRect &oval, Direction dir, unsigned startPointIndex) { +SkPath& SkPath::addOval(const SkRect &oval, SkPathDirection dir, unsigned startPointIndex) { assert_known_direction(dir); /* If addOval() is called after previous moveTo(), @@ -1048,7 +1048,7 @@ SkPath& SkPath::addOval(const SkRect &oval, Direction dir, unsigned startPointIn SkPath_OvalPointIterator ovalIter(oval, dir, startPointIndex); // The corner iterator pts are tracking "behind" the oval/radii pts. - SkPath_RectPointIterator rectIter(oval, dir, startPointIndex + (dir == kCW_Direction ? 0 : 1)); + SkPath_RectPointIterator rectIter(oval, dir, startPointIndex + (dir == SkPathDirection::kCW ? 0 : 1)); const SkScalar weight = SK_ScalarRoot2Over2; this->moveTo(ovalIter.current()); @@ -1061,11 +1061,11 @@ SkPath& SkPath::addOval(const SkRect &oval, Direction dir, unsigned startPointIn SkPathRef::Editor ed(&fPathRef); - ed.setIsOval(isOval, kCCW_Direction == dir, startPointIndex % 4); + ed.setIsOval(isOval, SkPathDirection::kCCW == dir, startPointIndex % 4); return *this; } -SkPath& SkPath::addCircle(SkScalar x, SkScalar y, SkScalar r, Direction dir) { +SkPath& SkPath::addCircle(SkScalar x, SkScalar y, SkScalar r, SkPathDirection dir) { if (r > 0) { this->addOval(SkRect::MakeLTRB(x - r, y - r, x + r, y + r), dir); } @@ -1145,7 +1145,7 @@ SkPath& SkPath::arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAng // http://www.w3.org/TR/SVG/implnote.html#ArcConversionEndpointToCenter // Note that arcSweep bool value is flipped from the original implementation. SkPath& SkPath::arcTo(SkScalar rx, SkScalar ry, SkScalar angle, SkPath::ArcSize arcLarge, - SkPath::Direction arcSweep, SkScalar x, SkScalar y) { + SkPathDirection arcSweep, SkScalar x, SkScalar y) { this->injectMoveToIfNeeded(); SkPoint srcPts[2]; this->getLastPt(&srcPts[0]); @@ -1196,7 +1196,7 @@ SkPath& SkPath::arcTo(SkScalar rx, SkScalar ry, SkScalar angle, SkPath::ArcSize SkScalar scaleFactorSquared = SkTMax(1 / d - 0.25f, 0.f); SkScalar scaleFactor = SkScalarSqrt(scaleFactorSquared); - if (SkToBool(arcSweep) != SkToBool(arcLarge)) { // flipped from the original implementation + if ((arcSweep == SkPathDirection::kCCW) != SkToBool(arcLarge)) { // flipped from the original implementation scaleFactor = -scaleFactor; } delta.scale(scaleFactor); @@ -1208,9 +1208,9 @@ SkPath& SkPath::arcTo(SkScalar rx, SkScalar ry, SkScalar angle, SkPath::ArcSize SkScalar theta1 = SkScalarATan2(unitPts[0].fY, unitPts[0].fX); SkScalar theta2 = SkScalarATan2(unitPts[1].fY, unitPts[1].fX); SkScalar thetaArc = theta2 - theta1; - if (thetaArc < 0 && !arcSweep) { // arcSweep flipped from the original implementation + if (thetaArc < 0 && (arcSweep == SkPathDirection::kCW)) { // arcSweep flipped from the original implementation thetaArc += SK_ScalarPI * 2; - } else if (thetaArc > 0 && arcSweep) { // arcSweep flipped from the original implementation + } else if (thetaArc > 0 && (arcSweep != SkPathDirection::kCW)) { // arcSweep flipped from the original implementation thetaArc -= SK_ScalarPI * 2; } @@ -1270,7 +1270,7 @@ SkPath& SkPath::arcTo(SkScalar rx, SkScalar ry, SkScalar angle, SkPath::ArcSize } SkPath& SkPath::rArcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, SkPath::ArcSize largeArc, - SkPath::Direction sweep, SkScalar dx, SkScalar dy) { + SkPathDirection sweep, SkScalar dx, SkScalar dy) { SkPoint currentPoint; this->getLastPt(¤tPoint); return this->arcTo(rx, ry, xAxisRotate, largeArc, sweep, @@ -1294,7 +1294,7 @@ SkPath& SkPath::addArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAn // Index 1 is at startAngle == 0. SkScalar startIndex = std::fmod(startOver90I + 1.f, 4.f); startIndex = startIndex < 0 ? startIndex + 4.f : startIndex; - return this->addOval(oval, sweepAngle > 0 ? kCW_Direction : kCCW_Direction, + return this->addOval(oval, sweepAngle > 0 ? SkPathDirection::kCW : SkPathDirection::kCCW, (unsigned) startIndex); } } @@ -1597,7 +1597,7 @@ void SkPath::transform(const SkMatrix& matrix, SkPath* dst) const { matrix.mapPoints(ed.writablePoints(), ed.pathRef()->countPoints()); dst->setFirstDirection(SkPathPriv::kUnknown_FirstDirection); } else { - Convexity convexity = this->getConvexityOrUnknown(); + SkPathConvexityType convexity = this->getConvexityTypeOrUnknown(); SkPathRef::CreateTransformedCopy(&dst->fPathRef, *fPathRef.get(), matrix); @@ -1617,9 +1617,9 @@ void SkPath::transform(const SkMatrix& matrix, SkPath* dst) const { // check, and keep convex paths marked as such after a general transform... // if (matrix.isScaleTranslate() && SkPathPriv::IsAxisAligned(*this)) { - dst->setConvexity(convexity); + dst->setConvexityType(convexity); } else { - dst->setConvexity(kUnknown_Convexity); + dst->setConvexityType(SkPathConvexityType::kUnknown); } if (this->getFirstDirection() == SkPathPriv::kUnknown_FirstDirection) { @@ -1871,7 +1871,7 @@ void SkPath::dump(SkWStream* wStream, bool forceClose, bool dumpAsHex) const { "InverseWinding", "InverseEvenOdd", }; - builder.printf("path.setFillType(SkPath::k%s_FillType);\n", + builder.printf("path.setFillType(SkPathFillType::k%s);\n", gFillTypeStrs[(int) this->getFillType()]); while ((verb = iter.next(pts)) != kDone_Verb) { switch (verb) { @@ -1959,288 +1959,6 @@ bool SkPath::isValidImpl() const { /////////////////////////////////////////////////////////////////////////////// -#ifdef SK_LEGACY_PATH_CONVEXITY // for rebaselining Chrome - -static int sign(SkScalar x) { return x < 0; } -#define kValueNeverReturnedBySign 2 - -enum DirChange { - kLeft_DirChange, - kRight_DirChange, - kStraight_DirChange, - kBackwards_DirChange, - - kInvalid_DirChange -}; - - -static bool almost_equal(SkScalar compA, SkScalar compB) { - // The error epsilon was empirically derived; worse case round rects - // with a mid point outset by 2x float epsilon in tests had an error - // of 12. - const int epsilon = 16; - if (!SkScalarIsFinite(compA) || !SkScalarIsFinite(compB)) { - return false; - } - // no need to check for small numbers because SkPath::Iter has removed degenerate values - int aBits = SkFloatAs2sCompliment(compA); - int bBits = SkFloatAs2sCompliment(compB); - return aBits < bBits + epsilon && bBits < aBits + epsilon; -} - -// only valid for a single contour -struct Convexicator { - Convexicator() - : fPtCount(0) - , fConvexity(SkPath::kConvex_Convexity) - , fFirstDirection(SkPathPriv::kUnknown_FirstDirection) - , fIsFinite(true) - , fIsCurve(false) - , fBackwards(false) { - fExpectedDir = kInvalid_DirChange; - // warnings - fPriorPt.set(0,0); - fLastPt.set(0, 0); - fCurrPt.set(0, 0); - fLastVec.set(0, 0); - fFirstVec.set(0, 0); - - fDx = fDy = 0; - fSx = fSy = kValueNeverReturnedBySign; - } - - SkPath::Convexity getConvexity() const { return fConvexity; } - - /** The direction returned is only valid if the path is determined convex */ - SkPathPriv::FirstDirection getFirstDirection() const { return fFirstDirection; } - - void addPt(const SkPoint& pt) { - if (SkPath::kConcave_Convexity == fConvexity || !fIsFinite) { - return; - } - - if (0 == fPtCount) { - fCurrPt = pt; - ++fPtCount; - } else { - SkVector vec = pt - fCurrPt; - SkScalar lengthSqd = SkPointPriv::LengthSqd(vec); - if (!SkScalarIsFinite(lengthSqd)) { - fIsFinite = false; - } else if (lengthSqd) { - fPriorPt = fLastPt; - fLastPt = fCurrPt; - fCurrPt = pt; - if (++fPtCount == 2) { - fFirstVec = fLastVec = vec; - } else { - SkASSERT(fPtCount > 2); - this->addVec(vec); - } - - int sx = sign(vec.fX); - int sy = sign(vec.fY); - fDx += (sx != fSx); - fDy += (sy != fSy); - fSx = sx; - fSy = sy; - - if (fDx > 3 || fDy > 3) { - fConvexity = SkPath::kConcave_Convexity; - } - } - } - } - - void close() { - if (fPtCount > 2) { - this->addVec(fFirstVec); - } - } - - DirChange directionChange(const SkVector& curVec) { - SkScalar cross = SkPoint::CrossProduct(fLastVec, curVec); - - SkScalar smallest = SkTMin(fCurrPt.fX, SkTMin(fCurrPt.fY, SkTMin(fLastPt.fX, fLastPt.fY))); - SkScalar largest = SkTMax(fCurrPt.fX, SkTMax(fCurrPt.fY, SkTMax(fLastPt.fX, fLastPt.fY))); - largest = SkTMax(largest, -smallest); - - if (!almost_equal(largest, largest + cross)) { - int sign = SkScalarSignAsInt(cross); - if (sign) { - return (1 == sign) ? kRight_DirChange : kLeft_DirChange; - } - } - - if (cross) { - double dLastVecX = SkScalarToDouble(fLastPt.fX) - SkScalarToDouble(fPriorPt.fX); - double dLastVecY = SkScalarToDouble(fLastPt.fY) - SkScalarToDouble(fPriorPt.fY); - double dCurrVecX = SkScalarToDouble(fCurrPt.fX) - SkScalarToDouble(fLastPt.fX); - double dCurrVecY = SkScalarToDouble(fCurrPt.fY) - SkScalarToDouble(fLastPt.fY); - double dCross = dLastVecX * dCurrVecY - dLastVecY * dCurrVecX; - if (!approximately_zero_when_compared_to(dCross, SkScalarToDouble(largest))) { - int sign = SkScalarSignAsInt(SkDoubleToScalar(dCross)); - if (sign) { - return (1 == sign) ? kRight_DirChange : kLeft_DirChange; - } - } - } - - if (!SkScalarNearlyZero(SkPointPriv::LengthSqd(fLastVec), - SK_ScalarNearlyZero*SK_ScalarNearlyZero) && - !SkScalarNearlyZero(SkPointPriv::LengthSqd(curVec), - SK_ScalarNearlyZero*SK_ScalarNearlyZero) && - fLastVec.dot(curVec) < 0.0f) { - return kBackwards_DirChange; - } - - return kStraight_DirChange; - } - - bool hasBackwards() const { - return fBackwards; - } - - bool isFinite() const { - return fIsFinite; - } - - void setCurve(bool isCurve) { - fIsCurve = isCurve; - } - -private: - void addVec(const SkVector& vec) { - SkASSERT(vec.fX || vec.fY); - DirChange dir = this->directionChange(vec); - switch (dir) { - case kLeft_DirChange: // fall through - case kRight_DirChange: - if (kInvalid_DirChange == fExpectedDir) { - fExpectedDir = dir; - fFirstDirection = (kRight_DirChange == dir) ? SkPathPriv::kCW_FirstDirection - : SkPathPriv::kCCW_FirstDirection; - } else if (dir != fExpectedDir) { - fConvexity = SkPath::kConcave_Convexity; - fFirstDirection = SkPathPriv::kUnknown_FirstDirection; - } - fLastVec = vec; - break; - case kStraight_DirChange: - break; - case kBackwards_DirChange: - if (fIsCurve) { - // If any of the subsequent dir is non-backward, it'll be concave. - // Otherwise, it's still convex. - fExpectedDir = dir; - } - fLastVec = vec; - fBackwards = true; - break; - case kInvalid_DirChange: - SK_ABORT("Use of invalid direction change flag"); - break; - } - } - - SkPoint fPriorPt; - SkPoint fLastPt; - SkPoint fCurrPt; - // fLastVec does not necessarily start at fLastPt. We only advance it when the cross product - // value with the current vec is deemed to be of a significant value. - SkVector fLastVec, fFirstVec; - int fPtCount; // non-degenerate points - DirChange fExpectedDir; - SkPath::Convexity fConvexity; - SkPathPriv::FirstDirection fFirstDirection; - int fDx, fDy, fSx, fSy; - bool fIsFinite; - bool fIsCurve; - bool fBackwards; -}; - -SkPath::Convexity SkPath::internalGetConvexity() const { - // Sometimes we think we need to calculate convexity but another thread already did. - auto c = this->getConvexityOrUnknown(); - if (c != kUnknown_Convexity) { - return c; - } - - SkPoint pts[4]; - SkPath::Verb verb; - SkPath::Iter iter(*this, true); - - int contourCount = 0; - int count; - Convexicator state; - - if (!isFinite()) { - return kUnknown_Convexity; - } - while ((verb = iter.next(pts, false, false)) != SkPath::kDone_Verb) { - switch (verb) { - case kMove_Verb: - if (++contourCount > 1) { - this->setConvexity(kConcave_Convexity); - return kConcave_Convexity; - } - pts[1] = pts[0]; - // fall through - case kLine_Verb: - count = 1; - state.setCurve(false); - break; - case kQuad_Verb: - // fall through - case kConic_Verb: - // fall through - case kCubic_Verb: - count = 2 + (kCubic_Verb == verb); - // As an additional enhancement, this could set curve true only - // if the curve is nonlinear - state.setCurve(true); - break; - case kClose_Verb: - state.setCurve(false); - state.close(); - count = 0; - break; - default: - SkDEBUGFAIL("bad verb"); - this->setConvexity(kConcave_Convexity); - return kConcave_Convexity; - } - - for (int i = 1; i <= count; i++) { - state.addPt(pts[i]); - } - // early exit - if (!state.isFinite()) { - return kUnknown_Convexity; - } - if (kConcave_Convexity == state.getConvexity()) { - this->setConvexity(kConcave_Convexity); - return kConcave_Convexity; - } - } - this->setConvexity(state.getConvexity()); - - if (this->getConvexityOrUnknown() == kConvex_Convexity && - this->getFirstDirection() == SkPathPriv::kUnknown_FirstDirection) { - - if (state.getFirstDirection() == SkPathPriv::kUnknown_FirstDirection - && !this->getBounds().isEmpty() - && !state.hasBackwards()) { - this->setConvexity(Convexity::kConcave_Convexity); - } else { - this->setFirstDirection(state.getFirstDirection()); - } - } - return this->getConvexityOrUnknown(); -} - -#else - static int sign(SkScalar x) { return x < 0; } #define kValueNeverReturnedBySign 2 @@ -2294,7 +2012,7 @@ struct Convexicator { return true; } - static SkPath::Convexity BySign(const SkPoint points[], int count) { + static SkPathConvexityType BySign(const SkPoint points[], int count) { const SkPoint* last = points + count; SkPoint currPt = *points++; SkPoint firstPt = currPt; @@ -2308,14 +2026,14 @@ struct Convexicator { if (!vec.isZero()) { // give up if vector construction failed if (!vec.isFinite()) { - return SkPath::kUnknown_Convexity; + return SkPathConvexityType::kUnknown; } int sx = sign(vec.fX); int sy = sign(vec.fY); dxes += (sx != lastSx); dyes += (sy != lastSy); if (dxes > 3 || dyes > 3) { - return SkPath::kConcave_Convexity; + return SkPathConvexityType::kConcave; } lastSx = sx; lastSy = sy; @@ -2327,7 +2045,7 @@ struct Convexicator { } points = &firstPt; } - return SkPath::kConvex_Convexity; // that is, it may be convex, don't know yet + return SkPathConvexityType::kConvex; // that is, it may be convex, don't know yet } bool close() { @@ -2407,13 +2125,13 @@ struct Convexicator { bool fIsFinite { true }; }; -SkPath::Convexity SkPath::internalGetConvexity() const { +SkPathConvexityType SkPath::internalGetConvexity() const { SkPoint pts[4]; SkPath::Verb verb; SkPath::Iter iter(*this, true); - auto setComputedConvexity = [=](Convexity convexity){ - SkASSERT(kUnknown_Convexity != convexity); - this->setConvexity(convexity); + auto setComputedConvexity = [=](SkPathConvexityType convexity){ + SkASSERT(SkPathConvexityType::kUnknown != convexity); + this->setConvexityType(convexity); return convexity; }; @@ -2431,15 +2149,15 @@ SkPath::Convexity SkPath::internalGetConvexity() const { ++points; } --points; - SkPath::Convexity convexity = Convexicator::BySign(points, (int) (last - points)); - if (SkPath::kConcave_Convexity == convexity) { - return setComputedConvexity(SkPath::kConcave_Convexity); - } else if (SkPath::kUnknown_Convexity == convexity) { - return SkPath::kUnknown_Convexity; + SkPathConvexityType convexity = Convexicator::BySign(points, (int) (last - points)); + if (SkPathConvexityType::kConcave == convexity) { + return setComputedConvexity(SkPathConvexityType::kConcave); + } else if (SkPathConvexityType::kUnknown == convexity) { + return SkPathConvexityType::kUnknown; } iter.setPath(*this, true); } else if (!this->isFinite()) { - return kUnknown_Convexity; + return SkPathConvexityType::kUnknown; } int contourCount = 0; @@ -2447,16 +2165,16 @@ SkPath::Convexity SkPath::internalGetConvexity() const { Convexicator state; auto setFail = [=](){ if (!state.isFinite()) { - return SkPath::kUnknown_Convexity; + return SkPathConvexityType::kUnknown; } - return setComputedConvexity(SkPath::kConcave_Convexity); + return setComputedConvexity(SkPathConvexityType::kConcave); }; while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { switch (verb) { case kMove_Verb: if (++contourCount > 1) { - return setComputedConvexity(kConcave_Convexity); + return setComputedConvexity(SkPathConvexityType::kConcave); } state.setMovePt(pts[0]); count = 0; @@ -2480,7 +2198,7 @@ SkPath::Convexity SkPath::internalGetConvexity() const { break; default: SkDEBUGFAIL("bad verb"); - return setComputedConvexity(kConcave_Convexity); + return setComputedConvexity(SkPathConvexityType::kConcave); } for (int i = 1; i <= count; i++) { if (!state.addPt(pts[i])) { @@ -2493,16 +2211,16 @@ SkPath::Convexity SkPath::internalGetConvexity() const { if (state.getFirstDirection() == SkPathPriv::kUnknown_FirstDirection && !this->getBounds().isEmpty()) { return setComputedConvexity(state.reversals() < 3 ? - kConvex_Convexity : kConcave_Convexity); + SkPathConvexityType::kConvex : SkPathConvexityType::kConcave); } this->setFirstDirection(state.getFirstDirection()); } - return setComputedConvexity(kConvex_Convexity); + return setComputedConvexity(SkPathConvexityType::kConvex); } bool SkPathPriv::IsConvex(const SkPoint points[], int count) { - SkPath::Convexity convexity = Convexicator::BySign(points, count); - if (SkPath::kConvex_Convexity != convexity) { + SkPathConvexityType convexity = Convexicator::BySign(points, count); + if (SkPathConvexityType::kConvex != convexity) { return false; } Convexicator state; @@ -2522,8 +2240,6 @@ bool SkPathPriv::IsConvex(const SkPoint points[], int count) { || state.reversals() < 3; } -#endif - /////////////////////////////////////////////////////////////////////////////// class ContourIter { @@ -2701,7 +2417,7 @@ bool SkPathPriv::CheapComputeFirstDirection(const SkPath& path, FirstDirection* // We don't want to pay the cost for computing convexity if it is unknown, // so we call getConvexityOrUnknown() instead of isConvex(). - if (path.getConvexityOrUnknown() == SkPath::kConvex_Convexity) { + if (path.getConvexityTypeOrUnknown() == SkPathConvexityType::kConvex) { SkASSERT(path.getFirstDirection() == kUnknown_FirstDirection); *dir = static_cast(path.getFirstDirection()); return false; @@ -3224,8 +2940,8 @@ bool SkPath::contains(SkScalar x, SkScalar y) const { break; } } while (!done); - bool evenOddFill = SkPath::kEvenOdd_FillType == this->getFillType() - || SkPath::kInverseEvenOdd_FillType == this->getFillType(); + bool evenOddFill = SkPathFillType::kEvenOdd == this->getNewFillType() + || SkPathFillType::kInverseEvenOdd == this->getNewFillType(); if (evenOddFill) { w &= 1; } @@ -3294,7 +3010,7 @@ int SkPath::ConvertConicToQuads(const SkPoint& p0, const SkPoint& p1, const SkPo return conic.chopIntoQuadsPOW2(pts, pow2); } -bool SkPathPriv::IsSimpleClosedRect(const SkPath& path, SkRect* rect, SkPath::Direction* direction, +bool SkPathPriv::IsSimpleClosedRect(const SkPath& path, SkRect* rect, SkPathDirection* direction, unsigned* start) { if (path.getSegmentMasks() != SkPath::kLine_SegmentMask) { return false; @@ -3364,22 +3080,22 @@ bool SkPathPriv::IsSimpleClosedRect(const SkPath& path, SkRect* rect, SkPath::Di switch (sortFlags) { case 0b00: rect->setLTRB(rectPts[0].fX, rectPts[0].fY, rectPts[2].fX, rectPts[2].fY); - *direction = vec03IsVertical ? SkPath::kCW_Direction : SkPath::kCCW_Direction; + *direction = vec03IsVertical ? SkPathDirection::kCW : SkPathDirection::kCCW; *start = 0; break; case 0b01: rect->setLTRB(rectPts[2].fX, rectPts[0].fY, rectPts[0].fX, rectPts[2].fY); - *direction = vec03IsVertical ? SkPath::kCCW_Direction : SkPath::kCW_Direction; + *direction = vec03IsVertical ? SkPathDirection::kCCW : SkPathDirection::kCW; *start = 1; break; case 0b10: rect->setLTRB(rectPts[0].fX, rectPts[2].fY, rectPts[2].fX, rectPts[0].fY); - *direction = vec03IsVertical ? SkPath::kCCW_Direction : SkPath::kCW_Direction; + *direction = vec03IsVertical ? SkPathDirection::kCCW : SkPathDirection::kCW; *start = 3; break; case 0b11: rect->setLTRB(rectPts[2].fX, rectPts[2].fY, rectPts[0].fX, rectPts[0].fY); - *direction = vec03IsVertical ? SkPath::kCW_Direction : SkPath::kCCW_Direction; + *direction = vec03IsVertical ? SkPathDirection::kCW : SkPathDirection::kCCW; *start = 2; break; } @@ -3407,7 +3123,7 @@ void SkPathPriv::CreateDrawArcPath(SkPath* path, const SkRect& oval, SkScalar st path->reset(); path->setIsVolatile(true); - path->setFillType(SkPath::kWinding_FillType); + path->setFillType(SkPathFillType::kWinding); if (isFillNoPathEffect && SkScalarAbs(sweepAngle) >= 360.f) { path->addOval(oval); SkASSERT(path->isConvex() && DrawArcIsConvex(sweepAngle, false, isFillNoPathEffect)); @@ -3441,7 +3157,7 @@ void SkPathPriv::CreateDrawArcPath(SkPath* path, const SkRect& oval, SkScalar st if (useCenter) { path->close(); } - path->setConvexity(convex ? SkPath::kConvex_Convexity : SkPath::kConcave_Convexity); + path->setConvexityType(convex ? SkPathConvexityType::kConvex : SkPathConvexityType::kConcave); path->setFirstDirection(firstDir); } @@ -3560,7 +3276,7 @@ bool SkPath::IsCubicDegenerate(const SkPoint& p1, const SkPoint& p2, ////////////////////////////////////////////////////////////////////////////////////////////////// bool SkPathPriv::IsRectContour(const SkPath& path, bool allowPartial, int* currVerb, - const SkPoint** ptsPtr, bool* isClosed, SkPath::Direction* direction, + const SkPoint** ptsPtr, bool* isClosed, SkPathDirection* direction, SkRect* rect) { int corners = 0; SkPoint closeXY; // used to determine if final line falls on a diagonal @@ -3693,17 +3409,17 @@ bool SkPathPriv::IsRectContour(const SkPath& path, bool allowPartial, int* currV } if (direction) { *direction = directions[0] == ((directions[1] + 1) & 3) ? - SkPath::kCW_Direction : SkPath::kCCW_Direction; + SkPathDirection::kCW : SkPathDirection::kCCW; } return true; } -bool SkPathPriv::IsNestedFillRects(const SkPath& path, SkRect rects[2], SkPath::Direction dirs[2]) { +bool SkPathPriv::IsNestedFillRects(const SkPath& path, SkRect rects[2], SkPathDirection dirs[2]) { SkDEBUGCODE(path.validate();) int currVerb = 0; const SkPoint* pts = path.fPathRef->points(); - SkPath::Direction testDirs[2]; + SkPathDirection testDirs[2]; SkRect testRects[2]; if (!IsRectContour(path, true, &currVerb, &pts, nullptr, &testDirs[0], &testRects[0])) { return false; diff --git a/third_party/skia/src/core/SkPathMakers.h b/third_party/skia/src/core/SkPathMakers.h index a4ef7e121589..8e668e5378c1 100644 --- a/third_party/skia/src/core/SkPathMakers.h +++ b/third_party/skia/src/core/SkPathMakers.h @@ -8,15 +8,15 @@ #ifndef SkPathMakers_DEFINED #define SkPathMakers_DEFINED -#include "include/core/SkPath.h" // just for direction +#include "include/core/SkPathTypes.h" #include "include/core/SkPoint.h" #include "include/core/SkRRect.h" template class SkPath_PointIterator { public: - SkPath_PointIterator(SkPath::Direction dir, unsigned startIndex) + SkPath_PointIterator(SkPathDirection dir, unsigned startIndex) : fCurrent(startIndex % N) - , fAdvance(dir == SkPath::kCW_Direction ? 1 : N - 1) { } + , fAdvance(dir == SkPathDirection::kCW ? 1 : N - 1) { } const SkPoint& current() const { SkASSERT(fCurrent < N); @@ -38,7 +38,7 @@ template class SkPath_PointIterator { class SkPath_RectPointIterator : public SkPath_PointIterator<4> { public: - SkPath_RectPointIterator(const SkRect& rect, SkPath::Direction dir, unsigned startIndex) + SkPath_RectPointIterator(const SkRect& rect, SkPathDirection dir, unsigned startIndex) : SkPath_PointIterator(dir, startIndex) { fPts[0] = SkPoint::Make(rect.fLeft, rect.fTop); @@ -50,7 +50,7 @@ class SkPath_RectPointIterator : public SkPath_PointIterator<4> { class SkPath_OvalPointIterator : public SkPath_PointIterator<4> { public: - SkPath_OvalPointIterator(const SkRect& oval, SkPath::Direction dir, unsigned startIndex) + SkPath_OvalPointIterator(const SkRect& oval, SkPathDirection dir, unsigned startIndex) : SkPath_PointIterator(dir, startIndex) { const SkScalar cx = oval.centerX(); @@ -65,7 +65,7 @@ class SkPath_OvalPointIterator : public SkPath_PointIterator<4> { class SkPath_RRectPointIterator : public SkPath_PointIterator<8> { public: - SkPath_RRectPointIterator(const SkRRect& rrect, SkPath::Direction dir, unsigned startIndex) + SkPath_RRectPointIterator(const SkRRect& rrect, SkPathDirection dir, unsigned startIndex) : SkPath_PointIterator(dir, startIndex) { const SkRect& bounds = rrect.getBounds(); diff --git a/third_party/skia/src/core/SkPathPriv.h b/third_party/skia/src/core/SkPathPriv.h index 7fc596639846..803d8f48a45f 100644 --- a/third_party/skia/src/core/SkPathPriv.h +++ b/third_party/skia/src/core/SkPathPriv.h @@ -10,6 +10,11 @@ #include "include/core/SkPath.h" +static_assert(0 == static_cast(SkPathFillType::kWinding), "fill_type_mismatch"); +static_assert(1 == static_cast(SkPathFillType::kEvenOdd), "fill_type_mismatch"); +static_assert(2 == static_cast(SkPathFillType::kInverseWinding), "fill_type_mismatch"); +static_assert(3 == static_cast(SkPathFillType::kInverseEvenOdd), "fill_type_mismatch"); + class SkPathPriv { public: #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK @@ -19,12 +24,12 @@ class SkPathPriv { #endif enum FirstDirection : int { - kCW_FirstDirection, // == SkPath::kCW_Direction - kCCW_FirstDirection, // == SkPath::kCCW_Direction + kCW_FirstDirection, // == SkPathDirection::kCW + kCCW_FirstDirection, // == SkPathDirection::kCCW kUnknown_FirstDirection, }; - static FirstDirection AsFirstDirection(SkPath::Direction dir) { + static FirstDirection AsFirstDirection(SkPathDirection dir) { // since we agree numerically for the values in Direction, we can just cast. return (FirstDirection)dir; } @@ -96,7 +101,7 @@ class SkPathPriv { * followed by four lines or a move followed by 3 lines and a close. None of the parameters are * optional. This does not permit degenerate line or point rectangles. */ - static bool IsSimpleClosedRect(const SkPath& path, SkRect* rect, SkPath::Direction* direction, + static bool IsSimpleClosedRect(const SkPath& path, SkRect* rect, SkPathDirection* direction, unsigned* start); /** @@ -158,7 +163,6 @@ class SkPathPriv { return path.fPathRef->conicWeights(); } -#ifndef SK_LEGACY_PATH_CONVEXITY /** Returns true if path formed by pts is convex. @param pts SkPoint array of path @@ -167,7 +171,6 @@ class SkPathPriv { @return true if pts represent a convex geometry */ static bool IsConvex(const SkPoint pts[], int count); -#endif /** Returns true if the underlying SkPathRef has one single owner. */ static bool TestingOnly_unique(const SkPath& path) { @@ -179,7 +182,7 @@ class SkPathPriv { return true though SkPath draws oval. rect receives bounds of oval. - dir receives SkPath::Direction of oval: kCW_Direction if clockwise, kCCW_Direction if + dir receives SkPathDirection of oval: kCW_Direction if clockwise, kCCW_Direction if counterclockwise. start receives start of oval: 0 for top, 1 for right, 2 for bottom, 3 for left. @@ -188,15 +191,15 @@ class SkPathPriv { Triggers performance optimizations on some GPU surface implementations. @param rect storage for bounding SkRect of oval; may be nullptr - @param dir storage for SkPath::Direction; may be nullptr + @param dir storage for SkPathDirection; may be nullptr @param start storage for start of oval; may be nullptr @return true if SkPath was constructed by method that reduces to oval */ - static bool IsOval(const SkPath& path, SkRect* rect, SkPath::Direction* dir, unsigned* start) { + static bool IsOval(const SkPath& path, SkRect* rect, SkPathDirection* dir, unsigned* start) { bool isCCW = false; bool result = path.fPathRef->isOval(rect, &isCCW, start); if (dir && result) { - *dir = isCCW ? SkPath::kCCW_Direction : SkPath::kCW_Direction; + *dir = isCCW ? SkPathDirection::kCCW : SkPathDirection::kCW; } return result; } @@ -206,7 +209,7 @@ class SkPathPriv { will not return true though SkPath draws SkRRect. rrect receives bounds of SkRRect. - dir receives SkPath::Direction of oval: kCW_Direction if clockwise, kCCW_Direction if + dir receives SkPathDirection of oval: kCW_Direction if clockwise, kCCW_Direction if counterclockwise. start receives start of SkRRect: 0 for top, 1 for right, 2 for bottom, 3 for left. @@ -215,16 +218,16 @@ class SkPathPriv { Triggers performance optimizations on some GPU surface implementations. @param rrect storage for bounding SkRect of SkRRect; may be nullptr - @param dir storage for SkPath::Direction; may be nullptr + @param dir storage for SkPathDirection; may be nullptr @param start storage for start of SkRRect; may be nullptr @return true if SkPath contains only SkRRect */ - static bool IsRRect(const SkPath& path, SkRRect* rrect, SkPath::Direction* dir, + static bool IsRRect(const SkPath& path, SkRRect* rrect, SkPathDirection* dir, unsigned* start) { bool isCCW = false; bool result = path.fPathRef->isRRect(rrect, &isCCW, start); if (dir && result) { - *dir = isCCW ? SkPath::kCCW_Direction : SkPath::kCW_Direction; + *dir = isCCW ? SkPathDirection::kCCW : SkPathDirection::kCW; } return result; } @@ -282,22 +285,37 @@ class SkPathPriv { } static bool IsRectContour(const SkPath&, bool allowPartial, int* currVerb, - const SkPoint** ptsPtr, bool* isClosed, SkPath::Direction* direction, + const SkPoint** ptsPtr, bool* isClosed, SkPathDirection* direction, SkRect* rect); /** Returns true if SkPath is equivalent to nested SkRect pair when filled. If false, rect and dirs are unchanged. If true, rect and dirs are written to if not nullptr: setting rect[0] to outer SkRect, and rect[1] to inner SkRect; - setting dirs[0] to SkPath::Direction of outer SkRect, and dirs[1] to SkPath::Direction of + setting dirs[0] to SkPathDirection of outer SkRect, and dirs[1] to SkPathDirection of inner SkRect. @param rect storage for SkRect pair; may be nullptr - @param dirs storage for SkPath::Direction pair; may be nullptr + @param dirs storage for SkPathDirection pair; may be nullptr @return true if SkPath contains nested SkRect pair */ static bool IsNestedFillRects(const SkPath&, SkRect rect[2], - SkPath::Direction dirs[2] = nullptr); + SkPathDirection dirs[2] = nullptr); + + static bool IsInverseFillType(SkPathFillType fill) { + return (static_cast(fill) & 2) != 0; + } + + /** Returns equivalent SkPath::FillType representing SkPath fill inside its bounds. + . + + @param fill one of: kWinding_FillType, kEvenOdd_FillType, + kInverseWinding_FillType, kInverseEvenOdd_FillType + @return fill, or kWinding_FillType or kEvenOdd_FillType if fill is inverted + */ + static SkPathFillType ConvertToNonInverseFillType(SkPathFillType fill) { + return (SkPathFillType)(static_cast(fill) & 1); + } }; // Lightweight variant of SkPath::Iter that only returns segments (e.g. lines/conics). @@ -313,6 +331,7 @@ class SkPathEdgeIter { const SkScalar* fConicWeights; SkPoint fScratch[2]; // for auto-close lines bool fNeedsCloseLine; + bool fNextIsNewContour; SkDEBUGCODE(bool fIsConic); enum { @@ -341,6 +360,7 @@ class SkPathEdgeIter { struct Result { const SkPoint* fPts; // points for the segment, or null if done Edge fEdge; + bool fIsNewContour; // Returns true when it holds an Edge, false when the path is done. operator bool() { return fPts != nullptr; } @@ -351,7 +371,8 @@ class SkPathEdgeIter { fScratch[0] = fPts[-1]; fScratch[1] = *fMoveToPtr; fNeedsCloseLine = false; - return Result{ fScratch, Edge::kLine }; + fNextIsNewContour = true; + return Result{ fScratch, Edge::kLine, false }; }; for (;;) { @@ -359,7 +380,7 @@ class SkPathEdgeIter { if (fVerbs == fVerbsStop) { return fNeedsCloseLine ? closeline() - : Result{ nullptr, Edge(kIllegalEdgeValue) }; + : Result{ nullptr, Edge(kIllegalEdgeValue), false }; } SkDEBUGCODE(fIsConic = false;) @@ -390,7 +411,9 @@ class SkPathEdgeIter { SkDEBUGCODE(fIsConic = (v == SkPath::kConic_Verb);) SkASSERT(fIsConic == (cws_count > 0)); - return { &fPts[-(pts_count + 1)], Edge(v) }; + bool isNewContour = fNextIsNewContour; + fNextIsNewContour = false; + return { &fPts[-(pts_count + 1)], Edge(v), isNewContour }; } } } diff --git a/third_party/skia/src/core/SkPathRef.cpp b/third_party/skia/src/core/SkPathRef.cpp index a3d9e08c710e..75086a05b728 100644 --- a/third_party/skia/src/core/SkPathRef.cpp +++ b/third_party/skia/src/core/SkPathRef.cpp @@ -687,5 +687,6 @@ SkPathEdgeIter::SkPathEdgeIter(const SkPath& path) { } fNeedsCloseLine = false; + fNextIsNewContour = false; SkDEBUGCODE(fIsConic = false;) } diff --git a/third_party/skia/src/core/SkPath_serial.cpp b/third_party/skia/src/core/SkPath_serial.cpp index 44fd146bacb5..b1d85f451cd2 100644 --- a/third_party/skia/src/core/SkPath_serial.cpp +++ b/third_party/skia/src/core/SkPath_serial.cpp @@ -44,8 +44,8 @@ static unsigned extract_version(uint32_t packed) { return packed & kVersion_SerializationMask; } -static SkPath::FillType extract_filltype(uint32_t packed) { - return static_cast((packed >> kFillType_SerializationShift) & 0x3); +static SkPathFillType extract_filltype(uint32_t packed) { + return static_cast((packed >> kFillType_SerializationShift) & 0x3); } static SerializationType extract_serializationtype(uint32_t packed) { @@ -167,17 +167,17 @@ size_t SkPath::readAsRRect(const void* storage, size_t length) { SkASSERT(extract_serializationtype(packed) == SerializationType::kRRect); uint8_t dir = (packed >> kDirection_SerializationShift) & 0x3; - FillType fillType = extract_filltype(packed); + SkPathFillType fillType = extract_filltype(packed); - Direction rrectDir; + SkPathDirection rrectDir; SkRRect rrect; int32_t start; switch (dir) { case SkPathPriv::kCW_FirstDirection: - rrectDir = kCW_Direction; + rrectDir = SkPathDirection::kCW; break; case SkPathPriv::kCCW_FirstDirection: - rrectDir = kCCW_Direction; + rrectDir = SkPathDirection::kCCW; break; default: return 0; diff --git a/third_party/skia/src/core/SkRasterPipeline.cpp b/third_party/skia/src/core/SkRasterPipeline.cpp index 4f736435526b..78b943a30abc 100644 --- a/third_party/skia/src/core/SkRasterPipeline.cpp +++ b/third_party/skia/src/core/SkRasterPipeline.cpp @@ -5,6 +5,7 @@ * found in the LICENSE file. */ +#include "include/private/SkImageInfoPriv.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkOpts.h" #include "src/core/SkRasterPipeline.h" @@ -291,12 +292,11 @@ void SkRasterPipeline::append_transfer_function(const skcms_TransferFunction& tf } } -void SkRasterPipeline::append_gamut_clamp_if_normalized(const SkImageInfo& dstInfo) { - // N.B. we _do_ clamp for kRGBA_F16Norm_SkColorType... because it's normalized. - if (dstInfo.colorType() != kRGBA_F16_SkColorType && - dstInfo.colorType() != kRGBA_F32_SkColorType && - dstInfo.alphaType() == kPremul_SkAlphaType) - { +// Clamp premul values to [0,alpha] (logical [0,1]) to avoid the confusing +// scenario of being able to store a logical color channel > 1.0 when alpha < 1.0. +// Most software that works with normalized premul values expect r,g,b channels all <= a. +void SkRasterPipeline::append_gamut_clamp_if_normalized(const SkImageInfo& info) { + if (info.alphaType() == kPremul_SkAlphaType && SkColorTypeIsNormalized(info.colorType())) { this->unchecked_append(SkRasterPipeline::clamp_gamut, nullptr); } } diff --git a/third_party/skia/src/core/SkRegion.cpp b/third_party/skia/src/core/SkRegion.cpp index efa50bc53908..7ef7ae4ff2a4 100644 --- a/third_party/skia/src/core/SkRegion.cpp +++ b/third_party/skia/src/core/SkRegion.cpp @@ -12,7 +12,6 @@ #include "include/private/SkTo.h" #include "src/core/SkRegionPriv.h" #include "src/core/SkSafeMath.h" -#include "src/utils/SkUTF.h" #include diff --git a/third_party/skia/src/core/SkRemoteGlyphCache.cpp b/third_party/skia/src/core/SkRemoteGlyphCache.cpp index 3f6a8acf1903..b312eeda7ca8 100644 --- a/third_party/skia/src/core/SkRemoteGlyphCache.cpp +++ b/third_party/skia/src/core/SkRemoteGlyphCache.cpp @@ -7,20 +7,25 @@ #include "src/core/SkRemoteGlyphCache.h" +#include #include #include #include #include #include +#include "include/private/SkChecksum.h" #include "src/core/SkDevice.h" #include "src/core/SkDraw.h" +#include "src/core/SkEnumerate.h" #include "src/core/SkGlyphRun.h" +#include "src/core/SkSpan.h" #include "src/core/SkStrike.h" #include "src/core/SkStrikeCache.h" #include "src/core/SkTLazy.h" #include "src/core/SkTraceEvent.h" #include "src/core/SkTypeface_remote.h" +#include "src/core/SkZip.h" #if SK_SUPPORT_GPU #include "src/gpu/GrDrawOpAtlas.h" @@ -77,7 +82,7 @@ size_t serialization_alignment() { class Serializer { public: - Serializer(std::vector* buffer) : fBuffer{buffer} { } + explicit Serializer(std::vector* buffer) : fBuffer{buffer} {} template T* emplace(Args&&... args) { @@ -170,6 +175,11 @@ class Deserializer { size_t fBytesRead = 0u; }; +bool SkFuzzDeserializeSkDescriptor(sk_sp bytes, SkAutoDescriptor* ad) { + auto d = Deserializer(reinterpret_cast(bytes->data()), bytes->size()); + return d.readDescriptor(ad); +} + // Paths use a SkWriter32 which requires 4 byte alignment. static const size_t kPathAlignment = 4u; @@ -184,8 +194,38 @@ struct StrikeSpec { /* n X (glyphs ids) */ }; +// Represent a set of x sub-pixel-position glyphs with a glyph id < kMaxGlyphID and +// y sub-pxiel-position must be 0. Most sub-pixel-positioned glyphs have been x-axis aligned +// forcing the y sub-pixel position to be zero. We can organize the SkPackedGlyphID to check that +// the glyph id and the y position == 0 with a single compare in the following way: +// :2 | | :2 +// This organization allows a single check of a packed-id to be: +// packed-id < kMaxGlyphID * possible-x-sub-pixel-positions +// where possible-x-sub-pixel-positions == 4. +class LowerRangeBitVector { +public: + bool test(SkPackedGlyphID packedID) const { + uint32_t bit = packedID.value(); + return bit < kMaxIndex && fBits.test(bit); + } + void setIfLower(SkPackedGlyphID packedID) { + uint32_t bit = packedID.value(); + if (bit < kMaxIndex) { + fBits.set(bit); + } + } + +private: + using GID = SkPackedGlyphID; + static_assert(GID::kSubPixelX < GID::kGlyphID && GID::kGlyphID < GID::kSubPixelY, + "SkPackedGlyphID must be organized: sub-y | glyph id | sub-x"); + static constexpr int kMaxGlyphID = 128; + static constexpr int kMaxIndex = kMaxGlyphID * (1u << GID::kSubPixelPosLen); + std::bitset fBits; +}; + // -- RemoteStrike ---------------------------------------------------------------------------- -class SkStrikeServer::RemoteStrike : public SkStrikeForGPU { +class SkStrikeServer::RemoteStrike final : public SkStrikeForGPU { public: // N.B. RemoteStrike is not valid until ensureScalerContext is called. RemoteStrike(const SkDescriptor& descriptor, @@ -193,7 +233,6 @@ class SkStrikeServer::RemoteStrike : public SkStrikeForGPU { SkDiscardableHandleId discardableHandleId); ~RemoteStrike() override; - void addGlyph(SkPackedGlyphID, bool asPath); void writePendingGlyphs(Serializer* serializer); SkDiscardableHandleId discardableHandleId() const { return fDiscardableHandleId; } @@ -207,37 +246,74 @@ class SkStrikeServer::RemoteStrike : public SkStrikeForGPU { return fRoundingSpec; } - SkSpan - prepareForDrawingRemoveEmpty( - const SkPackedGlyphID packedGlyphIDs[], - const SkPoint positions[], size_t n, - int maxDimension, - SkGlyphPos results[]) override; + void prepareForMaskDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) override; + + void prepareForSDFTDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) override; + + void prepareForPathDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) override; void onAboutToExitScope() override {} bool hasPendingGlyphs() const { - return !fPendingGlyphImages.empty() || !fPendingGlyphPaths.empty(); + return !fMasksToSend.empty() || !fPathsToSend.empty(); } void resetScalerContext(); private: - void writeGlyphPath(const SkPackedGlyphID& glyphID, Serializer* serializer) const; + template + void commonMaskLoop( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects, Rejector&& reject); + + // Keep track of if the glyph draw has been totally satisfied. It could be that this + // strike can not draw the glyph, and it must be rejected to be handled by fallback. + // For example, if a glyph has canDrawAsMask sent, then that data is on the GPU, and this + // strike totally satisfies this result. If canDrawAsMask is false, then this glyph must be + // rejected, and handled by a later stage using a latter strike. + struct MaskSummary { + static_assert(SkPackedGlyphID::kMaskAll < (1u << 30), "SkPackedGlyphID is too big."); + uint32_t packedID:30; + uint32_t canDrawAsMask:1; + uint32_t canDrawAsSDFT:1; + }; - void ensureScalerContext(); + struct MaskSummaryTraits { + static SkPackedGlyphID GetKey(MaskSummary summary) { + return SkPackedGlyphID{summary.packedID}; + } - // The set of glyphs cached on the remote client. - SkTHashSet fCachedGlyphImages; - SkTHashSet fCachedGlyphPaths; + static uint32_t Hash(SkPackedGlyphID packedID) { + return packedID.hash(); + } + }; - // The set of glyphs which has not yet been serialized and sent to the - // remote client. - std::vector fPendingGlyphImages; - std::vector fPendingGlyphPaths; + // Same thing as MaskSummary, but for paths. + struct PathSummary { + constexpr static uint16_t kIsPath = 0; + SkGlyphID glyphID; + // If drawing glyphID can be done with a path, this is 0, otherwise it is the max + // dimension of the glyph. + uint16_t maxDimensionOrPath; + }; - const SkAutoDescriptor fDescriptor; + struct PathSummaryTraits { + static SkGlyphID GetKey(PathSummary summary) { + return summary.glyphID; + } + static uint32_t Hash(SkGlyphID packedID) { + return SkChecksum::CheapMix(packedID); + } + }; + + void writeGlyphPath(const SkGlyph& glyph, Serializer* serializer) const; + void ensureScalerContext(); + + const int fNumberOfGlyphs; + const SkAutoDescriptor fDescriptor; const SkDiscardableHandleId fDiscardableHandleId; const SkGlyphPositionRoundingSpec fRoundingSpec; @@ -250,58 +326,41 @@ class SkStrikeServer::RemoteStrike : public SkStrikeForGPU { const SkTypeface* fTypeface{nullptr}; SkScalerContextEffects fEffects; + // Have the metrics been sent for this strike. Only send them once. bool fHaveSentFontMetrics{false}; - class GlyphMapHashTraits { - public: - static SkPackedGlyphID GetKey(const SkGlyph* glyph) { - return glyph->getPackedID(); - } - static uint32_t Hash(SkPackedGlyphID glyphId) { - return glyphId.hash(); - } - }; + LowerRangeBitVector fSentLowGlyphIDs; + + // The masks and paths that currently reside in the GPU process. + SkTHashTable fSentGlyphs; + SkTHashTable fSentPaths; - // FallbackTextHelper cases require glyph metrics when analyzing a glyph run, in which case - // we cache them here. - SkTHashTable fGlyphMap; + // The Masks, SDFT Mask, and Paths that need to be sent to the GPU task for the processed + // TextBlobs. Cleared after diffs are serialized. + std::vector fMasksToSend; + std::vector fPathsToSend; - SkArenaAlloc fAlloc{256}; + // Alloc for storing bits and pieces of paths, Cleared after diffs are serialized. + SkArenaAlloc fPathAlloc{256}; }; SkStrikeServer::RemoteStrike::RemoteStrike( const SkDescriptor& descriptor, std::unique_ptr context, uint32_t discardableHandleId) - : fDescriptor{descriptor} + : fNumberOfGlyphs(context->getGlyphCount()) + , fDescriptor{descriptor} , fDiscardableHandleId(discardableHandleId) , fRoundingSpec{context->isSubpixel(), context->computeAxisAlignmentForHText()} // N.B. context must come last because it is used above. - , fContext{std::move(context)} { + , fContext{std::move(context)} + , fSentLowGlyphIDs{} { SkASSERT(fDescriptor.getDesc() != nullptr); SkASSERT(fContext != nullptr); } SkStrikeServer::RemoteStrike::~RemoteStrike() = default; -void SkStrikeServer::RemoteStrike::addGlyph(SkPackedGlyphID glyph, bool asPath) { - auto* cache = asPath ? &fCachedGlyphPaths : &fCachedGlyphImages; - auto* pending = asPath ? &fPendingGlyphPaths : &fPendingGlyphImages; - - // Already cached. - if (cache->contains(glyph)) { - return; - } - - // A glyph is going to be sent. Make sure we have a scaler context to send it. - this->ensureScalerContext(); - - // Serialize and cache. Also create the scalar context to use when serializing - // this glyph. - cache->add(glyph); - pending->push_back(glyph); -} - size_t SkStrikeServer::MapOps::operator()(const SkDescriptor* key) const { return key->getChecksum(); } @@ -310,7 +369,6 @@ bool SkStrikeServer::MapOps::operator()(const SkDescriptor* lhs, const SkDescrip return *lhs == *rhs; } - // -- TrackLayerDevice ----------------------------------------------------------------------------- class SkTextBlobCacheDiffCanvas::TrackLayerDevice final : public SkNoPixelsDevice { public: @@ -330,19 +388,27 @@ class SkTextBlobCacheDiffCanvas::TrackLayerDevice final : public SkNoPixelsDevic cinfo.fInfo.refColorSpace(), fDFTSupport); } + SkStrikeServer* strikeServer() { return fStrikeServer; } + protected: void drawGlyphRunList(const SkGlyphRunList& glyphRunList) override { -#if SK_SUPPORT_GPU + #if SK_SUPPORT_GPU GrTextContext::Options options; GrTextContext::SanitizeOptions(&options); + #ifdef SK_CAPTURE_DRAW_TEXT_BLOB + if (SkTextBlobTrace::Capture* capture = fStrikeServer->fCapture.get()) { + capture->capture(glyphRunList); + } + #endif // SK_CAPTURE_DRAW_TEXT_BLOB + fPainter.processGlyphRunList(glyphRunList, - this->ctm(), + this->localToDevice(), this->surfaceProps(), fDFTSupport, options, nullptr); -#endif // SK_SUPPORT_GPU + #endif // SK_SUPPORT_GPU } private: @@ -363,13 +429,27 @@ SkTextBlobCacheDiffCanvas::SkTextBlobCacheDiffCanvas(int width, int height, SkStrikeServer* strikeServer, sk_sp colorSpace, bool DFTSupport) - : SkNoDrawCanvas{sk_make_sp(SkIRect::MakeWH(width, height), - props, - strikeServer, - std::move(colorSpace), - DFTSupport)} { } + : SkNoDrawCanvas{sk_make_sp(SkIRect::MakeWH(width, height), + props, + strikeServer, + std::move(colorSpace), + DFTSupport)} { + #ifdef SK_CAPTURE_DRAW_TEXT_BLOB + if (!strikeServer->fCapture) { + strikeServer->fCapture.reset(new SkTextBlobTrace::Capture); + } + #endif // SK_CAPTURE_DRAW_TEXT_BLOB + } -SkTextBlobCacheDiffCanvas::~SkTextBlobCacheDiffCanvas() = default; +SkTextBlobCacheDiffCanvas::~SkTextBlobCacheDiffCanvas() { +#ifdef SK_CAPTURE_DRAW_TEXT_BLOB + SkTextBlobTrace::Capture* capture = + ((TrackLayerDevice*)this->getTopDevice())->strikeServer()->fCapture.get(); + if (capture) { + capture->dump(); + } +#endif // SK_CAPTURE_DRAW_TEXT_BLOB +} SkCanvas::SaveLayerStrategy SkTextBlobCacheDiffCanvas::getSaveLayerStrategy( const SaveLayerRec& rec) { @@ -403,7 +483,13 @@ SkStrikeServer::SkStrikeServer(DiscardableHandleManager* discardableHandleManage SkASSERT(fDiscardableHandleManager); } -SkStrikeServer::~SkStrikeServer() = default; +SkStrikeServer::~SkStrikeServer() { +#ifdef SK_CAPTURE_DRAW_TEXT_BLOB + if (fCapture) { + fCapture->dump(); + } +#endif // SK_CAPTURE_DRAW_TEXT_BLOB +} sk_sp SkStrikeServer::serializeTypeface(SkTypeface* tf) { auto* data = fSerializedTypefaces.find(SkTypeface::UniqueID(tf)); @@ -420,7 +506,7 @@ sk_sp SkStrikeServer::serializeTypeface(SkTypeface* tf) { void SkStrikeServer::writeStrikeData(std::vector* memory) { size_t strikesToSend = 0; - fRemoteStrikesToSend.foreach ([&strikesToSend](RemoteStrike* strike) { + fRemoteStrikesToSend.foreach ([&](RemoteStrike* strike) { if (strike->hasPendingGlyphs()) { strikesToSend++; } else { @@ -443,7 +529,7 @@ void SkStrikeServer::writeStrikeData(std::vector* memory) { serializer.emplace(SkTo(strikesToSend)); fRemoteStrikesToSend.foreach ( #ifdef SK_DEBUG - [&serializer, this](RemoteStrike* strike) { + [&](RemoteStrike* strike) { if (strike->hasPendingGlyphs()) { strike->writePendingGlyphs(&serializer); strike->resetScalerContext(); @@ -485,8 +571,10 @@ SkScopedStrikeForGPU SkStrikeServer::findOrCreateScopedStrike(const SkDescriptor } void SkStrikeServer::AddGlyphForTesting( - RemoteStrike* cache, SkPackedGlyphID glyphID, bool asPath) { - cache->addGlyph(glyphID, asPath); + RemoteStrike* strike, SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) { + strike->prepareForMaskDrawing(drawables, rejects); + rejects->flipRejectsToSource(); + SkASSERT(rejects->source().empty()); } void SkStrikeServer::checkForDeletedEntries() { @@ -567,15 +655,15 @@ SkStrikeServer::RemoteStrike* SkStrikeServer::getOrCreateCache( // No need to write fForceBW because it is a flag private to SkScalerContext_DW, which will never // be called on the GPU side. -static void writeGlyph(SkGlyph* glyph, Serializer* serializer) { - serializer->write(glyph->getPackedID()); - serializer->write(glyph->advanceX()); - serializer->write(glyph->advanceY()); - serializer->write(glyph->width()); - serializer->write(glyph->height()); - serializer->write(glyph->top()); - serializer->write(glyph->left()); - serializer->write(glyph->maskFormat()); +static void writeGlyph(const SkGlyph& glyph, Serializer* serializer) { + serializer->write(glyph.getPackedID()); + serializer->write(glyph.advanceX()); + serializer->write(glyph.advanceY()); + serializer->write(glyph.width()); + serializer->write(glyph.height()); + serializer->write(glyph.top()); + serializer->write(glyph.left()); + serializer->write(glyph.maskFormat()); } void SkStrikeServer::RemoteStrike::writePendingGlyphs(Serializer* serializer) { @@ -594,35 +682,30 @@ void SkStrikeServer::RemoteStrike::writePendingGlyphs(Serializer* serializer) { fHaveSentFontMetrics = true; } - // Write glyphs images. - serializer->emplace(fPendingGlyphImages.size()); - for (const auto& glyphID : fPendingGlyphImages) { - SkGlyph glyph{glyphID}; - fContext->getMetrics(&glyph); + // Write mask glyphs + serializer->emplace(fMasksToSend.size()); + for (SkGlyph& glyph : fMasksToSend) { SkASSERT(SkMask::IsValidFormat(glyph.fMaskFormat)); - writeGlyph(&glyph, serializer); + writeGlyph(glyph, serializer); auto imageSize = glyph.imageSize(); - if (imageSize == 0u) continue; - - glyph.fImage = serializer->allocate(imageSize, glyph.formatAlignment()); - fContext->getImage(glyph); - // TODO: Generating the image can change the mask format, do we need to update it in the - // serialized glyph? + if (imageSize > 0 && FitsInAtlas(glyph)) { + glyph.fImage = serializer->allocate(imageSize, glyph.formatAlignment()); + fContext->getImage(glyph); + } } - fPendingGlyphImages.clear(); + fMasksToSend.clear(); // Write glyphs paths. - serializer->emplace(fPendingGlyphPaths.size()); - for (const auto& glyphID : fPendingGlyphPaths) { - SkGlyph glyph{glyphID}; - fContext->getMetrics(&glyph); + serializer->emplace(fPathsToSend.size()); + for (SkGlyph& glyph : fPathsToSend) { SkASSERT(SkMask::IsValidFormat(glyph.fMaskFormat)); - writeGlyph(&glyph, serializer); - writeGlyphPath(glyphID, serializer); + writeGlyph(glyph, serializer); + writeGlyphPath(glyph, serializer); } - fPendingGlyphPaths.clear(); + fPathsToSend.clear(); + fPathAlloc.reset(); } void SkStrikeServer::RemoteStrike::ensureScalerContext() { @@ -642,73 +725,122 @@ void SkStrikeServer::RemoteStrike::setTypefaceAndEffects( fEffects = effects; } -void SkStrikeServer::RemoteStrike::writeGlyphPath(const SkPackedGlyphID& glyphID, - Serializer* serializer) const { - SkPath path; - if (!fContext->getPath(glyphID, &path)) { +void SkStrikeServer::RemoteStrike::writeGlyphPath( + const SkGlyph& glyph, Serializer* serializer) const { + if (glyph.isColor() || glyph.isEmpty()) { + serializer->write(0u); + return; + } + + const SkPath* path = glyph.path(); + + if (path == nullptr) { serializer->write(0u); return; } - size_t pathSize = path.writeToMemory(nullptr); + size_t pathSize = path->writeToMemory(nullptr); serializer->write(pathSize); - path.writeToMemory(serializer->allocate(pathSize, kPathAlignment)); + path->writeToMemory(serializer->allocate(pathSize, kPathAlignment)); } +template +void SkStrikeServer::RemoteStrike::commonMaskLoop( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects, Rejector&& reject) { + drawables->forEachGlyphID( + [&](size_t i, SkPackedGlyphID packedID, SkPoint position) { + MaskSummary* summary = fSentGlyphs.find(packedID); + if (summary == nullptr) { + // Put the new SkGlyph in the glyphs to send. + fMasksToSend.emplace_back(packedID); + SkGlyph* glyph = &fMasksToSend.back(); + + // Build the glyph + this->ensureScalerContext(); + fContext->getMetrics(glyph); + MaskSummary newSummary = + {packedID.value(), CanDrawAsMask(*glyph), CanDrawAsSDFT(*glyph)}; + summary = fSentGlyphs.set(newSummary); + } -// Be sure to read and understand the comment for prepareForDrawingRemoveEmpty in -// SkStrikeForGPU.h before working on this code. -SkSpan -SkStrikeServer::RemoteStrike::prepareForDrawingRemoveEmpty( - const SkPackedGlyphID packedGlyphIDs[], - const SkPoint positions[], size_t n, - int maxDimension, - SkGlyphPos results[]) { - size_t drawableGlyphCount = 0; - for (size_t i = 0; i < n; i++) { - SkPoint glyphPos = positions[i]; + // Reject things that are too big. + if (reject(*summary)) { + rejects->reject(i); + } + }); +} - // Check the cache for the glyph. - SkGlyph* glyphPtr = fGlyphMap.findOrNull(packedGlyphIDs[i]); +void SkStrikeServer::RemoteStrike::prepareForMaskDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) { + for (auto [i, variant, _] : SkMakeEnumerate(drawables->input())) { + SkPackedGlyphID packedID = variant.packedID(); + if (fSentLowGlyphIDs.test(packedID)) { + SkASSERT(fSentGlyphs.find(packedID) != nullptr); + continue; + } - // Has this glyph ever been seen before? - if (glyphPtr == nullptr) { + MaskSummary* summary = fSentGlyphs.find(packedID); + if (summary == nullptr) { + // Put the new SkGlyph in the glyphs to send. + fMasksToSend.emplace_back(packedID); + SkGlyph* glyph = &fMasksToSend.back(); - // Never seen before. Make a new glyph. - glyphPtr = fAlloc.make(packedGlyphIDs[i]); - fGlyphMap.set(glyphPtr); + // Build the glyph this->ensureScalerContext(); - fContext->getMetrics(glyphPtr); - - if (glyphPtr->maxDimension() <= maxDimension) { - // do nothing - } else if (!glyphPtr->isColor()) { - // The glyph is too big for the atlas, but it is not color, so it is handled - // with a path. - if (glyphPtr->setPath(&fAlloc, fContext.get())) { - // Always send the path data, even if its not available, to make sure empty - // paths are not incorrectly assumed to be cache misses. - fCachedGlyphPaths.add(glyphPtr->getPackedID()); - fPendingGlyphPaths.push_back(glyphPtr->getPackedID()); - } - } else { - // This will be handled by the fallback strike. - SkASSERT(glyphPtr->maxDimension() > maxDimension && glyphPtr->isColor()); - } + fContext->getMetrics(glyph); + + fSentLowGlyphIDs.setIfLower(packedID); - // Make sure to send the glyph to the GPU because we always send the image for a glyph. - fCachedGlyphImages.add(packedGlyphIDs[i]); - fPendingGlyphImages.push_back(packedGlyphIDs[i]); + MaskSummary newSummary = + {packedID.value(), CanDrawAsMask(*glyph), CanDrawAsSDFT(*glyph)}; + summary = fSentGlyphs.set(newSummary); } - // Each non-empty glyph needs to be added as per the contract for - // prepareForDrawingRemoveEmpty. - // TODO(herb): Change the code to only send the glyphs for fallback? - if (!glyphPtr->isEmpty()) { - results[drawableGlyphCount++] = {i, glyphPtr, glyphPos}; + // Reject things that are too big. + if (!summary->canDrawAsMask) { + rejects->reject(i); } } - return SkMakeSpan(results, drawableGlyphCount); +} + +void SkStrikeServer::RemoteStrike::prepareForSDFTDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) { + this->commonMaskLoop(drawables, rejects, + [](MaskSummary summary){return !summary.canDrawAsSDFT;}); +} + +void SkStrikeServer::RemoteStrike::prepareForPathDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) { + drawables->forEachGlyphID( + [&](size_t i, SkPackedGlyphID packedID, SkPoint position) { + SkGlyphID glyphID = packedID.glyphID(); + PathSummary* summary = fSentPaths.find(glyphID); + if (summary == nullptr) { + // Put the new SkGlyph in the glyphs to send. + fPathsToSend.emplace_back(SkPackedGlyphID{glyphID}); + SkGlyph* glyph = &fPathsToSend.back(); + + // Build the glyph + this->ensureScalerContext(); + fContext->getMetrics(glyph); + + uint16_t maxDimensionOrPath = glyph->maxDimension(); + // Only try to get the path if the glyphs is not color. + if (!glyph->isColor() && !glyph->isEmpty()) { + glyph->setPath(&fPathAlloc, fContext.get()); + if (glyph->path() != nullptr) { + maxDimensionOrPath = PathSummary::kIsPath; + } + } + + PathSummary newSummary = {glyph->getGlyphID(), maxDimensionOrPath}; + summary = fSentPaths.set(newSummary); + } + + if (summary->maxDimensionOrPath != PathSummary::kIsPath) { + rejects->reject(i, (int)summary->maxDimensionOrPath); + } + }); } // SkStrikeClient ---------------------------------------------------------------------------------- @@ -767,13 +899,12 @@ bool SkStrikeClient::readStrikeData(const volatile void* memory, size_t memorySi SkASSERT(memorySize != 0u); Deserializer deserializer(static_cast(memory), memorySize); - uint64_t typefaceSize = 0u; - uint64_t strikeCount = 0u; - uint64_t glyphImagesCount = 0u; - uint64_t glyphPathsCount = 0u; + uint64_t typefaceSize = 0; + uint64_t strikeCount = 0; + uint64_t glyphImagesCount = 0; + uint64_t glyphPathsCount = 0; if (!deserializer.read(&typefaceSize)) READ_FAILURE - for (size_t i = 0; i < typefaceSize; ++i) { WireTypeface wire; if (!deserializer.read(&wire)) READ_FAILURE @@ -836,7 +967,7 @@ bool SkStrikeClient::readStrikeData(const volatile void* memory, size_t memorySi SkTLazy glyph; if (!ReadGlyph(glyph, &deserializer)) READ_FAILURE - if (!glyph->isEmpty()) { + if (!glyph->isEmpty() && SkStrikeForGPU::FitsInAtlas(*glyph)) { const volatile void* image = deserializer.read(glyph->imageSize(), glyph->formatAlignment()); if (!image) READ_FAILURE diff --git a/third_party/skia/src/core/SkRemoteGlyphCache.h b/third_party/skia/src/core/SkRemoteGlyphCache.h index d81413f55cff..540f792b878b 100644 --- a/third_party/skia/src/core/SkRemoteGlyphCache.h +++ b/third_party/skia/src/core/SkRemoteGlyphCache.h @@ -8,6 +8,11 @@ #ifndef SkRemoteGlyphCache_DEFINED #define SkRemoteGlyphCache_DEFINED +// Use `extra_cflags=["-DSK_CAPTURE_DRAW_TEXT_BLOB"]` to capture traces to disc. + +// Or uncomment this line: +//#define SK_CAPTURE_DRAW_TEXT_BLOB + #include #include #include @@ -24,11 +29,13 @@ #include "src/core/SkMakeUnique.h" #include "src/core/SkStrikeForGPU.h" #include "src/core/SkTLazy.h" +#include "src/core/SkTextBlobTrace.h" class Deserializer; class Serializer; enum SkAxisAlignment : uint32_t; class SkDescriptor; +class SkAutoDescriptor; class SkStrike; struct SkPackedGlyphID; enum SkScalerContextFlags : uint32_t; @@ -47,11 +54,11 @@ class SkTextBlobCacheDiffCanvas : public SkNoDrawCanvas { SkTextBlobCacheDiffCanvas(int width, int height, const SkSurfaceProps& props, SkStrikeServer* strikeServer, bool DFTSupport = true); - SK_API SkTextBlobCacheDiffCanvas(int width, int height, const SkSurfaceProps& props, + SK_SPI SkTextBlobCacheDiffCanvas(int width, int height, const SkSurfaceProps& props, SkStrikeServer* strikeServer, sk_sp colorSpace, bool DFTSupport); - SK_API ~SkTextBlobCacheDiffCanvas() override; + SK_SPI ~SkTextBlobCacheDiffCanvas() override; protected: SkCanvas::SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec& rec) override; @@ -72,11 +79,11 @@ class SkStrikeServer final : public SkStrikeForGPUCacheInterface { // entries on the remote client. class DiscardableHandleManager { public: - SK_API virtual ~DiscardableHandleManager() = default; + SK_SPI virtual ~DiscardableHandleManager() = default; // Creates a new *locked* handle and returns a unique ID that can be used to identify // it on the remote client. - SK_API virtual SkDiscardableHandleId createHandle() = 0; + SK_SPI virtual SkDiscardableHandleId createHandle() = 0; // Returns true if the handle could be successfully locked. The server can // assume it will remain locked until the next set of serialized entries is @@ -84,24 +91,24 @@ class SkStrikeServer final : public SkStrikeForGPUCacheInterface { // If returns false, the cache entry mapped to the handle has been deleted // on the client. Any subsequent attempts to lock the same handle are not // allowed. - SK_API virtual bool lockHandle(SkDiscardableHandleId) = 0; + SK_SPI virtual bool lockHandle(SkDiscardableHandleId) = 0; // Returns true if a handle has been deleted on the remote client. It is // invalid to use a handle id again with this manager once this returns true. // TODO(khushalsagar): Make pure virtual once chrome implementation lands. - SK_API virtual bool isHandleDeleted(SkDiscardableHandleId) { return false; } + SK_SPI virtual bool isHandleDeleted(SkDiscardableHandleId) { return false; } }; - SK_API explicit SkStrikeServer(DiscardableHandleManager* discardableHandleManager); - SK_API ~SkStrikeServer() override; + SK_SPI explicit SkStrikeServer(DiscardableHandleManager* discardableHandleManager); + SK_SPI ~SkStrikeServer() override; // Serializes the typeface to be transmitted using this server. - SK_API sk_sp serializeTypeface(SkTypeface*); + SK_SPI sk_sp serializeTypeface(SkTypeface*); // Serializes the strike data captured using a SkTextBlobCacheDiffCanvas. Any // handles locked using the DiscardableHandleManager will be assumed to be // unlocked after this call. - SK_API void writeStrikeData(std::vector* memory); + SK_SPI void writeStrikeData(std::vector* memory); // Methods used internally in Skia ------------------------------------------ class RemoteStrike; @@ -118,13 +125,18 @@ class SkStrikeServer final : public SkStrikeForGPUCacheInterface { const SkTypeface& typeface) override; static void AddGlyphForTesting( - RemoteStrike* cache, SkPackedGlyphID glyphID, bool asPath); + RemoteStrike* strike, SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects); void setMaxEntriesInDescriptorMapForTesting(size_t count) { fMaxEntriesInDescriptorMap = count; } size_t remoteStrikeMapSizeForTesting() const { return fDescToRemoteStrike.size(); } + #ifdef SK_CAPTURE_DRAW_TEXT_BLOB + // DrawTextBlob trace capture. + std::unique_ptr fCapture; + #endif // SK_CAPTURE_DRAW_TEXT_BLOB + private: static constexpr size_t kMaxEntriesInDescriptorMap = 2000u; @@ -194,20 +206,20 @@ class SkStrikeClient { virtual void notifyReadFailure(const ReadFailureData& data) {} }; - SK_API explicit SkStrikeClient(sk_sp, + SK_SPI explicit SkStrikeClient(sk_sp, bool isLogging = true, SkStrikeCache* strikeCache = nullptr); - SK_API ~SkStrikeClient(); + SK_SPI ~SkStrikeClient(); // Deserializes the typeface previously serialized using the SkStrikeServer. Returns null if the // data is invalid. - SK_API sk_sp deserializeTypeface(const void* data, size_t length); + SK_SPI sk_sp deserializeTypeface(const void* data, size_t length); // Deserializes the strike data from a SkStrikeServer. All messages generated // from a server when serializing the ops must be deserialized before the op // is rasterized. // Returns false if the data is invalid. - SK_API bool readStrikeData(const volatile void* memory, size_t memorySize); + SK_SPI bool readStrikeData(const volatile void* memory, size_t memorySize); private: class DiscardableStrikePinner; @@ -221,4 +233,7 @@ class SkStrikeClient { const bool fIsLogging; }; +// For exposure to fuzzing only. +bool SkFuzzDeserializeSkDescriptor(sk_sp bytes, SkAutoDescriptor* ad); + #endif // SkRemoteGlyphCache_DEFINED diff --git a/third_party/skia/src/core/SkScalerContext.cpp b/third_party/skia/src/core/SkScalerContext.cpp index fb783c965f52..f2893a238309 100644 --- a/third_party/skia/src/core/SkScalerContext.cpp +++ b/third_party/skia/src/core/SkScalerContext.cpp @@ -627,7 +627,7 @@ void SkScalerContext::getFontMetrics(SkFontMetrics* fm) { bool SkScalerContext::internalGetPath(SkPackedGlyphID glyphID, SkPath* devPath) { SkPath path; - if (!generatePath(glyphID.code(), &path)) { + if (!generatePath(glyphID.glyphID(), &path)) { return false; } diff --git a/third_party/skia/src/core/SkScan_AAAPath.cpp b/third_party/skia/src/core/SkScan_AAAPath.cpp index a9c0af4173c5..416df89dc8ef 100644 --- a/third_party/skia/src/core/SkScan_AAAPath.cpp +++ b/third_party/skia/src/core/SkScan_AAAPath.cpp @@ -21,7 +21,6 @@ #include "src/core/SkScan.h" #include "src/core/SkScanPriv.h" #include "src/core/SkTSort.h" -#include "src/utils/SkUTF.h" #include @@ -1546,7 +1545,7 @@ static void deferred_blit(SkAnalyticEdge* leftE, static void aaa_walk_edges(SkAnalyticEdge* prevHead, SkAnalyticEdge* nextTail, - SkPath::FillType fillType, + SkPathFillType fillType, AdditiveBlitter* blitter, int start_y, int stop_y, @@ -1570,10 +1569,8 @@ static void aaa_walk_edges(SkAnalyticEdge* prevHead, update_next_next_y(edge->fUpperY, y, &nextNextY); } - // returns 1 for evenodd, -1 for winding, regardless of inverse-ness - int windingMask = (fillType & 1) ? 1 : -1; - - bool isInverse = SkPath::IsInverseFillType(fillType); + int windingMask = SkPathFillType_IsEvenOdd(fillType) ? 1 : -1; + bool isInverse = SkPathFillType_IsInverse(fillType); if (isInverse && SkIntToFixed(start_y) != y) { int width = SkFixedFloorToInt(rightClip - leftClip); @@ -1937,7 +1934,7 @@ static SK_ALWAYS_INLINE void aaa_fill_path( aaa_walk_edges(&headEdge, &tailEdge, - path.getFillType(), + path.getNewFillType(), blitter, start_y, stop_y, diff --git a/third_party/skia/src/core/SkScan_Path.cpp b/third_party/skia/src/core/SkScan_Path.cpp index 4271f4e4b4e8..cacc2285aaff 100644 --- a/third_party/skia/src/core/SkScan_Path.cpp +++ b/third_party/skia/src/core/SkScan_Path.cpp @@ -97,14 +97,13 @@ typedef void (*PrePostProc)(SkBlitter* blitter, int y, bool isStartOfScanline); #define PREPOST_START true #define PREPOST_END false -static void walk_edges(SkEdge* prevHead, SkPath::FillType fillType, +static void walk_edges(SkEdge* prevHead, SkPathFillType fillType, SkBlitter* blitter, int start_y, int stop_y, PrePostProc proc, int rightClip) { validate_sort(prevHead->fNext); int curr_y = start_y; - // returns 1 for evenodd, -1 for winding, regardless of inverse-ness - int windingMask = (fillType & 1) ? 1 : -1; + int windingMask = SkPathFillType_IsEvenOdd(fillType) ? 1 : -1; for (;;) { int w = 0; @@ -471,8 +470,8 @@ void sk_fill_path(const SkPath& path, const SkIRect& clipRect, SkBlitter* blitte if (path.isConvex() && (nullptr == proc) && count >= 2) { walk_simple_edges(&headEdge, blitter, start_y, stop_y); } else { - walk_edges(&headEdge, path.getFillType(), blitter, start_y, stop_y, proc, - shiftedClip.right()); + walk_edges(&headEdge, path.getNewFillType(), blitter, start_y, stop_y, proc, + shiftedClip.right()); } } diff --git a/third_party/skia/src/core/SkSpecialImage.cpp b/third_party/skia/src/core/SkSpecialImage.cpp index 3c72e616bb48..7c3419af700c 100644 --- a/third_party/skia/src/core/SkSpecialImage.cpp +++ b/third_party/skia/src/core/SkSpecialImage.cpp @@ -118,7 +118,7 @@ sk_sp SkSpecialImage::makeTextureImage(GrRecordingContext* conte return nullptr; } - const SkIRect rect = SkIRect::MakeWH(proxy->width(), proxy->height()); + const SkIRect rect = SkIRect::MakeSize(proxy->dimensions()); // GrMakeCachedBitmapProxy has uploaded only the specified subset of 'bmp' so we need not // bother with SkBitmap::getSubset @@ -492,18 +492,15 @@ class SkSpecialImage_Gpu : public SkSpecialImage_Base { // TODO: if this becomes a bottle neck we could base this logic on what the size // will be when it is finally instantiated - but that is more fraught. if (GrProxyProvider::IsFunctionallyExact(fTextureProxy.get()) && - 0 == subset->fLeft && 0 == subset->fTop && - fTextureProxy->width() == subset->width() && - fTextureProxy->height() == subset->height()) { + *subset == SkIRect::MakeSize(fTextureProxy->dimensions())) { fTextureProxy->priv().exactify(false); // The existing GrTexture is already tight so reuse it in the SkImage return wrap_proxy_in_image(fContext, fTextureProxy, fAlphaType, fColorSpace); } sk_sp subsetProxy( - GrSurfaceProxy::Copy(fContext, fTextureProxy.get(), fColorType, - GrMipMapped::kNo, *subset, SkBackingFit::kExact, - SkBudgeted::kYes)); + GrSurfaceProxy::Copy(fContext, fTextureProxy.get(), GrMipMapped::kNo, *subset, + SkBackingFit::kExact, SkBudgeted::kYes)); if (!subsetProxy) { return nullptr; } diff --git a/third_party/skia/src/core/SkSpinlock.cpp b/third_party/skia/src/core/SkSpinlock.cpp index 59ea2b7cb97f..c5a469b51f68 100644 --- a/third_party/skia/src/core/SkSpinlock.cpp +++ b/third_party/skia/src/core/SkSpinlock.cpp @@ -6,6 +6,7 @@ */ #include "include/private/SkSpinlock.h" +#include "include/private/SkThreadAnnotations.h" #if 0 #include "include/private/SkMutex.h" @@ -41,7 +42,9 @@ void SkSpinlock::contendedAcquire() { debug_trace(); // To act as a mutex, we need an acquire barrier when we acquire the lock. + SK_POTENTIALLY_BLOCKING_REGION_BEGIN; while (fLocked.exchange(true, std::memory_order_acquire)) { do_pause(); } + SK_POTENTIALLY_BLOCKING_REGION_END; } diff --git a/third_party/skia/src/core/SkSpriteBlitter_ARGB32.cpp b/third_party/skia/src/core/SkSpriteBlitter_ARGB32.cpp index 457929dc32c1..b4fd39d928b1 100644 --- a/third_party/skia/src/core/SkSpriteBlitter_ARGB32.cpp +++ b/third_party/skia/src/core/SkSpriteBlitter_ARGB32.cpp @@ -13,7 +13,6 @@ #include "src/core/SkBlitRow.h" #include "src/core/SkSpriteBlitter.h" #include "src/core/SkXfermodePriv.h" -#include "src/utils/SkUTF.h" /////////////////////////////////////////////////////////////////////////////// diff --git a/third_party/skia/src/core/SkSpriteBlitter_RGB565.cpp b/third_party/skia/src/core/SkSpriteBlitter_RGB565.cpp index d0d5a99c9758..aebc05cecf65 100644 --- a/third_party/skia/src/core/SkSpriteBlitter_RGB565.cpp +++ b/third_party/skia/src/core/SkSpriteBlitter_RGB565.cpp @@ -13,7 +13,6 @@ #include "src/core/SkBlitRow.h" #include "src/core/SkSpriteBlitter.h" #include "src/core/SkXfermodePriv.h" -#include "src/utils/SkUTF.h" /////////////////////////////////////////////////////////////////////////////// diff --git a/third_party/skia/src/core/SkStrike.cpp b/third_party/skia/src/core/SkStrike.cpp index 1c444c8d049b..db0551145ddf 100644 --- a/third_party/skia/src/core/SkStrike.cpp +++ b/third_party/skia/src/core/SkStrike.cpp @@ -54,17 +54,6 @@ SkGlyph* SkStrike::glyph(SkPackedGlyphID packedGlyphID) { return glyph; } -SkGlyph* SkStrike::glyph(SkGlyphID glyphID) { - return this->glyph(SkPackedGlyphID{glyphID}); -} - -SkGlyph* SkStrike::glyph(SkGlyphID glyphID, SkPoint position) { - SkIPoint mask = fRoundingSpec.ignorePositionMask; - SkFixed subX = SkScalarToFixed(position.x()) & mask.x(), - subY = SkScalarToFixed(position.y()) & mask.y(); - return this->glyph(SkPackedGlyphID{glyphID, subX, subY}); -} - SkGlyph* SkStrike::glyphFromPrototype(const SkGlyphPrototype& p, void* image) { SkGlyph* glyph = fGlyphMap.findOrNull(p.id); if (glyph == nullptr) { @@ -100,10 +89,6 @@ const SkDescriptor& SkStrike::getDescriptor() const { return *fDesc.getDesc(); } -unsigned SkStrike::getGlyphCount() const { - return fScalerContext->getGlyphCount(); -} - int SkStrike::countCachedGlyphs() const { return fGlyphMap.count(); } @@ -112,7 +97,7 @@ SkSpan SkStrike::internalPrepare( SkSpan glyphIDs, PathDetail pathDetail, const SkGlyph** results) { const SkGlyph** cursor = results; for (auto glyphID : glyphIDs) { - SkGlyph* glyphPtr = this->glyph(glyphID); + SkGlyph* glyphPtr = this->glyph(SkPackedGlyphID{glyphID}); if (pathDetail == kMetricsAndPath) { this->preparePath(glyphPtr); } @@ -140,12 +125,7 @@ SkGlyph* SkStrike::mergeGlyphAndImage(SkPackedGlyphID toID, const SkGlyph& from) return glyph; } -bool SkStrike::belongsToCache(const SkGlyph* glyph) const { - return glyph && fGlyphMap.findOrNull(glyph->getPackedID()) == glyph; -} - -const SkGlyph* SkStrike::getCachedGlyphAnySubPix(SkGlyphID glyphID, - SkPackedGlyphID vetoID) const { +const SkGlyph* SkStrike::getCachedGlyphAnySubPix(SkGlyphID glyphID, SkPackedGlyphID vetoID) const { for (SkFixed subY = 0; subY < SK_Fixed1; subY += SK_FixedQuarter) { for (SkFixed subX = 0; subX < SK_Fixed1; subX += SK_FixedQuarter) { SkPackedGlyphID packedGlyphID{glyphID, subX, subY}; @@ -181,65 +161,83 @@ SkStrike::prepareImages(SkSpan glyphIDs, const SkGlyph* r return {results, glyphIDs.size()}; } +template +void SkStrike::commonFilterLoop(SkDrawableGlyphBuffer* drawables, Fn&& fn) { + drawables->forEachGlyphID( + [&](size_t i, SkPackedGlyphID packedID, SkPoint pos) { + if (SkScalarsAreFinite(pos.x(), pos.y())) { + SkGlyph* glyph = this->glyph(packedID); + if (!glyph->isEmpty()) { + fn(i, glyph, pos); + } + } + }); +} + void SkStrike::prepareForDrawingMasksCPU(SkDrawableGlyphBuffer* drawables) { - for (auto t : SkMakeEnumerate(drawables->input())) { - size_t i; SkGlyphVariant packedID; - std::forward_as_tuple(i, std::tie(packedID, std::ignore)) = t; - SkGlyph* glyph = this->glyph(packedID); - if (!glyph->isEmpty()) { - const void* image = this->prepareImage(glyph); + this->commonFilterLoop(drawables, + [&](size_t i, SkGlyph* glyph, SkPoint pos){ // If the glyph is too large, then no image is created. - if (image != nullptr) { + if (this->prepareImage(glyph) != nullptr) { drawables->push_back(glyph, i); } - } - } + }); } void SkStrike::prepareForDrawingPathsCPU(SkDrawableGlyphBuffer* drawables) { - for (auto t : SkMakeEnumerate(drawables->input())) { - size_t i; SkGlyphVariant packedID; - std::forward_as_tuple(i, std::tie(packedID, std::ignore)) = t; - SkGlyph* glyph = this->glyph(packedID); - if (!glyph->isEmpty()) { + this->commonFilterLoop(drawables, + [&](size_t i, SkGlyph* glyph, SkPoint pos){ const SkPath* path = this->preparePath(glyph); // The glyph my not have a path. if (path != nullptr) { drawables->push_back(path, i); } - } - } + }); +} + +// Note: this does not actually fill out the image. That happens at atlas building time. +void SkStrike::prepareForMaskDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) { + this->commonFilterLoop(drawables, + [&](size_t i, SkGlyph* glyph, SkPoint pos) { + if (CanDrawAsMask(*glyph)) { + drawables->push_back(glyph, i); + } else { + rejects->reject(i); + } + }); } -// N.B. This glyphMetrics call culls all the glyphs which will not display based on a non-finite -// position or that there are no mask pixels. -SkSpan -SkStrike::prepareForDrawingRemoveEmpty(const SkPackedGlyphID packedGlyphIDs[], - const SkPoint positions[], - size_t n, - int maxDimension, - SkGlyphPos results[]) { - size_t drawableGlyphCount = 0; - for (size_t i = 0; i < n; i++) { - SkPoint pos = positions[i]; - if (SkScalarsAreFinite(pos.x(), pos.y())) { - SkGlyph* glyphPtr = this->glyph(packedGlyphIDs[i]); - if (!glyphPtr->isEmpty()) { - results[drawableGlyphCount++] = {i, glyphPtr, pos}; - if (glyphPtr->maxDimension() <= maxDimension) { - // The glyph fits. Prepare image later. - } else if (!glyphPtr->isColor()) { - // The out of atlas glyph is not color so we can draw it using paths. - this->preparePath(glyphPtr); +void SkStrike::prepareForSDFTDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) { + this->commonFilterLoop(drawables, + [&](size_t i, SkGlyph* glyph, SkPoint pos) { + if (CanDrawAsSDFT(*glyph)) { + drawables->push_back(glyph, i); + } else { + rejects->reject(i); + } + }); +} + +void SkStrike::prepareForPathDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) { + this->commonFilterLoop(drawables, + [&](size_t i, SkGlyph* glyph, SkPoint pos) { + if (!glyph->isColor()) { + const SkPath* path = this->preparePath(glyph); + if (path != nullptr) { + // Save off the path to draw later. + drawables->push_back(path, i); } else { - // This will be handled by the fallback strike. - SkASSERT(glyphPtr->maxDimension() > maxDimension && glyphPtr->isColor()); + // Glyph does not have a path. It is probably bitmap only. + rejects->reject(i, glyph->maxDimension()); } + } else { + // Glyph is color. + rejects->reject(i, glyph->maxDimension()); } - } - } - - return SkSpan{results, drawableGlyphCount}; + }); } void SkStrike::findIntercepts(const SkScalar bounds[2], SkScalar scale, SkScalar xPos, diff --git a/third_party/skia/src/core/SkStrike.h b/third_party/skia/src/core/SkStrike.h index f893835cc6f1..0ae57ac9c6cb 100644 --- a/third_party/skia/src/core/SkStrike.h +++ b/third_party/skia/src/core/SkStrike.h @@ -39,36 +39,21 @@ class SkStrike final : public SkStrikeForGPU { std::unique_ptr scaler, const SkFontMetrics&); - // Return a glyph. Create it if it doesn't exist, and initialize the glyph with metrics and - // advances using a scaler. - SkGlyph* glyph(SkPackedGlyphID packedID); - SkGlyph* glyph(SkGlyphID glyphID); - SkGlyph* glyph(SkGlyphID, SkPoint); - // Return a glyph. Create it if it doesn't exist, and initialize with the prototype. SkGlyph* glyphFromPrototype(const SkGlyphPrototype& p, void* image = nullptr); // Return a glyph or nullptr if it does not exits in the strike. SkGlyph* glyphOrNull(SkPackedGlyphID id) const; - const void* prepareImage(SkGlyph* glyph); - // Lookup (or create if needed) the toGlyph using toID. If that glyph is not initialized with // an image, then use the information in from to initialize the width, height top, left, // format and image of the toGlyph. This is mainly used preserving the glyph if it was // created by a search of desperation. SkGlyph* mergeGlyphAndImage(SkPackedGlyphID toID, const SkGlyph& from); - // If the path has never been set, then use the scaler context to add the glyph. - const SkPath* preparePath(SkGlyph*); - // If the path has never been set, then add a path to glyph. const SkPath* preparePath(SkGlyph* glyph, const SkPath* path); - /** Returns the number of glyphs for this strike. - */ - unsigned getGlyphCount() const; - /** Return the number of glyphs currently cached. */ int countCachedGlyphs() const; @@ -78,9 +63,6 @@ class SkStrike final : public SkStrikeForGPU { void findIntercepts(const SkScalar bounds[2], SkScalar scale, SkScalar xPos, SkGlyph* , SkScalar* array, int* count); - /** Fallback glyphs used during font remoting if the original glyph can't be found. - */ - bool belongsToCache(const SkGlyph* glyph) const; /** Find any glyph in this cache with the given ID, regardless of subpixel positioning. * If set and present, skip over the glyph with vetoID. */ @@ -93,10 +75,6 @@ class SkStrike final : public SkStrikeForGPU { return fFontMetrics; } - SkMask::Format getMaskFormat() const { - return fScalerContext->getMaskFormat(); - } - const SkGlyphPositionRoundingSpec& roundingSpec() const override { return fRoundingSpec; } @@ -115,11 +93,15 @@ class SkStrike final : public SkStrikeForGPU { void prepareForDrawingMasksCPU(SkDrawableGlyphBuffer* drawables); void prepareForDrawingPathsCPU(SkDrawableGlyphBuffer* drawables); - SkSpan prepareForDrawingRemoveEmpty(const SkPackedGlyphID packedGlyphIDs[], - const SkPoint positions[], - size_t n, - int maxDimension, - SkGlyphPos results[]) override; + + void prepareForMaskDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) override; + + void prepareForSDFTDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) override; + + void prepareForPathDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) override; void onAboutToExitScope() override; @@ -169,11 +151,22 @@ class SkStrike final : public SkStrikeForGPU { SkGlyph* makeGlyph(SkPackedGlyphID); + template + void commonFilterLoop(SkDrawableGlyphBuffer* drawables, Fn&& fn); + + // Return a glyph. Create it if it doesn't exist, and initialize the glyph with metrics and + // advances using a scaler. + SkGlyph* glyph(SkPackedGlyphID packedID); + + const void* prepareImage(SkGlyph* glyph); + + // If the path has never been set, then use the scaler context to add the glyph. + const SkPath* preparePath(SkGlyph*); + enum PathDetail { kMetricsOnly, kMetricsAndPath }; - // internalPrepare will only be called with a mutex already held. SkSpan internalPrepare( SkSpan glyphIDs, @@ -182,7 +175,7 @@ class SkStrike final : public SkStrikeForGPU { const SkAutoDescriptor fDesc; const std::unique_ptr fScalerContext; - SkFontMetrics fFontMetrics; + const SkFontMetrics fFontMetrics; // Map from a combined GlyphID and sub-pixel position to a SkGlyph*. // The actual glyph is stored in the fAlloc. This structure provides an diff --git a/third_party/skia/src/core/SkStrikeCache.cpp b/third_party/skia/src/core/SkStrikeCache.cpp index 047f5f2e0adf..3e6ece471677 100644 --- a/third_party/skia/src/core/SkStrikeCache.cpp +++ b/third_party/skia/src/core/SkStrikeCache.cpp @@ -32,23 +32,25 @@ class SkStrikeCache::Node final : public SkStrikeForGPU { return fStrike.roundingSpec(); } - SkSpan - prepareForDrawingRemoveEmpty(const SkPackedGlyphID packedGlyphIDs[], - const SkPoint positions[], - size_t n, - int maxDimension, - SkGlyphPos results[]) override { - return fStrike.prepareForDrawingRemoveEmpty(packedGlyphIDs, - positions, - n, - maxDimension, - results); - } - const SkDescriptor& getDescriptor() const override { return fStrike.getDescriptor(); } + void prepareForMaskDrawing( + SkDrawableGlyphBuffer* drawbles, SkSourceGlyphBuffer* rejects) override { + fStrike.prepareForMaskDrawing(drawbles, rejects); + } + + void prepareForSDFTDrawing( + SkDrawableGlyphBuffer* drawbles, SkSourceGlyphBuffer* rejects) override { + fStrike.prepareForSDFTDrawing(drawbles, rejects); + } + + void prepareForPathDrawing( + SkDrawableGlyphBuffer* drawbles, SkSourceGlyphBuffer* rejects) override { + fStrike.prepareForPathDrawing(drawbles, rejects); + } + void onAboutToExitScope() override { fStrikeCache->attachNode(this); } diff --git a/third_party/skia/src/core/SkStrikeForGPU.cpp b/third_party/skia/src/core/SkStrikeForGPU.cpp index 1c2da44b4163..9f1f32cda880 100644 --- a/third_party/skia/src/core/SkStrikeForGPU.cpp +++ b/third_party/skia/src/core/SkStrikeForGPU.cpp @@ -12,12 +12,11 @@ #include "src/core/SkGlyphRunPainter.h" bool SkStrikeForGPU::CanDrawAsMask(const SkGlyph& glyph) { - return glyph.maxDimension() <= SkStrikeCommon::kSkSideTooBigForAtlas; + return FitsInAtlas(glyph); } bool SkStrikeForGPU::CanDrawAsSDFT(const SkGlyph& glyph) { - return glyph.maxDimension() <= SkStrikeCommon::kSkSideTooBigForAtlas - && glyph.maskFormat() == SkMask::kSDF_Format; + return FitsInAtlas(glyph) && glyph.maskFormat() == SkMask::kSDF_Format; } bool SkStrikeForGPU::CanDrawAsPath(const SkGlyph& glyph) { @@ -25,3 +24,7 @@ bool SkStrikeForGPU::CanDrawAsPath(const SkGlyph& glyph) { return !glyph.isColor() && glyph.path() != nullptr; } +bool SkStrikeForGPU::FitsInAtlas(const SkGlyph& glyph) { + return glyph.maxDimension() <= SkStrikeCommon::kSkSideTooBigForAtlas; +} + diff --git a/third_party/skia/src/core/SkStrikeForGPU.h b/third_party/skia/src/core/SkStrikeForGPU.h index a72ea355e5a8..9c7b4a5ea319 100644 --- a/third_party/skia/src/core/SkStrikeForGPU.h +++ b/third_party/skia/src/core/SkStrikeForGPU.h @@ -17,41 +17,28 @@ #include class SkDescriptor; +class SkDrawableGlyphBuffer; class SkGlyph; class SkMaskFilter; class SkPathEffect; +class SkSourceGlyphBuffer; class SkTypeface; struct SkGlyphPositionRoundingSpec; struct SkScalerContextEffects; -struct SkGlyphPos { - size_t index; - const SkGlyph* glyph; - SkPoint position; -}; - -struct SkPathPos { - const SkPath* path; - SkPoint position; -}; - class SkStrikeForGPU { public: virtual ~SkStrikeForGPU() = default; virtual const SkDescriptor& getDescriptor() const = 0; - // prepareForDrawingRemoveEmpty takes glyphIDs, and position, and returns a list of SkGlyphs - // and positions where all the data to draw the glyph has been created. The maxDimension - // parameter determines if the mask/SDF version will be created, or an alternate drawing - // format should be used. For path-only drawing set maxDimension to 0, and for bitmap-device - // drawing (where there is no upper limit to the glyph in the cache) use INT_MAX. - // prepareForDrawingRemoveEmpty should remove all empty glyphs from the returned span. - virtual SkSpan - prepareForDrawingRemoveEmpty(const SkPackedGlyphID packedGlyphIDs[], - const SkPoint positions[], - size_t n, - int maxDimension, - SkGlyphPos results[]) = 0; + virtual void prepareForMaskDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) = 0; + + virtual void prepareForSDFTDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) = 0; + + virtual void prepareForPathDrawing( + SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) = 0; virtual const SkGlyphPositionRoundingSpec& roundingSpec() const = 0; @@ -62,6 +49,7 @@ class SkStrikeForGPU { static bool CanDrawAsMask(const SkGlyph& glyph); static bool CanDrawAsSDFT(const SkGlyph& glyph); static bool CanDrawAsPath(const SkGlyph& glyph); + static bool FitsInAtlas(const SkGlyph& glyph); struct Deleter { diff --git a/third_party/skia/src/core/SkStrikeSpec.cpp b/third_party/skia/src/core/SkStrikeSpec.cpp index 65adf832c38d..5b10baefc597 100644 --- a/third_party/skia/src/core/SkStrikeSpec.cpp +++ b/third_party/skia/src/core/SkStrikeSpec.cpp @@ -13,6 +13,11 @@ #include "src/core/SkStrikeCache.h" #include "src/core/SkTLazy.h" +#if SK_SUPPORT_GPU +#include "src/gpu/text/GrStrikeCache.h" +#include "src/gpu/text/GrTextContext.h" +#endif + SkStrikeSpec SkStrikeSpec::MakeMask(const SkFont& font, const SkPaint& paint, const SkSurfaceProps& surfaceProps, SkScalerContextFlags scalerContextFlags, @@ -57,10 +62,12 @@ SkStrikeSpec SkStrikeSpec::MakeSourceFallback( SkScalar maxAtlasDimension = SkStrikeCommon::kSkSideTooBigForAtlas - 2; SkScalar runFontTextSize = font.getSize(); - - // Scale the text size down so the long side of all the glyphs will fit in the atlas. - SkScalar fallbackTextSize = SkScalarFloorToScalar( - (maxAtlasDimension / maxSourceGlyphDimension) * runFontTextSize); + SkScalar fallbackTextSize = runFontTextSize; + if (maxSourceGlyphDimension > maxAtlasDimension) { + // Scale the text size down so the long side of all the glyphs will fit in the atlas. + fallbackTextSize = SkScalarFloorToScalar( + (maxAtlasDimension / maxSourceGlyphDimension) * runFontTextSize); + } SkFont fallbackFont{font}; fallbackFont.setSize(fallbackTextSize); @@ -237,18 +244,48 @@ SkSpan SkBulkGlyphMetrics::glyphs(SkSpan glyphI return fStrike->metrics(glyphIDs, fGlyphs.get()); } +const SkGlyph* SkBulkGlyphMetrics::glyph(SkGlyphID glyphID) { + return this->glyphs(SkSpan{&glyphID, 1})[0]; +} + SkBulkGlyphMetricsAndPaths::SkBulkGlyphMetricsAndPaths(const SkStrikeSpec& spec) : fStrike{spec.findOrCreateExclusiveStrike()} { } +SkBulkGlyphMetricsAndPaths::SkBulkGlyphMetricsAndPaths(SkExclusiveStrikePtr&& strike) + : fStrike{std::move(strike)} { } + SkSpan SkBulkGlyphMetricsAndPaths::glyphs(SkSpan glyphIDs) { fGlyphs.reset(glyphIDs.size()); return fStrike->preparePaths(glyphIDs, fGlyphs.get()); } +const SkGlyph* SkBulkGlyphMetricsAndPaths::glyph(SkGlyphID glyphID) { + return this->glyphs(SkSpan{&glyphID, 1})[0]; +} + +void SkBulkGlyphMetricsAndPaths::findIntercepts( + const SkScalar* bounds, SkScalar scale, SkScalar xPos, + const SkGlyph* glyph, SkScalar* array, int* count) { + // TODO(herb): remove this abominable const_cast. Do the intercepts really need to be on the + // glyph? + fStrike->findIntercepts(bounds, scale, xPos, const_cast(glyph), array, count); +} + SkBulkGlyphMetricsAndImages::SkBulkGlyphMetricsAndImages(const SkStrikeSpec& spec) : fStrike{spec.findOrCreateExclusiveStrike()} { } +SkBulkGlyphMetricsAndImages::SkBulkGlyphMetricsAndImages(SkExclusiveStrikePtr&& strike) + : fStrike{std::move(strike)} { } + SkSpan SkBulkGlyphMetricsAndImages::glyphs(SkSpan glyphIDs) { fGlyphs.reset(glyphIDs.size()); return fStrike->prepareImages(glyphIDs, fGlyphs.get()); } + +const SkGlyph* SkBulkGlyphMetricsAndImages::glyph(SkPackedGlyphID packedID) { + return this->glyphs(SkSpan{&packedID, 1})[0]; +} + +const SkDescriptor& SkBulkGlyphMetricsAndImages::descriptor() const { + return fStrike->getDescriptor(); +} diff --git a/third_party/skia/src/core/SkStrikeSpec.h b/third_party/skia/src/core/SkStrikeSpec.h index d34e711661ba..c22a9c3fa820 100644 --- a/third_party/skia/src/core/SkStrikeSpec.h +++ b/third_party/skia/src/core/SkStrikeSpec.h @@ -13,8 +13,9 @@ #include "src/core/SkStrikeForGPU.h" #if SK_SUPPORT_GPU -#include "src/gpu/text/GrStrikeCache.h" #include "src/gpu/text/GrTextContext.h" +class GrStrikeCache; +class GrTextStrike; #endif class SkFont; @@ -40,10 +41,10 @@ class SkStrikeSpec { SkScalerContextFlags scalerContextFlags); static SkStrikeSpec MakeSourceFallback(const SkFont& font, - const SkPaint& paint, - const SkSurfaceProps& surfaceProps, - SkScalerContextFlags scalerContextFlags, - SkScalar maxSourceGlyphDimension); + const SkPaint& paint, + const SkSurfaceProps& surfaceProps, + SkScalerContextFlags scalerContextFlags, + SkScalar maxSourceGlyphDimension); // Create a canonical strike spec for device-less measurements. static SkStrikeSpec MakeCanonicalized( @@ -77,6 +78,7 @@ class SkStrikeSpec { SkStrikeCache* cache = SkStrikeCache::GlobalStrikeCache()) const; SkScalar strikeToSourceRatio() const { return fStrikeToSourceRatio; } + bool isEmpty() const { return SkScalarNearlyZero(fStrikeToSourceRatio); } const SkDescriptor& descriptor() const { return *fAutoDescriptor.getDesc(); } static bool ShouldDrawAsPath(const SkPaint& paint, const SkFont& font, const SkMatrix& matrix); @@ -99,6 +101,7 @@ class SkBulkGlyphMetrics { public: explicit SkBulkGlyphMetrics(const SkStrikeSpec& spec); SkSpan glyphs(SkSpan glyphIDs); + const SkGlyph* glyph(SkGlyphID glyphID); private: static constexpr int kTypicalGlyphCount = 20; @@ -109,7 +112,11 @@ class SkBulkGlyphMetrics { class SkBulkGlyphMetricsAndPaths { public: explicit SkBulkGlyphMetricsAndPaths(const SkStrikeSpec& spec); + explicit SkBulkGlyphMetricsAndPaths(SkExclusiveStrikePtr&& strike); SkSpan glyphs(SkSpan glyphIDs); + const SkGlyph* glyph(SkGlyphID glyphID); + void findIntercepts(const SkScalar bounds[2], SkScalar scale, SkScalar xPos, + const SkGlyph* glyph, SkScalar* array, int* count); private: static constexpr int kTypicalGlyphCount = 20; @@ -120,7 +127,11 @@ class SkBulkGlyphMetricsAndPaths { class SkBulkGlyphMetricsAndImages { public: explicit SkBulkGlyphMetricsAndImages(const SkStrikeSpec& spec); - SkSpan glyphs(SkSpan glyphIDs); + explicit SkBulkGlyphMetricsAndImages(SkExclusiveStrikePtr&& strike); + SkSpan glyphs(SkSpan packedIDs); + const SkGlyph* glyph(SkPackedGlyphID packedID); + const SkDescriptor& descriptor() const; + private: static constexpr int kTypicalGlyphCount = 64; diff --git a/third_party/skia/src/core/SkStroke.cpp b/third_party/skia/src/core/SkStroke.cpp index ecfefdf686ee..1c32900a3393 100644 --- a/third_party/skia/src/core/SkStroke.cpp +++ b/third_party/skia/src/core/SkStroke.cpp @@ -1390,8 +1390,8 @@ void SkStroke::strokePath(const SkPath& src, SkPath* dst) const { // If src is really a rect, call our specialty strokeRect() method { SkRect rect; - bool isClosed; - SkPath::Direction dir; + bool isClosed = false; + SkPathDirection dir; if (src.isRect(&rect, &isClosed, &dir) && isClosed) { this->strokeRect(rect, dst, dir); // our answer should preserve the inverseness of the src @@ -1498,15 +1498,15 @@ void SkStroke::strokePath(const SkPath& src, SkPath* dst) const { } } -static SkPath::Direction reverse_direction(SkPath::Direction dir) { - static const SkPath::Direction gOpposite[] = { SkPath::kCCW_Direction, SkPath::kCW_Direction }; - return gOpposite[dir]; +static SkPathDirection reverse_direction(SkPathDirection dir) { + static const SkPathDirection gOpposite[] = { SkPathDirection::kCCW, SkPathDirection::kCW }; + return gOpposite[(int)dir]; } -static void addBevel(SkPath* path, const SkRect& r, const SkRect& outer, SkPath::Direction dir) { +static void addBevel(SkPath* path, const SkRect& r, const SkRect& outer, SkPathDirection dir) { SkPoint pts[8]; - if (SkPath::kCW_Direction == dir) { + if (SkPathDirection::kCW == dir) { pts[0].set(r.fLeft, outer.fTop); pts[1].set(r.fRight, outer.fTop); pts[2].set(outer.fRight, r.fTop); @@ -1529,7 +1529,7 @@ static void addBevel(SkPath* path, const SkRect& r, const SkRect& outer, SkPath: } void SkStroke::strokeRect(const SkRect& origRect, SkPath* dst, - SkPath::Direction dir) const { + SkPathDirection dir) const { SkASSERT(dst != nullptr); dst->reset(); diff --git a/third_party/skia/src/core/SkStroke.h b/third_party/skia/src/core/SkStroke.h index 66edf3d92f06..b0458d386936 100644 --- a/third_party/skia/src/core/SkStroke.h +++ b/third_party/skia/src/core/SkStroke.h @@ -62,7 +62,7 @@ class SkStroke { * Stroke the specified rect, winding it in the specified direction.. */ void strokeRect(const SkRect& rect, SkPath* result, - SkPath::Direction = SkPath::kCW_Direction) const; + SkPathDirection = SkPathDirection::kCW) const; void strokePath(const SkPath& path, SkPath*) const; //////////////////////////////////////////////////////////////// diff --git a/third_party/skia/src/core/SkTextBlob.cpp b/third_party/skia/src/core/SkTextBlob.cpp index 3c84bda6f8e1..7044b507f2d4 100644 --- a/third_party/skia/src/core/SkTextBlob.cpp +++ b/third_party/skia/src/core/SkTextBlob.cpp @@ -875,27 +875,27 @@ int get_glyph_run_intercepts(const SkGlyphRun& glyphRun, interceptPaint.setPathEffect(nullptr); SkStrikeSpec strikeSpec = SkStrikeSpec::MakeWithNoDevice(interceptFont, &interceptPaint); - auto cache = strikeSpec.findOrCreateExclusiveStrike(); + SkBulkGlyphMetricsAndPaths metricsAndPaths{strikeSpec}; SkScalar xOffset = 0; SkScalar xPos = xOffset; SkScalar prevAdvance = 0; const SkPoint* posCursor = glyphRun.positions().begin(); - for (auto glyphID : glyphRun.glyphsIDs()) { + for (const SkGlyph* glyph : metricsAndPaths.glyphs(glyphRun.glyphsIDs())) { SkPoint pos = *posCursor++; - SkGlyph* glyph = cache->glyph(glyphID); xPos += prevAdvance * scale; prevAdvance = glyph->advanceX(); - if (cache->preparePath(glyph) != nullptr) { + if (glyph->path() != nullptr) { // The typeface is scaled, so un-scale the bounds to be in the space of the typeface. // Also ensure the bounds are properly offset by the vertical positioning of the glyph. SkScalar scaledBounds[2] = { (bounds[0] - pos.y()) / scale, (bounds[1] - pos.y()) / scale }; - cache->findIntercepts(scaledBounds, scale, pos.x(), glyph, intervals, intervalCount); + metricsAndPaths.findIntercepts( + scaledBounds, scale, pos.x(), glyph, intervals, intervalCount); } } return *intervalCount; diff --git a/third_party/skia/src/core/SkTextBlobTrace.cpp b/third_party/skia/src/core/SkTextBlobTrace.cpp new file mode 100644 index 000000000000..e107df16e871 --- /dev/null +++ b/third_party/skia/src/core/SkTextBlobTrace.cpp @@ -0,0 +1,118 @@ +// 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/core/SkTextBlobTrace.h" + +#include "include/core/SkTextBlob.h" +#include "src/core/SkFontPriv.h" +#include "src/core/SkPtrRecorder.h" +#include "src/core/SkReadBuffer.h" +#include "src/core/SkTextBlobPriv.h" +#include "src/core/SkWriteBuffer.h" + +std::vector SkTextBlobTrace::CreateBlobTrace(SkStream* stream) { + std::vector trace; + + uint32_t typefaceCount; + if (!stream->readU32(&typefaceCount)) { + return trace; + } + + std::vector> typefaceArray; + for (uint32_t i = 0; i < typefaceCount; i++) { + typefaceArray.push_back(SkTypeface::MakeDeserialize(stream)); + } + + uint32_t restOfFile; + if (!stream->readU32(&restOfFile)) { + return trace; + } + sk_sp data = SkData::MakeFromStream(stream, restOfFile); + SkReadBuffer readBuffer{data->data(), data->size()}; + readBuffer.setTypefaceArray(typefaceArray.data(), typefaceArray.size()); + + while (!readBuffer.eof()) { + SkTextBlobTrace::Record record; + record.origUniqueID = readBuffer.readUInt(); + readBuffer.readPaint(&record.paint, nullptr); + readBuffer.readPoint(&record.offset); + record.blob = SkTextBlobPriv::MakeFromBuffer(readBuffer); + trace.push_back(std::move(record)); + } + return trace; +} + +void SkTextBlobTrace::DumpTrace(const std::vector& trace) { + for (const SkTextBlobTrace::Record& record : trace) { + const SkTextBlob* blob = record.blob.get(); + const SkPaint& p = record.paint; + bool weirdPaint = p.getStyle() != SkPaint::kFill_Style + || p.getMaskFilter() != nullptr + || p.getPathEffect() != nullptr; + + SkDebugf("Blob %d ( %g %g ) %d\n ", + blob->uniqueID(), record.offset.x(), record.offset.y(), weirdPaint); + SkTextBlobRunIterator iter(blob); + int runNumber = 0; + while (!iter.done()) { + SkDebugf("Run %d\n ", runNumber); + SkFont font = iter.font(); + SkDebugf("Font %d %g %g %g %d %d %d\n ", + font.getTypefaceOrDefault()->uniqueID(), + font.getSize(), + font.getScaleX(), + font.getSkewX(), + SkFontPriv::Flags(font), + font.getEdging(), + font.getHinting()); + uint32_t glyphCount = iter.glyphCount(); + const uint16_t* glyphs = iter.glyphs(); + for (uint32_t i = 0; i < glyphCount; i++) { + SkDebugf("%02X ", glyphs[i]); + } + SkDebugf("\n"); + runNumber += 1; + iter.next(); + } + } +} + +SkTextBlobTrace::Capture::Capture() : fTypefaceSet(new SkRefCntSet) { + fWriteBuffer.setTypefaceRecorder(fTypefaceSet); +} + +SkTextBlobTrace::Capture::~Capture() = default; + +void SkTextBlobTrace::Capture::capture(const SkGlyphRunList& glyphRunList) { + const SkTextBlob* blob = glyphRunList.blob(); + if (blob != nullptr) { + fWriteBuffer.writeUInt(blob->uniqueID()); + fWriteBuffer.writePaint(glyphRunList.paint()); + fWriteBuffer.writePoint(glyphRunList.origin()); + SkTextBlobPriv::Flatten(*blob, fWriteBuffer); + fBlobCount++; + } +} + +void SkTextBlobTrace::Capture::dump(SkWStream* dst) const { + SkTLazy fileStream; + if (!dst) { + uint32_t id = SkChecksum::Mix(reinterpret_cast(this)); + SkString f = SkStringPrintf("diff-canvas-%08x-%04d.trace", id, fBlobCount); + dst = fileStream.init(f.c_str()); + if (!fileStream->isValid()) { + SkDebugf("Error opening '%s'.\n", f.c_str()); + return; + } + SkDebugf("Saving trace to '%s'.\n", f.c_str()); + } + SkASSERT(dst); + int count = fTypefaceSet->count(); + dst->write32(count); + SkPtrSet::Iter iter(*fTypefaceSet); + while (void* ptr = iter.next()) { + ((const SkTypeface*)ptr)->serialize(dst, SkTypeface::SerializeBehavior::kDoIncludeData); + } + dst->write32(fWriteBuffer.bytesWritten()); + fWriteBuffer.writeToStream(dst); +} diff --git a/third_party/skia/src/core/SkTextBlobTrace.h b/third_party/skia/src/core/SkTextBlobTrace.h new file mode 100644 index 000000000000..ab584c1faf6b --- /dev/null +++ b/third_party/skia/src/core/SkTextBlobTrace.h @@ -0,0 +1,49 @@ +// Copyright 2019 Google LLC. +// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. +#ifndef SkTextBlobTrace_DEFINED +#define SkTextBlobTrace_DEFINED + +#include "include/core/SkTypes.h" + +#include "include/core/SkPaint.h" +#include "include/core/SkPoint.h" +#include "include/core/SkStream.h" +#include "include/core/SkTextBlob.h" +#include "src/core/SkGlyphRun.h" +#include "src/core/SkWriteBuffer.h" + +#include +#include + +namespace SkTextBlobTrace { + +struct Record { + uint32_t origUniqueID; + SkPaint paint; + SkPoint offset; + sk_sp blob; +}; + +std::vector CreateBlobTrace(SkStream* stream); + +void DumpTrace(const std::vector&); + +class Capture { +public: + Capture(); + ~Capture(); + void capture(const SkGlyphRunList&); + // If `dst` is nullptr, write to a file. + void dump(SkWStream* dst = nullptr) const; + +private: + size_t fBlobCount = 0; + sk_sp fTypefaceSet; + SkBinaryWriteBuffer fWriteBuffer; + + Capture(const Capture&) = delete; + Capture& operator=(const Capture&) = delete; +}; + +} // namespace +#endif // SkTextBlobTrace_DEFINED diff --git a/third_party/skia/src/core/SkTypeface_remote.cpp b/third_party/skia/src/core/SkTypeface_remote.cpp index 838a78331359..dd6c2e2e78e4 100644 --- a/third_party/skia/src/core/SkTypeface_remote.cpp +++ b/third_party/skia/src/core/SkTypeface_remote.cpp @@ -45,7 +45,7 @@ void SkScalerContextProxy::generateMetrics(SkGlyph* glyph) { // Since the scaler context is being called, we don't have the needed data. Try to find a // fallback before failing. - if (fCache && fCache->belongsToCache(glyph)) { + if (fCache && fCache->glyphOrNull(glyph->getPackedID()) != nullptr) { // First check the original cache, in case there is a sub-pixel pos mismatch. if (const SkGlyph* from = fCache->getCachedGlyphAnySubPix(glyph->getGlyphID(), glyph->getPackedID())) { diff --git a/third_party/skia/src/core/SkVM.cpp b/third_party/skia/src/core/SkVM.cpp index cd2bc3ae2bf2..1152a637770b 100644 --- a/third_party/skia/src/core/SkVM.cpp +++ b/third_party/skia/src/core/SkVM.cpp @@ -6,19 +6,62 @@ */ #include "include/core/SkStream.h" +#include "include/core/SkString.h" +#include "include/private/SkChecksum.h" #include "include/private/SkSpinlock.h" #include "include/private/SkTFitsIn.h" #include "include/private/SkThreadID.h" #include "include/private/SkVx.h" #include "src/core/SkCpu.h" #include "src/core/SkVM.h" +#include // std::hash #include + +// 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. +#if defined(__has_feature) + #if __has_feature(memory_sanitizer) + #undef SKVM_JIT + #endif +#endif + #if defined(SKVM_JIT) #include -#endif -#if defined(SKVM_PERF_DUMPS) - #include - #include + + #if defined(SKVM_PERF_DUMPS) + #include + #include + #endif + + #if defined(SKVM_JIT_VTUNE) + #include + static void notify_vtune(const char* name, void* addr, size_t len, + const std::vector& lines) { + if (iJIT_IsProfilingActive() != iJIT_SAMPLING_ON) { + return; + } + + std::vector table; + for (auto& entry : lines) { + table.push_back({ (unsigned)entry.offset, (unsigned)entry.line }); + } + + iJIT_Method_Load event; + memset(&event, 0, sizeof(event)); + event.method_id = iJIT_GetNewMethodID(); + event.method_name = const_cast(name); // wtf? + event.method_load_address = addr; + event.method_size = len; + event.line_number_table = table.data(); + event.line_number_size = table.size(); + iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, &event); + } + #else + static void notify_vtune(const char* name, void* addr, size_t len, + const std::vector& lines) {} + #endif #endif @@ -95,41 +138,47 @@ namespace skvm { Val x = inst.x, y = inst.y, z = inst.z; - int imm = inst.imm; - write(o, inst.death == 0 ? "☠️ " : - !inst.can_hoist ? " " : + int immy = inst.immy, + immz = inst.immz; + write(o, !inst.can_hoist ? " " : inst.used_in_loop ? "↑ " : "↟ "); switch (op) { - case Op::store8: write(o, "store8" , Arg{imm}, V{x}); break; - case Op::store16: write(o, "store16", Arg{imm}, V{x}); break; - case Op::store32: write(o, "store32", Arg{imm}, V{x}); break; + case Op::assert_true: write(o, "assert_true" , V{x}); break; + + case Op::store8: write(o, "store8" , Arg{immy}, V{x}); break; + case Op::store16: write(o, "store16", Arg{immy}, V{x}); break; + case Op::store32: write(o, "store32", Arg{immy}, V{x}); break; - case Op::load8: write(o, V{id}, "= load8" , Arg{imm}); break; - case Op::load16: write(o, V{id}, "= load16", Arg{imm}); break; - case Op::load32: write(o, V{id}, "= load32", Arg{imm}); break; + case Op::index: write(o, V{id}, "= index"); break; - case Op::gather8: write(o, V{id}, "= gather8" , Arg{imm}, V{x}); break; - case Op::gather16: write(o, V{id}, "= gather16", Arg{imm}, V{x}); break; - case Op::gather32: write(o, V{id}, "= gather32", Arg{imm}, V{x}); break; + case Op::load8: write(o, V{id}, "= load8" , Arg{immy}); break; + case Op::load16: write(o, V{id}, "= load16", Arg{immy}); break; + case Op::load32: write(o, V{id}, "= load32", Arg{immy}); break; - case Op::uniform8: write(o, V{id}, "= uniform8" , Arg{imm & 0xffff}, Hex{imm>>16}); break; - case Op::uniform16: write(o, V{id}, "= uniform16", Arg{imm & 0xffff}, Hex{imm>>16}); break; - case Op::uniform32: write(o, V{id}, "= uniform32", Arg{imm & 0xffff}, Hex{imm>>16}); break; + case Op::gather8: write(o, V{id}, "= gather8" , Arg{immy}, V{x}); break; + case Op::gather16: write(o, V{id}, "= gather16", Arg{immy}, V{x}); break; + case Op::gather32: write(o, V{id}, "= gather32", Arg{immy}, V{x}); break; - case Op::splat: write(o, V{id}, "= splat", Splat{imm}); break; + case Op::uniform8: write(o, V{id}, "= uniform8" , Arg{immy}, Hex{immz}); break; + case Op::uniform16: write(o, V{id}, "= uniform16", Arg{immy}, Hex{immz}); break; + case Op::uniform32: write(o, V{id}, "= uniform32", Arg{immy}, Hex{immz}); break; + + case Op::splat: write(o, V{id}, "= splat", Splat{immy}); break; case Op::add_f32: write(o, V{id}, "= add_f32", V{x}, V{y} ); break; case Op::sub_f32: write(o, V{id}, "= sub_f32", V{x}, V{y} ); break; case Op::mul_f32: write(o, V{id}, "= mul_f32", V{x}, V{y} ); break; case Op::div_f32: write(o, V{id}, "= div_f32", V{x}, V{y} ); break; + case Op::min_f32: write(o, V{id}, "= min_f32", V{x}, V{y} ); break; + case Op::max_f32: write(o, V{id}, "= max_f32", V{x}, V{y} ); break; case Op::mad_f32: write(o, V{id}, "= mad_f32", V{x}, V{y}, V{z}); break; + case Op::mul_f32_imm: write(o, V{id}, "= mul_f32", V{x}, Splat{immy}); break; + case Op:: eq_f32: write(o, V{id}, "= eq_f32", V{x}, V{y}); break; case Op::neq_f32: write(o, V{id}, "= neq_f32", V{x}, V{y}); break; - case Op:: lt_f32: write(o, V{id}, "= lt_f32", V{x}, V{y}); break; - case Op::lte_f32: write(o, V{id}, "= lte_f32", V{x}, V{y}); break; case Op:: gt_f32: write(o, V{id}, "= gt_f32", V{x}, V{y}); break; case Op::gte_f32: write(o, V{id}, "= gte_f32", V{x}, V{y}); break; @@ -138,14 +187,12 @@ namespace skvm { case Op::sub_i32: write(o, V{id}, "= sub_i32", V{x}, V{y}); break; case Op::mul_i32: write(o, V{id}, "= mul_i32", V{x}, V{y}); break; - case Op::shl_i32: write(o, V{id}, "= shl_i32", V{x}, Shift{imm}); break; - case Op::shr_i32: write(o, V{id}, "= shr_i32", V{x}, Shift{imm}); break; - case Op::sra_i32: write(o, V{id}, "= sra_i32", V{x}, Shift{imm}); break; + case Op::shl_i32: write(o, V{id}, "= shl_i32", V{x}, Shift{immy}); break; + case Op::shr_i32: write(o, V{id}, "= shr_i32", V{x}, Shift{immy}); break; + case Op::sra_i32: write(o, V{id}, "= sra_i32", V{x}, Shift{immy}); break; case Op:: eq_i32: write(o, V{id}, "= eq_i32", V{x}, V{y}); break; case Op::neq_i32: write(o, V{id}, "= neq_i32", V{x}, V{y}); break; - case Op:: lt_i32: write(o, V{id}, "= lt_i32", V{x}, V{y}); break; - case Op::lte_i32: write(o, V{id}, "= lte_i32", V{x}, V{y}); break; case Op:: gt_i32: write(o, V{id}, "= gt_i32", V{x}, V{y}); break; case Op::gte_i32: write(o, V{id}, "= gte_i32", V{x}, V{y}); break; @@ -153,14 +200,12 @@ namespace skvm { case Op::sub_i16x2: write(o, V{id}, "= sub_i16x2", V{x}, V{y}); break; case Op::mul_i16x2: write(o, V{id}, "= mul_i16x2", V{x}, V{y}); break; - case Op::shl_i16x2: write(o, V{id}, "= shl_i16x2", V{x}, Shift{imm}); break; - case Op::shr_i16x2: write(o, V{id}, "= shr_i16x2", V{x}, Shift{imm}); break; - case Op::sra_i16x2: write(o, V{id}, "= sra_i16x2", V{x}, Shift{imm}); break; + case Op::shl_i16x2: write(o, V{id}, "= shl_i16x2", V{x}, Shift{immy}); break; + case Op::shr_i16x2: write(o, V{id}, "= shr_i16x2", V{x}, Shift{immy}); break; + case Op::sra_i16x2: write(o, V{id}, "= sra_i16x2", V{x}, Shift{immy}); break; case Op:: eq_i16x2: write(o, V{id}, "= eq_i16x2", V{x}, V{y}); break; case Op::neq_i16x2: write(o, V{id}, "= neq_i16x2", V{x}, V{y}); break; - case Op:: lt_i16x2: write(o, V{id}, "= lt_i16x2", V{x}, V{y}); break; - case Op::lte_i16x2: write(o, V{id}, "= lte_i16x2", V{x}, V{y}); break; case Op:: gt_i16x2: write(o, V{id}, "= gt_i16x2", V{x}, V{y}); break; case Op::gte_i16x2: write(o, V{id}, "= gte_i16x2", V{x}, V{y}); break; @@ -170,12 +215,13 @@ namespace skvm { case Op::bit_clear: write(o, V{id}, "= bit_clear", V{x}, V{y} ); break; case Op::select : write(o, V{id}, "= select" , V{x}, V{y}, V{z}); break; - case Op::bytes: write(o, V{id}, "= bytes", V{x}, Hex{imm}); break; - case Op::extract: write(o, V{id}, "= extract", V{x}, Shift{imm}, V{y}); break; - case Op::pack: write(o, V{id}, "= pack", V{x}, V{y}, Shift{imm}); break; + case Op::bytes: write(o, V{id}, "= bytes", V{x}, Hex{immy}); break; + case Op::extract: write(o, V{id}, "= extract", V{x}, Shift{immy}, V{z}); break; + case Op::pack: write(o, V{id}, "= pack", V{x}, V{y}, Shift{immz}); break; case Op::to_f32: write(o, V{id}, "= to_f32", V{x}); break; - case Op::to_i32: write(o, V{id}, "= to_i32", V{x}); break; + case Op::trunc: write(o, V{id}, "= trunc", V{x}); break; + case Op::round: write(o, V{id}, "= round", V{x}); break; } write(o, "\n"); @@ -200,46 +246,52 @@ namespace skvm { o->writeDecAsText(fInstructions.size()); o->writeText(" instructions:\n"); for (int i = 0; i < (int)fInstructions.size(); i++) { - if (i == fLoop) { - write(o, "loop:\n"); - } + if (i == fLoop) { write(o, "loop:\n"); } + if (i >= fLoop) { write(o, " "); } const Program::Instruction& inst = fInstructions[i]; Op op = inst.op; Reg d = inst.d, x = inst.x, y = inst.y, z = inst.z; - int imm = inst.imm; + int immy = inst.immy, + immz = inst.immz; switch (op) { - case Op::store8: write(o, "store8" , Arg{imm}, R{x}); break; - case Op::store16: write(o, "store16", Arg{imm}, R{x}); break; - case Op::store32: write(o, "store32", Arg{imm}, R{x}); break; + case Op::assert_true: write(o, "assert_true" , R{x}); break; + + case Op::store8: write(o, "store8" , Arg{immy}, R{x}); break; + case Op::store16: write(o, "store16", Arg{immy}, R{x}); break; + case Op::store32: write(o, "store32", Arg{immy}, R{x}); break; + + case Op::index: write(o, R{d}, "= index"); break; - case Op::load8: write(o, R{d}, "= load8" , Arg{imm}); break; - case Op::load16: write(o, R{d}, "= load16", Arg{imm}); break; - case Op::load32: write(o, R{d}, "= load32", Arg{imm}); break; + case Op::load8: write(o, R{d}, "= load8" , Arg{immy}); break; + case Op::load16: write(o, R{d}, "= load16", Arg{immy}); break; + case Op::load32: write(o, R{d}, "= load32", Arg{immy}); break; - case Op::gather8: write(o, R{d}, "= gather8" , Arg{imm}, R{x}); break; - case Op::gather16: write(o, R{d}, "= gather16", Arg{imm}, R{x}); break; - case Op::gather32: write(o, R{d}, "= gather32", Arg{imm}, R{x}); break; + case Op::gather8: write(o, R{d}, "= gather8" , Arg{immy}, R{x}); break; + case Op::gather16: write(o, R{d}, "= gather16", Arg{immy}, R{x}); break; + case Op::gather32: write(o, R{d}, "= gather32", Arg{immy}, R{x}); break; - case Op::uniform8: write(o, R{d}, "= uniform8" , Arg{imm & 0xffff}, Hex{imm>>16}); break; - case Op::uniform16: write(o, R{d}, "= uniform16", Arg{imm & 0xffff}, Hex{imm>>16}); break; - case Op::uniform32: write(o, R{d}, "= uniform32", Arg{imm & 0xffff}, Hex{imm>>16}); break; + case Op::uniform8: write(o, R{d}, "= uniform8" , Arg{immy}, Hex{immz}); break; + case Op::uniform16: write(o, R{d}, "= uniform16", Arg{immy}, Hex{immz}); break; + case Op::uniform32: write(o, R{d}, "= uniform32", Arg{immy}, Hex{immz}); break; - case Op::splat: write(o, R{d}, "= splat", Splat{imm}); break; + case Op::splat: write(o, R{d}, "= splat", Splat{immy}); break; case Op::add_f32: write(o, R{d}, "= add_f32", R{x}, R{y} ); break; case Op::sub_f32: write(o, R{d}, "= sub_f32", R{x}, R{y} ); break; case Op::mul_f32: write(o, R{d}, "= mul_f32", R{x}, R{y} ); break; case Op::div_f32: write(o, R{d}, "= div_f32", R{x}, R{y} ); break; + case Op::min_f32: write(o, R{d}, "= min_f32", R{x}, R{y} ); break; + case Op::max_f32: write(o, R{d}, "= max_f32", R{x}, R{y} ); break; case Op::mad_f32: write(o, R{d}, "= mad_f32", R{x}, R{y}, R{z}); break; + case Op::mul_f32_imm: write(o, R{d}, "= mul_f32", R{x}, Splat{immy}); break; + case Op:: eq_f32: write(o, R{d}, "= eq_f32", R{x}, R{y}); break; case Op::neq_f32: write(o, R{d}, "= neq_f32", R{x}, R{y}); break; - case Op:: lt_f32: write(o, R{d}, "= lt_f32", R{x}, R{y}); break; - case Op::lte_f32: write(o, R{d}, "= lte_f32", R{x}, R{y}); break; case Op:: gt_f32: write(o, R{d}, "= gt_f32", R{x}, R{y}); break; case Op::gte_f32: write(o, R{d}, "= gte_f32", R{x}, R{y}); break; @@ -248,14 +300,12 @@ namespace skvm { case Op::sub_i32: write(o, R{d}, "= sub_i32", R{x}, R{y}); break; case Op::mul_i32: write(o, R{d}, "= mul_i32", R{x}, R{y}); break; - case Op::shl_i32: write(o, R{d}, "= shl_i32", R{x}, Shift{imm}); break; - case Op::shr_i32: write(o, R{d}, "= shr_i32", R{x}, Shift{imm}); break; - case Op::sra_i32: write(o, R{d}, "= sra_i32", R{x}, Shift{imm}); break; + case Op::shl_i32: write(o, R{d}, "= shl_i32", R{x}, Shift{immy}); break; + case Op::shr_i32: write(o, R{d}, "= shr_i32", R{x}, Shift{immy}); break; + case Op::sra_i32: write(o, R{d}, "= sra_i32", R{x}, Shift{immy}); break; case Op:: eq_i32: write(o, R{d}, "= eq_i32", R{x}, R{y}); break; case Op::neq_i32: write(o, R{d}, "= neq_i32", R{x}, R{y}); break; - case Op:: lt_i32: write(o, R{d}, "= lt_i32", R{x}, R{y}); break; - case Op::lte_i32: write(o, R{d}, "= lte_i32", R{x}, R{y}); break; case Op:: gt_i32: write(o, R{d}, "= gt_i32", R{x}, R{y}); break; case Op::gte_i32: write(o, R{d}, "= gte_i32", R{x}, R{y}); break; @@ -264,14 +314,12 @@ namespace skvm { case Op::sub_i16x2: write(o, R{d}, "= sub_i16x2", R{x}, R{y}); break; case Op::mul_i16x2: write(o, R{d}, "= mul_i16x2", R{x}, R{y}); break; - case Op::shl_i16x2: write(o, R{d}, "= shl_i16x2", R{x}, Shift{imm}); break; - case Op::shr_i16x2: write(o, R{d}, "= shr_i16x2", R{x}, Shift{imm}); break; - case Op::sra_i16x2: write(o, R{d}, "= sra_i16x2", R{x}, Shift{imm}); break; + case Op::shl_i16x2: write(o, R{d}, "= shl_i16x2", R{x}, Shift{immy}); break; + case Op::shr_i16x2: write(o, R{d}, "= shr_i16x2", R{x}, Shift{immy}); break; + case Op::sra_i16x2: write(o, R{d}, "= sra_i16x2", R{x}, Shift{immy}); break; case Op:: eq_i16x2: write(o, R{d}, "= eq_i16x2", R{x}, R{y}); break; case Op::neq_i16x2: write(o, R{d}, "= neq_i16x2", R{x}, R{y}); break; - case Op:: lt_i16x2: write(o, R{d}, "= lt_i16x2", R{x}, R{y}); break; - case Op::lte_i16x2: write(o, R{d}, "= lte_i16x2", R{x}, R{y}); break; case Op:: gt_i16x2: write(o, R{d}, "= gt_i16x2", R{x}, R{y}); break; case Op::gte_i16x2: write(o, R{d}, "= gte_i16x2", R{x}, R{y}); break; @@ -282,12 +330,13 @@ namespace skvm { case Op::bit_clear: write(o, R{d}, "= bit_clear", R{x}, R{y} ); break; case Op::select : write(o, R{d}, "= select" , R{x}, R{y}, R{z}); break; - case Op::bytes: write(o, R{d}, "= bytes", R{x}, Hex{imm}); break; - case Op::extract: write(o, R{d}, "= extract", R{x}, Shift{imm}, R{y}); break; - case Op::pack: write(o, R{d}, "= pack", R{x}, R{y}, Shift{imm}); break; + case Op::bytes: write(o, R{d}, "= bytes", R{x}, Hex{immy}); break; + case Op::extract: write(o, R{d}, "= extract", R{x}, Shift{immy}, R{z}); break; + case Op::pack: write(o, R{d}, "= pack", R{x}, R{y}, Shift{immz}); break; case Op::to_f32: write(o, R{d}, "= to_f32", R{x}); break; - case Op::to_i32: write(o, R{d}, "= to_i32", R{x}); break; + case Op::trunc: write(o, R{d}, "= trunc", R{x}); break; + case Op::round: write(o, R{d}, "= round", R{x}); break; } write(o, "\n"); } @@ -296,29 +345,76 @@ namespace skvm { // Builder -> Program, with liveness and loop hoisting analysis. Program Builder::done(const char* debug_name) { - // Basic liveness analysis: - // an instruction is live until all live instructions that need its input have retired. - for (Val id = fProgram.size(); id --> 0; ) { + // First rewrite the program by issuing instructions as late as possible: + // - any side-effect-only (i.e. store) instruction in order as we see them; + // - any other instruction only once it's shown to be needed. + // This elides all dead code and helps minimize value lifetime / register pressure. + std::vector rewritten; + rewritten.reserve(fProgram.size()); + std::vector new_index(fProgram.size(), NA); // Map old Val index to rewritten index. + + auto rewrite = [&](Val id, auto& recurse) -> Val { + auto rewrite_input = [&](Val input) -> Val { + if (input == NA) { + return NA; + } + if (new_index[input] == NA) { + new_index[input] = recurse(input, recurse); + } + return new_index[input]; + }; + + // The order we rewrite inputs is somewhat arbitrary; we could just go x,y,z. + // But we try to preserve the original program order as much as possible by + // rewriting inst's inputs in the order they were themselves originally issued. + // This makes debugging program dumps a little easier. + Instruction inst = fProgram[id]; + Val *min = &inst.x, + *mid = &inst.y, + *max = &inst.z; + if (*min > *mid) { std::swap(min, mid); } + if (*mid > *max) { std::swap(mid, max); } + if (*min > *mid) { std::swap(min, mid); } + *min = rewrite_input(*min); + *mid = rewrite_input(*mid); + *max = rewrite_input(*max); + rewritten.push_back(inst); + return (Val)rewritten.size()-1; + }; + + // Here we go with the actual rewriting, starting with all the store instructions + // and letting rewrite() work back recursively through their inputs. + for (Val id = 0; id < (Val)fProgram.size(); id++) { + if (fProgram[id].op <= Op::store32) { + rewrite(id, rewrite); + } + } + // We're done with the original order now... everything below will analyze the new program. + fProgram = std::move(rewritten); + + + // We'll want to know when it's safe to recycle registers holding the values + // produced by each instruction, that is, when no future instruction needs it. + for (Val id = 0; id < (Val)fProgram.size(); id++) { Instruction& inst = fProgram[id]; - // All side-effect-only instructions (stores) are live. + // Stores don't really produce values. Just mark them as dying on issue. if (inst.op <= Op::store32) { inst.death = id; } - // The arguments of a live instruction must live until at least that instruction. - if (inst.death != 0) { - // Notice how we're walking backward, storing the latest instruction in death. - if (inst.x != NA && fProgram[inst.x].death == 0) { fProgram[inst.x].death = id; } - if (inst.y != NA && fProgram[inst.y].death == 0) { fProgram[inst.y].death = id; } - if (inst.z != NA && fProgram[inst.z].death == 0) { fProgram[inst.z].death = id; } - } + // Extend the lifetime of this instruction's inputs to live until it issues. + // (We're walking in order, so this is the same as max()ing.) + if (inst.x != NA) { fProgram[inst.x].death = id; } + if (inst.y != NA) { fProgram[inst.y].death = id; } + if (inst.z != NA) { fProgram[inst.z].death = id; } } + // Mark which values don't depend on the loop and can be hoisted. for (Val id = 0; id < (Val)fProgram.size(); id++) { Builder::Instruction& inst = fProgram[id]; // Varying loads (and gathers) and stores cannot be hoisted out of the loop. - if (inst.op <= Op::gather32) { + if (inst.op <= Op::gather32 && inst.op != Op::assert_true) { inst.can_hoist = false; } @@ -338,6 +434,12 @@ namespace skvm { } } + char buf[64] = "skvm-jit-"; + if (!debug_name) { + *SkStrAppendU32(buf+9, this->hash()) = '\0'; + debug_name = buf; + } + return {fProgram, fStrides, debug_name}; } @@ -350,7 +452,8 @@ namespace skvm { && a.x == b.x && a.y == b.y && a.z == b.z - && a.imm == b.imm + && a.immy == b.immy + && a.immz == b.immz && a.death == b.death && a.can_hoist == b.can_hoist && a.used_in_loop == b.used_in_loop; @@ -358,22 +461,32 @@ namespace skvm { // TODO: replace with SkOpts::hash()? size_t Builder::InstructionHash::operator()(const Instruction& inst) const { - return Hash((uint8_t)inst.op) - ^ Hash(inst.x) - ^ Hash(inst.y) - ^ Hash(inst.z) - ^ Hash(inst.imm) - ^ Hash(inst.death) - ^ Hash(inst.can_hoist) - ^ Hash(inst.used_in_loop); + auto hash = [](auto v) { + return std::hash{}(v); + }; + return hash((uint8_t)inst.op) + ^ hash(inst.x) + ^ hash(inst.y) + ^ hash(inst.z) + ^ hash(inst.immy) + ^ hash(inst.immz) + ^ hash(inst.death) + ^ hash(inst.can_hoist) + ^ hash(inst.used_in_loop); } + uint32_t Builder::hash() const { return fHash; } + // Most instructions produce a value and return it by ID, // the value-producing instruction's own index in the program vector. - Val Builder::push(Op op, Val x, Val y, Val z, int imm) { - Instruction inst{op, x, y, z, imm, + Val Builder::push(Op op, Val x, Val y, Val z, int immy, int immz) { + Instruction inst{op, x, y, z, immy, immz, /*death=*/0, /*can_hoist=*/true, /*used_in_loop=*/false}; + // This InstructionHash{}() call should be free given we're about to use fIndex below. + fHash ^= InstructionHash{}(inst); + fHash = SkChecksum::CheapMix(fHash); // Make sure instruction order matters. + // Basic common subexpression elimination: // if we've already seen this exact Instruction, use it instead of creating a new one. if (Val* id = fIndex.find(inst)) { @@ -385,9 +498,16 @@ namespace skvm { return id; } - bool Builder::isZero(Val id) const { - return fProgram[id].op == Op::splat - && fProgram[id].imm == 0; + bool Builder::allImm() const { return true; } + + template + bool Builder::allImm(Val id, T* imm, Rest... rest) const { + if (fProgram[id].op == Op::splat) { + static_assert(sizeof(T) == 4); + memcpy(imm, &fProgram[id].immy, 4); + return this->allImm(rest...); + } + return false; } Arg Builder::arg(int stride) { @@ -396,10 +516,20 @@ namespace skvm { return {ix}; } + void Builder::assert_true(I32 val) { + #ifdef SK_DEBUG + int imm; + if (this->allImm(val.id,&imm)) { SkASSERT(imm); return; } + (void)this->push(Op::assert_true, val.id,NA,NA); + #endif + } + void Builder::store8 (Arg ptr, I32 val) { (void)this->push(Op::store8 , val.id,NA,NA, ptr.ix); } void Builder::store16(Arg ptr, I32 val) { (void)this->push(Op::store16, val.id,NA,NA, ptr.ix); } void Builder::store32(Arg ptr, I32 val) { (void)this->push(Op::store32, val.id,NA,NA, ptr.ix); } + I32 Builder::index() { return {this->push(Op::index , NA,NA,NA,0) }; } + I32 Builder::load8 (Arg ptr) { return {this->push(Op::load8 , NA,NA,NA, ptr.ix) }; } I32 Builder::load16(Arg ptr) { return {this->push(Op::load16, NA,NA,NA, ptr.ix) }; } I32 Builder::load32(Arg ptr) { return {this->push(Op::load32, NA,NA,NA, ptr.ix) }; } @@ -415,13 +545,13 @@ namespace skvm { } I32 Builder::uniform8(Arg ptr, int offset) { - return {this->push(Op::uniform8, NA,NA,NA, ptr.ix | (offset<<16))}; + return {this->push(Op::uniform8, NA,NA,NA, ptr.ix, offset)}; } I32 Builder::uniform16(Arg ptr, int offset) { - return {this->push(Op::uniform16, NA,NA,NA, ptr.ix | (offset<<16))}; + return {this->push(Op::uniform16, NA,NA,NA, ptr.ix, offset)}; } I32 Builder::uniform32(Arg ptr, int offset) { - return {this->push(Op::uniform32, NA,NA,NA, ptr.ix | (offset<<16))}; + return {this->push(Op::uniform32, NA,NA,NA, ptr.ix, offset)}; } // The two splat() functions are just syntax sugar over splatting a 4-byte bit pattern. @@ -432,17 +562,76 @@ namespace skvm { return {this->push(Op::splat, NA,NA,NA, bits)}; } - F32 Builder::add(F32 x, F32 y ) { return {this->push(Op::add_f32, x.id, y.id)}; } - F32 Builder::sub(F32 x, F32 y ) { return {this->push(Op::sub_f32, x.id, y.id)}; } - F32 Builder::mul(F32 x, F32 y ) { return {this->push(Op::mul_f32, x.id, y.id)}; } - F32 Builder::div(F32 x, F32 y ) { return {this->push(Op::div_f32, x.id, y.id)}; } + // Be careful peepholing float math! Transformations you might expect to + // be legal can fail in the face of NaN/Inf, e.g. 0*x is not always 0. + // Float peepholes must pass this equivalence test for all ~4B floats: + // + // bool equiv(float x, float y) { return (x == y) || (isnanf(x) && isnanf(y)); } + // + // unsigned bits = 0; + // do { + // float f; + // memcpy(&f, &bits, 4); + // if (!equiv(f, ...)) { + // abort(); + // } + // } while (++bits != 0); + + F32 Builder::add(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X+Y); } + if (this->isImm(y.id, 0.0f)) { return x; } // x+0 == x + if (this->isImm(x.id, 0.0f)) { return y; } // 0+y == y + return {this->push(Op::add_f32, x.id, y.id)}; + } + + F32 Builder::sub(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X-Y); } + if (this->isImm(y.id, 0.0f)) { return x; } // x-0 == x + return {this->push(Op::sub_f32, x.id, y.id)}; + } + + F32 Builder::mul(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X*Y); } + if (this->isImm(y.id, 1.0f)) { return x; } // x*1 == x + if (this->isImm(x.id, 1.0f)) { return y; } // 1*y == y + #if defined(SK_CPU_X86) + int imm; + if (this->allImm(y.id, &imm)) { return {this->push(Op::mul_f32_imm, x.id,NA,NA, imm)}; } + if (this->allImm(x.id, &imm)) { return {this->push(Op::mul_f32_imm, y.id,NA,NA, imm)}; } + #endif + return {this->push(Op::mul_f32, x.id, y.id)}; + } + + F32 Builder::div(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X/Y); } + if (this->isImm(y.id, 1.0f)) { return x; } // x/1 == x + return {this->push(Op::div_f32, x.id, y.id)}; + } + F32 Builder::mad(F32 x, F32 y, F32 z) { - if (this->isZero(z.id)) { - return this->mul(x,y); - } + float X,Y,Z; + if (this->allImm(x.id,&X, y.id,&Y, z.id,&Z)) { return this->splat(X*Y+Z); } + if (this->isImm(y.id, 1.0f)) { return this->add(x,z); } // x*1+z == x+z + if (this->isImm(x.id, 1.0f)) { return this->add(y,z); } // 1*y+z == y+z + if (this->isImm(z.id, 0.0f)) { return this->mul(x,y); } // x*y+0 == x*y return {this->push(Op::mad_f32, x.id, y.id, z.id)}; } + F32 Builder::min(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(std::min(X,Y)); } + return {this->push(Op::min_f32, x.id, y.id)}; + } + F32 Builder::max(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(std::max(X,Y)); } + return {this->push(Op::max_f32, x.id, y.id)}; + } + I32 Builder::add(I32 x, I32 y) { return {this->push(Op::add_i32, x.id, y.id)}; } I32 Builder::sub(I32 x, I32 y) { return {this->push(Op::sub_i32, x.id, y.id)}; } I32 Builder::mul(I32 x, I32 y) { return {this->push(Op::mul_i32, x.id, y.id)}; } @@ -451,56 +640,129 @@ namespace skvm { I32 Builder::sub_16x2(I32 x, I32 y) { return {this->push(Op::sub_i16x2, x.id, y.id)}; } I32 Builder::mul_16x2(I32 x, I32 y) { return {this->push(Op::mul_i16x2, x.id, y.id)}; } - I32 Builder::shl(I32 x, int bits) { return {this->push(Op::shl_i32, x.id,NA,NA, bits)}; } - I32 Builder::shr(I32 x, int bits) { return {this->push(Op::shr_i32, x.id,NA,NA, bits)}; } - I32 Builder::sra(I32 x, int bits) { return {this->push(Op::sra_i32, x.id,NA,NA, bits)}; } + I32 Builder::shl(I32 x, int bits) { + int X; + if (this->allImm(x.id,&X)) { return this->splat(X << bits); } + return {this->push(Op::shl_i32, x.id,NA,NA, bits)}; + } + I32 Builder::shr(I32 x, int bits) { + int X; + if (this->allImm(x.id,&X)) { return this->splat(unsigned(X) >> bits); } + return {this->push(Op::shr_i32, x.id,NA,NA, bits)}; + } + I32 Builder::sra(I32 x, int bits) { + int X; + if (this->allImm(x.id,&X)) { return this->splat(X >> bits); } + return {this->push(Op::sra_i32, x.id,NA,NA, bits)}; + } I32 Builder::shl_16x2(I32 x, int bits) { return {this->push(Op::shl_i16x2, x.id,NA,NA, bits)}; } I32 Builder::shr_16x2(I32 x, int bits) { return {this->push(Op::shr_i16x2, x.id,NA,NA, bits)}; } I32 Builder::sra_16x2(I32 x, int bits) { return {this->push(Op::sra_i16x2, x.id,NA,NA, bits)}; } - I32 Builder:: eq(F32 x, F32 y) { return {this->push(Op:: eq_f32, x.id, y.id)}; } - I32 Builder::neq(F32 x, F32 y) { return {this->push(Op::neq_f32, x.id, y.id)}; } - I32 Builder:: lt(F32 x, F32 y) { return {this->push(Op:: lt_f32, x.id, y.id)}; } - I32 Builder::lte(F32 x, F32 y) { return {this->push(Op::lte_f32, x.id, y.id)}; } - I32 Builder:: gt(F32 x, F32 y) { return {this->push(Op:: gt_f32, x.id, y.id)}; } - I32 Builder::gte(F32 x, F32 y) { return {this->push(Op::gte_f32, x.id, y.id)}; } + I32 Builder:: eq(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X==Y ? ~0 : 0); } + return {this->push(Op::eq_f32, x.id, y.id)}; + } + I32 Builder::neq(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X!=Y ? ~0 : 0); } + return {this->push(Op::neq_f32, x.id, y.id)}; + } + I32 Builder::lt(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(Y> X ? ~0 : 0); } + return {this->push(Op::gt_f32, y.id, x.id)}; + } + I32 Builder::lte(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(Y>=X ? ~0 : 0); } + return {this->push(Op::gte_f32, y.id, x.id)}; + } + I32 Builder::gt(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X> Y ? ~0 : 0); } + return {this->push(Op::gt_f32, x.id, y.id)}; + } + I32 Builder::gte(F32 x, F32 y) { + float X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X>=Y ? ~0 : 0); } + return {this->push(Op::gte_f32, x.id, y.id)}; + } I32 Builder:: eq(I32 x, I32 y) { return {this->push(Op:: eq_i32, x.id, y.id)}; } I32 Builder::neq(I32 x, I32 y) { return {this->push(Op::neq_i32, x.id, y.id)}; } - I32 Builder:: lt(I32 x, I32 y) { return {this->push(Op:: lt_i32, x.id, y.id)}; } - I32 Builder::lte(I32 x, I32 y) { return {this->push(Op::lte_i32, x.id, y.id)}; } + I32 Builder:: lt(I32 x, I32 y) { return {this->push(Op:: gt_i32, y.id, x.id)}; } + I32 Builder::lte(I32 x, I32 y) { return {this->push(Op::gte_i32, y.id, x.id)}; } I32 Builder:: gt(I32 x, I32 y) { return {this->push(Op:: gt_i32, x.id, y.id)}; } I32 Builder::gte(I32 x, I32 y) { return {this->push(Op::gte_i32, x.id, y.id)}; } I32 Builder:: eq_16x2(I32 x, I32 y) { return {this->push(Op:: eq_i16x2, x.id, y.id)}; } I32 Builder::neq_16x2(I32 x, I32 y) { return {this->push(Op::neq_i16x2, x.id, y.id)}; } - I32 Builder:: lt_16x2(I32 x, I32 y) { return {this->push(Op:: lt_i16x2, x.id, y.id)}; } - I32 Builder::lte_16x2(I32 x, I32 y) { return {this->push(Op::lte_i16x2, x.id, y.id)}; } + I32 Builder:: lt_16x2(I32 x, I32 y) { return {this->push(Op:: gt_i16x2, y.id, x.id)}; } + I32 Builder::lte_16x2(I32 x, I32 y) { return {this->push(Op::gte_i16x2, y.id, x.id)}; } I32 Builder:: gt_16x2(I32 x, I32 y) { return {this->push(Op:: gt_i16x2, x.id, y.id)}; } I32 Builder::gte_16x2(I32 x, I32 y) { return {this->push(Op::gte_i16x2, x.id, y.id)}; } - I32 Builder::bit_and (I32 x, I32 y) { return {this->push(Op::bit_and , x.id, y.id)}; } - I32 Builder::bit_or (I32 x, I32 y) { return {this->push(Op::bit_or , x.id, y.id)}; } - I32 Builder::bit_xor (I32 x, I32 y) { return {this->push(Op::bit_xor , x.id, y.id)}; } - I32 Builder::bit_clear(I32 x, I32 y) { return {this->push(Op::bit_clear, x.id, y.id)}; } - I32 Builder::select(I32 x, I32 y, I32 z) { return {this->push(Op::select, x.id, y.id, z.id)}; } + I32 Builder::bit_and(I32 x, I32 y) { + int X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X&Y); } + return {this->push(Op::bit_and, x.id, y.id)}; + } + I32 Builder::bit_or(I32 x, I32 y) { + int X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X|Y); } + return {this->push(Op::bit_or, x.id, y.id)}; + } + I32 Builder::bit_xor(I32 x, I32 y) { + int X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X^Y); } + return {this->push(Op::bit_xor, x.id, y.id)}; + } + I32 Builder::bit_clear(I32 x, I32 y) { + int X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X&~Y); } + return {this->push(Op::bit_clear, x.id, y.id)}; + } + I32 Builder::select(I32 x, I32 y, I32 z) { + int X,Y,Z; + if (this->allImm(x.id,&X, y.id,&Y, z.id,&Z)) { return this->splat(X?Y:Z); } + return {this->push(Op::select, x.id, y.id, z.id)}; + } - I32 Builder::extract(I32 x, int bits, I32 y) { - return {this->push(Op::extract, x.id,y.id,NA, bits)}; + I32 Builder::extract(I32 x, int bits, I32 z) { + int X,Z; + if (this->allImm(x.id,&X, z.id,&Z)) { return this->splat( (unsigned(X)>>bits)&Z ); } + return {this->push(Op::extract, x.id,NA,z.id, bits,0)}; } I32 Builder::pack(I32 x, I32 y, int bits) { - return {this->push(Op::pack, x.id,y.id,NA, bits)}; + int X,Y; + if (this->allImm(x.id,&X, y.id,&Y)) { return this->splat(X|(Y<push(Op::pack, x.id,y.id,NA, 0,bits)}; } I32 Builder::bytes(I32 x, int control) { return {this->push(Op::bytes, x.id,NA,NA, control)}; } - F32 Builder::to_f32(I32 x) { return {this->push(Op::to_f32, x.id)}; } - I32 Builder::to_i32(F32 x) { return {this->push(Op::to_i32, x.id)}; } + F32 Builder::to_f32(I32 x) { + int X; + if (this->allImm(x.id,&X)) { return this->splat((float)X); } + return {this->push(Op::to_f32, x.id)}; + } + I32 Builder::trunc(F32 x) { + float X; + if (this->allImm(x.id,&X)) { return this->splat((int)X); } + return {this->push(Op::trunc, x.id)}; + } + I32 Builder::round(F32 x) { + float X; + if (this->allImm(x.id,&X)) { return this->splat((int)lrintf(X)); } + return {this->push(Op::round, x.id)}; + } // ~~~~ Program::eval() and co. ~~~~ // @@ -642,6 +904,10 @@ namespace skvm { } } + void Assembler::int3() { + this->byte(0xcc); + } + void Assembler::vzeroupper() { this->byte(0xc5); this->byte(0xf8); @@ -694,6 +960,8 @@ namespace skvm { void Assembler::vsubps(Ymm dst, Ymm x, Ymm y) { this->op(0,0x0f,0x5c, dst,x,y); } void Assembler::vmulps(Ymm dst, Ymm x, Ymm y) { this->op(0,0x0f,0x59, dst,x,y); } void Assembler::vdivps(Ymm dst, Ymm x, Ymm y) { this->op(0,0x0f,0x5e, dst,x,y); } + void Assembler::vminps(Ymm dst, Ymm x, Ymm y) { this->op(0,0x0f,0x5d, dst,x,y); } + void Assembler::vmaxps(Ymm dst, Ymm x, Ymm y) { this->op(0,0x0f,0x5f, dst,x,y); } void Assembler::vfmadd132ps(Ymm dst, Ymm x, Ymm y) { this->op(0x66,0x380f,0x98, dst,x,y); } void Assembler::vfmadd213ps(Ymm dst, Ymm x, Ymm y) { this->op(0x66,0x380f,0xa8, dst,x,y); } @@ -705,6 +973,11 @@ namespace skvm { void Assembler::vpcmpeqd(Ymm dst, Ymm x, Ymm y) { this->op(0x66,0x0f,0x76, dst,x,y); } void Assembler::vpcmpgtd(Ymm dst, Ymm x, Ymm y) { this->op(0x66,0x0f,0x66, dst,x,y); } + void Assembler::vcmpps(Ymm dst, Ymm x, Ymm y, int imm) { + this->op(0,0x0f,0xc2, dst,x,y); + this->byte(imm); + } + void Assembler::vpblendvb(Ymm dst, Ymm x, Ymm y, Ymm z) { int prefix = 0x66, map = 0x3a0f, @@ -743,13 +1016,14 @@ namespace skvm { void Assembler::vcvtdq2ps (Ymm dst, Ymm x) { this->op(0, 0x0f,0x5b, dst,x); } void Assembler::vcvttps2dq(Ymm dst, Ymm x) { this->op(0xf3,0x0f,0x5b, dst,x); } + void Assembler::vcvtps2dq (Ymm dst, Ymm x) { this->op(0x66,0x0f,0x5b, dst,x); } Assembler::Label Assembler::here() { - return { (int)this->size(), Label::None, {} }; + return { (int)this->size(), Label::NotYetSet, {} }; } int Assembler::disp19(Label* l) { - SkASSERT(l->kind == Label::None || + SkASSERT(l->kind == Label::NotYetSet || l->kind == Label::ARMDisp19); l->kind = Label::ARMDisp19; l->references.push_back(here().offset); @@ -758,7 +1032,7 @@ namespace skvm { } int Assembler::disp32(Label* l) { - SkASSERT(l->kind == Label::None || + SkASSERT(l->kind == Label::NotYetSet || l->kind == Label::X86Disp32); l->kind = Label::X86Disp32; l->references.push_back(here().offset); @@ -779,6 +1053,11 @@ namespace skvm { } void Assembler::vpshufb(Ymm dst, Ymm x, Label* l) { this->op(0x66,0x380f,0x00, dst,x,l); } + void Assembler::vpaddd (Ymm dst, Ymm x, Label* l) { this->op(0x66, 0x0f,0xfe, dst,x,l); } + void Assembler::vpsubd (Ymm dst, Ymm x, Label* l) { this->op(0x66, 0x0f,0xfa, dst,x,l); } + void Assembler::vmulps (Ymm dst, Ymm x, Label* l) { this->op( 0, 0x0f,0x59, dst,x,l); } + + void Assembler::vptest(Ymm dst, Label* l) { this->op(0x66, 0x380f, 0x17, dst, (Ymm)0, l); } void Assembler::vbroadcastss(Ymm dst, Label* l) { this->op(0x66,0x380f,0x18, dst, (Ymm)0, l); } void Assembler::vbroadcastss(Ymm dst, Xmm src) { this->op(0x66,0x380f,0x18, dst, (Ymm)src); } @@ -807,6 +1086,7 @@ namespace skvm { void Assembler::je (Label* l) { this->jump(0x84, l); } void Assembler::jne(Label* l) { this->jump(0x85, l); } void Assembler::jl (Label* l) { this->jump(0x8c, l); } + void Assembler::jc (Label* l) { this->jump(0x82, l); } void Assembler::jmp(Label* l) { // Like above in jump(), we could use 8-bit displacement here, but always use 32-bit. @@ -979,6 +1259,7 @@ namespace skvm { void Assembler::eor16b(V d, V n, V m) { this->op(0b0'1'1'01110'00'1, m, 0b00011'1, n, d); } void Assembler::bic16b(V d, V n, V m) { this->op(0b0'1'0'01110'01'1, m, 0b00011'1, n, d); } void Assembler::bsl16b(V d, V n, V m) { this->op(0b0'1'1'01110'01'1, m, 0b00011'1, n, d); } + void Assembler::not16b(V d, V n) { this->op(0b0'1'1'01110'00'10000'00101'10, n, d); } void Assembler::add4s(V d, V n, V m) { this->op(0b0'1'0'01110'10'1, m, 0b10000'1, n, d); } void Assembler::sub4s(V d, V n, V m) { this->op(0b0'1'1'01110'10'1, m, 0b10000'1, n, d); } @@ -994,6 +1275,12 @@ namespace skvm { void Assembler::fsub4s(V d, V n, V m) { this->op(0b0'1'0'01110'1'0'1, m, 0b11010'1, n, d); } void Assembler::fmul4s(V d, V n, V m) { this->op(0b0'1'1'01110'0'0'1, m, 0b11011'1, n, d); } void Assembler::fdiv4s(V d, V n, V m) { this->op(0b0'1'1'01110'0'0'1, m, 0b11111'1, n, d); } + void Assembler::fmin4s(V d, V n, V m) { this->op(0b0'1'0'01110'1'0'1, m, 0b11110'1, n, d); } + void Assembler::fmax4s(V d, V n, V m) { this->op(0b0'1'0'01110'0'0'1, m, 0b11110'1, n, d); } + + void Assembler::fcmeq4s(V d, V n, V m) { this->op(0b0'1'0'01110'0'0'1, m, 0b1110'0'1, n, d); } + void Assembler::fcmgt4s(V d, V n, V m) { this->op(0b0'1'1'01110'1'0'1, m, 0b1110'0'1, n, d); } + void Assembler::fcmge4s(V d, V n, V m) { this->op(0b0'1'1'01110'0'0'1, m, 0b1110'0'1, n, d); } void Assembler::fmla4s(V d, V n, V m) { this->op(0b0'1'0'01110'0'0'1, m, 0b11001'1, n, d); } @@ -1024,6 +1311,7 @@ namespace skvm { void Assembler::scvtf4s (V d, V n) { this->op(0b0'1'0'01110'0'0'10000'11101'10, n,d); } void Assembler::fcvtzs4s(V d, V n) { this->op(0b0'1'0'01110'1'0'10000'1101'1'10, n,d); } + void Assembler::fcvtns4s(V d, V n) { this->op(0b0'1'0'01110'0'0'10000'1101'0'10, n,d); } void Assembler::xtns2h(V d, V n) { this->op(0b0'0'0'01110'01'10000'10010'10, n,d); } void Assembler::xtnh2b(V d, V n) { this->op(0b0'0'0'01110'00'10000'10010'10, n,d); } @@ -1031,6 +1319,13 @@ namespace skvm { void Assembler::uxtlb2h(V d, V n) { this->op(0b0'0'1'011110'0001'000'10100'1, n,d); } void Assembler::uxtlh2s(V d, V n) { this->op(0b0'0'1'011110'0010'000'10100'1, n,d); } + void Assembler::uminv4s(V d, V n) { this->op(0b0'1'1'01110'10'11000'1'1010'10, n,d); } + + void Assembler::brk(int imm16) { + this->word(0b11010100'001'0000000000000000'000'00 + | (imm16 & 16_mask) << 5); + } + void Assembler::ret(X n) { this->word(0b1101011'0'0'10'11111'0000'0'0 << 10 | (n & 5_mask) << 5); @@ -1082,6 +1377,12 @@ namespace skvm { void Assembler::strs(V src, X dst) { this->op(0b10'111'1'01'00'000000000000, dst, src); } void Assembler::strb(V src, X dst) { this->op(0b00'111'1'01'00'000000000000, dst, src); } + void Assembler::fmovs(X dst, V src) { + this->word(0b0'0'0'11110'00'1'00'110'000000 << 10 + | (src & 5_mask) << 5 + | (dst & 5_mask) << 0); + } + void Assembler::ldrq(V dst, Label* l) { const int imm19 = this->disp19(l); this->word( 0b10'011'1'00 << 24 @@ -1141,6 +1442,8 @@ namespace skvm { case 2: return ((void(*)(int,void*,void* ))b)(n,a[0],a[1] ); case 3: return ((void(*)(int,void*,void*,void* ))b)(n,a[0],a[1],a[2] ); case 4: return ((void(*)(int,void*,void*,void*,void*))b)(n,a[0],a[1],a[2],a[3]); + case 5: return ((void(*)(int,void*,void*,void*,void*,void*))b) + (n,a[0],a[1],a[2],a[3],a[4]); default: SkUNREACHABLE; // TODO } } @@ -1207,12 +1510,13 @@ namespace skvm { for (int i = start; i < (int)fInstructions.size(); i++) { Instruction inst = fInstructions[i]; - // d = op(x,y,z/imm) + // d = op(x,y/imm,z/imm) Reg d = inst.d, x = inst.x, y = inst.y, z = inst.z; - int imm = inst.imm; + int immy = inst.immy, + immz = inst.immz; // Ops that interact with memory need to know whether we're stride=1 or K, // but all non-memory ops can run the same code no matter the stride. @@ -1221,46 +1525,46 @@ namespace skvm { #define STRIDE_1(op) case 2*(int)op #define STRIDE_K(op) case 2*(int)op + 1 - STRIDE_1(Op::store8 ): memcpy(arg(imm), &r(x).i32, 1); break; - STRIDE_1(Op::store16): memcpy(arg(imm), &r(x).i32, 2); break; - STRIDE_1(Op::store32): memcpy(arg(imm), &r(x).i32, 4); break; + STRIDE_1(Op::store8 ): memcpy(arg(immy), &r(x).i32, 1); break; + STRIDE_1(Op::store16): memcpy(arg(immy), &r(x).i32, 2); break; + STRIDE_1(Op::store32): memcpy(arg(immy), &r(x).i32, 4); break; - STRIDE_K(Op::store8 ): skvx::cast (r(x).i32).store(arg(imm)); break; - STRIDE_K(Op::store16): skvx::cast(r(x).i32).store(arg(imm)); break; - STRIDE_K(Op::store32): (r(x).i32).store(arg(imm)); break; + STRIDE_K(Op::store8 ): skvx::cast (r(x).i32).store(arg(immy)); break; + STRIDE_K(Op::store16): skvx::cast(r(x).i32).store(arg(immy)); break; + STRIDE_K(Op::store32): (r(x).i32).store(arg(immy)); break; - STRIDE_1(Op::load8 ): r(d).i32 = 0; memcpy(&r(d).i32, arg(imm), 1); break; - STRIDE_1(Op::load16): r(d).i32 = 0; memcpy(&r(d).i32, arg(imm), 2); break; - STRIDE_1(Op::load32): r(d).i32 = 0; memcpy(&r(d).i32, arg(imm), 4); break; + STRIDE_1(Op::load8 ): r(d).i32 = 0; memcpy(&r(d).i32, arg(immy), 1); break; + STRIDE_1(Op::load16): r(d).i32 = 0; memcpy(&r(d).i32, arg(immy), 2); break; + STRIDE_1(Op::load32): r(d).i32 = 0; memcpy(&r(d).i32, arg(immy), 4); break; - STRIDE_K(Op::load8 ): r(d).i32= skvx::cast(U8 ::Load(arg(imm))); break; - STRIDE_K(Op::load16): r(d).i32= skvx::cast(U16::Load(arg(imm))); break; - STRIDE_K(Op::load32): r(d).i32= I32::Load(arg(imm)) ; break; + STRIDE_K(Op::load8 ): r(d).i32= skvx::cast(U8 ::Load(arg(immy))); break; + STRIDE_K(Op::load16): r(d).i32= skvx::cast(U16::Load(arg(immy))); break; + STRIDE_K(Op::load32): r(d).i32= I32::Load(arg(immy)) ; break; STRIDE_1(Op::gather8): for (int i = 0; i < K; i++) { - r(d).i32[i] = (i == 0) ? ((const uint8_t* )arg(imm))[ r(x).i32[i] ] : 0; + r(d).i32[i] = (i==0) ? ((const uint8_t* )arg(immy))[ r(x).i32[i] ] : 0; } break; STRIDE_1(Op::gather16): for (int i = 0; i < K; i++) { - r(d).i32[i] = (i == 0) ? ((const uint16_t*)arg(imm))[ r(x).i32[i] ] : 0; + r(d).i32[i] = (i==0) ? ((const uint16_t*)arg(immy))[ r(x).i32[i] ] : 0; } break; STRIDE_1(Op::gather32): for (int i = 0; i < K; i++) { - r(d).i32[i] = (i == 0) ? ((const int* )arg(imm))[ r(x).i32[i] ] : 0; + r(d).i32[i] = (i==0) ? ((const int* )arg(immy))[ r(x).i32[i] ] : 0; } break; STRIDE_K(Op::gather8): for (int i = 0; i < K; i++) { - r(d).i32[i] = ((const uint8_t* )arg(imm))[ r(x).i32[i] ]; + r(d).i32[i] = ((const uint8_t* )arg(immy))[ r(x).i32[i] ]; } break; STRIDE_K(Op::gather16): for (int i = 0; i < K; i++) { - r(d).i32[i] = ((const uint16_t*)arg(imm))[ r(x).i32[i] ]; + r(d).i32[i] = ((const uint16_t*)arg(immy))[ r(x).i32[i] ]; } break; STRIDE_K(Op::gather32): for (int i = 0; i < K; i++) { - r(d).i32[i] = ((const int* )arg(imm))[ r(x).i32[i] ]; + r(d).i32[i] = ((const int* )arg(immy))[ r(x).i32[i] ]; } break; #undef STRIDE_1 @@ -1269,22 +1573,36 @@ namespace skvm { // Ops that don't interact with memory should never care about the stride. #define CASE(op) case 2*(int)op: /*fallthrough*/ case 2*(int)op+1 + CASE(Op::assert_true): SkASSERT(all(r(x).i32)); break; + + CASE(Op::index): static_assert(K == 16, ""); + r(d).i32 = n - I32{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; + break; + CASE(Op::uniform8): - r(d).i32 = *(const uint8_t* )( (const char*)arg(imm&0xffff) + (imm>>16) ); + r(d).i32 = *(const uint8_t* )( (const char*)arg(immy) + immz ); break; CASE(Op::uniform16): - r(d).i32 = *(const uint16_t*)( (const char*)arg(imm&0xffff) + (imm>>16) ); + r(d).i32 = *(const uint16_t*)( (const char*)arg(immy) + immz ); break; CASE(Op::uniform32): - r(d).i32 = *(const int* )( (const char*)arg(imm&0xffff) + (imm>>16) ); + r(d).i32 = *(const int* )( (const char*)arg(immy) + immz ); break; - CASE(Op::splat): r(d).i32 = imm; break; + CASE(Op::splat): r(d).i32 = immy; break; CASE(Op::add_f32): r(d).f32 = r(x).f32 + r(y).f32; break; CASE(Op::sub_f32): r(d).f32 = r(x).f32 - r(y).f32; break; CASE(Op::mul_f32): r(d).f32 = r(x).f32 * r(y).f32; break; CASE(Op::div_f32): r(d).f32 = r(x).f32 / r(y).f32; break; + CASE(Op::min_f32): r(d).f32 = min(r(x).f32, r(y).f32); break; + CASE(Op::max_f32): r(d).f32 = max(r(x).f32, r(y).f32); break; + + CASE(Op::mul_f32_imm): { + Slot tmp; + tmp.i32 = immy; + r(d).f32 = r(x).f32 * tmp.f32; + } break; CASE(Op::mad_f32): r(d).f32 = r(x).f32 * r(y).f32 + r(z).f32; break; @@ -1296,32 +1614,26 @@ namespace skvm { CASE(Op::sub_i16x2): r(d).i16x2 = r(x).i16x2 - r(y).i16x2; break; CASE(Op::mul_i16x2): r(d).i16x2 = r(x).i16x2 * r(y).i16x2; break; - CASE(Op::shl_i32): r(d).i32 = r(x).i32 << imm; break; - CASE(Op::sra_i32): r(d).i32 = r(x).i32 >> imm; break; - CASE(Op::shr_i32): r(d).u32 = r(x).u32 >> imm; break; + CASE(Op::shl_i32): r(d).i32 = r(x).i32 << immy; break; + CASE(Op::sra_i32): r(d).i32 = r(x).i32 >> immy; break; + CASE(Op::shr_i32): r(d).u32 = r(x).u32 >> immy; break; - CASE(Op::shl_i16x2): r(d).i16x2 = r(x).i16x2 << imm; break; - CASE(Op::sra_i16x2): r(d).i16x2 = r(x).i16x2 >> imm; break; - CASE(Op::shr_i16x2): r(d).u16x2 = r(x).u16x2 >> imm; break; + CASE(Op::shl_i16x2): r(d).i16x2 = r(x).i16x2 << immy; break; + CASE(Op::sra_i16x2): r(d).i16x2 = r(x).i16x2 >> immy; break; + CASE(Op::shr_i16x2): r(d).u16x2 = r(x).u16x2 >> immy; break; CASE(Op:: eq_f32): r(d).i32 = r(x).f32 == r(y).f32; break; CASE(Op::neq_f32): r(d).i32 = r(x).f32 != r(y).f32; break; - CASE(Op:: lt_f32): r(d).i32 = r(x).f32 < r(y).f32; break; - CASE(Op::lte_f32): r(d).i32 = r(x).f32 <= r(y).f32; break; CASE(Op:: gt_f32): r(d).i32 = r(x).f32 > r(y).f32; break; CASE(Op::gte_f32): r(d).i32 = r(x).f32 >= r(y).f32; break; CASE(Op:: eq_i32): r(d).i32 = r(x).i32 == r(y).i32; break; CASE(Op::neq_i32): r(d).i32 = r(x).i32 != r(y).i32; break; - CASE(Op:: lt_i32): r(d).i32 = r(x).i32 < r(y).i32; break; - CASE(Op::lte_i32): r(d).i32 = r(x).i32 <= r(y).i32; break; CASE(Op:: gt_i32): r(d).i32 = r(x).i32 > r(y).i32; break; CASE(Op::gte_i32): r(d).i32 = r(x).i32 >= r(y).i32; break; CASE(Op:: eq_i16x2): r(d).i16x2 = r(x).i16x2 == r(y).i16x2; break; CASE(Op::neq_i16x2): r(d).i16x2 = r(x).i16x2 != r(y).i16x2; break; - CASE(Op:: lt_i16x2): r(d).i16x2 = r(x).i16x2 < r(y).i16x2; break; - CASE(Op::lte_i16x2): r(d).i16x2 = r(x).i16x2 <= r(y).i16x2; break; CASE(Op:: gt_i16x2): r(d).i16x2 = r(x).i16x2 > r(y).i16x2; break; CASE(Op::gte_i16x2): r(d).i16x2 = r(x).i16x2 >= r(y).i16x2; break; @@ -1334,8 +1646,8 @@ namespace skvm { break; - CASE(Op::extract): r(d).u32 = (r(x).u32 >> imm) & r(y).u32; break; - CASE(Op::pack): r(d).u32 = r(x).u32 | (r(y).u32 << imm); break; + CASE(Op::extract): r(d).u32 = (r(x).u32 >> immy) & r(z).u32; break; + CASE(Op::pack): r(d).u32 = r(x).u32 | (r(y).u32 << immz); break; CASE(Op::bytes): { const U32 table[] = { @@ -1345,14 +1657,15 @@ namespace skvm { (r(x).u32 >> 16) & 0xff, (r(x).u32 >> 24) & 0xff, }; - r(d).u32 = table[(imm >> 0) & 0xf] << 0 - | table[(imm >> 4) & 0xf] << 8 - | table[(imm >> 8) & 0xf] << 16 - | table[(imm >> 12) & 0xf] << 24; + r(d).u32 = table[(immy >> 0) & 0xf] << 0 + | table[(immy >> 4) & 0xf] << 8 + | table[(immy >> 8) & 0xf] << 16 + | table[(immy >> 12) & 0xf] << 24; } break; CASE(Op::to_f32): r(d).f32 = skvx::cast(r(x).i32); break; - CASE(Op::to_i32): r(d).i32 = skvx::cast (r(x).f32); break; + CASE(Op::trunc): r(d).i32 = skvx::cast (r(x).f32); break; + CASE(Op::round): r(d).i32 = skvx::cast (r(x).f32 + 0.5f); break; #undef CASE } } @@ -1410,7 +1723,7 @@ namespace skvm { , fOriginalProgram(instructions) { this->setupInterpreter(instructions); - #if defined(SKVM_JIT) + #if 1 && defined(SKVM_JIT) this->setupJIT(instructions, debug_name); #endif } @@ -1421,7 +1734,7 @@ namespace skvm { std::vector reg(instructions.size()); // This next bit is a bit more complicated than strictly necessary; - // we could just assign every live instruction to its own register. + // we could just assign every instruction to its own register. // // But recycling registers is fairly cheap, and good practice for the // JITs where minimizing register pressure really is important. @@ -1431,12 +1744,10 @@ namespace skvm { auto hoisted = [&](Val id) { return instructions[id].can_hoist; }; fRegs = 0; - int live_instructions = 0; std::vector avail; // Assign this value to a register, recycling them where we can. auto assign_register = [&](Val id) { - live_instructions++; const Builder::Instruction& inst = instructions[id]; // If this is a real input and it's lifetime ends at this instruction, @@ -1454,28 +1765,24 @@ namespace skvm { if (inst.y != inst.x ) { maybe_recycle_register(inst.y); } if (inst.z != inst.x && inst.z != inst.y) { maybe_recycle_register(inst.z); } - // Allocate a register if we have to, preferring to reuse anything available. - if (avail.empty()) { - reg[id] = fRegs++; - } else { - reg[id] = avail.back(); - avail.pop_back(); + // Instructions that die at themselves (stores) don't need a register. + if (inst.death != id) { + // Allocate a register if we have to, preferring to reuse anything available. + if (avail.empty()) { + reg[id] = fRegs++; + } else { + reg[id] = avail.back(); + avail.pop_back(); + } } }; - // Assign a register to each live hoisted instruction. + // Assign a register to each hoisted instruction, then each non-hoisted loop instruction. for (Val id = 0; id < (Val)instructions.size(); id++) { - if (instructions[id].death != 0 && hoisted(id)) { - assign_register(id); - } + if ( hoisted(id)) { assign_register(id); } } - - // Assign registers to each live loop instruction. for (Val id = 0; id < (Val)instructions.size(); id++) { - if (instructions[id].death != 0 && !hoisted(id)) { - assign_register(id); - - } + if (!hoisted(id)) { assign_register(id); } } // Translate Builder::Instructions to Program::Instructions by mapping values to @@ -1483,7 +1790,7 @@ namespace skvm { // The loop begins at the fLoop'th Instruction. fLoop = 0; - fInstructions.reserve(live_instructions); + fInstructions.reserve(instructions.size()); // Add a dummy mapping for the N/A sentinel Val to any arbitrary register // so lookups don't have to know which arguments are used by which Ops. @@ -1497,23 +1804,24 @@ namespace skvm { inst.op, lookup_register(id), lookup_register(inst.x), - lookup_register(inst.y), + {lookup_register(inst.y)}, {lookup_register(inst.z)}, }; - if (inst.z == NA) { pinst.imm = inst.imm; } + if (inst.y == NA) { pinst.immy = inst.immy; } + if (inst.z == NA) { pinst.immz = inst.immz; } fInstructions.push_back(pinst); }; for (Val id = 0; id < (Val)instructions.size(); id++) { const Builder::Instruction& inst = instructions[id]; - if (inst.death != 0 && hoisted(id)) { + if (hoisted(id)) { push_instruction(id, inst); fLoop++; } } for (Val id = 0; id < (Val)instructions.size(); id++) { const Builder::Instruction& inst = instructions[id]; - if (inst.death != 0 && !hoisted(id)) { + if (!hoisted(id)) { push_instruction(id, inst); } } @@ -1556,6 +1864,7 @@ namespace skvm { bool Program::jit(const std::vector& instructions, const bool try_hoisting, + std::vector* line_table, Assembler* a) const { using A = Assembler; @@ -1574,16 +1883,18 @@ namespace skvm { if (!SkCpu::Supports(SkCpu::HSW)) { return false; } - A::GP64 N = A::rdi, - arg[] = { A::rsi, A::rdx, A::rcx, A::r8, A::r9 }; + A::GP64 N = A::rdi, + scratch = A::rax, + arg[] = { A::rsi, A::rdx, A::rcx, A::r8, A::r9 }; // All 16 ymm registers are available to use. using Reg = A::Ymm; uint32_t avail = 0xffff; #elif defined(__aarch64__) - A::X N = A::x0, - arg[] = { A::x1, A::x2, A::x3, A::x4, A::x5, A::x6, A::x7 }; + A::X N = A::x0, + scratch = 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. using Reg = A::V; @@ -1602,31 +1913,29 @@ namespace skvm { A::Label label; Reg reg; }; - SkTHashMap splats, - bytes_masks; + SkTHashMap constants, // All constants share the same pool. + bytes_masks; // These vary per-lane. + LabelAndReg iota; // Exists _only_ to vary per-lane. - auto warmup = [&](Val id) { - const Builder::Instruction& inst = instructions[id]; - if (inst.death == 0) { - return true; + auto mark_line = [&](int line) { + if (line_table) { + line_table->push_back({line, a->size()}); } + }; - Op op = inst.op; - int imm = inst.imm; + auto warmup = [&](Val id) { + const Builder::Instruction& inst = instructions[id]; - switch (op) { + switch (inst.op) { default: break; - case Op::splat: if (!splats.find(imm)) { splats.set(imm, {}); } - break; - - case Op::bytes: if (!bytes_masks.find(imm)) { - bytes_masks.set(imm, {}); + case Op::bytes: if (!bytes_masks.find(inst.immy)) { + bytes_masks.set(inst.immy, {}); if (try_hoisting) { // vpshufb can always work with the mask from memory, // but it helps to hoist the mask to a register for tbl. #if defined(__aarch64__) - LabelAndReg* entry = bytes_masks.find(imm); + LabelAndReg* entry = bytes_masks.find(inst.immy); if (int found = __builtin_ffs(avail)) { entry->reg = (Reg)(found-1); avail ^= 1 << entry->reg; @@ -1645,16 +1954,12 @@ namespace skvm { auto emit = [&](Val id, bool scalar) { const Builder::Instruction& inst = instructions[id]; - // No need to emit dead code instructions that produce values that are never used. - if (inst.death == 0) { - return true; - } - Op op = inst.op; Val x = inst.x, y = inst.y, z = inst.z; - int imm = inst.imm; + int immy = inst.immy, + immz = inst.immz; // Most (but not all) ops create an output value and need a register to hold it, dst. // We track each instruction's dst in r[] so we can thread it through as an input @@ -1753,62 +2058,72 @@ namespace skvm { return false; // TODO: many new ops #if defined(__x86_64__) - case Op::store8: if (scalar) { a->vpextrb (arg[imm], (A::Xmm)r[x], 0); } + case Op::assert_true: { + a->vptest (r[x], &constants[0xffffffff].label); + A::Label all_true; + a->jc(&all_true); + a->int3(); + a->label(&all_true); + } break; + + case Op::store8: if (scalar) { a->vpextrb (arg[immy], (A::Xmm)r[x], 0); } else { a->vpackusdw(tmp(), r[x], r[x]); a->vpermq (tmp(), tmp(), 0xd8); a->vpackuswb(tmp(), tmp(), tmp()); - a->vmovq (arg[imm], (A::Xmm)tmp()); } + a->vmovq (arg[immy], (A::Xmm)tmp()); } break; - case Op::store16: if (scalar) { a->vpextrw (arg[imm], (A::Xmm)r[x], 0); } + case Op::store16: if (scalar) { a->vpextrw (arg[immy], (A::Xmm)r[x], 0); } else { a->vpackusdw(tmp(), r[x], r[x]); a->vpermq (tmp(), tmp(), 0xd8); - a->vmovups (arg[imm], (A::Xmm)tmp()); } + a->vmovups (arg[immy], (A::Xmm)tmp()); } break; - case Op::store32: if (scalar) { a->vmovd (arg[imm], (A::Xmm)r[x]); } - else { a->vmovups(arg[imm], r[x]); } + case Op::store32: if (scalar) { a->vmovd (arg[immy], (A::Xmm)r[x]); } + else { a->vmovups(arg[immy], r[x]); } break; case Op::load8: if (scalar) { a->vpxor (dst(), dst(), dst()); - a->vpinsrb((A::Xmm)dst(), (A::Xmm)dst(), arg[imm], 0); + a->vpinsrb((A::Xmm)dst(), (A::Xmm)dst(), arg[immy], 0); } else { - a->vpmovzxbd(dst(), arg[imm]); + a->vpmovzxbd(dst(), arg[immy]); } break; case Op::load16: if (scalar) { a->vpxor (dst(), dst(), dst()); - a->vpinsrw((A::Xmm)dst(), (A::Xmm)dst(), arg[imm], 0); + a->vpinsrw((A::Xmm)dst(), (A::Xmm)dst(), arg[immy], 0); } else { - a->vpmovzxwd(dst(), arg[imm]); + a->vpmovzxwd(dst(), arg[immy]); } break; - case Op::load32: if (scalar) { a->vmovd ((A::Xmm)dst(), arg[imm]); } - else { a->vmovups( dst(), arg[imm]); } + case Op::load32: if (scalar) { a->vmovd ((A::Xmm)dst(), arg[immy]); } + else { a->vmovups( dst(), arg[immy]); } break; - case Op::uniform8: a->movzbl(A::rax, arg[imm&0xffff], imm>>16); - a->vmovd_direct((A::Xmm)dst(), A::rax); + case Op::uniform8: a->movzbl(scratch, arg[immy], immz); + a->vmovd_direct((A::Xmm)dst(), scratch); a->vbroadcastss(dst(), (A::Xmm)dst()); break; - case Op::uniform32: a->vbroadcastss(dst(), arg[imm&0xffff], imm>>16); + case Op::uniform32: a->vbroadcastss(dst(), arg[immy], immz); break; - case Op::splat: a->vbroadcastss(dst(), &splats.find(imm)->label); + case Op::index: a->vmovd_direct((A::Xmm)tmp(), N); + a->vbroadcastss(tmp(), (A::Xmm)tmp()); + a->vpsubd(dst(), tmp(), &iota.label); + break; + + case Op::splat: if (immy) { a->vbroadcastss(dst(), &constants[immy].label); } + else { a->vpxor(dst(), dst(), dst()); } break; - // TODO: many of these instructions have variants that - // can read one of their arugments from 32-byte memory - // instead of a register. Find a way to avoid needing - // to splat most* constants out at all? - // (*Might work for x - 255 but not 255 - x, so will - // always need to be able to splat to a register.) case Op::add_f32: a->vaddps(dst(), r[x], r[y]); break; case Op::sub_f32: a->vsubps(dst(), r[x], r[y]); break; case Op::mul_f32: a->vmulps(dst(), r[x], r[y]); break; case Op::div_f32: a->vdivps(dst(), r[x], r[y]); break; + case Op::min_f32: a->vminps(dst(), r[x], r[y]); break; + case Op::max_f32: a->vmaxps(dst(), r[x], r[y]); break; case Op::mad_f32: if (avail & (1<vfmadd132ps(r[x], r[z], r[y]); } @@ -1819,13 +2134,15 @@ namespace skvm { a->vfmadd132ps(dst(),r[z], r[y]); } break; + case Op::mul_f32_imm: a->vmulps(dst(), r[x], &constants[immy].label); break; + case Op::add_i32: a->vpaddd (dst(), r[x], r[y]); break; case Op::sub_i32: a->vpsubd (dst(), r[x], r[y]); break; case Op::mul_i32: a->vpmulld(dst(), r[x], r[y]); break; case Op::sub_i16x2: a->vpsubw (dst(), r[x], r[y]); break; case Op::mul_i16x2: a->vpmullw(dst(), r[x], r[y]); break; - case Op::shr_i16x2: a->vpsrlw (dst(), r[x], imm); break; + case Op::shr_i16x2: a->vpsrlw (dst(), r[x], immy); break; case Op::bit_and : a->vpand (dst(), r[x], r[y]); break; case Op::bit_or : a->vpor (dst(), r[x], r[y]); break; @@ -1833,52 +2150,67 @@ namespace skvm { case Op::bit_clear: a->vpandn(dst(), r[y], r[x]); break; // N.B. Y then X. case Op::select : a->vpblendvb(dst(), r[z], r[y], r[x]); break; - case Op::shl_i32: a->vpslld(dst(), r[x], imm); break; - case Op::shr_i32: a->vpsrld(dst(), r[x], imm); break; - case Op::sra_i32: a->vpsrad(dst(), r[x], imm); break; + case Op::shl_i32: a->vpslld(dst(), r[x], immy); break; + case Op::shr_i32: a->vpsrld(dst(), r[x], immy); break; + case Op::sra_i32: a->vpsrad(dst(), r[x], immy); break; case Op::eq_i32: a->vpcmpeqd(dst(), r[x], r[y]); break; - case Op::lt_i32: a->vpcmpgtd(dst(), r[y], r[x]); break; case Op::gt_i32: a->vpcmpgtd(dst(), r[x], r[y]); break; - case Op::extract: if (imm == 0) { a->vpand (dst(), r[x], r[y]); } - else { a->vpsrld(tmp(), r[x], imm); - a->vpand (dst(), tmp(), r[y]); } + case Op:: eq_f32: a->vcmpeqps (dst(), r[x], r[y]); break; + case Op::neq_f32: a->vcmpneqps(dst(), r[x], r[y]); break; + case Op:: gt_f32: a->vcmpltps (dst(), r[y], r[x]); break; + case Op::gte_f32: a->vcmpleps (dst(), r[y], r[x]); break; + + case Op::extract: if (immy == 0) { a->vpand (dst(), r[x], r[z]); } + else { a->vpsrld(tmp(), r[x], immy); + a->vpand (dst(), tmp(), r[z]); } break; - case Op::pack: a->vpslld(tmp(), r[y], imm); + case Op::pack: a->vpslld(tmp(), r[y], immz); a->vpor (dst(), tmp(), r[x]); break; case Op::to_f32: a->vcvtdq2ps (dst(), r[x]); break; - case Op::to_i32: a->vcvttps2dq(dst(), r[x]); break; + case Op::trunc : a->vcvttps2dq(dst(), r[x]); break; + case Op::round : a->vcvtps2dq (dst(), r[x]); break; - case Op::bytes: a->vpshufb(dst(), r[x], &bytes_masks.find(imm)->label); + case Op::bytes: a->vpshufb(dst(), r[x], &bytes_masks.find(immy)->label); break; #elif defined(__aarch64__) + case Op::assert_true: { + a->uminv4s(tmp(), r[x]); // uminv acts like an all() across the vector. + a->fmovs(scratch, tmp()); + A::Label all_true; + a->cbnz(scratch, &all_true); + a->brk(0); + a->label(&all_true); + } break; + case Op::store8: a->xtns2h(tmp(), r[x]); a->xtnh2b(tmp(), tmp()); - if (scalar) { a->strb (tmp(), arg[imm]); } - else { a->strs (tmp(), arg[imm]); } + if (scalar) { a->strb (tmp(), arg[immy]); } + else { a->strs (tmp(), arg[immy]); } break; // TODO: another case where it'd be okay to alias r[x] and tmp if r[x] dies here. - case Op::store32: if (scalar) { a->strs(r[x], arg[imm]); } - else { a->strq(r[x], arg[imm]); } + case Op::store32: if (scalar) { a->strs(r[x], arg[immy]); } + else { a->strq(r[x], arg[immy]); } break; - case Op::load8: if (scalar) { a->ldrb(tmp(), arg[imm]); } - else { a->ldrs(tmp(), arg[imm]); } + case Op::load8: if (scalar) { a->ldrb(tmp(), arg[immy]); } + else { a->ldrs(tmp(), arg[immy]); } a->uxtlb2h(tmp(), tmp()); a->uxtlh2s(dst(), tmp()); break; - case Op::load32: if (scalar) { a->ldrs(dst(), arg[imm]); } - else { a->ldrq(dst(), arg[imm]); } + case Op::load32: if (scalar) { a->ldrs(dst(), arg[immy]); } + else { a->ldrq(dst(), arg[immy]); } break; - case Op::splat: a->ldrq(dst(), &splats.find(imm)->label); + case Op::splat: if (immy) { a->ldrq(dst(), &constants[immy].label); } + else { a->eor16b(dst(), dst(), dst()); } break; // TODO: If we hoist these, pack 4 values in each register // and use vector/lane operations, cutting the register @@ -1888,6 +2220,8 @@ namespace skvm { case Op::sub_f32: a->fsub4s(dst(), r[x], r[y]); break; case Op::mul_f32: a->fmul4s(dst(), r[x], r[y]); break; case Op::div_f32: a->fdiv4s(dst(), r[x], r[y]); break; + case Op::min_f32: a->fmin4s(dst(), r[x], r[y]); break; + case Op::max_f32: a->fmax4s(dst(), r[x], r[y]); break; case Op::mad_f32: // fmla4s is z += x*y if (avail & (1<fmla4s( r[z], r[x], r[y]); } @@ -1896,6 +2230,15 @@ namespace skvm { if(dst() != tmp()) { a->orr16b(dst(), tmp(), tmp()); } } break; + // We should not see _imm ops on ARM. + case Op::mul_f32_imm: SkUNREACHABLE; break; + + case Op:: gt_f32: a->fcmgt4s (dst(), r[x], r[y]); break; + case Op::gte_f32: a->fcmge4s (dst(), r[x], r[y]); break; + case Op:: eq_f32: a->fcmeq4s (dst(), r[x], r[y]); break; + case Op::neq_f32: a->fcmeq4s (tmp(), r[x], r[y]); + a->not16b (dst(), tmp()); break; + case Op::add_i32: a->add4s(dst(), r[x], r[y]); break; case Op::sub_i32: a->sub4s(dst(), r[x], r[y]); break; @@ -1903,7 +2246,7 @@ namespace skvm { case Op::sub_i16x2: a->sub8h (dst(), r[x], r[y]); break; case Op::mul_i16x2: a->mul8h (dst(), r[x], r[y]); break; - case Op::shr_i16x2: a->ushr8h(dst(), r[x], imm); break; + case Op::shr_i16x2: a->ushr8h(dst(), r[x], immy); break; case Op::bit_and : a->and16b(dst(), r[x], r[y]); break; case Op::bit_or : a->orr16b(dst(), r[x], r[y]); break; @@ -1917,36 +2260,39 @@ namespace skvm { if(dst() != tmp()) { a->orr16b(dst(), tmp(), tmp()); } } break; - case Op::shl_i32: a-> shl4s(dst(), r[x], imm); break; - case Op::shr_i32: a->ushr4s(dst(), r[x], imm); break; - case Op::sra_i32: a->sshr4s(dst(), r[x], imm); break; + case Op::shl_i32: a-> shl4s(dst(), r[x], immy); break; + case Op::shr_i32: a->ushr4s(dst(), r[x], immy); break; + case Op::sra_i32: a->sshr4s(dst(), r[x], immy); break; case Op::eq_i32: a->cmeq4s(dst(), r[x], r[y]); break; - case Op::lt_i32: a->cmgt4s(dst(), r[y], r[x]); break; case Op::gt_i32: a->cmgt4s(dst(), r[x], r[y]); break; - case Op::extract: if (imm) { a->ushr4s(tmp(), r[x], imm); - a->and16b(dst(), tmp(), r[y]); } - else { a->and16b(dst(), r[x], r[y]); } - break; + case Op::extract: if (immy) { a->ushr4s(tmp(), r[x], immy); + a->and16b(dst(), tmp(), r[z]); } + else { a->and16b(dst(), r[x], r[z]); } + break; case Op::pack: - if (avail & (1<sli4s ( r[x], r[y], imm); } - else { a->shl4s (tmp(), r[y], imm); - a->orr16b(dst(), tmp(), r[x]); } + if (avail & (1<sli4s ( r[x], r[y], immz); } + else { a->shl4s (tmp(), r[y], immz); + a->orr16b(dst(), tmp(), r[x]); } break; case Op::to_f32: a->scvtf4s (dst(), r[x]); break; - case Op::to_i32: a->fcvtzs4s(dst(), r[x]); break; + case Op::trunc: a->fcvtzs4s(dst(), r[x]); break; + case Op::round: a->fcvtns4s(dst(), r[x]); break; case Op::bytes: - if (try_hoisting) { a->tbl (dst(), r[x], bytes_masks.find(imm)->reg); } - else { a->ldrq(tmp(), &bytes_masks.find(imm)->label); + if (try_hoisting) { a->tbl (dst(), r[x], bytes_masks.find(immy)->reg); } + else { a->ldrq(tmp(), &bytes_masks.find(immy)->label); a->tbl (dst(), r[x], tmp()); } break; #endif } + // Leave plenty of room for loop overhead and constant "line" markers. + mark_line(id+1000); + // Calls to tmp() or dst() might have flipped this false from its default true state. return ok; }; @@ -1985,10 +2331,12 @@ namespace skvm { } } + int line = 1; // All loop overhead is marked as "line 1". a->label(&body); { a->cmp(N, K); jump_if_less(&tail); + mark_line(line); for (Val id = 0; id < (Val)instructions.size(); id++) { if (!hoisted(id) && !emit(id, /*scalar=*/false)) { return false; @@ -2001,12 +2349,14 @@ namespace skvm { } sub(N, K); jump(&body); + mark_line(line); } a->label(&tail); { a->cmp(N, 1); jump_if_less(&done); + mark_line(line); for (Val id = 0; id < (Val)instructions.size(); id++) { if (!hoisted(id) && !emit(id, /*scalar=*/true)) { return false; @@ -2019,21 +2369,32 @@ namespace skvm { } sub(N, 1); jump(&tail); + mark_line(line); } a->label(&done); { exit(); + mark_line(line); } + // Except for explicit aligned load and store instructions, AVX allows + // memory operands to be unaligned. So even though we're creating 16 + // byte patterns on ARM or 32-byte patterns on x86, we only need to + // align to 4 bytes, the element size and alignment requirement. + + constants.foreach([&](int imm, LabelAndReg* entry) { + a->align(4); + a->label(&entry->label); + for (int i = 0; i < K; i++) { + a->word(imm); + } + mark_line(++line); // 2,3,4... + }); + bytes_masks.foreach([&](int imm, LabelAndReg* entry) { // One 16-byte pattern for ARM tbl, that same pattern twice for x86-64 vpshufb. - #if defined(__x86_64__) - a->align(32); - #elif defined(__aarch64__) a->align(4); - #endif - a->label(&entry->label); int mask[4]; bytes_control(imm, mask); @@ -2041,19 +2402,17 @@ namespace skvm { #if defined(__x86_64__) a->bytes(mask, sizeof(mask)); #endif + mark_line(++line); }); - splats.foreach([&](int imm, LabelAndReg* entry) { - // vbroadcastss 4 bytes on x86-64, or simply load 16-bytes on aarch64. + if (!iota.label.references.empty()) { a->align(4); - a->label(&entry->label); - a->word(imm); - #if defined(__aarch64__) - a->word(imm); - a->word(imm); - a->word(imm); - #endif - }); + a->label(&iota.label); + for (int i = 0; i < K; i++) { + a->word(i); + } + mark_line(++line); + } return true; } @@ -2066,9 +2425,9 @@ namespace skvm { // First try allowing code hoisting (faster code) // then again without if that fails (lower register pressure). bool try_hoisting = true; - if (!this->jit(instructions, try_hoisting, &a)) { + if (!this->jit(instructions, try_hoisting, nullptr, &a)) { try_hoisting = false; - if (!this->jit(instructions, try_hoisting, &a)) { + if (!this->jit(instructions, try_hoisting, nullptr, &a)) { return; } } @@ -2079,14 +2438,18 @@ namespace skvm { fJITBuf = mmap(nullptr,fJITSize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1,0); // Assemble the program for real. + std::vector line_table; a = Assembler{fJITBuf}; - SkAssertResult(this->jit(instructions, try_hoisting, &a)); + SkAssertResult(this->jit(instructions, try_hoisting, &line_table, &a)); SkASSERT(a.size() <= fJITSize); // Remap as executable, and flush caches on platforms that need that. mprotect(fJITBuf, fJITSize, PROT_READ|PROT_EXEC); __builtin___clear_cache((char*)fJITBuf, (char*)fJITBuf + fJITSize); + + // Hook into profilers and such for debugging and development. + notify_vtune(debug_name, fJITBuf, a.size(), line_table); #if defined(SKVM_PERF_DUMPS) this->dumpJIT(debug_name, a.size()); #endif @@ -2095,10 +2458,9 @@ namespace skvm { #if defined(SKVM_PERF_DUMPS) void Program::dumpJIT(const char* debug_name, size_t size) const { + SkASSERT(debug_name); #if 0 && defined(__aarch64__) - if (debug_name) { - SkDebugf("\n%s:", debug_name); - } + SkDebugf("\n%s:", debug_name); // cat | llvm-mc -arch aarch64 -disassemble auto cur = (const uint8_t*)fJITBuf; for (int i = 0; i < (int)size; i++) { @@ -2114,24 +2476,6 @@ namespace skvm { static SkSpinlock dump_lock; SkAutoSpinlock lock(dump_lock); - auto fnv1a = [](const void* vbuf, size_t n) { - uint32_t hash = 2166136261; - for (auto buf = (const uint8_t*)vbuf; n --> 0; buf++) { - hash ^= *buf; - hash *= 16777619; - } - return hash; - }; - - - char name[64]; - uint32_t hash = fnv1a(fJITBuf, size); - if (debug_name) { - sprintf(name, "skvm-jit-%s", debug_name); - } else { - sprintf(name, "skvm-jit-%u", hash); - } - // Create a jit-.dump file that we can `perf inject -j` into a // perf.data captured with `perf record -k 1`, letting us see each // JIT'd Program as if a function named skvm-jit-. E.g. @@ -2195,6 +2539,8 @@ namespace skvm { return f; }(); + static uint64_t next_id = 1; + struct CodeLoad { uint32_t event_type, event_size; uint64_t timestamp_ns; @@ -2202,16 +2548,16 @@ namespace skvm { uint32_t pid, tid; uint64_t vma/*???*/, code_addr, code_size, id; } load = { - 0/*code load*/, (uint32_t)(sizeof(CodeLoad) + strlen(name) + 1 + size), + 0/*code load*/, (uint32_t)(sizeof(CodeLoad) + strlen(debug_name) + 1 + size), timestamp_ns(), (uint32_t)getpid(), (uint32_t)SkGetThreadID(), - (uint64_t)fJITBuf, (uint64_t)fJITBuf, size, hash, + (uint64_t)fJITBuf, (uint64_t)fJITBuf, size, next_id++, }; // Write the header, the JIT'd function name, and the JIT'd code itself. fwrite(&load, sizeof(load), 1, jitdump); - fwrite(name, 1, strlen(name), jitdump); + fwrite(debug_name, 1, strlen(debug_name), jitdump); fwrite("\0", 1, 1, jitdump); fwrite(fJITBuf, 1, size, jitdump); } diff --git a/third_party/skia/src/core/SkVM.h b/third_party/skia/src/core/SkVM.h index 06b189ac14b8..779d72475700 100644 --- a/third_party/skia/src/core/SkVM.h +++ b/third_party/skia/src/core/SkVM.h @@ -10,7 +10,6 @@ #include "include/core/SkTypes.h" #include "include/private/SkTHash.h" -#include // std::hash #include // std::vector class SkWStream; @@ -59,6 +58,7 @@ namespace skvm { void align(int mod); + void int3(); void vzeroupper(); void ret(); @@ -70,25 +70,32 @@ namespace skvm { DstEqXOpY vpand, vpor, vpxor, vpandn, vpaddd, vpsubd, vpmulld, vpsubw, vpmullw, - vaddps, vsubps, vmulps, vdivps, + vaddps, vsubps, vmulps, vdivps, vminps, vmaxps, vfmadd132ps, vfmadd213ps, vfmadd231ps, vpackusdw, vpackuswb, vpcmpeqd, vpcmpgtd; + // Floating point comparisons are all the same instruction with varying imm. + void vcmpps(Ymm dst, Ymm x, Ymm y, int imm); + void vcmpeqps (Ymm dst, Ymm x, Ymm y) { this->vcmpps(dst,x,y,0); } + void vcmpltps (Ymm dst, Ymm x, Ymm y) { this->vcmpps(dst,x,y,1); } + void vcmpleps (Ymm dst, Ymm x, Ymm y) { this->vcmpps(dst,x,y,2); } + void vcmpneqps(Ymm dst, Ymm x, Ymm y) { this->vcmpps(dst,x,y,4); } + using DstEqXOpImm = void(Ymm dst, Ymm x, int imm); DstEqXOpImm vpslld, vpsrld, vpsrad, vpsrlw, vpermq; using DstEqOpX = void(Ymm dst, Ymm x); - DstEqOpX vmovdqa, vcvtdq2ps, vcvttps2dq; + DstEqOpX vmovdqa, vcvtdq2ps, vcvttps2dq, vcvtps2dq; void vpblendvb(Ymm dst, Ymm x, Ymm y, Ymm z); struct Label { - int offset = 0; - enum { None, ARMDisp19, X86Disp32 } kind = None; - std::vector references; + int offset = 0; + enum { NotYetSet, ARMDisp19, X86Disp32 } kind = NotYetSet; + std::vector references; }; Label here(); @@ -98,13 +105,19 @@ namespace skvm { void je (Label*); void jne(Label*); void jl (Label*); + void jc (Label*); void cmp(GP64, int imm); + void vptest(Ymm dst, Label*); + void vbroadcastss(Ymm dst, Label*); void vbroadcastss(Ymm dst, Xmm src); void vbroadcastss(Ymm dst, GP64 ptr, int off); // dst = *(ptr+off) void vpshufb(Ymm dst, Ymm x, Label*); + void vpaddd (Ymm dst, Ymm x, Label*); + void vpsubd (Ymm dst, Ymm x, Label*); + void vmulps (Ymm dst, Ymm x, Label*); void vmovups (Ymm dst, GP64 ptr); // dst = *ptr, 256-bit void vpmovzxwd(Ymm dst, GP64 ptr); // dst = *ptr, 128-bit, each uint16_t expanded to int @@ -136,9 +149,13 @@ namespace skvm { add4s, sub4s, mul4s, cmeq4s, cmgt4s, sub8h, mul8h, - fadd4s, fsub4s, fmul4s, fdiv4s, + fadd4s, fsub4s, fmul4s, fdiv4s, fmin4s, fmax4s, + fcmeq4s, fcmgt4s, fcmge4s, tbl; + // TODO: there are also float ==,<,<=,>,>= instructions with an immediate 0.0f, + // and the register comparison > and >= can also compare absolute values. Interesting. + // d += n*m void fmla4s(V d, V n, V m); @@ -150,15 +167,17 @@ namespace skvm { // d = op(n) using DOpN = void(V d, V n); - DOpN scvtf4s, // int -> float + DOpN not16b, // d = ~n + scvtf4s, // int -> float fcvtzs4s, // truncate float -> int + fcvtns4s, // round float -> int xtns2h, // u32 -> u16 xtnh2b, // u16 -> u8 uxtlb2h, // u8 -> u16 - uxtlh2s; // u16 -> u32 - - // TODO: both these platforms support rounding float->int (vcvtps2dq, fcvtns.4s)... use? + uxtlh2s, // u16 -> u32 + uminv4s; // dst[0] = min(n[0],n[1],n[2],n[3]), n as unsigned + void brk (int imm16); void ret (X); void add (X d, X n, int imm12); void sub (X d, X n, int imm12); @@ -190,6 +209,8 @@ namespace skvm { void strs(V src, X dst); // 32-bit *dst = src void strb(V src, X dst); // 8-bit *dst = src + void fmovs(X dst, V src); // dst = 32-bit src[0] + private: // dst = op(dst, imm) void op(int opcode, int opcode_ext, GP64 dst, int imm); @@ -235,9 +256,10 @@ namespace skvm { }; enum class Op : uint8_t { + assert_true, store8, store16, store32, // ↑ side effects / no side effects ↓ - + index, load8, load16, load32, gather8, gather16, gather32, // ↑ always varying / uniforms, constants, Just Math ↓ @@ -249,17 +271,18 @@ namespace skvm { sub_f32, sub_i32, sub_i16x2, mul_f32, mul_i32, mul_i16x2, div_f32, + min_f32, + max_f32, mad_f32, shl_i32, shl_i16x2, shr_i32, shr_i16x2, sra_i32, sra_i16x2, + mul_f32_imm, - to_i32, to_f32, + trunc, round, to_f32, eq_f32, eq_i32, eq_i16x2, neq_f32, neq_i32, neq_i16x2, - lt_f32, lt_i32, lt_i16x2, - lte_f32, lte_i32, lte_i16x2, gt_f32, gt_i32, gt_i16x2, gte_f32, gte_i32, gte_i16x2, @@ -287,7 +310,7 @@ namespace skvm { struct Instruction { Op op; // v* = op(x,y,z,imm), where * == index of this Instruction. Val x,y,z; // Enough arguments for mad(). - int imm; // Immediate bit pattern, shift count, argument index, etc. + int immy,immz; // Immediate bit pattern, shift count, argument index, etc. // Not populated until done() has been called. int death; // Index of last live instruction taking this input; live if != 0. @@ -314,11 +337,16 @@ namespace skvm { // TODO: sign extension (signed types) for <32-bit loads? // TODO: unsigned integer operations where relevant (just comparisons?)? + void assert_true(I32 val); + // Store {8,16,32}-bit varying. void store8 (Arg ptr, I32 val); void store16(Arg ptr, I32 val); void store32(Arg ptr, I32 val); + // Returns varying {n, n-1, n-2, ..., 1}, where n is the argument to Program::eval(). + I32 index(); + // Load u8,u16,i32 varying. I32 load8 (Arg ptr); I32 load16(Arg ptr); @@ -333,6 +361,16 @@ namespace skvm { I32 uniform8 (Arg ptr, int offset=0); I32 uniform16(Arg ptr, int offset=0); I32 uniform32(Arg ptr, int offset=0); + F32 uniformF (Arg ptr, int offset=0) { return this->bit_cast(this->uniform32(ptr,offset)); } + + struct Uniform { + Arg ptr; + int offset; + }; + I32 uniform8 (Uniform u) { return this->uniform8 (u.ptr, u.offset); } + I32 uniform16(Uniform u) { return this->uniform16(u.ptr, u.offset); } + I32 uniform32(Uniform u) { return this->uniform32(u.ptr, u.offset); } + F32 uniformF (Uniform u) { return this->uniformF (u.ptr, u.offset); } // Load an immediate constant. I32 splat(int n); @@ -344,6 +382,8 @@ namespace skvm { F32 sub(F32 x, F32 y); F32 mul(F32 x, F32 y); F32 div(F32 x, F32 y); + F32 min(F32 x, F32 y); + F32 max(F32 x, F32 y); F32 mad(F32 x, F32 y, F32 z); // x*y+z, often an FMA I32 eq (F32 x, F32 y); @@ -353,7 +393,8 @@ namespace skvm { I32 gt (F32 x, F32 y); I32 gte(F32 x, F32 y); - I32 to_i32(F32 x); + I32 trunc(F32 x); + I32 round(F32 x); I32 bit_cast(F32 x) { return {x.id}; } // int math, comparisons, etc. @@ -426,36 +467,69 @@ namespace skvm { // - bytes(x, 0x0404) transforms an RGBA pixel into an A0A0 bit pattern. I32 bytes (I32 x, int control); - I32 extract(I32 x, int bits, I32 y); // (x >> bits) & y + I32 extract(I32 x, int bits, I32 z); // (x >> bits) & z I32 pack (I32 x, I32 y, int bits); // x | (y << bits), assuming (x & (y << bits)) == 0 void dump(SkWStream* = nullptr) const; + uint32_t hash() const; + private: struct InstructionHash { - template - static size_t Hash(T val) { - return std::hash{}(val); - } size_t operator()(const Instruction& inst) const; }; - Val push(Op, Val x, Val y=NA, Val z=NA, int imm=0); - bool isZero(Val) const; + Val push(Op, Val x, Val y=NA, Val z=NA, int immy=0, int immz=0); + + bool allImm() const; + + template + bool allImm(Val, T* imm, Rest...) const; + + template + bool isImm(Val id, T want) const { + T imm = 0; + return this->allImm(id, &imm) && imm == want; + } SkTHashMap fIndex; std::vector fProgram; std::vector fStrides; + uint32_t fHash{0}; + }; + + // Helper to streamline allocating and working with uniforms. + struct Uniforms { + Arg ptr; + std::vector buf; + + explicit Uniforms(int init) : ptr(Arg{0}), buf(init) {} + + Builder::Uniform push(const int* vals, int n) { + int offset = sizeof(int)*buf.size(); + buf.insert(buf.end(), vals, vals+n); + return {ptr, offset}; + } + Builder::Uniform pushF(const float* vals, int n) { + return this->push((const int*)vals, n); + } + + Builder::Uniform push (int val) { return this->push (&val, 1); } + Builder::Uniform pushF(float val) { return this->pushF(&val, 1); } }; + // Maps Builder::Instructions to regions of JIT'd code, for debugging in VTune. + struct LineTableEntry { int line; size_t offset; }; + using Reg = int; class Program { public: - struct Instruction { // d = op(x, y, z/imm) + struct Instruction { // d = op(x, y/imm, z/imm) Op op; - Reg d,x,y; - union { Reg z; int imm; }; + Reg d,x; + union { Reg y; int immy; }; + union { Reg z; int immz; }; }; Program(const std::vector& instructions, @@ -495,6 +569,7 @@ namespace skvm { bool jit(const std::vector&, bool try_hoisting, + std::vector*, Assembler*) const; // Dump jit-*.dump files for perf inject. diff --git a/third_party/skia/src/core/SkVMBlitter.cpp b/third_party/skia/src/core/SkVMBlitter.cpp index e8f4f0922b30..732e72374f18 100644 --- a/third_party/skia/src/core/SkVMBlitter.cpp +++ b/third_party/skia/src/core/SkVMBlitter.cpp @@ -5,6 +5,7 @@ * found in the LICENSE file. */ +#include "include/private/SkImageInfoPriv.h" #include "include/private/SkMacros.h" #include "src/core/SkArenaAlloc.h" #include "src/core/SkBlendModePriv.h" @@ -13,6 +14,7 @@ #include "src/core/SkCoreBlitters.h" #include "src/core/SkLRUCache.h" #include "src/core/SkVM.h" +#include "src/core/SkVMBlitter.h" #if defined(STARBOARD) #include "starboard/common/log.h" @@ -20,42 +22,66 @@ namespace { + // Uniforms set by the Blitter itself, + // rather than by the Shader, which follow this struct in the skvm::Uniforms buffer. + struct BlitterUniforms { + int right; // First device x + blit run length n, used to get device x coordiate. + int y; // Device y coordiate. + }; + static_assert(SkIsAlign4(sizeof(BlitterUniforms)), ""); + static constexpr int kBlitterUniformsCount = sizeof(BlitterUniforms) / 4; + enum class Coverage { Full, UniformA8, MaskA8, MaskLCD16, Mask3D }; + struct Params { + sk_sp colorSpace; + sk_sp shader; + SkColorType colorType; + SkAlphaType alphaType; + SkBlendMode blendMode; + Coverage coverage; + + Params withCoverage(Coverage c) const { + Params p = *this; + p.coverage = c; + return p; + } + }; + SK_BEGIN_REQUIRE_DENSE; struct Key { - SkColorType colorType; - SkAlphaType alphaType; - Coverage coverage; - SkBlendMode blendMode; - SkShader* shader; - SkColorFilter* colorFilter; + uint64_t colorSpace; + uint32_t shader; + uint8_t colorType, + alphaType, + blendMode, + coverage; + + bool operator==(const Key& that) const { + return this->colorSpace == that.colorSpace + && this->shader == that.shader + && this->colorType == that.colorType + && this->alphaType == that.alphaType + && this->blendMode == that.blendMode + && this->coverage == that.coverage; + } Key withCoverage(Coverage c) const { Key k = *this; - k.coverage = c; + k.coverage = SkToU8(c); return k; } }; SK_END_REQUIRE_DENSE; - static bool operator==(const Key& x, const Key& y) { - return x.colorType == y.colorType - && x.alphaType == y.alphaType - && x.coverage == y.coverage - && x.blendMode == y.blendMode - && x.shader == y.shader - && x.colorFilter == y.colorFilter; - } - static SkString debug_name(const Key& key) { - return SkStringPrintf("CT%d-AT%d-Cov%d-Blend%d-Shader%d-CF%d", + return SkStringPrintf("CT%d-AT%d-Cov%d-Blend%d-CS%llx-Shader%x", key.colorType, key.alphaType, key.coverage, key.blendMode, - SkToBool(key.shader), - SkToBool(key.colorFilter)); + key.colorSpace, + key.shader); } static bool debug_dump(const Key& key) { @@ -85,128 +111,154 @@ namespace { static void release_program_cache() { } - struct Uniforms { - uint32_t paint_color; - uint8_t coverage; // Used when Coverage::UniformA8. - }; - struct Builder : public skvm::Builder { - //using namespace skvm; - - struct Color { skvm::I32 r,g,b,a; }; - - skvm::I32 inv(skvm::I32 x) { - return sub(splat(255), x); + skvm::F32 unorm(int bits, skvm::I32 x) { + float limit = (1<>8) + 128)>>8. - skvm::I32 v128 = add(v, splat(128)); - return shr(add(v128, shr(v128, 8)), 8); + skvm::I32 unorm(int bits, skvm::F32 x) { + float limit = (1<ptr, + offsetof(BlitterUniforms, right)), + p.index())), + y = p.to_f32(p.uniform32(uniforms->ptr, + offsetof(BlitterUniforms, y))); + skvm::F32 r,g,b,a; + if (shader->program(&p, + params.colorSpace.get(), + uniforms, + x,y, &r,&g,&b,&a)) { + shaderHash = p.hash(); + } else { + *ok = false; + } + } - switch (key.colorType) { - default: return false; + switch (params.colorType) { + default: *ok = false; break; case kRGB_565_SkColorType: break; case kRGBA_8888_SkColorType: break; case kBGRA_8888_SkColorType: break; } - if (key.alphaType == kUnpremul_SkAlphaType) { return false; } + if (params.alphaType == kUnpremul_SkAlphaType) { *ok = false; } - switch (key.blendMode) { - default: return false; - case SkBlendMode::kSrc: break; - case SkBlendMode::kSrcOver: break; + if (!skvm::BlendModeSupported(params.blendMode)) { + *ok = false; } - return true; + return { + params.colorSpace ? params.colorSpace->hash() : 0, + shaderHash, + SkToU8(params.colorType), + SkToU8(params.alphaType), + SkToU8(params.blendMode), + SkToU8(params.coverage), + }; } - explicit Builder(const Key& key) { + Builder(const Params& params, skvm::Uniforms* uniforms) { #define TODO SkUNREACHABLE - SkASSERT(CanBuild(key)); - skvm::Arg uniforms = uniform(), - dst_ptr = arg(SkColorTypeBytesPerPixel(key.colorType)); - // When coverage is MaskA8 or MaskLCD16 there will be one more mask varying, - // and when coverage is Mask3D there will be three more mask varyings. - + // First two arguments are always uniforms and the destination buffer. + uniforms->ptr = uniform(); + skvm::Arg dst_ptr = arg(SkColorTypeBytesPerPixel(params.colorType)); + // Other arguments depend on params.coverage: + // - Full: (no more arguments) + // - Mask3D: mul varying, add varying, 8-bit coverage varying + // - MaskA8: 8-bit coverage varying + // - MaskLCD16: 565 coverage varying + // - UniformA8: 8-bit coverage uniform + + skvm::Color src; + SkASSERT(params.shader); + skvm::F32 x = to_f32(sub(uniform32(uniforms->ptr, + offsetof(BlitterUniforms, right)), + index())), + y = to_f32(uniform32(uniforms->ptr, + offsetof(BlitterUniforms, y))); + SkAssertResult(as_SB(params.shader)->program(this, + params.colorSpace.get(), + uniforms, + x,y, &src.r, &src.g, &src.b, &src.a)); + // We don't know if the src color is normalized (logical [0,1], premul [0,a]) or not. + bool src_is_normalized = false; + + if (params.coverage == Coverage::Mask3D) { + skvm::F32 M = unorm(8, load8(varying())), + A = unorm(8, load8(varying())); + + src.r = min(mad(src.r, M, A), src.a); + src.g = min(mad(src.g, M, A), src.a); + src.b = min(mad(src.b, M, A), src.a); + } - // When there's no shader and no color filter, the source color is the paint color. - if (key.shader) { TODO; } - if (key.colorFilter) { TODO; } - Color src = unpack_8888(uniform32(uniforms, offsetof(Uniforms, paint_color))); + // Normalized premul formats can surprisingly represent some out-of-gamut + // values (e.g. r=0xff, a=0xee fits in unorm8 but r = 1.07), but most code + // working with normalized premul colors is not prepared to handle r,g,b > a. + // So we clamp the shader to gamut here before blending and coverage. + if (params.alphaType == kPremul_SkAlphaType + && SkColorTypeIsNormalized(params.colorType)) { + src.r = min(max(splat(0.0f), src.r), src.a); + src.g = min(max(splat(0.0f), src.g), src.a); + src.b = min(max(splat(0.0f), src.b), src.a); + + assert_true(gte(src.a, splat(0.0f))); + assert_true(lte(src.a, splat(1.0f))); + + // Knowing that we're normalizing here and that blending and coverage + // won't affect that when the destination is normalized, we can avoid + // avoid a redundant clamp just before storing. + src_is_normalized = true; + } // There are several orderings here of when we load dst and coverage // and how coverage is applied, and to complicate things, LCD coverage // needs to know dst.a. We're careful to assert it's loaded in time. - Color dst; + skvm::Color dst; SkDEBUGCODE(bool dst_loaded = false;) // load_coverage() returns false when there's no need to apply coverage. - auto load_coverage = [&](Color* cov) { - switch (key.coverage) { + auto load_coverage = [&](skvm::Color* cov) { + switch (params.coverage) { case Coverage::Full: return false; case Coverage::UniformA8: cov->r = cov->g = cov->b = cov->a = - uniform8(uniforms, offsetof(Uniforms, coverage)); + unorm(8, uniform8(uniform())); return true; + case Coverage::Mask3D: case Coverage::MaskA8: cov->r = cov->g = cov->b = cov->a = - load8(varying()); + unorm(8, load8(varying())); return true; case Coverage::MaskLCD16: @@ -215,8 +267,6 @@ namespace { cov->a = select(lt(src.a, dst.a), min(cov->r, min(cov->g,cov->b)) , max(cov->r, max(cov->g,cov->b))); return true; - - case Coverage::Mask3D: TODO; } // GCC insists... return false; @@ -226,21 +276,21 @@ namespace { // obviating the need for the lerp afterwards. This early-coverage strategy tends // to be both faster and require fewer registers. bool lerp_coverage_post_blend = true; - if (SkBlendMode_ShouldPreScaleCoverage(key.blendMode, - key.coverage == Coverage::MaskLCD16)) { - Color cov; + if (SkBlendMode_ShouldPreScaleCoverage(params.blendMode, + params.coverage == Coverage::MaskLCD16)) { + skvm::Color cov; if (load_coverage(&cov)) { - src.r = div255(mul(src.r, cov.r)); - src.g = div255(mul(src.g, cov.g)); - src.b = div255(mul(src.b, cov.b)); - src.a = div255(mul(src.a, cov.a)); + src.r = mul(src.r, cov.r); + src.g = mul(src.g, cov.g); + src.b = mul(src.b, cov.b); + src.a = mul(src.a, cov.a); } lerp_coverage_post_blend = false; } // Load up the destination color. SkDEBUGCODE(dst_loaded = true;) - switch (key.colorType) { + switch (params.colorType) { default: TODO; case kRGB_565_SkColorType: dst = unpack_565 (load16(dst_ptr)); break; case kRGBA_8888_SkColorType: dst = unpack_8888(load32(dst_ptr)); break; @@ -252,74 +302,137 @@ namespace { // When a destination is tagged opaque, we may assume it both starts and stays fully // opaque, ignoring any math that disagrees. So anything involving force_opaque is // optional, and sometimes helps cut a small amount of work in these programs. - const bool force_opaque = true && key.alphaType == kOpaque_SkAlphaType; - if (force_opaque) { dst.a = splat(0xff); } + const bool force_opaque = true && params.alphaType == kOpaque_SkAlphaType; + if (force_opaque) { dst.a = splat(1.0f); } // We'd need to premul dst after loading and unpremul before storing. - if (key.alphaType == kUnpremul_SkAlphaType) { TODO; } - - // Blend src and dst. - switch (key.blendMode) { - default: TODO; - - case SkBlendMode::kSrc: break; + if (params.alphaType == kUnpremul_SkAlphaType) { TODO; } - case SkBlendMode::kSrcOver: { - src.r = add(src.r, div255(mul(dst.r, inv(src.a)))); - src.g = add(src.g, div255(mul(dst.g, inv(src.a)))); - src.b = add(src.b, div255(mul(dst.b, inv(src.a)))); - src.a = add(src.a, div255(mul(dst.a, inv(src.a)))); - } break; - } + src = skvm::BlendModeProgram(this, params.blendMode, src, dst); // Lerp with coverage post-blend if needed. - Color cov; + skvm::Color cov; if (lerp_coverage_post_blend && load_coverage(&cov)) { - src.r = mix(dst.r, src.r, cov.r); - src.g = mix(dst.g, src.g, cov.g); - src.b = mix(dst.b, src.b, cov.b); - src.a = mix(dst.a, src.a, cov.a); + src.r = mad(sub(src.r, dst.r), cov.r, dst.r); + src.g = mad(sub(src.g, dst.g), cov.g, dst.g); + src.b = mad(sub(src.b, dst.b), cov.b, dst.b); + src.a = mad(sub(src.a, dst.a), cov.a, dst.a); } - if (force_opaque) { src.a = splat(0xff); } + // Clamp to fit destination color format if needed. + if (!src_is_normalized && SkColorTypeIsNormalized(params.colorType)) { + src.r = min(max(splat(0.0f), src.r), splat(1.0f)); + src.g = min(max(splat(0.0f), src.g), splat(1.0f)); + src.b = min(max(splat(0.0f), src.b), splat(1.0f)); + + assert_true(gte(src.a, splat(0.0f))); + assert_true(lte(src.a, splat(1.0f))); + } + if (force_opaque) { src.a = splat(1.0f); } // Store back to the destination. - switch (key.colorType) { + switch (params.colorType) { default: SkUNREACHABLE; - case kRGB_565_SkColorType: store16(dst_ptr, pack_565(src)); break; + case kRGB_565_SkColorType: + store16(dst_ptr, pack(pack(unorm(5,src.b), + unorm(6,src.g), 5), + unorm(5,src.r),11)); + break; case kBGRA_8888_SkColorType: std::swap(src.r, src.b); // fallthrough - case kRGBA_8888_SkColorType: store32(dst_ptr, pack_8888(src)); break; + case kRGBA_8888_SkColorType: + store32(dst_ptr, pack(pack(unorm(8, src.r), + unorm(8, src.g), 8), + pack(unorm(8, src.b), + unorm(8, src.a), 8), 16)); + break; } #undef TODO } }; + // Scale the output of another shader by alpha. + struct AlphaShader : public SkShaderBase { + AlphaShader(sk_sp shader, float alpha) + : fShader(std::move(shader)) + , fAlpha(alpha) {} + + sk_sp fShader; + float fAlpha; + + bool onProgram(skvm::Builder* p, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const override { + if (as_SB(fShader)->program(p, dstCS, + uniforms, + x,y, r,g,b,a)) { + skvm::F32 A = p->uniformF(uniforms->pushF(fAlpha)); + *r = p->mul(*r, A); + *g = p->mul(*g, A); + *b = p->mul(*b, A); + *a = p->mul(*a, A); + return true; + } + return false; + } + + // Only created here, should never be flattened / unflattened. + Factory getFactory() const override { return nullptr; } + const char* getTypeName() const override { return "AlphaShader"; } + }; + + static Params effective_params(const SkPixmap& device, const SkPaint& paint) { + // Color filters have been handled for us by SkBlitter::Choose(). + SkASSERT(!paint.getColorFilter()); + + // If there's no explicit shader, the paint color is the shader, + // but if there is a shader, it's modulated by the paint alpha. + sk_sp shader = paint.refShader(); + if (!shader) { + shader = SkShaders::Color(paint.getColor4f(), nullptr); + } else if (paint.getAlphaf() < 1.0f) { + shader = sk_make_sp(std::move(shader), paint.getAlphaf()); + } + + // The most common blend mode is SrcOver, and it can be strength-reduced + // _greatly_ to Src mode when the shader is opaque. + SkBlendMode blendMode = paint.getBlendMode(); + if (blendMode == SkBlendMode::kSrcOver && shader->isOpaque()) { + blendMode = SkBlendMode::kSrc; + } + + // In general all the information we use to make decisions here need to + // be reflected in Params and Key to make program caching sound, and it + // might appear that shader->isOpaque() is a property of the shader's + // uniforms than its fundamental program structure and so unsafe to use. + // + // Opacity is such a powerful property that SkShaderBase::program() + // forces opacity for any shader subclass that claims isOpaque(), so + // the opaque bit is strongly guaranteed to be part of the program and + // not just a property of the uniforms. The shader program hash includes + // this information, making it safe to use anywhere in the blitter codegen. + + return { + device.refColorSpace(), + std::move(shader), + device.colorType(), + device.alphaType(), + blendMode, + Coverage::Full, // Placeholder... withCoverage() will change as needed. + }; + } + class Blitter final : public SkBlitter { public: - bool ok = false; - - Blitter(const SkPixmap& device, const SkPaint& paint) + Blitter(const SkPixmap& device, const SkPaint& paint, bool* ok) : fDevice(device) - , fKey { - device.colorType(), - device.alphaType(), - Coverage::Full, - paint.getBlendMode(), - paint.getShader(), - paint.getColorFilter(), - } - { - SkColor4f color = paint.getColor4f(); - SkColorSpaceXformSteps{sk_srgb_singleton(), kUnpremul_SkAlphaType, - device.colorSpace(), kUnpremul_SkAlphaType}.apply(color.vec()); - - if (color.fitsInBytes() && Builder::CanBuild(fKey)) { - fUniforms.paint_color = color.premul().toBytes_RGBA(); - ok = true; - } - } + , fUniforms(kBlitterUniformsCount) + , fParams(effective_params(device, paint)) + , fKey(Builder::CacheKey(fParams, &fUniforms, ok)) + {} ~Blitter() override { if (SkLRUCache* cache = try_acquire_program_cache()) { @@ -336,6 +449,7 @@ namespace { cache_program(std::move(fBlitH), Coverage::Full); cache_program(std::move(fBlitAntiH), Coverage::UniformA8); cache_program(std::move(fBlitMaskA8), Coverage::MaskA8); + cache_program(std::move(fBlitMask3D), Coverage::Mask3D); cache_program(std::move(fBlitMaskLCD16), Coverage::MaskLCD16); release_program_cache(); @@ -343,13 +457,15 @@ namespace { } private: - SkPixmap fDevice; // TODO: can this be const&? - const Key fKey; - Uniforms fUniforms; - skvm::Program fBlitH, - fBlitAntiH, - fBlitMaskA8, - fBlitMaskLCD16; + SkPixmap fDevice; // TODO: can this be const&? + skvm::Uniforms fUniforms; + const Params fParams; + const Key fKey; + skvm::Program fBlitH, + fBlitAntiH, + fBlitMaskA8, + fBlitMask3D, + fBlitMaskLCD16; skvm::Program buildProgram(Coverage coverage) { Key key = fKey.withCoverage(coverage); @@ -365,27 +481,42 @@ namespace { return p; } } - #if 0 - static std::atomic done{0}; - if (0 == done++) { - atexit([]{ SkDebugf("%d calls to done\n", done.load()); }); - } - #endif - Builder builder{key}; + // We don't really _need_ to rebuild fUniforms here. + // It's just more natural to have effects unconditionally emit them, + // and more natural to rebuild fUniforms than to emit them into a dummy buffer. + // fUniforms should reuse the exact same memory, so this is very cheap. + SkDEBUGCODE(size_t prev = fUniforms.buf.size();) + fUniforms.buf.resize(kBlitterUniformsCount); + Builder builder{fParams.withCoverage(coverage), &fUniforms}; + SkASSERT(fUniforms.buf.size() == prev); + skvm::Program program = builder.done(debug_name(key).c_str()); - if (!program.hasJIT() && debug_dump(key)) { - SkDebugf("\nfalling back to interpreter for blitter with this key.\n"); - builder.dump(); - program.dump(); + if (debug_dump(key)) { + static std::atomic done{0}; + if (0 == done++) { + atexit([]{ SkDebugf("%d calls to done\n", done.load()); }); + } + + if (!program.hasJIT()) { + SkDebugf("\nfalling back to interpreter for blitter with this key.\n"); + builder.dump(); + program.dump(); + } } return program; } + void updateUniforms(int right, int y) { + BlitterUniforms uniforms{right, y}; + memcpy(fUniforms.buf.data(), &uniforms, sizeof(BlitterUniforms)); + } + void blitH(int x, int y, int w) override { if (fBlitH.empty()) { fBlitH = this->buildProgram(Coverage::Full); } - fBlitH.eval(w, &fUniforms, fDevice.addr(x,y)); + this->updateUniforms(x+w, y); + fBlitH.eval(w, fUniforms.buf.data(), fDevice.addr(x,y)); } void blitAntiH(int x, int y, const SkAlpha cov[], const int16_t runs[]) override { @@ -393,8 +524,8 @@ namespace { fBlitAntiH = this->buildProgram(Coverage::UniformA8); } for (int16_t run = *runs; run > 0; run = *runs) { - fUniforms.coverage = *cov; - fBlitAntiH.eval(run, &fUniforms, fDevice.addr(x,y)); + this->updateUniforms(x+run, y); + fBlitAntiH.eval(run, fUniforms.buf.data(), fDevice.addr(x,y), cov); x += run; runs += run; @@ -412,7 +543,13 @@ namespace { switch (mask.fFormat) { default: SkUNREACHABLE; // ARGB and SDF masks shouldn't make it here. - case SkMask::k3D_Format: // TODO: the mul and add 3D mask planes too + case SkMask::k3D_Format: + if (fBlitMask3D.empty()) { + fBlitMask3D = this->buildProgram(Coverage::Mask3D); + } + program = &fBlitMask3D; + break; + case SkMask::kA8_Format: if (fBlitMaskA8.empty()) { fBlitMaskA8 = this->buildProgram(Coverage::MaskA8); @@ -431,10 +568,20 @@ namespace { SkASSERT(program); if (program) { for (int y = clip.top(); y < clip.bottom(); y++) { - program->eval(clip.width(), - &fUniforms, - fDevice.addr(clip.left(), y), - mask.getAddr(clip.left(), y)); + int x = clip.left(), + w = clip.width(); + void* dptr = fDevice.writable_addr(x,y); + auto mptr = (const uint8_t*)mask.getAddr(x,y); + this->updateUniforms(x+w,y); + + if (program == &fBlitMask3D) { + size_t plane = mask.computeImageSize(); + program->eval(w, fUniforms.buf.data(), dptr, mptr + 1*plane + , mptr + 2*plane + , mptr + 0*plane); + } else { + program->eval(w, fUniforms.buf.data(), dptr, mptr); + } } } } @@ -442,12 +589,100 @@ namespace { } // namespace +bool skvm::BlendModeSupported(SkBlendMode mode) { + return mode <= SkBlendMode::kScreen; +} + +skvm::Color skvm::BlendModeProgram(skvm::Builder* p, + SkBlendMode mode, skvm::Color src, skvm::Color dst) { + auto mma = [&](skvm::F32 x, skvm::F32 y, skvm::F32 z, skvm::F32 w) { + return p->mad(x,y, p->mul(z,w)); + }; + + auto inv = [&](skvm::F32 x) { + return p->sub(p->splat(1.0f), x); + }; + + switch (mode) { + default: SkASSERT(false); /*but also, for safety, fallthrough*/ + + case SkBlendMode::kClear: return { + p->splat(0.0f), + p->splat(0.0f), + p->splat(0.0f), + p->splat(0.0f), + }; + + case SkBlendMode::kSrc: return src; + case SkBlendMode::kDst: return dst; + + case SkBlendMode::kDstOver: std::swap(src, dst); // fall-through + case SkBlendMode::kSrcOver: return { + p->mad(dst.r, inv(src.a), src.r), + p->mad(dst.g, inv(src.a), src.g), + p->mad(dst.b, inv(src.a), src.b), + p->mad(dst.a, inv(src.a), src.a), + }; + + case SkBlendMode::kDstIn: std::swap(src, dst); // fall-through + case SkBlendMode::kSrcIn: return { + p->mul(src.r, dst.a), + p->mul(src.g, dst.a), + p->mul(src.b, dst.a), + p->mul(src.a, dst.a), + }; + + case SkBlendMode::kDstOut: std::swap(src, dst); // fall-through + case SkBlendMode::kSrcOut: return { + p->mul(src.r, inv(dst.a)), + p->mul(src.g, inv(dst.a)), + p->mul(src.b, inv(dst.a)), + p->mul(src.a, inv(dst.a)), + }; + + case SkBlendMode::kDstATop: std::swap(src, dst); // fall-through + case SkBlendMode::kSrcATop: return { + mma(src.r, dst.a, dst.r, inv(src.a)), + mma(src.g, dst.a, dst.g, inv(src.a)), + mma(src.b, dst.a, dst.b, inv(src.a)), + mma(src.a, dst.a, dst.a, inv(src.a)), + }; + + case SkBlendMode::kXor: return { + mma(src.r, inv(dst.a), dst.r, inv(src.a)), + mma(src.g, inv(dst.a), dst.g, inv(src.a)), + mma(src.b, inv(dst.a), dst.b, inv(src.a)), + mma(src.a, inv(dst.a), dst.a, inv(src.a)), + }; + + case SkBlendMode::kPlus: return { + p->min(p->add(src.r, dst.r), p->splat(1.0f)), + p->min(p->add(src.g, dst.g), p->splat(1.0f)), + p->min(p->add(src.b, dst.b), p->splat(1.0f)), + p->min(p->add(src.a, dst.a), p->splat(1.0f)), + }; + + case SkBlendMode::kModulate: return { + p->mul(src.r, dst.r), + p->mul(src.g, dst.g), + p->mul(src.b, dst.b), + p->mul(src.a, dst.a), + }; + + case SkBlendMode::kScreen: return { + p->sub(p->add(src.r, dst.r), p->mul(src.r, dst.r)), + p->sub(p->add(src.g, dst.g), p->mul(src.g, dst.g)), + p->sub(p->add(src.b, dst.b), p->mul(src.b, dst.b)), + p->sub(p->add(src.a, dst.a), p->mul(src.a, dst.a)), + }; + } +} SkBlitter* SkCreateSkVMBlitter(const SkPixmap& device, const SkPaint& paint, const SkMatrix& ctm, SkArenaAlloc* alloc) { - auto blitter = alloc->make(device, paint); - return blitter->ok ? blitter - : nullptr; + bool ok = true; + auto blitter = alloc->make(device, paint, &ok); + return ok ? blitter : nullptr; } diff --git a/third_party/skia/src/core/SkVMBlitter.h b/third_party/skia/src/core/SkVMBlitter.h new file mode 100644 index 000000000000..1e01fbe9018b --- /dev/null +++ b/third_party/skia/src/core/SkVMBlitter.h @@ -0,0 +1,21 @@ +/* + * Copyright 2019 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkVMBlitter_DEFINED +#define SkVMBlitter_DEFINED + +#include "include/core/SkBlendMode.h" +#include "src/core/SkVM.h" + +namespace skvm { + struct Color { skvm::F32 r,g,b,a; }; + + bool BlendModeSupported(SkBlendMode); + Color BlendModeProgram(Builder*, SkBlendMode, Color src, Color dst); +} + +#endif diff --git a/third_party/skia/src/core/SkWriter32.h b/third_party/skia/src/core/SkWriter32.h index 3f7d30535719..ca0664e40121 100644 --- a/third_party/skia/src/core/SkWriter32.h +++ b/third_party/skia/src/core/SkWriter32.h @@ -23,7 +23,7 @@ #include "include/private/SkTemplates.h" #include "include/private/SkTo.h" -class SK_API SkWriter32 : SkNoncopyable { +class SkWriter32 : SkNoncopyable { public: /** * The caller can specify an initial block of storage, which the caller manages. diff --git a/third_party/skia/src/core/SkYUVMath.cpp b/third_party/skia/src/core/SkYUVMath.cpp index 091e6948dec7..2fee1ba2ee45 100644 --- a/third_party/skia/src/core/SkYUVMath.cpp +++ b/third_party/skia/src/core/SkYUVMath.cpp @@ -47,21 +47,36 @@ const float JPEG_yuv_to_rgb[] = { 1.000000f, 1.772000f, 0.000000f, 0.000000f, -0.889475f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, }; +const float BT2020_rgb_to_yuv[] = { + 0.225613f, 0.582282f, 0.050928f, 0.000000f, 0.062745f, + -0.122655f, -0.316560f, 0.439216f, 0.000000f, 0.501961f, + 0.439216f, -0.403890f, -0.035326f, 0.000000f, 0.501961f, + 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, +}; +const float BT2020_yuv_to_rgb[] = { + 1.164384f, 0.000000f, 1.678674f, 0.000000f, -0.915688f, + 1.164384f, -0.187326f, -0.650424f, 0.000000f, 0.347458f, + 1.164384f, 2.141772f, 0.000000f, 0.000000f, -1.148145f, + 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, +}; static_assert(kJPEG_SkYUVColorSpace == 0, ""); static_assert(kRec601_SkYUVColorSpace == 1, ""); static_assert(kRec709_SkYUVColorSpace == 2, ""); +static_assert(kBT2020_SkYUVColorSpace == 3, ""); const float* yuv_to_rgb_array[] = { JPEG_yuv_to_rgb, Rec601_yuv_to_rgb, Rec709_yuv_to_rgb, + BT2020_yuv_to_rgb, }; const float* rgb_to_yuv_array[] = { JPEG_rgb_to_yuv, Rec601_rgb_to_yuv, Rec709_rgb_to_yuv, + BT2020_rgb_to_yuv, }; constexpr size_t kSizeOfColorMatrix = 20 * sizeof(float); @@ -127,7 +142,6 @@ static void scale3(float m[], float s) { namespace { struct YUVCoeff { float Kr, Kb; - float Cr, Cb; float scaleY, addY; float scaleUV; }; @@ -135,19 +149,24 @@ struct YUVCoeff { const YUVCoeff gCoeff[] = { // kJPEG_SkYUVColorSpace - { 0.299f, 0.114f, 1/1.772f, 1/1.402f, 1, 0, 1, }, + { 0.299f, 0.114f, 1, 0, 1, }, // kRec601_SkYUVColorSpace - { 0.299f, 0.114f, 1/1.772f, 1/1.402f, 219/255.f, 16/255.f, 224/255.f, }, + { 0.299f, 0.114f, 219/255.f, 16/255.f, 224/255.f, }, // kRec709_SkYUVColorSpace - { 0.2126f, 0.0722f, 1/1.8556f, 1/1.5748f, 219/255.f, 16/255.f, 224/255.f, }, + { 0.2126f, 0.0722f, 219/255.f, 16/255.f, 224/255.f, }, + + // kBT2020_SkYUVColorSpace + { 0.2627f, 0.0593f, 219/255.f, 16/255.f, 224/255.f, }, }; static void make_rgb_to_yuv_matrix(float mx[20], const YUVCoeff& c) { const float Kr = c.Kr; const float Kb = c.Kb; const float Kg = 1.0f - Kr - Kb; + const float Cr = 0.5f / (1.0f - Kb); + const float Cb = 0.5f / (1.0f - Kr); float m[20] = { Kr, Kg, Kb, 0, c.addY, @@ -157,13 +176,13 @@ static void make_rgb_to_yuv_matrix(float mx[20], const YUVCoeff& c) { }; memcpy(mx, m, sizeof(m)); scale3(mx + 0, c.scaleY); - scale3(mx + 5, c.Cr * c.scaleUV); - scale3(mx + 10, c.Cb * c.scaleUV); + scale3(mx + 5, Cr * c.scaleUV); + scale3(mx + 10, Cb * c.scaleUV); } static void dump(const float m[20], SkYUVColorSpace cs, bool rgb2yuv) { const char* names[] = { - "JPEG", "Rec601", "Rec709", + "JPEG", "Rec601", "Rec709", "BT2020", }; const char* dirnames[] = { "yuv_to_rgb", "rgb_to_yuv", @@ -182,7 +201,8 @@ static void dump(const float m[20], SkYUVColorSpace cs, bool rgb2yuv) { // Used to create the prebuilt tables for each colorspace. // Don't remove this function, in case we want to recompute those tables in the future. void SkColorMatrix_DumpYUVMatrixTables() { - for (auto cs : {kRec709_SkYUVColorSpace, kRec601_SkYUVColorSpace, kJPEG_SkYUVColorSpace}) { + for (auto cs : {kRec709_SkYUVColorSpace, kRec601_SkYUVColorSpace, kJPEG_SkYUVColorSpace, + kBT2020_SkYUVColorSpace}) { float m[20]; make_rgb_to_yuv_matrix(m, gCoeff[(unsigned)cs]); dump(m, cs, true); diff --git a/third_party/skia/src/core/SkZip.h b/third_party/skia/src/core/SkZip.h index 1b38b41f3355..556156607d25 100644 --- a/third_party/skia/src/core/SkZip.h +++ b/third_party/skia/src/core/SkZip.h @@ -8,7 +8,6 @@ #ifndef SkZip_DEFINED #define SkZip_DEFINED -#include #include #include #include @@ -48,10 +47,10 @@ class SkZip { }; template - using make_nullptr = std::integral_constant; + static constexpr T* nullify = nullptr; public: - constexpr SkZip() : fPointers{make_nullptr::value...}, fSize{0} {} + constexpr SkZip() : fPointers{nullify...}, fSize{0} {} constexpr SkZip(size_t) = delete; constexpr SkZip(size_t size, Ts*... ts) : fPointers{ts...} @@ -83,8 +82,20 @@ class SkZip { constexpr std::tuple data() const { return fPointers; } constexpr SkZip first(size_t n) const { SkASSERT(n <= this->size()); + if (n == 0) { return SkZip(); } return SkZip{n, fPointers}; } + constexpr SkZip last(size_t n) const { + SkASSERT(n <= this->size()); + if (n == 0) { return SkZip(); } + return SkZip{n, this->pointersAt(fSize - n)}; + } + constexpr SkZip subspan(size_t offset, size_t count) const { + SkASSERT(offset < this->size()); + SkASSERT(count <= this->size() - offset); + if (count == 0) { return SkZip(); } + return SkZip(count, pointersAt(offset)); + } private: constexpr SkZip(size_t n, const std::tuple& pointers) @@ -102,6 +113,17 @@ class SkZip { return ReturnTuple((std::get(fPointers))[i]...); } + std::tuple pointersAt(size_t i) const { + SkASSERT(this->size() > 0); + SkASSERT(i < this->size()); + return pointersAtDetail(i, skstd::make_index_sequence{}); + } + + template + constexpr std::tuple pointersAtDetail(size_t i, skstd::index_sequence) const { + return std::tuple{&(std::get(fPointers))[i]...}; + } + std::tuple fPointers; size_t fSize; }; @@ -180,6 +202,10 @@ class SkMakeZipDetail { } }; +template +template +constexpr T* SkZip::nullify; + template inline constexpr auto SkMakeZip(Ts&& ... ts) { return SkMakeZipDetail::MakeZip(std::forward(ts)...); diff --git a/third_party/skia/src/effects/SkColorMatrix.cpp b/third_party/skia/src/effects/SkColorMatrix.cpp index f6d8eaeded70..602b01885191 100644 --- a/third_party/skia/src/effects/SkColorMatrix.cpp +++ b/third_party/skia/src/effects/SkColorMatrix.cpp @@ -6,7 +6,6 @@ */ #include "include/effects/SkColorMatrix.h" -#include "include/private/SkFloatingPoint.h" enum { kR_Scale = 0, @@ -46,17 +45,17 @@ static void set_concat(float result[20], const float outer[20], const float inne } if (target != result) { - memcpy(result, target, 20 * sizeof(float)); + std::copy_n(target, 20, result); } } void SkColorMatrix::setIdentity() { - memset(fMat, 0, sizeof(fMat)); + fMat.fill(0.0f); fMat[kR_Scale] = fMat[kG_Scale] = fMat[kB_Scale] = fMat[kA_Scale] = 1; } void SkColorMatrix::setScale(float rScale, float gScale, float bScale, float aScale) { - memset(fMat, 0, sizeof(fMat)); + fMat.fill(0.0f); fMat[kR_Scale] = rScale; fMat[kG_Scale] = gScale; fMat[kB_Scale] = bScale; @@ -72,42 +71,8 @@ void SkColorMatrix::postTranslate(float dr, float dg, float db, float da) { /////////////////////////////////////////////////////////////////////////////// -void SkColorMatrix::setRotate(Axis axis, float degrees) { - float r = sk_float_degrees_to_radians(degrees); - this->setSinCos(axis, sk_float_sin(r), sk_float_cos(r)); -} - -void SkColorMatrix::setSinCos(Axis axis, float sine, float cosine) { - SkASSERT((unsigned)axis < 3); - - static const uint8_t gRotateIndex[] = { - 6, 7, 11, 12, - 0, 10, 2, 12, - 0, 1, 5, 6, - }; - const uint8_t* index = gRotateIndex + axis * 4; - - this->setIdentity(); - fMat[index[0]] = cosine; - fMat[index[1]] = sine; - fMat[index[2]] = -sine; - fMat[index[3]] = cosine; -} - -void SkColorMatrix::preRotate(Axis axis, float degrees) { - SkColorMatrix tmp; - tmp.setRotate(axis, degrees); - this->preConcat(tmp); -} - -void SkColorMatrix::postRotate(Axis axis, float degrees) { - SkColorMatrix tmp; - tmp.setRotate(axis, degrees); - this->postConcat(tmp); -} - void SkColorMatrix::setConcat(const SkColorMatrix& matA, const SkColorMatrix& matB) { - set_concat(fMat, matA.fMat, matB.fMat); + set_concat(fMat.data(), matA.fMat.data(), matB.fMat.data()); } /////////////////////////////////////////////////////////////////////////////// @@ -123,49 +88,14 @@ static const float kHueG = 0.715f; static const float kHueB = 0.072f; void SkColorMatrix::setSaturation(float sat) { - memset(fMat, 0, sizeof(fMat)); + fMat.fill(0.0f); const float R = kHueR * (1 - sat); const float G = kHueG * (1 - sat); const float B = kHueB * (1 - sat); - setrow(fMat + 0, R + sat, G, B); - setrow(fMat + 5, R, G + sat, B); - setrow(fMat + 10, R, G, B + sat); - fMat[kA_Scale] = 1; -} - -static const float kR2Y = 0.299f; -static const float kG2Y = 0.587f; -static const float kB2Y = 0.114f; - -static const float kR2U = -0.16874f; -static const float kG2U = -0.33126f; -static const float kB2U = 0.5f; - -static const float kR2V = 0.5f; -static const float kG2V = -0.41869f; -static const float kB2V = -0.08131f; - -void SkColorMatrix::setRGB2YUV() { - memset(fMat, 0, sizeof(fMat)); - - setrow(fMat + 0, kR2Y, kG2Y, kB2Y); - setrow(fMat + 5, kR2U, kG2U, kB2U); - setrow(fMat + 10, kR2V, kG2V, kB2V); - fMat[kA_Scale] = 1; -} - -static const float kV2R = 1.402f; -static const float kU2G = -0.34414f; -static const float kV2G = -0.71414f; -static const float kU2B = 1.772f; - -void SkColorMatrix::setYUV2RGB() { - memset(fMat, 0, sizeof(fMat)); - - setrow(fMat + 0, 1, 0, kV2R); - setrow(fMat + 5, 1, kU2G, kV2G); - setrow(fMat + 10, 1, kU2B, 0); + setrow(fMat.data() + 0, R + sat, G, B); + setrow(fMat.data() + 5, R, G + sat, B); + setrow(fMat.data() + 10, R, G, B + sat); fMat[kA_Scale] = 1; } diff --git a/third_party/skia/src/effects/SkEmbossMaskFilter.h b/third_party/skia/src/effects/SkEmbossMaskFilter.h index d79e89b94ed2..bddf601d2feb 100644 --- a/third_party/skia/src/effects/SkEmbossMaskFilter.h +++ b/third_party/skia/src/effects/SkEmbossMaskFilter.h @@ -14,7 +14,7 @@ This mask filter creates a 3D emboss look, by specifying a light and blur amount. */ -class SK_API SkEmbossMaskFilter : public SkMaskFilterBase { +class SkEmbossMaskFilter : public SkMaskFilterBase { public: struct Light { SkScalar fDirection[3]; // x,y,z diff --git a/third_party/skia/src/effects/SkHighContrastFilter.cpp b/third_party/skia/src/effects/SkHighContrastFilter.cpp index 5382a037af5d..4fbbf4896afe 100644 --- a/third_party/skia/src/effects/SkHighContrastFilter.cpp +++ b/third_party/skia/src/effects/SkHighContrastFilter.cpp @@ -66,7 +66,7 @@ bool SkHighContrast_Filter::onAppendStages(const SkStageRec& rec, bool shaderIsO // Linearize before applying high-contrast filter. auto tf = alloc->make(); if (rec.fDstCS) { - rec.fDstCS->transferFn(&tf->g); + rec.fDstCS->transferFn(tf); } else { // Historically we approximate untagged destinations as gamma 2. // TODO: sRGB? @@ -115,7 +115,7 @@ bool SkHighContrast_Filter::onAppendStages(const SkStageRec& rec, bool shaderIsO // Re-encode back from linear. auto invTF = alloc->make(); if (rec.fDstCS) { - rec.fDstCS->invTransferFn(&invTF->g); + rec.fDstCS->invTransferFn(invTF); } else { // See above... historically untagged == gamma 2 in this filter. *invTF ={0.5f,1, 0,0,0,0,0}; diff --git a/third_party/skia/src/effects/SkTableColorFilter.cpp b/third_party/skia/src/effects/SkTableColorFilter.cpp index 601da8f149bd..576fac6e93e3 100644 --- a/third_party/skia/src/effects/SkTableColorFilter.cpp +++ b/third_party/skia/src/effects/SkTableColorFilter.cpp @@ -264,7 +264,7 @@ class ColorTableEffect : public GrFragmentProcessor { bool onIsEqual(const GrFragmentProcessor&) const override { return true; } - ColorTableEffect(sk_sp proxy) + ColorTableEffect(sk_sp proxy) : INHERITED(kColorTableEffect_ClassID, kNone_OptimizationFlags) // Not bothering with table-specific optimizations. , fTextureSampler(std::move(proxy)) { diff --git a/third_party/skia/src/effects/imagefilters/SkAlphaThresholdFilter.cpp b/third_party/skia/src/effects/imagefilters/SkAlphaThresholdFilter.cpp index a059b6588a4a..c097347266ce 100644 --- a/third_party/skia/src/effects/imagefilters/SkAlphaThresholdFilter.cpp +++ b/third_party/skia/src/effects/imagefilters/SkAlphaThresholdFilter.cpp @@ -166,10 +166,9 @@ sk_sp SkAlphaThresholdFilterImpl::onFilterImage(const Context& c return nullptr; } - GrColorType srcColorType = SkColorTypeToGrColorType(input->colorType()); - auto textureFP = GrSimpleTextureEffect::Make(std::move(inputProxy), srcColorType, - SkMatrix::MakeTrans(input->subset().x(), - input->subset().y())); + auto textureFP = GrSimpleTextureEffect::Make( + std::move(inputProxy), input->alphaType(), + SkMatrix::MakeTrans(input->subset().x(), input->subset().y())); textureFP = GrColorSpaceXformEffect::Make(std::move(textureFP), input->getColorSpace(), input->alphaType(), ctx.colorSpace()); if (!textureFP) { diff --git a/third_party/skia/src/effects/imagefilters/SkArithmeticImageFilter.cpp b/third_party/skia/src/effects/imagefilters/SkArithmeticImageFilter.cpp index 2b1aaaf6a55c..42c62bedaaed 100644 --- a/third_party/skia/src/effects/imagefilters/SkArithmeticImageFilter.cpp +++ b/third_party/skia/src/effects/imagefilters/SkArithmeticImageFilter.cpp @@ -353,11 +353,12 @@ sk_sp ArithmeticImageFilterImpl::filterImageGPU( SkMatrix backgroundMatrix = SkMatrix::MakeTrans( SkIntToScalar(bgSubset.left() - backgroundOffset.fX), SkIntToScalar(bgSubset.top() - backgroundOffset.fY)); - GrColorType bgColorType = SkColorTypeToGrColorType(background->colorType()); - bgFP = GrTextureDomainEffect::Make( - std::move(backgroundProxy), bgColorType, backgroundMatrix, + bgFP = GrSimpleTextureEffect::Make(std::move(backgroundProxy), background->alphaType(), + backgroundMatrix, GrSamplerState::Filter::kNearest); + bgFP = GrDomainEffect::Make( + std::move(bgFP), GrTextureDomain::MakeTexelDomain(bgSubset, GrTextureDomain::kDecal_Mode), - GrTextureDomain::kDecal_Mode, GrSamplerState::Filter::kNearest); + GrTextureDomain::kDecal_Mode, false); bgFP = GrColorSpaceXformEffect::Make(std::move(bgFP), background->getColorSpace(), background->alphaType(), ctx.colorSpace()); @@ -371,11 +372,13 @@ sk_sp ArithmeticImageFilterImpl::filterImageGPU( SkMatrix foregroundMatrix = SkMatrix::MakeTrans( SkIntToScalar(fgSubset.left() - foregroundOffset.fX), SkIntToScalar(fgSubset.top() - foregroundOffset.fY)); - GrColorType fgColorType = SkColorTypeToGrColorType(foreground->colorType()); - auto foregroundFP = GrTextureDomainEffect::Make( - std::move(foregroundProxy), fgColorType, foregroundMatrix, + auto foregroundFP = + GrSimpleTextureEffect::Make(std::move(foregroundProxy), foreground->alphaType(), + foregroundMatrix, GrSamplerState::Filter::kNearest); + foregroundFP = GrDomainEffect::Make( + std::move(foregroundFP), GrTextureDomain::MakeTexelDomain(fgSubset, GrTextureDomain::kDecal_Mode), - GrTextureDomain::kDecal_Mode, GrSamplerState::Filter::kNearest); + GrTextureDomain::kDecal_Mode, false); foregroundFP = GrColorSpaceXformEffect::Make(std::move(foregroundFP), foreground->getColorSpace(), foreground->alphaType(), diff --git a/third_party/skia/src/effects/imagefilters/SkDisplacementMapEffect.cpp b/third_party/skia/src/effects/imagefilters/SkDisplacementMapEffect.cpp index ede0de438ced..f18072b06ba2 100644 --- a/third_party/skia/src/effects/imagefilters/SkDisplacementMapEffect.cpp +++ b/third_party/skia/src/effects/imagefilters/SkDisplacementMapEffect.cpp @@ -561,7 +561,7 @@ std::unique_ptr GrDisplacementMapEffect::TestCreate(GrProce SkISize colorDimensions; colorDimensions.fWidth = d->fRandom->nextRangeU(0, colorProxy->width()); colorDimensions.fHeight = d->fRandom->nextRangeU(0, colorProxy->height()); - SkIRect dispRect = SkIRect::MakeWH(dispProxy->width(), dispProxy->height()); + SkIRect dispRect = SkIRect::MakeSize(dispProxy->dimensions()); return GrDisplacementMapEffect::Make(xChannelSelector, yChannelSelector, scale, std::move(dispProxy), dispRect, @@ -648,11 +648,11 @@ void GrGLDisplacementMapEffect::emitCode(EmitArgs& args) { void GrGLDisplacementMapEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& proc) { const GrDisplacementMapEffect& displacementMap = proc.cast(); - GrTextureProxy* proxy = displacementMap.textureSampler(1).proxy(); - GrTexture* colorTex = proxy->peekTexture(); + GrSurfaceProxy* proxy = displacementMap.textureSampler(1).proxy(); + SkISize texDimensions = proxy->backingStoreDimensions(); - SkScalar scaleX = displacementMap.scale().fX / colorTex->width(); - SkScalar scaleY = displacementMap.scale().fY / colorTex->height(); + SkScalar scaleX = displacementMap.scale().fX / texDimensions.width(); + SkScalar scaleY = displacementMap.scale().fY / texDimensions.height(); pdman.set2f(fScaleUni, SkScalarToFloat(scaleX), proxy->origin() == kTopLeft_GrSurfaceOrigin ? SkScalarToFloat(scaleY) : SkScalarToFloat(-scaleY)); diff --git a/third_party/skia/src/effects/imagefilters/SkLightingImageFilter.cpp b/third_party/skia/src/effects/imagefilters/SkLightingImageFilter.cpp index 43d32dcc915e..e18e7abd487e 100644 --- a/third_party/skia/src/effects/imagefilters/SkLightingImageFilter.cpp +++ b/third_party/skia/src/effects/imagefilters/SkLightingImageFilter.cpp @@ -1840,11 +1840,11 @@ void GrGLLightingEffect::onSetData(const GrGLSLProgramDataManager& pdman, fLight = lighting.light()->createGLLight(); } - GrTextureProxy* proxy = lighting.textureSampler(0).proxy(); - GrTexture* texture = proxy->peekTexture(); + GrSurfaceProxy* proxy = lighting.textureSampler(0).proxy(); + SkISize textureDims = proxy->backingStoreDimensions(); float ySign = proxy->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f; - pdman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->height()); + pdman.set2f(fImageIncrementUni, 1.0f / textureDims.width(), ySign / textureDims.height()); pdman.set1f(fSurfaceScaleUni, lighting.surfaceScale()); sk_sp transformedLight( lighting.light()->transform(lighting.filterMatrix())); diff --git a/third_party/skia/src/effects/imagefilters/SkMorphologyImageFilter.cpp b/third_party/skia/src/effects/imagefilters/SkMorphologyImageFilter.cpp index 3fa7eb1aec26..b03908901b87 100644 --- a/third_party/skia/src/effects/imagefilters/SkMorphologyImageFilter.cpp +++ b/third_party/skia/src/effects/imagefilters/SkMorphologyImageFilter.cpp @@ -210,20 +210,18 @@ SkIRect SkMorphologyImageFilterImpl::onFilterNodeBounds( class GrMorphologyEffect : public GrFragmentProcessor { public: static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, - MorphDirection dir, + SkAlphaType srcAlphaType, MorphDirection dir, int radius, MorphType type) { return std::unique_ptr( - new GrMorphologyEffect(std::move(proxy), srcColorType, dir, radius, type, nullptr)); + new GrMorphologyEffect(std::move(proxy), srcAlphaType, dir, radius, type, nullptr)); } static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, - MorphDirection dir, + SkAlphaType srcAlphaType, MorphDirection dir, int radius, MorphType type, const float bounds[2]) { return std::unique_ptr( - new GrMorphologyEffect(std::move(proxy), srcColorType, dir, radius, type, bounds)); + new GrMorphologyEffect(std::move(proxy), srcAlphaType, dir, radius, type, bounds)); } MorphType type() const { return fType; } @@ -256,7 +254,7 @@ class GrMorphologyEffect : public GrFragmentProcessor { const TextureSampler& onTextureSampler(int i) const override { return fTextureSampler; } - GrMorphologyEffect(sk_sp, GrColorType srcColorType, MorphDirection, int radius, + GrMorphologyEffect(sk_sp, SkAlphaType srcAlphaType, MorphDirection, int radius, MorphType, const float range[2]); explicit GrMorphologyEffect(const GrMorphologyEffect&); @@ -395,13 +393,12 @@ void GrGLMorphologyEffect::onSetData(const GrGLSLProgramDataManager& pdman, /////////////////////////////////////////////////////////////////////////////// GrMorphologyEffect::GrMorphologyEffect(sk_sp proxy, - GrColorType srcColorType, + SkAlphaType srcAlphaType, MorphDirection direction, int radius, MorphType type, const float range[2]) - : INHERITED(kGrMorphologyEffect_ClassID, - ModulateForClampedSamplerOptFlags(srcColorType)) + : INHERITED(kGrMorphologyEffect_ClassID, ModulateForClampedSamplerOptFlags(srcAlphaType)) , fCoordTransform(proxy.get()) , fTextureSampler(std::move(proxy)) , fDirection(direction) @@ -465,16 +462,16 @@ std::unique_ptr GrMorphologyEffect::TestCreate(GrProcessorT static const int kMaxRadius = 10; int radius = d->fRandom->nextRangeU(1, kMaxRadius); MorphType type = d->fRandom->nextBool() ? MorphType::kErode : MorphType::kDilate; - - return GrMorphologyEffect::Make(std::move(proxy), d->textureProxyColorType(texIdx), dir, radius, - type); + auto alphaType = static_cast( + d->fRandom->nextRangeU(kUnknown_SkAlphaType + 1, kLastEnum_SkAlphaType)); + return GrMorphologyEffect::Make(std::move(proxy), alphaType, dir, radius, type); } #endif static void apply_morphology_rect(GrRenderTargetContext* renderTargetContext, const GrClip& clip, sk_sp proxy, - GrColorType srcColorType, + SkAlphaType srcAlphaType, const SkIRect& srcRect, const SkIRect& dstRect, int radius, @@ -482,9 +479,8 @@ static void apply_morphology_rect(GrRenderTargetContext* renderTargetContext, const float bounds[2], MorphDirection direction) { GrPaint paint; - paint.addColorFragmentProcessor(GrMorphologyEffect::Make(std::move(proxy), srcColorType, - direction, radius, morphType, - bounds)); + paint.addColorFragmentProcessor(GrMorphologyEffect::Make(std::move(proxy), srcAlphaType, + direction, radius, morphType, bounds)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); renderTargetContext->fillRectToRect(clip, std::move(paint), GrAA::kNo, SkMatrix::I(), SkRect::Make(dstRect), SkRect::Make(srcRect)); @@ -493,15 +489,15 @@ static void apply_morphology_rect(GrRenderTargetContext* renderTargetContext, static void apply_morphology_rect_no_bounds(GrRenderTargetContext* renderTargetContext, const GrClip& clip, sk_sp proxy, - GrColorType srcColorType, + SkAlphaType srcAlphaType, const SkIRect& srcRect, const SkIRect& dstRect, int radius, MorphType morphType, MorphDirection direction) { GrPaint paint; - paint.addColorFragmentProcessor(GrMorphologyEffect::Make(std::move(proxy), srcColorType, - direction, radius, morphType)); + paint.addColorFragmentProcessor( + GrMorphologyEffect::Make(std::move(proxy), srcAlphaType, direction, radius, morphType)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); renderTargetContext->fillRectToRect(clip, std::move(paint), GrAA::kNo, SkMatrix::I(), SkRect::Make(dstRect), SkRect::Make(srcRect)); @@ -510,7 +506,7 @@ static void apply_morphology_rect_no_bounds(GrRenderTargetContext* renderTargetC static void apply_morphology_pass(GrRenderTargetContext* renderTargetContext, const GrClip& clip, sk_sp textureProxy, - GrColorType srcColorType, + SkAlphaType srcAlphaType, const SkIRect& srcRect, const SkIRect& dstRect, int radius, @@ -541,16 +537,16 @@ static void apply_morphology_pass(GrRenderTargetContext* renderTargetContext, } if (middleSrcRect.width() <= 0) { // radius covers srcRect; use bounds over entire draw - apply_morphology_rect(renderTargetContext, clip, std::move(textureProxy), srcColorType, + apply_morphology_rect(renderTargetContext, clip, std::move(textureProxy), srcAlphaType, srcRect, dstRect, radius, morphType, bounds, direction); } else { // Draw upper and lower margins with bounds; middle without. - apply_morphology_rect(renderTargetContext, clip, textureProxy, srcColorType, - lowerSrcRect, lowerDstRect, radius, morphType, bounds, direction); - apply_morphology_rect(renderTargetContext, clip, textureProxy, srcColorType, - upperSrcRect, upperDstRect, radius, morphType, bounds, direction); + apply_morphology_rect(renderTargetContext, clip, textureProxy, srcAlphaType, lowerSrcRect, + lowerDstRect, radius, morphType, bounds, direction); + apply_morphology_rect(renderTargetContext, clip, textureProxy, srcAlphaType, upperSrcRect, + upperDstRect, radius, morphType, bounds, direction); apply_morphology_rect_no_bounds(renderTargetContext, clip, std::move(textureProxy), - srcColorType, middleSrcRect, middleDstRect, radius, + srcAlphaType, middleSrcRect, middleDstRect, radius, morphType, direction); } } @@ -559,13 +555,13 @@ static sk_sp apply_morphology( GrRecordingContext* context, SkSpecialImage* input, const SkIRect& rect, MorphType morphType, SkISize radius, const SkImageFilter_Base::Context& ctx) { sk_sp srcTexture(input->asTextureProxyRef(context)); - GrColorType srcColorType = SkColorTypeToGrColorType(input->colorType()); + SkAlphaType srcAlphaType = input->alphaType(); SkASSERT(srcTexture); sk_sp colorSpace = ctx.refColorSpace(); GrColorType colorType = ctx.grColorType(); // setup new clip - const GrFixedClip clip(SkIRect::MakeWH(srcTexture->width(), srcTexture->height())); + const GrFixedClip clip(SkIRect::MakeSize(srcTexture->dimensions())); const SkIRect dstRect = SkIRect::MakeWH(rect.width(), rect.height()); SkIRect srcRect = rect; @@ -590,7 +586,7 @@ static sk_sp apply_morphology( return nullptr; } - apply_morphology_pass(dstRTContext.get(), clip, std::move(srcTexture), srcColorType, + apply_morphology_pass(dstRTContext.get(), clip, std::move(srcTexture), srcAlphaType, srcRect, dstRect, radius.fWidth, morphType, MorphDirection::kX); SkIRect clearRect = SkIRect::MakeXYWH(dstRect.fLeft, dstRect.fBottom, dstRect.width(), radius.fHeight); @@ -599,7 +595,7 @@ static sk_sp apply_morphology( dstRTContext->clear(&clearRect, clearColor, GrRenderTargetContext::CanClearFullscreen::kNo); srcTexture = dstRTContext->asTextureProxyRef(); - srcColorType = colorType; + srcAlphaType = dstRTContext->colorInfo().alphaType(); srcRect = dstRect; } if (radius.fHeight > 0) { @@ -619,7 +615,7 @@ static sk_sp apply_morphology( return nullptr; } - apply_morphology_pass(dstRTContext.get(), clip, std::move(srcTexture), srcColorType, + apply_morphology_pass(dstRTContext.get(), clip, std::move(srcTexture), srcAlphaType, srcRect, dstRect, radius.fHeight, morphType, MorphDirection::kY); srcTexture = dstRTContext->asTextureProxyRef(); @@ -766,7 +762,10 @@ sk_sp SkMorphologyImageFilterImpl::onFilterImage(const Context& int width = SkScalarFloorToInt(radius.width()); int height = SkScalarFloorToInt(radius.height()); - if (width < 0 || height < 0) { + // Width (or height) must fit in a signed 32-bit int to avoid UBSAN issues (crbug.com/1018190) + constexpr int kMaxRadius = (std::numeric_limits::max() - 1) / 2; + + if (width < 0 || height < 0 || width > kMaxRadius || height > kMaxRadius) { return nullptr; } diff --git a/third_party/skia/src/effects/imagefilters/SkXfermodeImageFilter.cpp b/third_party/skia/src/effects/imagefilters/SkXfermodeImageFilter.cpp index 14cf52feeaa1..b0b3d6be50a7 100644 --- a/third_party/skia/src/effects/imagefilters/SkXfermodeImageFilter.cpp +++ b/third_party/skia/src/effects/imagefilters/SkXfermodeImageFilter.cpp @@ -266,11 +266,12 @@ sk_sp SkXfermodeImageFilterImpl::filterImageGPU( SkMatrix bgMatrix = SkMatrix::MakeTrans( SkIntToScalar(bgSubset.left() - backgroundOffset.fX), SkIntToScalar(bgSubset.top() - backgroundOffset.fY)); - GrColorType bgColorType = SkColorTypeToGrColorType(background->colorType()); - bgFP = GrTextureDomainEffect::Make( - std::move(backgroundProxy), bgColorType, bgMatrix, - GrTextureDomain::MakeTexelDomain(bgSubset, GrTextureDomain::kDecal_Mode), - GrTextureDomain::kDecal_Mode, GrSamplerState::Filter::kNearest); + bgFP = GrSimpleTextureEffect::Make(std::move(backgroundProxy), background->alphaType(), + bgMatrix, GrSamplerState::Filter::kNearest); + bgFP = GrDomainEffect::Make( + std::move(bgFP), + GrTextureDomain::MakeTexelDomain(bgSubset, GrTextureDomain::kDecal_Mode), + GrTextureDomain::kDecal_Mode, false); bgFP = GrColorSpaceXformEffect::Make(std::move(bgFP), background->getColorSpace(), background->alphaType(), ctx.colorSpace()); @@ -284,11 +285,13 @@ sk_sp SkXfermodeImageFilterImpl::filterImageGPU( SkMatrix fgMatrix = SkMatrix::MakeTrans( SkIntToScalar(fgSubset.left() - foregroundOffset.fX), SkIntToScalar(fgSubset.top() - foregroundOffset.fY)); - GrColorType fgColorType = SkColorTypeToGrColorType(foreground->colorType()); - auto foregroundFP = GrTextureDomainEffect::Make( - std::move(foregroundProxy), fgColorType, fgMatrix, + auto foregroundFP = + GrSimpleTextureEffect::Make(std::move(foregroundProxy), foreground->alphaType(), + fgMatrix, GrSamplerState::Filter::kNearest); + foregroundFP = GrDomainEffect::Make( + std::move(foregroundFP), GrTextureDomain::MakeTexelDomain(fgSubset, GrTextureDomain::kDecal_Mode), - GrTextureDomain::kDecal_Mode, GrSamplerState::Filter::kNearest); + GrTextureDomain::kDecal_Mode, false); foregroundFP = GrColorSpaceXformEffect::Make(std::move(foregroundFP), foreground->getColorSpace(), foreground->alphaType(), diff --git a/third_party/skia/src/gpu/GrAHardwareBufferImageGenerator.cpp b/third_party/skia/src/gpu/GrAHardwareBufferImageGenerator.cpp index 34b9c07717df..dd97f03324d7 100644 --- a/third_party/skia/src/gpu/GrAHardwareBufferImageGenerator.cpp +++ b/third_party/skia/src/gpu/GrAHardwareBufferImageGenerator.cpp @@ -214,9 +214,8 @@ sk_sp GrAHardwareBufferImageGenerator::onGenerateTexture( GrMipMapped mipMapped = willNeedMipMaps ? GrMipMapped::kYes : GrMipMapped::kNo; - GrColorType grColorType = SkColorTypeToGrColorType(this->getInfo().colorType()); - return GrSurfaceProxy::Copy(context, texProxy.get(), grColorType, mipMapped, subset, - SkBackingFit::kExact, SkBudgeted::kYes); + return GrSurfaceProxy::Copy(context, texProxy.get(), mipMapped, subset, SkBackingFit::kExact, + SkBudgeted::kYes); } bool GrAHardwareBufferImageGenerator::onIsValid(GrContext* context) const { diff --git a/third_party/skia/src/gpu/GrBackendSurface.cpp b/third_party/skia/src/gpu/GrBackendSurface.cpp index fa95520811d5..1b1d1f27a190 100644 --- a/third_party/skia/src/gpu/GrBackendSurface.cpp +++ b/third_party/skia/src/gpu/GrBackendSurface.cpp @@ -62,6 +62,7 @@ GrBackendFormat::GrBackendFormat(const GrBackendFormat& that) } } +#ifdef SK_GL GrBackendFormat::GrBackendFormat(GrGLenum format, GrGLenum target) : fBackend(GrBackendApi::kOpenGL) , fValid(true) @@ -90,6 +91,7 @@ GrGLFormat GrBackendFormat::asGLFormat() const { } return GrGLFormat::kUnknown; } +#endif GrBackendFormat GrBackendFormat::MakeVk(const GrVkYcbcrConversionInfo& ycbcrInfo) { SkASSERT(ycbcrInfo.isValid()); @@ -128,14 +130,14 @@ const GrVkYcbcrConversionInfo* GrBackendFormat::getVkYcbcrConversionInfo() const } #ifdef SK_DAWN -GrBackendFormat::GrBackendFormat(dawn::TextureFormat format) +GrBackendFormat::GrBackendFormat(wgpu::TextureFormat format) : fBackend(GrBackendApi::kDawn) , fValid(true) , fDawnFormat(format) , fTextureType(GrTextureType::k2D) { } -bool GrBackendFormat::asDawnFormat(dawn::TextureFormat* format) const { +bool GrBackendFormat::asDawnFormat(wgpu::TextureFormat* format) const { SkASSERT(format); if (this->isValid() && GrBackendApi::kDawn == fBackend) { *format = fDawnFormat; @@ -202,24 +204,27 @@ bool GrBackendFormat::operator==(const GrBackendFormat& that) const { } switch (fBackend) { +#ifdef SK_GL case GrBackendApi::kOpenGL: return fGLFormat == that.fGLFormat; - case GrBackendApi::kVulkan: + break; +#endif #ifdef SK_VULKAN + case GrBackendApi::kVulkan: return fVk.fFormat == that.fVk.fFormat && fVk.fYcbcrConversionInfo == that.fVk.fYcbcrConversionInfo; -#endif break; +#endif #ifdef SK_METAL case GrBackendApi::kMetal: return fMtlFormat == that.fMtlFormat; -#endif break; - case GrBackendApi::kDawn: +#endif #ifdef SK_DAWN + case GrBackendApi::kDawn: return fDawnFormat == that.fDawnFormat; -#endif break; +#endif case GrBackendApi::kMock: return fMockColorType == that.fMockColorType; default: @@ -347,6 +352,7 @@ GrBackendTexture::GrBackendTexture(int width, , fMtlInfo(mtlInfo) {} #endif +#ifdef SK_GL GrBackendTexture::GrBackendTexture(int width, int height, GrMipMapped mipMapped, @@ -355,6 +361,7 @@ GrBackendTexture::GrBackendTexture(int width, // Make no assumptions about client's texture's parameters. this->glTextureParametersModified(); } +#endif GrBackendTexture::GrBackendTexture(int width, int height, @@ -691,6 +698,7 @@ GrBackendRenderTarget::GrBackendRenderTarget(int width, , fMtlInfo(mtlInfo) {} #endif +#ifdef SK_GL GrBackendRenderTarget::GrBackendRenderTarget(int width, int height, int sampleCnt, @@ -704,6 +712,7 @@ GrBackendRenderTarget::GrBackendRenderTarget(int width, , fGLInfo(glInfo) { fIsValid = SkToBool(glInfo.fFormat); // the glInfo must have a valid format } +#endif GrBackendRenderTarget::GrBackendRenderTarget(int width, int height, @@ -749,14 +758,16 @@ GrBackendRenderTarget& GrBackendRenderTarget::operator=(const GrBackendRenderTar fBackend = that.fBackend; switch (that.fBackend) { +#ifdef SK_GL case GrBackendApi::kOpenGL: fGLInfo = that.fGLInfo; break; - case GrBackendApi::kVulkan: +#endif #ifdef SK_VULKAN + case GrBackendApi::kVulkan: fVkInfo.assign(that.fVkInfo, this->isValid()); -#endif break; +#endif #ifdef SK_DAWN case GrBackendApi::kDawn: fDawnInfo = that.fDawnInfo; @@ -824,6 +835,7 @@ bool GrBackendRenderTarget::getMtlTextureInfo(GrMtlTextureInfo* outInfo) const { } #endif +#ifdef SK_GL bool GrBackendRenderTarget::getGLFramebufferInfo(GrGLFramebufferInfo* outInfo) const { if (this->isValid() && GrBackendApi::kOpenGL == fBackend) { *outInfo = fGLInfo; @@ -831,6 +843,7 @@ bool GrBackendRenderTarget::getGLFramebufferInfo(GrGLFramebufferInfo* outInfo) c } return false; } +#endif GrBackendFormat GrBackendRenderTarget::getBackendFormat() const { if (!this->isValid()) { diff --git a/third_party/skia/src/gpu/GrBackendTextureImageGenerator.cpp b/third_party/skia/src/gpu/GrBackendTextureImageGenerator.cpp index bd4cacb5296c..5ab6e6cbf443 100644 --- a/third_party/skia/src/gpu/GrBackendTextureImageGenerator.cpp +++ b/third_party/skia/src/gpu/GrBackendTextureImageGenerator.cpp @@ -24,11 +24,13 @@ #include "src/gpu/SkGr.h" #include "src/gpu/gl/GrGLTexture.h" -GrBackendTextureImageGenerator::RefHelper::RefHelper(GrTexture* texture, uint32_t owningContextID) +GrBackendTextureImageGenerator::RefHelper::RefHelper(GrTexture* texture, uint32_t owningContextID, + std::unique_ptr semaphore) : fOriginalTexture(texture) , fOwningContextID(owningContextID) , fBorrowingContextReleaseProc(nullptr) - , fBorrowingContextID(SK_InvalidGenID) {} + , fBorrowingContextID(SK_InvalidGenID) + , fSemaphore(std::move(semaphore)) {} GrBackendTextureImageGenerator::RefHelper::~RefHelper() { SkASSERT(fBorrowingContextID == SK_InvalidUniqueID); @@ -41,7 +43,7 @@ GrBackendTextureImageGenerator::RefHelper::~RefHelper() { std::unique_ptr GrBackendTextureImageGenerator::Make(sk_sp texture, GrSurfaceOrigin origin, - sk_sp semaphore, SkColorType colorType, + std::unique_ptr semaphore, SkColorType colorType, SkAlphaType alphaType, sk_sp colorSpace) { GrContext* context = texture->getContext(); @@ -64,15 +66,15 @@ GrBackendTextureImageGenerator::Make(sk_sp texture, GrSurfaceOrigin o std::move(semaphore), backendTexture)); } -GrBackendTextureImageGenerator::GrBackendTextureImageGenerator(const SkImageInfo& info, - GrTexture* texture, - GrSurfaceOrigin origin, - uint32_t owningContextID, - sk_sp semaphore, - const GrBackendTexture& backendTex) +GrBackendTextureImageGenerator::GrBackendTextureImageGenerator( + const SkImageInfo& info, + GrTexture* texture, + GrSurfaceOrigin origin, + uint32_t owningContextID, + std::unique_ptr semaphore, + const GrBackendTexture& backendTex) : INHERITED(info) - , fRefHelper(new RefHelper(texture, owningContextID)) - , fSemaphore(std::move(semaphore)) + , fRefHelper(new RefHelper(texture, owningContextID, std::move(semaphore))) , fBackendTexture(backendTex) , fSurfaceOrigin(origin) {} @@ -111,6 +113,7 @@ sk_sp GrBackendTextureImageGenerator::onGenerateTexture( if (SK_InvalidGenID != fRefHelper->fBorrowingContextID) { if (fRefHelper->fBorrowingContextID != context->priv().contextID()) { fBorrowingMutex.release(); + SkDebugf("GrBackendTextureImageGenerator: Trying to use texture on two GrContexts!\n"); return nullptr; } else { SkASSERT(fRefHelper->fBorrowingContextReleaseProc); @@ -160,11 +163,11 @@ sk_sp GrBackendTextureImageGenerator::onGenerateTexture( // Must make copies of member variables to capture in the lambda since this image generator may // be deleted before we actually execute the lambda. sk_sp proxy = proxyProvider->createLazyProxy( - [refHelper = fRefHelper, releaseProcHelper, semaphore = fSemaphore, - backendTexture = fBackendTexture, grColorType]( + [refHelper = fRefHelper, releaseProcHelper, backendTexture = fBackendTexture, + grColorType]( GrResourceProvider* resourceProvider) -> GrSurfaceProxy::LazyCallbackResult { - if (semaphore) { - resourceProvider->priv().gpu()->waitSemaphore(semaphore); + if (refHelper->fSemaphore) { + resourceProvider->priv().gpu()->waitSemaphore(refHelper->fSemaphore.get()); } // If a client re-draws the same image multiple times, the texture we return @@ -218,7 +221,7 @@ sk_sp GrBackendTextureImageGenerator::onGenerateTexture( GrMipMapped mipMapped = willNeedMipMaps ? GrMipMapped::kYes : GrMipMapped::kNo; SkIRect subset = SkIRect::MakeXYWH(origin.fX, origin.fY, info.width(), info.height()); - return GrSurfaceProxy::Copy(context, proxy.get(), grColorType, mipMapped, subset, - SkBackingFit::kExact, SkBudgeted::kYes); + return GrSurfaceProxy::Copy(context, proxy.get(), mipMapped, subset, SkBackingFit::kExact, + SkBudgeted::kYes); } } diff --git a/third_party/skia/src/gpu/GrBackendTextureImageGenerator.h b/third_party/skia/src/gpu/GrBackendTextureImageGenerator.h index 8a82c5c88b63..887ff21bcf20 100644 --- a/third_party/skia/src/gpu/GrBackendTextureImageGenerator.h +++ b/third_party/skia/src/gpu/GrBackendTextureImageGenerator.h @@ -29,7 +29,7 @@ class GrSemaphore; class GrBackendTextureImageGenerator : public SkImageGenerator { public: static std::unique_ptr Make(sk_sp, GrSurfaceOrigin, - sk_sp, SkColorType, + std::unique_ptr, SkColorType, SkAlphaType, sk_sp); ~GrBackendTextureImageGenerator() override; @@ -45,42 +45,42 @@ class GrBackendTextureImageGenerator : public SkImageGenerator { private: GrBackendTextureImageGenerator(const SkImageInfo& info, GrTexture*, GrSurfaceOrigin, - uint32_t owningContextID, sk_sp, + uint32_t owningContextID, std::unique_ptr, const GrBackendTexture&); static void ReleaseRefHelper_TextureReleaseProc(void* ctx); class RefHelper : public SkNVRefCnt { public: - RefHelper(GrTexture*, uint32_t owningContextID); + RefHelper(GrTexture*, uint32_t owningContextID, std::unique_ptr); ~RefHelper(); - GrTexture* fOriginalTexture; - uint32_t fOwningContextID; + GrTexture* fOriginalTexture; + uint32_t fOwningContextID; // We use this key so that we don't rewrap the GrBackendTexture in a GrTexture for each // proxy created from this generator for a particular borrowing context. - GrUniqueKey fBorrowedTextureKey; + GrUniqueKey fBorrowedTextureKey; // There is no ref associated with this pointer. We rely on our atomic bookkeeping with the // context ID to know when this pointer is valid and safe to use. This is used to make sure // all uses of the wrapped texture are finished on the borrowing context before we open // this back up to other contexts. In general a ref to this release proc is owned by all // proxies and gpu uses of the backend texture. - GrRefCntedCallback* fBorrowingContextReleaseProc; - uint32_t fBorrowingContextID; + GrRefCntedCallback* fBorrowingContextReleaseProc; + uint32_t fBorrowingContextID; + + std::unique_ptr fSemaphore; }; - RefHelper* fRefHelper; + RefHelper* fRefHelper; // This Mutex is used to guard the borrowing of the texture to one GrContext at a time as well // as the creation of the fBorrowingContextReleaseProc. The latter happening if two threads with // the same consuming GrContext try to generate a texture at the same time. - SkMutex fBorrowingMutex; - - sk_sp fSemaphore; + SkMutex fBorrowingMutex; - GrBackendTexture fBackendTexture; - GrSurfaceOrigin fSurfaceOrigin; + GrBackendTexture fBackendTexture; + GrSurfaceOrigin fSurfaceOrigin; typedef SkImageGenerator INHERITED; }; diff --git a/third_party/skia/src/gpu/GrBitmapTextureMaker.cpp b/third_party/skia/src/gpu/GrBitmapTextureMaker.cpp index 4ec2b537bb5d..c2fcce9df7e0 100644 --- a/third_party/skia/src/gpu/GrBitmapTextureMaker.cpp +++ b/third_party/skia/src/gpu/GrBitmapTextureMaker.cpp @@ -19,8 +19,7 @@ GrBitmapTextureMaker::GrBitmapTextureMaker(GrRecordingContext* context, const SkBitmap& bitmap, bool useDecal) - : INHERITED(context, bitmap.width(), bitmap.height(), bitmap.info().colorInfo(), useDecal) - , fBitmap(bitmap) { + : INHERITED(context, bitmap.info(), useDecal), fBitmap(bitmap) { if (!bitmap.isVolatile()) { SkIPoint origin = bitmap.pixelRefOrigin(); SkIRect subset = SkIRect::MakeXYWH(origin.fX, origin.fY, bitmap.width(), diff --git a/third_party/skia/src/gpu/GrBlurUtils.cpp b/third_party/skia/src/gpu/GrBlurUtils.cpp index 7c922cbdca1a..e3f92606310c 100644 --- a/third_party/skia/src/gpu/GrBlurUtils.cpp +++ b/third_party/skia/src/gpu/GrBlurUtils.cpp @@ -38,8 +38,7 @@ static bool draw_mask(GrRenderTargetContext* renderTargetContext, const SkMatrix& viewMatrix, const SkIRect& maskRect, GrPaint&& paint, - sk_sp mask, - GrColorType maskColorType) { + sk_sp mask) { SkMatrix inverse; if (!viewMatrix.invert(&inverse)) { return false; @@ -48,8 +47,8 @@ static bool draw_mask(GrRenderTargetContext* renderTargetContext, SkMatrix matrix = SkMatrix::MakeTrans(-SkIntToScalar(maskRect.fLeft), -SkIntToScalar(maskRect.fTop)); matrix.preConcat(viewMatrix); - paint.addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(std::move(mask), maskColorType, - matrix)); + paint.addCoverageFragmentProcessor( + GrSimpleTextureEffect::Make(std::move(mask), kUnknown_SkAlphaType, matrix)); renderTargetContext->fillRectWithLocalMatrix(clip, std::move(paint), GrAA::kNo, SkMatrix::I(), SkRect::Make(maskRect), inverse); @@ -166,8 +165,8 @@ static bool sw_draw_with_mask_filter(GrRecordingContext* context, } } - return draw_mask(renderTargetContext, clipData, viewMatrix, drawRect, - std::move(paint), std::move(filteredMask), GrColorType::kAlpha_8); + return draw_mask(renderTargetContext, clipData, viewMatrix, drawRect, std::move(paint), + std::move(filteredMask)); } // Create a mask of 'shape' and return the resulting renderTargetContext @@ -185,10 +184,10 @@ static std::unique_ptr create_mask_GPU(GrRecordingContext // event that MakeApprox does not change the size, reads outside the right and/or bottom will do // the same. We should offset our filter within the render target and expand the size as needed // to guarantee at least 1px of padding on all sides. + auto approxSize = GrResourceProvider::MakeApprox(maskRect.size()); auto rtContext = context->priv().makeDeferredRenderTargetContextWithFallback( - SkBackingFit::kExact, GrResourceProvider::MakeApprox(maskRect.width()), - GrResourceProvider::MakeApprox(maskRect.height()), GrColorType::kAlpha_8, nullptr, - sampleCnt, GrMipMapped::kNo, kTopLeft_GrSurfaceOrigin); + SkBackingFit::kExact, approxSize.width(), approxSize.height(), GrColorType::kAlpha_8, + nullptr, sampleCnt, GrMipMapped::kNo, kTopLeft_GrSurfaceOrigin); if (!rtContext) { return nullptr; } @@ -426,9 +425,8 @@ static void draw_shape_with_mask_filter(GrRecordingContext* context, } if (filteredMask) { - if (draw_mask(renderTargetContext, clip, viewMatrix, - maskRect, std::move(paint), std::move(filteredMask), - GrColorType::kAlpha_8)) { + if (draw_mask(renderTargetContext, clip, viewMatrix, maskRect, std::move(paint), + std::move(filteredMask))) { // This path is completely drawn return; } diff --git a/third_party/skia/src/gpu/GrCaps.cpp b/third_party/skia/src/gpu/GrCaps.cpp index 0b93e58a5977..48dc58c459e4 100644 --- a/third_party/skia/src/gpu/GrCaps.cpp +++ b/third_party/skia/src/gpu/GrCaps.cpp @@ -40,6 +40,7 @@ GrCaps::GrCaps(const GrContextOptions& options) { fDynamicStateArrayGeometryProcessorTextureSupport = false; fPerformPartialClearsAsDraws = false; fPerformColorClearsAsDraws = false; + fAvoidLargeIndexBufferDraws = false; fPerformStencilClearsAsDraws = false; fAllowCoverageCounting = false; fTransferBufferSupport = false; @@ -80,7 +81,19 @@ GrCaps::GrCaps(const GrContextOptions& options) { fDriverBugWorkarounds = options.fDriverBugWorkarounds; } +void GrCaps::finishInitialization(const GrContextOptions& options) { + if (fMixedSamplesSupport) { + // We need multisample disable and dual source blending in order to support mixed samples. + fMixedSamplesSupport = this->multisampleDisableSupport() && + this->shaderCaps()->dualSourceBlendingSupport(); + } + + // Overrides happen last. + this->applyOptionsOverrides(options); +} + void GrCaps::applyOptionsOverrides(const GrContextOptions& options) { + fShaderCaps->applyOptionsOverrides(options); this->onApplyOptionsOverrides(options); if (options.fDisableDriverCorrectnessWorkarounds) { SkASSERT(!fDriverBlacklistCCPR); @@ -109,8 +122,10 @@ void GrCaps::applyOptionsOverrides(const GrContextOptions& options) { if (options.fMaxTileSizeOverride && options.fMaxTileSizeOverride < fMaxTextureSize) { fMaxTileSize = options.fMaxTileSizeOverride; } - if (options.fSuppressGeometryShaders) { - fShaderCaps->fGeometryShaderSupport = false; + if (options.fSuppressDualSourceBlending) { + // GrShaderCaps::applyOptionsOverrides already handled the rest; here we just need to make + // sure mixed samples gets disabled if dual source blending is suppressed. + fMixedSamplesSupport = false; } if (options.fClearAllTextures) { fShouldInitializeTextures = true; @@ -189,6 +204,7 @@ void GrCaps::dumpJSON(SkJSONWriter* writer) const { fDynamicStateArrayGeometryProcessorTextureSupport); writer->appendBool("Use draws for partial clears", fPerformPartialClearsAsDraws); writer->appendBool("Use draws for color clears", fPerformColorClearsAsDraws); + writer->appendBool("Avoid Large IndexBuffer Draws", fAvoidLargeIndexBufferDraws); writer->appendBool("Use draws for stencil clip clears", fPerformStencilClearsAsDraws); writer->appendBool("Allow coverage counting shortcuts", fAllowCoverageCounting); writer->appendBool("Supports transfer buffers", fTransferBufferSupport); @@ -263,7 +279,7 @@ bool GrCaps::canCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src return this->onCanCopySurface(dst, src, srcRect, dstPoint); } -bool GrCaps::validateSurfaceParams(const SkISize& size, const GrBackendFormat& format, +bool GrCaps::validateSurfaceParams(const SkISize& dimensions, const GrBackendFormat& format, GrPixelConfig config, GrRenderable renderable, int renderTargetSampleCnt, GrMipMapped mipped) const { if (!this->isFormatTexturable(format)) { @@ -274,7 +290,7 @@ bool GrCaps::validateSurfaceParams(const SkISize& size, const GrBackendFormat& f return false; } - if (size.width() < 1 || size.height() < 1) { + if (dimensions.width() < 1 || dimensions.height() < 1) { return false; } @@ -283,7 +299,7 @@ bool GrCaps::validateSurfaceParams(const SkISize& size, const GrBackendFormat& f return false; } int maxRTSize = this->maxRenderTargetSize(); - if (size.width() > maxRTSize || size.height() > maxRTSize) { + if (dimensions.width() > maxRTSize || dimensions.height() > maxRTSize) { return false; } } else { @@ -292,7 +308,7 @@ bool GrCaps::validateSurfaceParams(const SkISize& size, const GrBackendFormat& f return false; } int maxSize = this->maxTextureSize(); - if (size.width() > maxSize || size.height() > maxSize) { + if (dimensions.width() > maxSize || dimensions.height() > maxSize) { return false; } } diff --git a/third_party/skia/src/gpu/GrCaps.h b/third_party/skia/src/gpu/GrCaps.h index 27f0ec48479a..3c5501d5c3fa 100644 --- a/third_party/skia/src/gpu/GrCaps.h +++ b/third_party/skia/src/gpu/GrCaps.h @@ -21,7 +21,11 @@ class GrBackendFormat; class GrBackendRenderTarget; class GrBackendTexture; struct GrContextOptions; +class GrProcessorKeyBuilder; +class GrProgramDesc; +class GrProgramInfo; class GrRenderTargetProxy; +class GrSamplerState; class GrSurface; class SkJSONWriter; @@ -330,6 +334,8 @@ class GrCaps : public SkRefCnt { // Many drivers have issues with color clears. bool performColorClearsAsDraws() const { return fPerformColorClearsAsDraws; } + bool avoidLargeIndexBufferDraws() const { return fAvoidLargeIndexBufferDraws; } + /// Adreno 4xx devices experience an issue when there are a large number of stencil clip bit /// clears. The minimal repro steps are not precisely known but drawing a rect with a stencil /// op instead of using glClear seems to resolve the issue. @@ -430,6 +436,17 @@ class GrCaps : public SkRefCnt { return result; } + /** + * Adds fields to the key to represent the sampler that will be created for the passed + * in parameters. Currently this extra keying is only needed when building a vulkan pipeline + * with immutable samplers. + */ + virtual void addExtraSamplerKey(GrProcessorKeyBuilder*, + const GrSamplerState&, + const GrBackendFormat&) const {} + + virtual GrProgramDesc makeDesc(const GrRenderTarget*, const GrProgramInfo&) const = 0; + #ifdef SK_DEBUG // This is just a debugging entry point until we're weaned off of GrPixelConfig. It // should be used to verify that the pixel config from user-level code (the genericConfig) @@ -447,10 +464,10 @@ class GrCaps : public SkRefCnt { #endif protected: - /** Subclasses must call this at the end of their constructors in order to apply caps - overrides requested by the client. Note that overrides will only reduce the caps never - expand them. */ - void applyOptionsOverrides(const GrContextOptions& options); + // Subclasses must call this at the end of their init method in order to do final processing on + // the caps (including overrides requested by the client). + // NOTE: this method will only reduce the caps, never expand them. + void finishInitialization(const GrContextOptions& options); sk_sp fShaderCaps; @@ -476,6 +493,7 @@ class GrCaps : public SkRefCnt { bool fClampToBorderSupport : 1; bool fPerformPartialClearsAsDraws : 1; bool fPerformColorClearsAsDraws : 1; + bool fAvoidLargeIndexBufferDraws : 1; bool fPerformStencilClearsAsDraws : 1; bool fAllowCoverageCounting : 1; bool fTransferBufferSupport : 1; @@ -521,6 +539,8 @@ class GrCaps : public SkRefCnt { GrDriverBugWorkarounds fDriverBugWorkarounds; private: + void applyOptionsOverrides(const GrContextOptions& options); + virtual void onApplyOptionsOverrides(const GrContextOptions&) {} virtual void onDumpJSON(SkJSONWriter*) const {} virtual bool onSurfaceSupportsWritePixels(const GrSurface*) const = 0; diff --git a/third_party/skia/src/gpu/GrColor.h b/third_party/skia/src/gpu/GrColor.h index 39e7bfa7bf19..26f0937ec6c7 100644 --- a/third_party/skia/src/gpu/GrColor.h +++ b/third_party/skia/src/gpu/GrColor.h @@ -95,18 +95,18 @@ class GrVertexColor { explicit GrVertexColor(const SkPMColor4f& color, bool wideColor) : fWideColor(wideColor) { if (wideColor) { - SkFloatToHalf_finite_ftz(Sk4f::Load(color.vec())).store(&fColor); + memcpy(fColor, color.vec(), sizeof(fColor)); } else { fColor[0] = color.toBytes_RGBA(); } } - size_t size() const { return fWideColor ? 8 : 4; } + size_t size() const { return fWideColor ? 16 : 4; } private: friend struct GrVertexWriter; - uint32_t fColor[2]; + uint32_t fColor[4]; bool fWideColor; }; diff --git a/third_party/skia/src/gpu/GrContext.cpp b/third_party/skia/src/gpu/GrContext.cpp index d9f37f0d4b3a..205a1986b860 100644 --- a/third_party/skia/src/gpu/GrContext.cpp +++ b/third_party/skia/src/gpu/GrContext.cpp @@ -12,6 +12,7 @@ #include "include/private/SkDeferredDisplayList.h" #include "include/private/SkImageInfoPriv.h" #include "src/core/SkMakeUnique.h" +#include "src/core/SkMipMap.h" #include "src/core/SkTaskGroup.h" #include "src/gpu/GrClientMappedBufferManager.h" #include "src/gpu/GrContextPriv.h" @@ -256,7 +257,7 @@ size_t GrContext::ComputeImageSize(sk_sp image, GrMipMapped mipMapped, const GrCaps& caps = *gpuImage->context()->priv().caps(); int colorSamplesPerPixel = 1; - return GrSurface::ComputeSize(caps, proxy->backendFormat(), image->width(), image->height(), + return GrSurface::ComputeSize(caps, proxy->backendFormat(), image->dimensions(), colorSamplesPerPixel, mipMapped, useNextPow2); } @@ -287,10 +288,10 @@ bool GrContext::wait(int numSemaphores, const GrBackendSemaphore waitSemaphores[ return false; } for (int i = 0; i < numSemaphores; ++i) { - sk_sp sema = fResourceProvider->wrapBackendSemaphore( + std::unique_ptr sema = fResourceProvider->wrapBackendSemaphore( waitSemaphores[i], GrResourceProvider::SemaphoreWrapType::kWillWait, kAdopt_GrWrapOwnership); - fGpu->waitSemaphore(std::move(sema)); + fGpu->waitSemaphore(sema.get()); } return true; } @@ -380,9 +381,13 @@ GrBackendTexture GrContext::createBackendTexture(int width, int height, return GrBackendTexture(); } - return fGpu->createBackendTexture(width, height, backendFormat, - mipMapped, renderable, - nullptr, 0, nullptr, isProtected); + int numMipLevels = 1; + if (mipMapped == GrMipMapped::kYes) { + numMipLevels = SkMipMap::ComputeLevelCount(width, height) + 1; + } + + return fGpu->createBackendTexture({width, height}, backendFormat, renderable, nullptr, + numMipLevels, isProtected); } GrBackendTexture GrContext::createBackendTexture(int width, int height, @@ -481,9 +486,13 @@ GrBackendTexture GrContext::createBackendTexture(int width, int height, return GrBackendTexture(); } - return fGpu->createBackendTexture(width, height, backendFormat, - mipMapped, renderable, - nullptr, 0, &color, isProtected); + int numMipLevels = 1; + if (mipMapped == GrMipMapped::kYes) { + numMipLevels = SkMipMap::ComputeLevelCount(width, height) + 1; + } + GrGpu::BackendTextureData data(color); + return fGpu->createBackendTexture({width, height}, backendFormat, renderable, &data, + numMipLevels, isProtected); } GrBackendTexture GrContext::createBackendTexture(int width, int height, @@ -534,9 +543,9 @@ GrBackendTexture GrContext::createBackendTexture(const SkPixmap srcData[], int n GrBackendFormat backendFormat = this->defaultBackendFormat(colorType, renderable); - return fGpu->createBackendTexture(baseWidth, baseHeight, backendFormat, - numLevels > 1 ? GrMipMapped::kYes : GrMipMapped::kNo, - renderable, srcData, numLevels, nullptr, isProtected); + GrGpu::BackendTextureData data(srcData); + return fGpu->createBackendTexture({baseWidth, baseHeight}, backendFormat, renderable, &data, + numLevels, isProtected); } void GrContext::deleteBackendTexture(GrBackendTexture backendTex) { diff --git a/third_party/skia/src/gpu/GrCoordTransform.h b/third_party/skia/src/gpu/GrCoordTransform.h index 2451363d3803..ba85fb1edea7 100644 --- a/third_party/skia/src/gpu/GrCoordTransform.h +++ b/third_party/skia/src/gpu/GrCoordTransform.h @@ -20,121 +20,70 @@ class GrTexture; */ class GrCoordTransform { public: - GrCoordTransform() - : fProxy(nullptr) - , fNormalize(false) - , fReverseY(false) - , fComputeInVertexShader(true) { - SkDEBUGCODE(fInProcessor = false); - } + GrCoordTransform() = default; GrCoordTransform(const GrCoordTransform&) = default; /** - * Create a transformation that maps [0, 1] to a proxy's boundaries. The proxy origin also - * implies whether a y-reversal should be performed. + * Create a transformation that maps [0, proxy->width()] x [0, proxy->height()] to a proxy's + * extent. */ - GrCoordTransform(GrTextureProxy* proxy) { - SkASSERT(proxy); - SkDEBUGCODE(fInProcessor = false); - this->reset(SkMatrix::I(), proxy); - } + GrCoordTransform(GrSurfaceProxy* proxy) : fProxy(proxy) {} /** * Create a transformation from a matrix. The proxy origin also implies whether a y-reversal * should be performed. */ - GrCoordTransform(const SkMatrix& m, GrTextureProxy* proxy) { + GrCoordTransform(const SkMatrix& m, GrSurfaceProxy* proxy) : fProxy(proxy), fMatrix(m) { SkASSERT(proxy); - SkDEBUGCODE(fInProcessor = false); - this->reset(m, proxy); } /** * Create a transformation that applies the matrix to a coord set. */ - GrCoordTransform(const SkMatrix& m) { - SkDEBUGCODE(fInProcessor = false); - this->reset(m); - } + GrCoordTransform(const SkMatrix& m) : fMatrix(m) {} - GrCoordTransform& operator= (const GrCoordTransform& that) { - SkASSERT(!fInProcessor); - fMatrix = that.fMatrix; - fProxy = that.fProxy; - fNormalize = that.fNormalize; - fReverseY = that.fReverseY; - return *this; - } + GrCoordTransform& operator=(const GrCoordTransform& that) = default; - /** - * Access the matrix for editing. Note, this must be done before adding the transform to an - * effect, since effects are immutable. - */ - SkMatrix* accessMatrix() { - SkASSERT(!fInProcessor); - return &fMatrix; - } + // 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 hasSameEffectAs(const GrCoordTransform& that) const { - if (fNormalize != that.fNormalize || - fReverseY != that.fReverseY || - !fMatrix.cheapEqualTo(that.fMatrix)) { + bool hasSameEffectiveMatrix(const GrCoordTransform& that) const { + // This is slightly more conservative than computing each transforms effective matrix and + // then comparing them. + if (!fMatrix.cheapEqualTo(that.fMatrix)) { return false; } - - if (fNormalize) { - if (fProxy->underlyingUniqueID() != that.fProxy->underlyingUniqueID()) { - 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& getMatrix() const { return fMatrix; } - const GrTextureProxy* proxy() const { return fProxy; } - bool normalize() const { return fNormalize; } - bool reverseY() const { return fReverseY; } + 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 && fProxy->origin() == 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(); } - bool computeInVertexShader() const { return fComputeInVertexShader; } - - void setComputeInVertexShader(bool computeInVertexShader) { - fComputeInVertexShader = computeInVertexShader; - } - private: - void reset(const SkMatrix& m, GrTextureProxy* proxy = nullptr) { - SkASSERT(!fInProcessor); - - fMatrix = m; - fProxy = proxy; - fNormalize = proxy && proxy->textureType() != GrTextureType::kRectangle; - fReverseY = proxy && kBottomLeft_GrSurfaceOrigin == proxy->origin(); - fComputeInVertexShader = true; - } - - // The textures' effect is to optionally normalize the final matrix, so a blind - // equality check could be misleading - bool operator==(const GrCoordTransform& that) const; - bool operator!=(const GrCoordTransform& that) const; - - SkMatrix fMatrix; - const GrTextureProxy* fProxy; - bool fNormalize; - bool fReverseY; - bool fComputeInVertexShader; - -#ifdef SK_DEBUG -public: - void setInProcessor() const { fInProcessor = true; } -private: - mutable bool fInProcessor; -#endif + const GrSurfaceProxy* fProxy = nullptr; + SkMatrix fMatrix = SkMatrix::I(); }; #endif diff --git a/third_party/skia/src/gpu/GrCopyRenderTask.cpp b/third_party/skia/src/gpu/GrCopyRenderTask.cpp index 23e8086d3f04..39fa454fd445 100644 --- a/third_party/skia/src/gpu/GrCopyRenderTask.cpp +++ b/third_party/skia/src/gpu/GrCopyRenderTask.cpp @@ -11,17 +11,19 @@ #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrResourceAllocator.h" -sk_sp GrCopyRenderTask::Make(sk_sp srcProxy, +sk_sp GrCopyRenderTask::Make(GrSurfaceProxyView srcView, const SkIRect& srcRect, - sk_sp dstProxy, + GrSurfaceProxyView dstView, const SkIPoint& dstPoint, const GrCaps* caps) { - SkASSERT(dstProxy); - SkASSERT(srcProxy); + SkASSERT(dstView.proxy()); + SkASSERT(srcView.proxy()); SkIRect clippedSrcRect; SkIPoint clippedDstPoint; + GrSurfaceProxy* srcProxy = srcView.proxy(); + GrSurfaceProxy* dstProxy = dstView.proxy(); // If the rect is outside the srcProxy or dstProxy then we've already succeeded. - if (!GrClipSrcRectAndDstPoint(dstProxy->isize(), srcProxy->isize(), srcRect, dstPoint, + if (!GrClipSrcRectAndDstPoint(dstProxy->dimensions(), srcProxy->dimensions(), srcRect, dstPoint, &clippedSrcRect, &clippedDstPoint)) { return nullptr; } @@ -30,8 +32,8 @@ sk_sp GrCopyRenderTask::Make(sk_sp srcProxy, return nullptr; } - SkASSERT(dstProxy->origin() == srcProxy->origin()); - if (srcProxy->origin() == kBottomLeft_GrSurfaceOrigin) { + SkASSERT(dstView.origin() == srcView.origin()); + if (srcView.origin() == kBottomLeft_GrSurfaceOrigin) { int rectHeight = clippedSrcRect.height(); clippedSrcRect.fTop = srcProxy->height() - clippedSrcRect.fBottom; clippedSrcRect.fBottom = clippedSrcRect.fTop + rectHeight; @@ -39,44 +41,46 @@ sk_sp GrCopyRenderTask::Make(sk_sp srcProxy, } sk_sp task(new GrCopyRenderTask( - std::move(srcProxy), clippedSrcRect, std::move(dstProxy), clippedDstPoint)); + std::move(srcView), clippedSrcRect, std::move(dstView), clippedDstPoint)); return task; } -GrCopyRenderTask::GrCopyRenderTask(sk_sp srcProxy, +GrCopyRenderTask::GrCopyRenderTask(GrSurfaceProxyView srcView, const SkIRect& srcRect, - sk_sp dstProxy, + GrSurfaceProxyView dstView, const SkIPoint& dstPoint) - : GrRenderTask(std::move(dstProxy)) - , fSrcProxy(std::move(srcProxy)) + : GrRenderTask(std::move(dstView)) + , fSrcView(std::move(srcView)) , fSrcRect(srcRect) , fDstPoint(dstPoint) { - fTarget->setLastRenderTask(this); + fTargetView.proxy()->setLastRenderTask(this); } 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 fSrcProxy and copy to fTarget. - alloc->addInterval(fSrcProxy.get(), alloc->curOp(), alloc->curOp(), + // we read fSrcView and copy to fTargetView. + alloc->addInterval(fSrcView.proxy(), alloc->curOp(), alloc->curOp(), GrResourceAllocator::ActualUse::kYes); - alloc->addInterval(fTarget.get(), alloc->curOp(), alloc->curOp(), + alloc->addInterval(fTargetView.proxy(), alloc->curOp(), alloc->curOp(), GrResourceAllocator::ActualUse::kYes); alloc->incOps(); } bool GrCopyRenderTask::onExecute(GrOpFlushState* flushState) { - if (!fSrcProxy->isInstantiated() || !fTarget->isInstantiated()) { + GrSurfaceProxy* dstProxy = fTargetView.proxy(); + GrSurfaceProxy* srcProxy = fSrcView.proxy(); + if (!srcProxy->isInstantiated() || !dstProxy->isInstantiated()) { return false; } - GrSurface* srcSurface = fSrcProxy->peekSurface(); - GrSurface* dstSurface = fTarget->peekSurface(); - if (fSrcProxy->origin() == kBottomLeft_GrSurfaceOrigin) { - if (fSrcProxy->height() != srcSurface->height()) { - fSrcRect.offset(0, srcSurface->height() - fSrcProxy->height()); + GrSurface* srcSurface = srcProxy->peekSurface(); + GrSurface* dstSurface = dstProxy->peekSurface(); + if (fSrcView.origin() == kBottomLeft_GrSurfaceOrigin) { + if (srcProxy->height() != srcSurface->height()) { + fSrcRect.offset(0, srcSurface->height() - srcProxy->height()); } - if (fTarget->height() != dstSurface->height()) { - fDstPoint.fY = fDstPoint.fY + (dstSurface->height() - fTarget->height()); + if (dstProxy->height() != dstSurface->height()) { + fDstPoint.fY = fDstPoint.fY + (dstSurface->height() - dstProxy->height()); } } return flushState->gpu()->copySurface(dstSurface, srcSurface, fSrcRect, fDstPoint); diff --git a/third_party/skia/src/gpu/GrCopyRenderTask.h b/third_party/skia/src/gpu/GrCopyRenderTask.h index 640bb1167cfb..7577ffc7e8bc 100644 --- a/third_party/skia/src/gpu/GrCopyRenderTask.h +++ b/third_party/skia/src/gpu/GrCopyRenderTask.h @@ -12,21 +12,22 @@ class GrCopyRenderTask final : public GrRenderTask { public: - static sk_sp Make(sk_sp srcProxy, + static sk_sp Make(GrSurfaceProxyView srcView, const SkIRect& srcRect, - sk_sp dstProxy, + GrSurfaceProxyView dstView, const SkIPoint& dstPoint, const GrCaps*); private: - GrCopyRenderTask(sk_sp srcProxy, + GrCopyRenderTask(GrSurfaceProxyView srcView, const SkIRect& srcRect, - sk_sp dstProxy, + GrSurfaceProxyView dstView, const SkIPoint& dstPoint); bool onIsUsed(GrSurfaceProxy* proxy) const override { - SkASSERT(proxy != fTarget.get()); // This case should be handled by GrRenderTask. - return proxy == fSrcProxy.get(); + // 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. void handleInternalAllocationFailure() override {} @@ -39,12 +40,12 @@ class GrCopyRenderTask final : public GrRenderTask { bool onExecute(GrOpFlushState*) override; #ifdef SK_DEBUG - void visitProxies_debugOnly(const VisitSurfaceProxyFunc& fn) const override { - fn(fSrcProxy.get(), GrMipMapped::kNo); + void visitProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const override { + fn(fSrcView.proxy(), GrMipMapped::kNo); } #endif - sk_sp fSrcProxy; + GrSurfaceProxyView fSrcView; SkIRect fSrcRect; SkIPoint fDstPoint; }; diff --git a/third_party/skia/src/gpu/GrDDLContext.cpp b/third_party/skia/src/gpu/GrDDLContext.cpp index 4d14504d4e83..1e4a17fa4d4d 100644 --- a/third_party/skia/src/gpu/GrDDLContext.cpp +++ b/third_party/skia/src/gpu/GrDDLContext.cpp @@ -15,14 +15,14 @@ * The DDL Context is the one in effect during DDL Recording. It isn't backed by a GrGPU and * cannot allocate any GPU resources. */ -class GrDDLContext : public GrContext { +class GrDDLContext final : public GrContext { public: GrDDLContext(sk_sp proxy) : INHERITED(proxy->backend(), proxy->priv().options(), proxy->priv().contextID()) { fThreadSafeProxy = std::move(proxy); } - ~GrDDLContext() override { } + ~GrDDLContext() override {} void abandonContext() override { SkASSERT(0); // abandoning in a DDL Recorder doesn't make a whole lot of sense @@ -39,7 +39,7 @@ class GrDDLContext : public GrContext { INHERITED::freeGpuResources(); } -protected: +private: // TODO: Here we're pretending this isn't derived from GrContext. Switch this to be derived from // GrRecordingContext! GrContext* asDirectContext() override { return nullptr; } @@ -66,7 +66,6 @@ class GrDDLContext : public GrContext { return nullptr; } -private: typedef GrContext INHERITED; }; diff --git a/third_party/skia/src/gpu/GrDataUtils.cpp b/third_party/skia/src/gpu/GrDataUtils.cpp index 6265aaec2893..b820b7d3f93a 100644 --- a/third_party/skia/src/gpu/GrDataUtils.cpp +++ b/third_party/skia/src/gpu/GrDataUtils.cpp @@ -153,151 +153,15 @@ static void fillin_ETC1_with_color(int width, int height, const SkColor4f& color } } -// Fill in the width x height 'dest' with the munged version of 'colorf' that matches 'config' -static bool fill_buffer_with_color(GrColorType colorType, int width, int height, - const SkColor4f& colorf, void* dest) { - GrColor color = colorf.toBytes_RGBA(); - - uint8_t r = GrColorUnpackR(color); - uint8_t g = GrColorUnpackG(color); - uint8_t b = GrColorUnpackB(color); - uint8_t a = GrColorUnpackA(color); - - switch (colorType) { - case GrColorType::kAlpha_8: { - memset(dest, a, width * height); - break; - } - case GrColorType::kGray_8: { - uint8_t gray8 = SkComputeLuminance(r, g, b); - - memset(dest, gray8, width * height); - break; - } - case GrColorType::kBGR_565: { - uint16_t rgb565 = SkPack888ToRGB16(r, g, b); - - sk_memset16((uint16_t*) dest, rgb565, width * height); - break; - } - case GrColorType::kABGR_4444: { - uint8_t r4 = (r >> 4) & 0xF; - uint8_t g4 = (g >> 4) & 0xF; - uint8_t b4 = (b >> 4) & 0xF; - uint8_t a4 = (a >> 4) & 0xF; - - uint16_t rgba4444 = r4 << SK_R4444_SHIFT | g4 << SK_G4444_SHIFT | - b4 << SK_B4444_SHIFT | a4 << SK_A4444_SHIFT; - - sk_memset16((uint16_t*) dest, rgba4444, width * height); - break; - } - case GrColorType::kRGBA_8888: { - sk_memset32((uint32_t *) dest, color, width * height); - break; - } - case GrColorType::kRGB_888x: { - GrColor opaque = GrColorPackRGBA(r, g, b, 0xFF); - - sk_memset32((uint32_t *) dest, opaque, width * height); - break; - } - case GrColorType::kRG_88: { - uint16_t rg88 = (g << 8) | r; - - sk_memset16((uint16_t*) dest, rg88, width * height); - break; - } - case GrColorType::kBGRA_8888: { - GrColor swizzled = GrColorPackRGBA(b, g, r, a); - - sk_memset32((uint32_t *) dest, swizzled, width * height); - break; - } - case GrColorType::kRGBA_8888_SRGB: { - sk_memset32((uint32_t *) dest, color, width * height); - break; - } - case GrColorType::kRGBA_1010102: { - uint32_t r10 = SkScalarRoundToInt(colorf.fR * 1023.0f); - uint32_t g10 = SkScalarRoundToInt(colorf.fG * 1023.0f); - uint32_t b10 = SkScalarRoundToInt(colorf.fB * 1023.0f); - uint8_t a2 = SkScalarRoundToInt(colorf.fA * 3.0f); - - uint32_t rgba1010102 = a2 << 30 | b10 << 20 | g10 << 10 | r10; - - sk_memset32((uint32_t *) dest, rgba1010102, width * height); - break; - } - case GrColorType::kAlpha_F16: { - SkHalf alphaHalf = SkFloatToHalf(colorf.fA); - - sk_memset16((uint16_t *) dest, alphaHalf, width * height); - break; - } - case GrColorType::kRGBA_F16_Clamped: // fall through - case GrColorType::kRGBA_F16: { - uint64_t rHalf = SkFloatToHalf(colorf.fR); - uint64_t gHalf = SkFloatToHalf(colorf.fG); - uint64_t bHalf = SkFloatToHalf(colorf.fB); - uint64_t aHalf = SkFloatToHalf(colorf.fA); - - uint64_t rgbaHalf = (aHalf << 48) | (bHalf << 32) | (gHalf << 16) | rHalf; - - sk_memset64((uint64_t *) dest, rgbaHalf, width * height); - break; - } - case GrColorType::kAlpha_16: { - uint16_t a16 = SkScalarRoundToInt(colorf.fA * 65535.0f); - sk_memset16((uint16_t*) dest, a16, width * height); - break; - } - case GrColorType::kRG_1616: { - uint32_t r16 = SkScalarRoundToInt(colorf.fR * 65535.0f); - uint32_t g16 = SkScalarRoundToInt(colorf.fG * 65535.0f); - - uint32_t rg1616 = (g16 << 16) | r16; - - sk_memset32((uint32_t*) dest, rg1616, width * height); - break; - } - case GrColorType::kRGBA_16161616: { - uint64_t r16 = SkScalarRoundToInt(colorf.fR * 65535.0f); - uint64_t g16 = SkScalarRoundToInt(colorf.fG * 65535.0f); - uint64_t b16 = SkScalarRoundToInt(colorf.fB * 65535.0f); - uint64_t a16 = SkScalarRoundToInt(colorf.fA * 65535.0f); - - uint64_t rgba16161616 = (a16 << 48) | (b16 << 32) | (g16 << 16) | r16; - sk_memset64((uint64_t*) dest, rgba16161616, width * height); - break; - } - case GrColorType::kRG_F16: { - uint32_t rHalf = SkFloatToHalf(colorf.fR); - uint32_t gHalf = SkFloatToHalf(colorf.fG); - - uint32_t rgHalf = (gHalf << 16) | rHalf; - - sk_memset32((uint32_t *) dest, rgHalf, width * height); - break; - } - default: - return false; - break; - } - - return true; -} - -size_t GrComputeTightCombinedBufferSize(size_t bytesPerPixel, int baseWidth, int baseHeight, +size_t GrComputeTightCombinedBufferSize(size_t bytesPerPixel, SkISize baseDimensions, SkTArray* individualMipOffsets, int mipLevelCount) { SkASSERT(individualMipOffsets && !individualMipOffsets->count()); SkASSERT(mipLevelCount >= 1); individualMipOffsets->push_back(0); - size_t combinedBufferSize = baseWidth * bytesPerPixel * baseHeight; - int currentWidth = baseWidth; - int currentHeight = baseHeight; + size_t combinedBufferSize = baseDimensions.width() * bytesPerPixel * baseDimensions.height(); + SkISize levelDimensions = baseDimensions; // The Vulkan spec for copying a buffer to an image requires that the alignment must be at // least 4 bytes and a multiple of the bytes per pixel of the image config. @@ -306,10 +170,10 @@ size_t GrComputeTightCombinedBufferSize(size_t bytesPerPixel, int baseWidth, int int desiredAlignment = (bytesPerPixel == 3) ? 12 : (bytesPerPixel > 4 ? bytesPerPixel : 4); for (int currentMipLevel = 1; currentMipLevel < mipLevelCount; ++currentMipLevel) { - currentWidth = SkTMax(1, currentWidth / 2); - currentHeight = SkTMax(1, currentHeight / 2); + levelDimensions = {SkTMax(1, levelDimensions.width() /2), + SkTMax(1, levelDimensions.height()/2)}; - size_t trimmedSize = currentWidth * bytesPerPixel * currentHeight; + size_t trimmedSize = levelDimensions.area() * bytesPerPixel; const size_t alignmentDiff = combinedBufferSize % desiredAlignment; if (alignmentDiff != 0) { combinedBufferSize += desiredAlignment - alignmentDiff; @@ -324,24 +188,6 @@ size_t GrComputeTightCombinedBufferSize(size_t bytesPerPixel, int baseWidth, int return combinedBufferSize; } -void GrFillInData(GrColorType colorType, int baseWidth, int baseHeight, - const SkTArray& individualMipOffsets, char* dstPixels, - const SkColor4f& colorf) { - TRACE_EVENT0("skia.gpu", TRACE_FUNC); - int mipLevels = individualMipOffsets.count(); - - int currentWidth = baseWidth; - int currentHeight = baseHeight; - for (int currentMipLevel = 0; currentMipLevel < mipLevels; ++currentMipLevel) { - size_t offset = individualMipOffsets[currentMipLevel]; - - fill_buffer_with_color(colorType, currentWidth, currentHeight, colorf, - &(dstPixels[offset])); - currentWidth = SkTMax(1, currentWidth / 2); - currentHeight = SkTMax(1, currentHeight / 2); - } -} - void GrFillInCompressedData(SkImage::CompressionType type, int baseWidth, int baseHeight, char* dstPixels, const SkColor4f& colorf) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); @@ -352,7 +198,7 @@ void GrFillInCompressedData(SkImage::CompressionType type, int baseWidth, int ba } } -static GrSwizzle get_load_and_get_swizzle(GrColorType ct, SkRasterPipeline::StockStage* load, +static GrSwizzle get_load_and_src_swizzle(GrColorType ct, SkRasterPipeline::StockStage* load, bool* isNormalized, bool* isSRGB) { GrSwizzle swizzle("rgba"); *isNormalized = true; @@ -401,6 +247,12 @@ static GrSwizzle get_load_and_get_swizzle(GrColorType ct, SkRasterPipeline::Stoc swizzle = GrSwizzle("rgb1"); break; + // These are color types we don't expect to ever have to load. + case GrColorType::kRGB_888: + case GrColorType::kR_8: + case GrColorType::kR_16: + case GrColorType::kR_F16: + case GrColorType::kGray_F16: case GrColorType::kUnknown: SK_ABORT("unexpected CT"); } @@ -408,10 +260,11 @@ static GrSwizzle get_load_and_get_swizzle(GrColorType ct, SkRasterPipeline::Stoc } static GrSwizzle get_dst_swizzle_and_store(GrColorType ct, SkRasterPipeline::StockStage* store, - bool* isNormalized, bool* isSRGB) { + bool* doLumToAlpha, bool* isNormalized, bool* isSRGB) { GrSwizzle swizzle("rgba"); *isNormalized = true; *isSRGB = false; + *doLumToAlpha = false; switch (ct) { case GrColorType::kAlpha_8: *store = SkRasterPipeline::store_a8; break; case GrColorType::kAlpha_16: *store = SkRasterPipeline::store_a16; break; @@ -451,9 +304,28 @@ static GrSwizzle get_dst_swizzle_and_store(GrColorType ct, SkRasterPipeline::Sto case GrColorType::kRGB_888x: swizzle = GrSwizzle("rgb1"); *store = SkRasterPipeline::store_8888; break; + case GrColorType::kR_8: swizzle = GrSwizzle("agbr"); + *store = SkRasterPipeline::store_a8; + break; + case GrColorType::kR_16: swizzle = GrSwizzle("agbr"); + *store = SkRasterPipeline::store_a16; + break; + case GrColorType::kR_F16: swizzle = GrSwizzle("agbr"); + *store = SkRasterPipeline::store_af16; + break; + case GrColorType::kGray_F16: *doLumToAlpha = true; + *store = SkRasterPipeline::store_af16; + break; + case GrColorType::kGray_8: *doLumToAlpha = true; + *store = SkRasterPipeline::store_a8; + break; + case GrColorType::kGray_8xxx: *doLumToAlpha = true; + *store = SkRasterPipeline::store_8888; + swizzle = GrSwizzle("a000"); + break; - case GrColorType::kGray_8: // not currently supported as output - case GrColorType::kGray_8xxx: // not currently supported as output + // These are color types we don't expect to ever have to store. + case GrColorType::kRGB_888: // This is handled specially in GrConvertPixels. case GrColorType::kUnknown: SK_ABORT("unexpected CT"); } @@ -471,22 +343,42 @@ bool GrConvertPixels(const GrImageInfo& dstInfo, void* dst, size_t dstRB, const GrImageInfo& srcInfo, const void* src, size_t srcRB, bool flipY) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); - if (!srcInfo.isValid() || !dstInfo.isValid()) { + if (srcInfo.colorType() == GrColorType::kRGB_888) { + // We don't expect to have to convert from this format. return false; } - if (!src || !dst) { + if (!srcInfo.isValid() || !dstInfo.isValid()) { return false; } - if (dstInfo.width() != srcInfo.width() || srcInfo.height() != dstInfo.height()) { + if (!src || !dst) { return false; } - if (GrColorTypeComponentFlags(dstInfo.colorType()) & kGray_SkColorTypeComponentFlag) { - // We don't currently support conversion to Gray. + if (dstInfo.dimensions() != srcInfo.dimensions()) { return false; } if (dstRB < dstInfo.minRowBytes() || srcRB < srcInfo.minRowBytes()) { return false; } + if (dstInfo.colorType() == GrColorType::kRGB_888) { + // SkRasterPipeline doesn't handle writing to RGB_888. So we have it write to RGB_888x and + // then do another conversion that does the 24bit packing. + auto tempDstInfo = dstInfo.makeColorType(GrColorType::kRGB_888x); + auto tempRB = tempDstInfo.minRowBytes(); + std::unique_ptr tempDst(new char[tempRB * tempDstInfo.height()]); + if (!GrConvertPixels(tempDstInfo, tempDst.get(), tempRB, srcInfo, src, srcRB, flipY)) { + return false; + } + auto* tRow = reinterpret_cast(tempDst.get()); + auto* dRow = reinterpret_cast(dst); + for (int y = 0; y < dstInfo.height(); ++y, tRow += tempRB, dRow += dstRB) { + for (int x = 0; x < dstInfo.width(); ++x) { + auto t = reinterpret_cast(tRow + x * sizeof(uint32_t)); + auto d = reinterpret_cast(dRow + x * 3); + memcpy(d, t, 3); + } + } + return true; + } size_t srcBpp = srcInfo.bpp(); size_t dstBpp = dstInfo.bpp(); @@ -520,14 +412,15 @@ bool GrConvertPixels(const GrImageInfo& dstInfo, void* dst, size_t dstRB, SkRasterPipeline::StockStage load; bool srcIsNormalized; bool srcIsSRGB; - auto loadSwizzle = get_load_and_get_swizzle(srcInfo.colorType(), &load, &srcIsNormalized, - &srcIsSRGB); + auto loadSwizzle = + get_load_and_src_swizzle(srcInfo.colorType(), &load, &srcIsNormalized, &srcIsSRGB); SkRasterPipeline::StockStage store; + bool doLumToAlpha; bool dstIsNormalized; bool dstIsSRGB; - auto storeSwizzle = get_dst_swizzle_and_store(dstInfo.colorType(), &store, &dstIsNormalized, - &dstIsSRGB); + auto storeSwizzle = get_dst_swizzle_and_store(dstInfo.colorType(), &store, &doLumToAlpha, + &dstIsNormalized, &dstIsSRGB); bool clampGamut; SkTLazy steps; @@ -558,7 +451,7 @@ bool GrConvertPixels(const GrImageInfo& dstInfo, void* dst, size_t dstRB, std::swap(cnt, height); } - bool hasConversion = alphaOrCSConversion || clampGamut; + bool hasConversion = alphaOrCSConversion || clampGamut || doLumToAlpha; if (srcIsSRGB && dstIsSRGB && !hasConversion) { // No need to convert from srgb if we are just going to immediately convert it back. @@ -581,10 +474,15 @@ bool GrConvertPixels(const GrImageInfo& dstInfo, void* dst, size_t dstRB, if (clampGamut) { append_clamp_gamut(&pipeline); } - // If we add support for storing to Gray we would add a luminance to alpha conversion - // here. We also wouldn't then need a to_srgb stage after since it would have not effect - // on the alpha channel. It would also mean we have an SRGB Gray color type which - // doesn't exist currently. + if (doLumToAlpha) { + pipeline.append(SkRasterPipeline::StockStage::bt709_luminance_or_luma_to_alpha); + // If we ever needed to convert from linear-encoded gray to sRGB-encoded + // gray we'd have a problem here because the subsequent to_srgb stage + // ignores the alpha channel (where we just stashed the gray). There are + // several ways that could be fixed but given our current set of color types + // this should never happen. + SkASSERT(!dstIsSRGB); + } if (dstIsSRGB) { pipeline.append(SkRasterPipeline::to_srgb); } @@ -600,6 +498,60 @@ bool GrConvertPixels(const GrImageInfo& dstInfo, void* dst, size_t dstRB, return true; } +bool GrClearImage(const GrImageInfo& dstInfo, void* dst, size_t dstRB, SkColor4f color) { + TRACE_EVENT0("skia.gpu", TRACE_FUNC); + + if (!dstInfo.isValid()) { + return false; + } + if (!dst) { + return false; + } + if (dstRB < dstInfo.minRowBytes()) { + return false; + } + if (dstInfo.colorType() == GrColorType::kRGB_888) { + // SkRasterPipeline doesn't handle writing to RGB_888. So we handle that specially here. + uint32_t rgba = color.toBytes_RGBA(); + for (int y = 0; y < dstInfo.height(); ++y) { + char* d = static_cast(dst) + y * dstRB; + for (int x = 0; x < dstInfo.width(); ++x, d += 3) { + memcpy(d, &rgba, 3); + } + } + return true; + } + + bool doLumToAlpha; + bool isNormalized; + bool dstIsSRGB; + SkRasterPipeline::StockStage store; + GrSwizzle storeSwizzle = get_dst_swizzle_and_store(dstInfo.colorType(), &store, &doLumToAlpha, + &isNormalized, &dstIsSRGB); + char block[64]; + SkArenaAlloc alloc(block, sizeof(block), 1024); + SkRasterPipeline_<256> pipeline; + pipeline.append_constant_color(&alloc, color); + if (doLumToAlpha) { + pipeline.append(SkRasterPipeline::StockStage::bt709_luminance_or_luma_to_alpha); + // If we ever needed to convert from linear-encoded gray to sRGB-encoded + // gray we'd have a problem here because the subsequent to_srgb stage + // ignores the alpha channel (where we just stashed the gray). There are + // several ways that could be fixed but given our current set of color types + // this should never happen. + SkASSERT(!dstIsSRGB); + } + if (dstIsSRGB) { + pipeline.append(SkRasterPipeline::to_srgb); + } + storeSwizzle.apply(&pipeline); + SkRasterPipeline_MemoryCtx dstCtx{dst, SkToInt(dstRB/dstInfo.bpp())}; + pipeline.append(store, &dstCtx); + pipeline.run(0, 0, dstInfo.width(), dstInfo.height()); + + return true; +} + GrColorType SkColorTypeAndFormatToGrColorType(const GrCaps* caps, SkColorType skCT, const GrBackendFormat& format) { diff --git a/third_party/skia/src/gpu/GrDataUtils.h b/third_party/skia/src/gpu/GrDataUtils.h index b51a4ddf40eb..efdb30294538 100644 --- a/third_party/skia/src/gpu/GrDataUtils.h +++ b/third_party/skia/src/gpu/GrDataUtils.h @@ -23,12 +23,9 @@ size_t GrCompressedRowBytes(SkImage::CompressionType, int w); // Compute the size of the buffer required to hold all the mipLevels of the specified type // of data when all rowBytes are tight. // Note there may still be padding between the mipLevels to meet alignment requirements. -size_t GrComputeTightCombinedBufferSize(size_t bytesPerPixel, int baseWidth, int baseHeight, +size_t GrComputeTightCombinedBufferSize(size_t bytesPerPixel, SkISize baseDimensions, SkTArray* individualMipOffsets, int mipLevelCount); -void GrFillInData(GrColorType, int baseWidth, int baseHeight, - const SkTArray& individualMipOffsets, char* dest, const SkColor4f& color); - void GrFillInCompressedData(SkImage::CompressionType, int width, int height, char* dest, const SkColor4f& color); @@ -37,4 +34,7 @@ bool GrConvertPixels(const GrImageInfo& dstInfo, void* dst, size_t dstRB, const GrImageInfo& srcInfo, const void* src, size_t srcRB, bool flipY = false); +/** Clears the dst image to a constant color. */ +bool GrClearImage(const GrImageInfo& dstInfo, void* dst, size_t dstRB, SkColor4f color); + #endif diff --git a/third_party/skia/src/gpu/GrDefaultGeoProcFactory.cpp b/third_party/skia/src/gpu/GrDefaultGeoProcFactory.cpp index 09a6846649de..1000bd139a86 100644 --- a/third_party/skia/src/gpu/GrDefaultGeoProcFactory.cpp +++ b/third_party/skia/src/gpu/GrDefaultGeoProcFactory.cpp @@ -8,6 +8,7 @@ #include "src/gpu/GrDefaultGeoProcFactory.h" #include "include/core/SkRefCnt.h" +#include "src/core/SkArenaAlloc.h" #include "src/gpu/GrCaps.h" #include "src/gpu/glsl/GrGLSLColorSpaceXformHelper.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" @@ -34,17 +35,18 @@ enum GPFlag { class DefaultGeoProc : public GrGeometryProcessor { public: - static sk_sp Make(const GrShaderCaps* shaderCaps, - uint32_t gpTypeFlags, - const SkPMColor4f& color, - sk_sp colorSpaceXform, - const SkMatrix& viewMatrix, - const SkMatrix& localMatrix, - bool localCoordsWillBeRead, - uint8_t coverage) { - return sk_sp(new DefaultGeoProc( - shaderCaps, gpTypeFlags, color, std::move(colorSpaceXform), viewMatrix, localMatrix, - coverage, localCoordsWillBeRead)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + uint32_t gpTypeFlags, + const SkPMColor4f& color, + sk_sp colorSpaceXform, + const SkMatrix& viewMatrix, + const SkMatrix& localMatrix, + bool localCoordsWillBeRead, + uint8_t coverage) { + return arena->make(shaderCaps, gpTypeFlags, color, + std::move(colorSpaceXform), viewMatrix, localMatrix, + coverage, localCoordsWillBeRead); } const char* name() const override { return "DefaultGeometryProcessor"; } @@ -179,7 +181,7 @@ class DefaultGeoProc : public GrGeometryProcessor { void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const DefaultGeoProc& dgp = gp.cast(); if (!dgp.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(dgp.viewMatrix())) { @@ -198,7 +200,7 @@ class DefaultGeoProc : public GrGeometryProcessor { pdman.set1f(fCoverageUniform, GrNormalizeByteToFloat(dgp.coverage())); fCoverage = dgp.coverage(); } - this->setTransformDataHelper(dgp.fLocalMatrix, pdman, &transformIter); + this->setTransformDataHelper(dgp.fLocalMatrix, pdman, transformRange); fColorSpaceHelper.setData(pdman, dgp.fColorSpaceXform.get()); } @@ -224,6 +226,8 @@ class DefaultGeoProc : public GrGeometryProcessor { } private: + friend class ::SkArenaAlloc; // for access to ctor + DefaultGeoProc(const GrShaderCaps* shaderCaps, uint32_t gpTypeFlags, const SkPMColor4f& color, @@ -275,7 +279,7 @@ class DefaultGeoProc : public GrGeometryProcessor { GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DefaultGeoProc); #if GR_TEST_UTILS -sk_sp DefaultGeoProc::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* DefaultGeoProc::TestCreate(GrProcessorTestData* d) { uint32_t flags = 0; if (d->fRandom->nextBool()) { flags |= kColorAttribute_GPFlag; @@ -296,7 +300,7 @@ sk_sp DefaultGeoProc::TestCreate(GrProcessorTestData* d) { flags |= kLocalCoordAttribute_GPFlag; } - return DefaultGeoProc::Make(d->caps()->shaderCaps(), + return DefaultGeoProc::Make(d->allocator(), d->caps()->shaderCaps(), flags, SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), GrTest::TestColorXform(d->fRandom), @@ -307,11 +311,12 @@ sk_sp DefaultGeoProc::TestCreate(GrProcessorTestData* d) { } #endif -sk_sp GrDefaultGeoProcFactory::Make(const GrShaderCaps* shaderCaps, - const Color& color, - const Coverage& coverage, - const LocalCoords& localCoords, - const SkMatrix& viewMatrix) { +GrGeometryProcessor* GrDefaultGeoProcFactory::Make(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + const Color& color, + const Coverage& coverage, + const LocalCoords& localCoords, + const SkMatrix& viewMatrix) { uint32_t flags = 0; if (Color::kPremulGrColorAttribute_Type == color.fType) { flags |= kColorAttribute_GPFlag; @@ -330,7 +335,8 @@ sk_sp GrDefaultGeoProcFactory::Make(const GrShaderCaps* sha uint8_t inCoverage = coverage.fCoverage; bool localCoordsWillBeRead = localCoords.fType != LocalCoords::kUnused_Type; - return DefaultGeoProc::Make(shaderCaps, + return DefaultGeoProc::Make(arena, + shaderCaps, flags, color.fColor, color.fColorSpaceXform, @@ -340,12 +346,12 @@ sk_sp GrDefaultGeoProcFactory::Make(const GrShaderCaps* sha inCoverage); } -sk_sp GrDefaultGeoProcFactory::MakeForDeviceSpace( - const GrShaderCaps* shaderCaps, - const Color& color, - const Coverage& coverage, - const LocalCoords& localCoords, - const SkMatrix& viewMatrix) { +GrGeometryProcessor* GrDefaultGeoProcFactory::MakeForDeviceSpace(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + const Color& color, + const Coverage& coverage, + const LocalCoords& localCoords, + const SkMatrix& viewMatrix) { SkMatrix invert = SkMatrix::I(); if (LocalCoords::kUnused_Type != localCoords.fType) { SkASSERT(LocalCoords::kUsePosition_Type == localCoords.fType); @@ -359,5 +365,5 @@ sk_sp GrDefaultGeoProcFactory::MakeForDeviceSpace( } LocalCoords inverted(LocalCoords::kUsePosition_Type, &invert); - return Make(shaderCaps, color, coverage, inverted, SkMatrix::I()); + return Make(arena, shaderCaps, color, coverage, inverted, SkMatrix::I()); } diff --git a/third_party/skia/src/gpu/GrDefaultGeoProcFactory.h b/third_party/skia/src/gpu/GrDefaultGeoProcFactory.h index fb61567d8110..3f7fffa02f54 100644 --- a/third_party/skia/src/gpu/GrDefaultGeoProcFactory.h +++ b/third_party/skia/src/gpu/GrDefaultGeoProcFactory.h @@ -76,22 +76,24 @@ namespace GrDefaultGeoProcFactory { const SkMatrix* fMatrix; }; - sk_sp Make(const GrShaderCaps*, - const Color&, - const Coverage&, - const LocalCoords&, - const SkMatrix& viewMatrix); + GrGeometryProcessor* Make(SkArenaAlloc*, + const GrShaderCaps*, + const Color&, + const Coverage&, + const LocalCoords&, + const SkMatrix& viewMatrix); /* * Use this factory to create a GrGeometryProcessor that expects a device space vertex position * attribute. The view matrix must still be provided to compute correctly transformed * coordinates for GrFragmentProcessors. It may fail if the view matrix is not invertible. */ - sk_sp MakeForDeviceSpace(const GrShaderCaps*, - const Color&, - const Coverage&, - const LocalCoords&, - const SkMatrix& viewMatrix); + GrGeometryProcessor* MakeForDeviceSpace(SkArenaAlloc*, + const GrShaderCaps*, + const Color&, + const Coverage&, + const LocalCoords&, + const SkMatrix& viewMatrix); }; #endif diff --git a/third_party/skia/src/gpu/GrDistanceFieldGenFromVector.cpp b/third_party/skia/src/gpu/GrDistanceFieldGenFromVector.cpp index 29aa16dcb0b4..11e375c9cf53 100644 --- a/third_party/skia/src/gpu/GrDistanceFieldGenFromVector.cpp +++ b/third_party/skia/src/gpu/GrDistanceFieldGenFromVector.cpp @@ -763,7 +763,7 @@ bool GrGenerateDistanceFieldFromPath(unsigned char* distanceField, workingPath = path; } - if (!IsDistanceFieldSupportedFillType(workingPath.getFillType())) { + if (!IsDistanceFieldSupportedFillType(workingPath.getNewFillType())) { return false; } @@ -829,15 +829,19 @@ bool GrGenerateDistanceFieldFromPath(unsigned char* distanceField, kOutside = 1 } dfSign; - if (workingPath.getFillType() == SkPath::kWinding_FillType) { - dfSign = windingNumber ? kInside : kOutside; - } else if (workingPath.getFillType() == SkPath::kInverseWinding_FillType) { - dfSign = windingNumber ? kOutside : kInside; - } else if (workingPath.getFillType() == SkPath::kEvenOdd_FillType) { - dfSign = (windingNumber % 2) ? kInside : kOutside; - } else { - SkASSERT(workingPath.getFillType() == SkPath::kInverseEvenOdd_FillType); - dfSign = (windingNumber % 2) ? kOutside : kInside; + switch (workingPath.getNewFillType()) { + case SkPathFillType::kWinding: + dfSign = windingNumber ? kInside : kOutside; + break; + case SkPathFillType::kInverseWinding: + dfSign = windingNumber ? kOutside : kInside; + break; + case SkPathFillType::kEvenOdd: + dfSign = (windingNumber % 2) ? kInside : kOutside; + break; + case SkPathFillType::kInverseEvenOdd: + dfSign = (windingNumber % 2) ? kOutside : kInside; + break; } // The winding number at the end of a scanline should be zero. diff --git a/third_party/skia/src/gpu/GrDistanceFieldGenFromVector.h b/third_party/skia/src/gpu/GrDistanceFieldGenFromVector.h index 8e8d1b3413ef..036216643f00 100644 --- a/third_party/skia/src/gpu/GrDistanceFieldGenFromVector.h +++ b/third_party/skia/src/gpu/GrDistanceFieldGenFromVector.h @@ -30,10 +30,10 @@ bool GrGenerateDistanceFieldFromPath(unsigned char* distanceField, const SkPath& path, const SkMatrix& viewMatrix, int width, int height, size_t rowBytes); -inline bool IsDistanceFieldSupportedFillType(SkPath::FillType fFillType) +inline bool IsDistanceFieldSupportedFillType(SkPathFillType fFillType) { - return (SkPath::kEvenOdd_FillType == fFillType || - SkPath::kInverseEvenOdd_FillType == fFillType); + return (SkPathFillType::kEvenOdd == fFillType || + SkPathFillType::kInverseEvenOdd == fFillType); } #endif diff --git a/third_party/skia/src/gpu/GrDrawOpAtlas.cpp b/third_party/skia/src/gpu/GrDrawOpAtlas.cpp index b41d34b14152..e91f223be73c 100644 --- a/third_party/skia/src/gpu/GrDrawOpAtlas.cpp +++ b/third_party/skia/src/gpu/GrDrawOpAtlas.cpp @@ -9,6 +9,7 @@ #include "include/gpu/GrContext.h" #include "include/gpu/GrTexture.h" +#include "src/core/SkOpts.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrOnFlushResourceProvider.h" diff --git a/third_party/skia/src/gpu/GrDrawingManager.cpp b/third_party/skia/src/gpu/GrDrawingManager.cpp index b6517008863d..94c701573e36 100644 --- a/third_party/skia/src/gpu/GrDrawingManager.cpp +++ b/third_party/skia/src/gpu/GrDrawingManager.cpp @@ -128,7 +128,7 @@ void GrDrawingManager::RenderTaskDAG::prepForFlush() { GrOpsTask* curOpsTask = fRenderTasks[i]->asOpsTask(); if (prevOpsTask && curOpsTask) { - SkASSERT(prevOpsTask->fTarget.get() != curOpsTask->fTarget.get()); + SkASSERT(prevOpsTask->fTargetView != curOpsTask->fTargetView); } prevOpsTask = curOpsTask; @@ -581,6 +581,8 @@ void GrDrawingManager::moveRenderTasksToDDL(SkDeferredDisplayList* ddl) { renderTask->prePrepare(fContext); } + ddl->fRecordTimeData = fContext->priv().detachRecordTimeAllocator(); + if (fPathRendererChain) { if (auto ccpr = fPathRendererChain->getCoverageCountingPathRenderer()) { ddl->fPendingPaths = ccpr->detachPendingPaths(); @@ -591,7 +593,7 @@ void GrDrawingManager::moveRenderTasksToDDL(SkDeferredDisplayList* ddl) { } void GrDrawingManager::copyRenderTasksFromDDL(const SkDeferredDisplayList* ddl, - GrRenderTargetProxy* newDest) { + GrRenderTargetProxy* newDest) { SkDEBUGCODE(this->validate()); if (fActiveOpsTask) { @@ -668,15 +670,17 @@ void GrDrawingManager::closeRenderTasksForNewRenderTask(GrSurfaceProxy* target) } } -sk_sp GrDrawingManager::newOpsTask(sk_sp rtp, bool managedOpsTask) { +sk_sp GrDrawingManager::newOpsTask(GrSurfaceProxyView surfaceView, + bool managedOpsTask) { SkDEBUGCODE(this->validate()); SkASSERT(fContext); - this->closeRenderTasksForNewRenderTask(rtp.get()); + GrSurfaceProxy* proxy = surfaceView.proxy(); + this->closeRenderTasksForNewRenderTask(proxy); - sk_sp opsTask(new GrOpsTask(fContext->priv().refOpMemoryPool(), rtp, - fContext->priv().auditTrail())); - SkASSERT(rtp->getLastRenderTask() == opsTask.get()); + sk_sp opsTask(new GrOpsTask(fContext->priv().refOpMemoryPool(), + std::move(surfaceView), fContext->priv().auditTrail())); + SkASSERT(proxy->getLastRenderTask() == opsTask.get()); if (managedOpsTask) { fDAG.add(opsTask); @@ -705,14 +709,15 @@ GrTextureResolveRenderTask* GrDrawingManager::newTextureResolveRenderTask(const } void GrDrawingManager::newWaitRenderTask(sk_sp proxy, - std::unique_ptr[]> semaphores, + std::unique_ptr[]> semaphores, int numSemaphores) { SkDEBUGCODE(this->validate()); SkASSERT(fContext); const GrCaps& caps = *fContext->priv().caps(); - sk_sp waitTask = sk_make_sp(proxy, std::move(semaphores), + sk_sp waitTask = sk_make_sp(GrSurfaceProxyView(proxy), + std::move(semaphores), numSemaphores); if (fReduceOpsTaskSplitting) { GrRenderTask* lastTask = proxy->getLastRenderTask(); @@ -743,7 +748,7 @@ void GrDrawingManager::newWaitRenderTask(sk_sp proxy, } fDAG.add(waitTask); } else { - if (fActiveOpsTask && (fActiveOpsTask->fTarget == proxy)) { + if (fActiveOpsTask && (fActiveOpsTask->fTargetView.proxy() == proxy.get())) { SkASSERT(proxy->getLastRenderTask() == fActiveOpsTask); fDAG.addBeforeLast(waitTask); // In this case we keep the current renderTask open but just insert the new waitTask @@ -806,26 +811,28 @@ void GrDrawingManager::newTransferFromRenderTask(sk_sp srcProxy, SkDEBUGCODE(this->validate()); } -bool GrDrawingManager::newCopyRenderTask(sk_sp srcProxy, +bool GrDrawingManager::newCopyRenderTask(GrSurfaceProxyView srcView, const SkIRect& srcRect, - sk_sp dstProxy, + GrSurfaceProxyView dstView, const SkIPoint& dstPoint) { SkDEBUGCODE(this->validate()); SkASSERT(fContext); - this->closeRenderTasksForNewRenderTask(dstProxy.get()); + this->closeRenderTasksForNewRenderTask(dstView.proxy()); const GrCaps& caps = *fContext->priv().caps(); + GrSurfaceProxy* srcProxy = srcView.proxy(); + GrRenderTask* task = - fDAG.add(GrCopyRenderTask::Make(srcProxy, srcRect, dstProxy, dstPoint, &caps)); + fDAG.add(GrCopyRenderTask::Make(std::move(srcView), srcRect, std::move(dstView), + dstPoint, &caps)); if (!task) { return false; } - // 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.get(), GrMipMapped::kNo, GrTextureResolveManager(this), caps); + task->addDependency(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 @@ -911,10 +918,19 @@ std::unique_ptr GrDrawingManager::makeRenderTargetContext sk_sp renderTargetProxy(sk_ref_sp(sProxy->asRenderTargetProxy())); + GrSurfaceOrigin origin = renderTargetProxy->origin(); + GrSwizzle texSwizzle = fContext->priv().caps()->getTextureSwizzle(sProxy->backendFormat(), + colorType); + GrSwizzle outSwizzle = fContext->priv().caps()->getOutputSwizzle(sProxy->backendFormat(), + colorType); + return std::unique_ptr( new GrRenderTargetContext(fContext, std::move(renderTargetProxy), colorType, + origin, + texSwizzle, + outSwizzle, std::move(colorSpace), surfaceProps, managedOpsTask)); @@ -934,6 +950,10 @@ std::unique_ptr GrDrawingManager::makeTextureContext( sk_sp textureProxy(sk_ref_sp(sProxy->asTextureProxy())); + GrSurfaceOrigin origin = textureProxy->origin(); + GrSwizzle texSwizzle = textureProxy->textureSwizzle(); + return std::unique_ptr(new GrTextureContext( - fContext, std::move(textureProxy), colorType, alphaType, std::move(colorSpace))); + fContext, std::move(textureProxy), colorType, alphaType, std::move(colorSpace), origin, + texSwizzle)); } diff --git a/third_party/skia/src/gpu/GrDrawingManager.h b/third_party/skia/src/gpu/GrDrawingManager.h index 72f3211ba167..4d46aaa03d81 100644 --- a/third_party/skia/src/gpu/GrDrawingManager.h +++ b/third_party/skia/src/gpu/GrDrawingManager.h @@ -26,6 +26,7 @@ class GrRecordingContext; class GrRenderTargetContext; class GrRenderTargetProxy; class GrSoftwarePathRenderer; +class GrSurfaceProxyView; class GrTextureContext; class GrTextureResolveRenderTask; class SkDeferredDisplayList; @@ -48,7 +49,7 @@ class GrDrawingManager { // A managed opsTask is controlled by the drawing manager (i.e., sorted & flushed with the // others). An unmanaged one is created and used by the onFlushCallback. - sk_sp newOpsTask(sk_sp, bool managedOpsTask); + sk_sp newOpsTask(GrSurfaceProxyView, bool managedOpsTask); // Create a render task that can resolve MSAA and/or regenerate mipmap levels on proxies. This // method will only add the new render task to the list. It is up to the caller to call @@ -60,7 +61,8 @@ class GrDrawingManager { // work (even to other proxies) that has already been recorded or will be recorded later. The // only guarantee is that future work to the passed in proxy will wait on the semaphores to be // signaled. - void newWaitRenderTask(sk_sp proxy, std::unique_ptr[]>, + void newWaitRenderTask(sk_sp proxy, + std::unique_ptr[]>, int numSemaphores); // Create a new render task which copies the pixels from the srcProxy into the dstBuffer. This @@ -72,14 +74,14 @@ class GrDrawingManager { GrColorType surfaceColorType, GrColorType dstColorType, sk_sp dstBuffer, size_t dstOffset); - // Creates a new render task which copies a pixel rectangle from srcProxy into dstProxy. The src + // Creates a new render task which copies a pixel rectangle from srcView into dstView. The src // pixels copied are specified by srcRect. They are copied to a rect of the same size in // dstProxy with top left at dstPoint. If the src rect is clipped by the src bounds then pixel // values in the dst rect corresponding to the area clipped by the src rect are not overwritten. // This method is not guaranteed to succeed depending on the type of surface, formats, etc, and // the backend-specific limitations. - bool newCopyRenderTask(sk_sp srcProxy, const SkIRect& srcRect, - sk_sp dstProxy, const SkIPoint& dstPoint); + bool newCopyRenderTask(GrSurfaceProxyView srcView, const SkIRect& srcRect, + GrSurfaceProxyView dstView, const SkIPoint& dstPoint); GrRecordingContext* getContext() { return fContext; } diff --git a/third_party/skia/src/gpu/GrFragmentProcessor.cpp b/third_party/skia/src/gpu/GrFragmentProcessor.cpp index aa761b24d974..9337e8d87c6b 100644 --- a/third_party/skia/src/gpu/GrFragmentProcessor.cpp +++ b/third_party/skia/src/gpu/GrFragmentProcessor.cpp @@ -48,10 +48,9 @@ bool GrFragmentProcessor::isEqual(const GrFragmentProcessor& that) const { } void GrFragmentProcessor::visitProxies(const GrOp::VisitProxyFunc& func) { - GrFragmentProcessor::TextureAccessIter iter(this); - while (const TextureSampler* sampler = iter.next()) { - bool mipped = (GrSamplerState::Filter::kMipMap == sampler->samplerState().filter()); - func(sampler->proxy(), GrMipMapped(mipped)); + for (auto [sampler, fp] : FPTextureSamplerRange(*this)) { + bool mipped = (GrSamplerState::Filter::kMipMap == sampler.samplerState().filter()); + func(sampler.proxy(), GrMipMapped(mipped)); } } @@ -70,10 +69,8 @@ const GrFragmentProcessor::TextureSampler& GrFragmentProcessor::textureSampler(i } void GrFragmentProcessor::addCoordTransform(GrCoordTransform* transform) { - transform->setComputeInVertexShader(this->computeLocalCoordsInVertexShader()); fCoordTransforms.push_back(transform); - fFlags |= kUsesLocalCoords_Flag; - SkDEBUGCODE(transform->setInProcessor();) + fFlags |= kHasCoordTranforms_Flag; } #ifdef SK_DEBUG @@ -95,8 +92,8 @@ bool GrFragmentProcessor::isInstantiated() const { #endif int GrFragmentProcessor::registerChildProcessor(std::unique_ptr child) { - if (child->usesLocalCoords()) { - fFlags |= kUsesLocalCoords_Flag; + if (child->fFlags & kHasCoordTranforms_Flag) { + fFlags |= kHasCoordTranforms_Flag; } fRequestedFeatures |= child->fRequestedFeatures; @@ -112,7 +109,7 @@ bool GrFragmentProcessor::hasSameTransforms(const GrFragmentProcessor& that) con } int count = this->numCoordTransforms(); for (int i = 0; i < count; ++i) { - if (!this->coordTransform(i).hasSameEffectAs(that.coordTransform(i))) { + if (!this->coordTransform(i).hasSameEffectiveMatrix(that.coordTransform(i))) { return false; } } @@ -172,7 +169,7 @@ std::unique_ptr GrFragmentProcessor::SwizzleOutput( GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; fragBuilder->codeAppendf("%s = %s.%s;", - args.fOutputColor, args.fInputColor, swizzle.c_str()); + args.fOutputColor, args.fInputColor, swizzle.asString().c_str()); } }; return new GLFP; @@ -389,13 +386,7 @@ std::unique_ptr GrFragmentProcessor::RunInSeries( ////////////////////////////////////////////////////////////////////////////// -GrFragmentProcessor::Iter::Iter(const GrPipeline& pipeline) { - for (int i = pipeline.numFragmentProcessors() - 1; i >= 0; --i) { - fFPStack.push_back(&pipeline.getFragmentProcessor(i)); - } -} - -GrFragmentProcessor::Iter::Iter(const GrPaint& paint) { +GrFragmentProcessor::CIter::CIter(const GrPaint& paint) { for (int i = paint.numCoverageFragmentProcessors() - 1; i >= 0; --i) { fFPStack.push_back(paint.getCoverageFragmentProcessor(i)); } @@ -404,28 +395,34 @@ GrFragmentProcessor::Iter::Iter(const GrPaint& paint) { } } -const GrFragmentProcessor* GrFragmentProcessor::Iter::next() { - if (fFPStack.empty()) { - return nullptr; +GrFragmentProcessor::CIter::CIter(const GrProcessorSet& set) { + for (int i = set.numCoverageFragmentProcessors() - 1; i >= 0; --i) { + fFPStack.push_back(set.coverageFragmentProcessor(i)); } - const GrFragmentProcessor* back = fFPStack.back(); - fFPStack.pop_back(); - for (int i = back->numChildProcessors() - 1; i >= 0; --i) { - fFPStack.push_back(&back->childProcessor(i)); + for (int i = set.numColorFragmentProcessors() - 1; i >= 0; --i) { + fFPStack.push_back(set.colorFragmentProcessor(i)); + } +} + +GrFragmentProcessor::CIter::CIter(const GrPipeline& pipeline) { + for (int i = pipeline.numFragmentProcessors() - 1; i >= 0; --i) { + fFPStack.push_back(&pipeline.getFragmentProcessor(i)); } - return back; } /////////////////////////////////////////////////////////////////////////////////////////////////// -GrFragmentProcessor::TextureSampler::TextureSampler(sk_sp proxy, +GrFragmentProcessor::TextureSampler::TextureSampler(sk_sp proxy, const GrSamplerState& samplerState) { this->reset(std::move(proxy), samplerState); } -void GrFragmentProcessor::TextureSampler::reset(sk_sp proxy, +void GrFragmentProcessor::TextureSampler::reset(sk_sp proxy, const GrSamplerState& samplerState) { + SkASSERT(proxy->asTextureProxy()); fProxy = std::move(proxy); fSamplerState = samplerState; - fSamplerState.setFilterMode(SkTMin(samplerState.filter(), this->proxy()->highestFilterMode())); + fSamplerState.setFilterMode( + SkTMin(samplerState.filter(), + GrTextureProxy::HighestFilterMode(fProxy->backendFormat().textureType()))); } diff --git a/third_party/skia/src/gpu/GrFragmentProcessor.h b/third_party/skia/src/gpu/GrFragmentProcessor.h index 21e27b868b52..03d22aeaaee3 100644 --- a/third_party/skia/src/gpu/GrFragmentProcessor.h +++ b/third_party/skia/src/gpu/GrFragmentProcessor.h @@ -111,8 +111,9 @@ class GrFragmentProcessor : public GrProcessor { int numCoordTransforms() const { return fCoordTransforms.count(); } /** Returns the coordinate transformation at index. index must be valid according to - numTransforms(). */ + numCoordTransforms(). */ const GrCoordTransform& coordTransform(int index) const { return *fCoordTransforms[index]; } + GrCoordTransform& coordTransform(int index) { return *fCoordTransforms[index]; } const SkTArray& coordTransforms() const { return fCoordTransforms; @@ -120,28 +121,31 @@ class GrFragmentProcessor : public GrProcessor { int numChildProcessors() const { return fChildProcessors.count(); } + GrFragmentProcessor& childProcessor(int index) { return *fChildProcessors[index]; } const GrFragmentProcessor& childProcessor(int index) const { return *fChildProcessors[index]; } SkDEBUGCODE(bool isInstantiated() const;) - /** Do any of the coordtransforms for this processor require local coords? */ - bool usesLocalCoords() const { return SkToBool(fFlags & kUsesLocalCoords_Flag); } + /** 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 & kHasCoordTranforms_Flag) && + SkToBool(fFlags & kCoordTransformsApplyToLocalCoords_Flag); + } - bool computeLocalCoordsInVertexShader() const { - return SkToBool(fFlags & kComputeLocalCoordsInVertexShader_Flag); + bool coordTransformsApplyToLocalCoords() const { + return SkToBool(fFlags & kCoordTransformsApplyToLocalCoords_Flag); } - void setComputeLocalCoordsInVertexShader(bool value) const { + void setSampledWithExplicitCoords(bool value) { if (value) { - fFlags |= kComputeLocalCoordsInVertexShader_Flag; + fFlags &= ~kCoordTransformsApplyToLocalCoords_Flag; } else { - fFlags &= ~kComputeLocalCoordsInVertexShader_Flag; - } - for (GrCoordTransform* transform : fCoordTransforms) { - transform->setComputeInVertexShader(value); + fFlags |= kCoordTransformsApplyToLocalCoords_Flag; } - for (const auto& child : fChildProcessors) { - child->setComputeLocalCoordsInVertexShader(value); + for (auto& child : fChildProcessors) { + child->setSampledWithExplicitCoords(value); } } @@ -193,72 +197,114 @@ class GrFragmentProcessor : public GrProcessor { */ bool isEqual(const GrFragmentProcessor& that) const; - /** - * Pre-order traversal of a FP hierarchy, or of the forest of FPs in a GrPipeline. In the latter - * case the tree rooted at each FP in the GrPipeline is visited successively. - */ - class Iter : public SkNoncopyable { - public: - explicit Iter(const GrFragmentProcessor* fp) { fFPStack.push_back(fp); } - explicit Iter(const GrPipeline& pipeline); - explicit Iter(const GrPaint&); - const GrFragmentProcessor* next(); - - private: - SkSTArray<4, const GrFragmentProcessor*, true> fFPStack; - }; - - /** - * Iterates over all the Ts owned by a GrFragmentProcessor and its children or over all the Ts - * owned by the forest of GrFragmentProcessors in a GrPipeline. FPs are visited in the same - * order as Iter and each of an FP's Ts are visited in order. - */ - template - class FPItemIter : public SkNoncopyable { - public: - explicit FPItemIter(const GrFragmentProcessor* fp) - : fCurrFP(nullptr) - , fCTIdx(0) - , fFPIter(fp) { - fCurrFP = fFPIter.next(); - } - explicit FPItemIter(const GrPipeline& pipeline) - : fCurrFP(nullptr) - , fCTIdx(0) - , fFPIter(pipeline) { - fCurrFP = fFPIter.next(); - } - - const T* next() { - if (!fCurrFP) { - return nullptr; - } - while (fCTIdx == (fCurrFP->*COUNT)()) { - fCTIdx = 0; - fCurrFP = fFPIter.next(); - if (!fCurrFP) { - return nullptr; - } - } - return &(fCurrFP->*GET)(fCTIdx++); - } + void visitProxies(const GrOp::VisitProxyFunc& func); - private: - const GrFragmentProcessor* fCurrFP; - int fCTIdx; - GrFragmentProcessor::Iter fFPIter; + // A pre-order traversal iterator over a hierarchy of FPs. It can also iterate over all the FP + // hierarchies rooted in a GrPaint, GrProcessorSet, or GrPipeline. For these collections it + // iterates the tree rooted at each color FP and then each coverage FP. + // + // Iter is the non-const version and CIter is the const version. + // + // An iterator is constructed from one of the srcs and used like this: + // for (GrFragmentProcessor::Iter iter(pipeline); iter; ++iter) { + // GrFragmentProcessor& fp = *iter; + // } + // The exit test for the loop is using Iter's operator bool(). + // To use a range-for loop instead see CIterRange below. + class Iter; + class CIter; + + // Used to implement a range-for loop using CIter. Src is one of GrFragmentProcessor, + // GrPaint, GrProcessorSet, or GrPipeline. Type aliases for these defined below. + // Example usage: + // for (const auto& fp : GrFragmentProcessor::PaintRange(paint)) { + // if (fp.usesLocalCoords()) { + // ... + // } + // } + template class CIterRange; + // Like CIterRange but non const and only constructable from GrFragmentProcessor. This could + // support GrPaint as it owns non-const FPs but no need for it as of now. + // for (auto& fp0 : GrFragmentProcessor::IterRange(fp)) { + // ... + // } + class IterRange; + + // We would use template deduction guides for Iter/CIter but for: + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79501 + // Instead we use these specialized type aliases to make it prettier + // to construct Iters for particular sources of FPs. + using FPCRange = CIterRange; + using PaintCRange = CIterRange; + + // Implementation details for iterators that walk an array of Items owned by a set of FPs. + using CountFn = int (GrFragmentProcessor::*)() const; + // Defined GetFn to be a member function that returns an Item by index. The function itself is + // const if Item is a const type and non-const if Item is non-const. + template ::value> struct GetT; + template struct GetT { + using GetFn = Item& (GrFragmentProcessor::*)(int); }; - - using CoordTransformIter = FPItemIter struct GetT { + using GetFn = const Item& (GrFragmentProcessor::*)(int) const; + }; + template using GetFn = typename GetT::GetFn; + // This is an iterator over the Items owned by a (collection of) FP. CountFn is a FP member that + // gets the number of Items owned by each FP and GetFn is a member that gets them by index. + template Get> class FPItemIter; + + // Loops over all the GrCoordTransforms owned by GrFragmentProcessors. The possible sources for + // the iteration are the same as those for Iter and the FPs are walked in the same order as + // Iter. This provides access to the coord transform and the FP that owns it. Example usage: + // for (GrFragmentProcessor::CoordTransformIter iter(pipeline); iter; ++iter) { + // // transform is const GrCoordTransform& and owningFP is const GrFragmentProcessor&. + // auto [transform, owningFP] = *iter; + // ... + // } + // See the ranges below to make this simpler a la range-for loops. + using CoordTransformIter = FPItemIter; - - using TextureAccessIter = FPItemIter; - - void visitProxies(const GrOp::VisitProxyFunc& func); + // Same as CoordTransformIter but for TextureSamplers: + // for (GrFragmentProcessor::TextureSamplerIter iter(pipeline); iter; ++iter) { + // // TextureSamplerIter is const GrFragmentProcessor::TextureSampler& and + // // owningFP is const GrFragmentProcessor&. + // auto [sampler, owningFP] = *iter; + // ... + // } + // See the ranges below to make this simpler a la range-for loops. + using TextureSamplerIter = FPItemIter; + + // 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)) { + // ... + // } + // 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. + class FPItemEndIter {}; protected: enum OptimizationFlags : uint32_t { @@ -282,17 +328,17 @@ class GrFragmentProcessor : public GrProcessor { * callers must determine on their own if the sampling uses a decal strategy in any way, in * which case the texture may become transparent regardless of the color type. */ - static OptimizationFlags ModulateForSamplerOptFlags(GrColorType colorType, bool samplingDecal) { + static OptimizationFlags ModulateForSamplerOptFlags(SkAlphaType alphaType, bool samplingDecal) { if (samplingDecal) { return kCompatibleWithCoverageAsAlpha_OptimizationFlag; } else { - return ModulateForClampedSamplerOptFlags(colorType); + return ModulateForClampedSamplerOptFlags(alphaType); } } // As above, but callers should somehow ensure or assert their sampler still uses clamping - static OptimizationFlags ModulateForClampedSamplerOptFlags(GrColorType colorType) { - if (!GrColorTypeHasAlpha(colorType)) { + static OptimizationFlags ModulateForClampedSamplerOptFlags(SkAlphaType alphaType) { + if (alphaType == kOpaque_SkAlphaType) { return kCompatibleWithCoverageAsAlpha_OptimizationFlag | kPreservesOpaqueInput_OptimizationFlag; } else { @@ -302,7 +348,7 @@ class GrFragmentProcessor : public GrProcessor { GrFragmentProcessor(ClassID classID, OptimizationFlags optimizationFlags) : INHERITED(classID) - , fFlags(optimizationFlags | kComputeLocalCoordsInVertexShader_Flag) { + , fFlags(optimizationFlags | kCoordTransformsApplyToLocalCoords_Flag) { SkASSERT((optimizationFlags & ~kAll_OptimizationFlags) == 0); } @@ -373,6 +419,9 @@ class GrFragmentProcessor : public GrProcessor { inline static const TextureSampler& IthTextureSampler(int i); private: + // Implementation details of Iter and CIter. + template class IterBase; + virtual SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& /* inputColor */) const { SK_ABORT("Subclass must override this if advertising this optimization."); } @@ -399,11 +448,11 @@ class GrFragmentProcessor : public GrProcessor { enum PrivateFlags { kFirstPrivateFlag = kAll_OptimizationFlags + 1, - kUsesLocalCoords_Flag = kFirstPrivateFlag, - kComputeLocalCoordsInVertexShader_Flag = kFirstPrivateFlag << 1, + kHasCoordTranforms_Flag = kFirstPrivateFlag, + kCoordTransformsApplyToLocalCoords_Flag = kFirstPrivateFlag << 1, }; - mutable uint32_t fFlags = kComputeLocalCoordsInVertexShader_Flag; + uint32_t fFlags = kCoordTransformsApplyToLocalCoords_Flag; int fTextureSamplerCnt = 0; @@ -430,11 +479,11 @@ class GrFragmentProcessor::TextureSampler { : fProxy(that.fProxy) , fSamplerState(that.fSamplerState) {} - TextureSampler(sk_sp, const GrSamplerState& = GrSamplerState::ClampNearest()); + TextureSampler(sk_sp, const GrSamplerState& = GrSamplerState::ClampNearest()); TextureSampler& operator=(const TextureSampler&) = delete; - void reset(sk_sp, const GrSamplerState&); + void reset(sk_sp, const GrSamplerState&); bool operator==(const TextureSampler& that) const { return this->proxy()->underlyingUniqueID() == that.proxy()->underlyingUniqueID() && @@ -451,14 +500,14 @@ class GrFragmentProcessor::TextureSampler { return fProxy->peekTexture(); } - GrTextureProxy* proxy() const { return fProxy.get(); } + GrSurfaceProxy* proxy() const { return fProxy.get(); } const GrSamplerState& samplerState() const { return fSamplerState; } const GrSwizzle& swizzle() const { return this->proxy()->textureSwizzle(); } bool isInitialized() const { return SkToBool(fProxy.get()); } private: - sk_sp fProxy; + sk_sp fProxy; GrSamplerState fSamplerState; }; @@ -472,4 +521,126 @@ const GrFragmentProcessor::TextureSampler& GrFragmentProcessor::IthTextureSample GR_MAKE_BITFIELD_OPS(GrFragmentProcessor::OptimizationFlags) +////////////////////////////////////////////////////////////////////////////// + +template class GrFragmentProcessor::IterBase { +public: + FP& operator*() const { return *fFPStack.back(); } + FP* operator->() const { return fFPStack.back(); } + operator bool() const { return !fFPStack.empty(); } + bool operator!=(const EndIter&) { return (bool)*this; } + + // Because each iterator carries a stack we want to avoid copies. + IterBase(const IterBase&) = delete; + IterBase& operator=(const IterBase&) = delete; + +protected: + void increment(); + + IterBase() = default; + explicit IterBase(FP& fp) { fFPStack.push_back(&fp); } + + SkSTArray<4, FP*, true> fFPStack; +}; + +template void GrFragmentProcessor::IterBase::increment() { + SkASSERT(!fFPStack.empty()); + FP* back = fFPStack.back(); + fFPStack.pop_back(); + for (int i = back->numChildProcessors() - 1; i >= 0; --i) { + fFPStack.push_back(&back->childProcessor(i)); + } +} + +////////////////////////////////////////////////////////////////////////////// + +class GrFragmentProcessor::Iter : public IterBase { +public: + explicit Iter(GrFragmentProcessor& fp) : IterBase(fp) {} + Iter& operator++() { + this->increment(); + return *this; + } +}; + +////////////////////////////////////////////////////////////////////////////// + +class GrFragmentProcessor::CIter : public IterBase { +public: + explicit CIter(const GrFragmentProcessor& fp) : IterBase(fp) {} + explicit CIter(const GrPaint&); + explicit CIter(const GrProcessorSet&); + explicit CIter(const GrPipeline&); + CIter& operator++() { + this->increment(); + return *this; + } +}; + +////////////////////////////////////////////////////////////////////////////// + +template class GrFragmentProcessor::CIterRange { +public: + explicit CIterRange(const Src& t) : fT(t) {} + CIter begin() const { return CIter(fT); } + EndIter end() const { return EndIter(); } + +private: + const Src& fT; +}; + +////////////////////////////////////////////////////////////////////////////// + +template Get> +class GrFragmentProcessor::FPItemIter { +public: + template explicit FPItemIter(Src& s); + + std::pair operator*() const { + return {(*fFPIter.*Get)(fIndex), *fFPIter}; + } + FPItemIter& operator++(); + operator bool() const { return fFPIter; } + bool operator!=(const FPItemEndIter&) { return (bool)*this; } + + FPItemIter(const FPItemIter&) = delete; + FPItemIter& operator=(const FPItemIter&) = delete; + +private: + typename std::conditional::value, CIter, Iter>::type fFPIter; + int fIndex; +}; + +template Get> +template +GrFragmentProcessor::FPItemIter::FPItemIter(Src& s) : fFPIter(s), fIndex(-1) { + if (fFPIter) { + ++*this; + } +} + +template Get> +GrFragmentProcessor::FPItemIter& +GrFragmentProcessor::FPItemIter::operator++() { + ++fIndex; + if (fIndex < ((*fFPIter).*Count)()) { + return *this; + } + fIndex = 0; + do {} while (++fFPIter && !((*fFPIter).*Count)()); + return *this; +} + +////////////////////////////////////////////////////////////////////////////// + +template class GrFragmentProcessor::FPItemRange { +public: + FPItemRange(Src& src) : fSrc(src) {} + ItemIter begin() const { return ItemIter(fSrc); } + FPItemEndIter end() const { return FPItemEndIter(); } + +private: + Src& fSrc; +}; + #endif diff --git a/third_party/skia/src/gpu/GrGeometryProcessor.h b/third_party/skia/src/gpu/GrGeometryProcessor.h index 6f596a5ae4da..687fc708daab 100644 --- a/third_party/skia/src/gpu/GrGeometryProcessor.h +++ b/third_party/skia/src/gpu/GrGeometryProcessor.h @@ -12,10 +12,17 @@ /** * A GrGeometryProcessor is a flexible method for rendering a primitive. The GrGeometryProcessor - * has complete control over vertex attributes and uniforms(aside from the render target) but it + * has complete control over vertex attributes and uniforms (aside from the render target) but it * must obey the same contract as any GrPrimitiveProcessor, specifically it must emit a color and * coverage into the fragment shader. Where this color and coverage come from is completely the * responsibility of the GrGeometryProcessor. + * + * Note that all derived classes should hide their constructors and provide a Make factory + * function that takes an arena (except for CCPR-specific classes). This is because + * GrGeometryProcessor's are not ref-counted to must have some other mechanism for managing + * their lifetime. In particular, geometry processors can be created in either the + * record-time or flush-time arenas which defined their lifetimes (i.e., a DDLs life time in + * the first case and a single flush in the second case). */ class GrGeometryProcessor : public GrPrimitiveProcessor { public: @@ -28,11 +35,11 @@ class GrGeometryProcessor : public GrPrimitiveProcessor { protected: void setWillUseGeoShader() { fWillUseGeoShader = true; } - // GPs that need to use either half-float or ubyte colors can just call this to get a correctly + // GPs that need to use either float or ubyte colors can just call this to get a correctly // configured Attribute struct static Attribute MakeColorAttribute(const char* name, bool wideColor) { return { name, - wideColor ? kHalf4_GrVertexAttribType : kUByte4_norm_GrVertexAttribType, + wideColor ? kFloat4_GrVertexAttribType : kUByte4_norm_GrVertexAttribType, kHalf4_GrSLType }; } diff --git a/third_party/skia/src/gpu/GrGpu.cpp b/third_party/skia/src/gpu/GrGpu.cpp index 40be00406ab2..43411bfedfc0 100644 --- a/third_party/skia/src/gpu/GrGpu.cpp +++ b/third_party/skia/src/gpu/GrGpu.cpp @@ -44,19 +44,19 @@ void GrGpu::disconnect(DisconnectType) {} //////////////////////////////////////////////////////////////////////////////// -bool GrGpu::IsACopyNeededForRepeatWrapMode(const GrCaps* caps, GrTextureProxy* texProxy, - int width, int height, +bool GrGpu::IsACopyNeededForRepeatWrapMode(const GrCaps* caps, + GrTextureProxy* texProxy, + SkISize dimensions, GrSamplerState::Filter filter, GrTextureProducer::CopyParams* copyParams, SkScalar scaleAdjust[2]) { if (!caps->npotTextureTileSupport() && - (!SkIsPow2(width) || !SkIsPow2(height))) { + (!SkIsPow2(dimensions.width()) || !SkIsPow2(dimensions.height()))) { SkASSERT(scaleAdjust); - copyParams->fWidth = GrNextPow2(width); - copyParams->fHeight = GrNextPow2(height); + copyParams->fDimensions = {SkNextPow2(dimensions.width()), SkNextPow2(dimensions.height())}; SkASSERT(scaleAdjust); - scaleAdjust[0] = ((SkScalar)copyParams->fWidth) / width; - scaleAdjust[1] = ((SkScalar)copyParams->fHeight) / height; + scaleAdjust[0] = ((SkScalar)copyParams->fDimensions.width()) / dimensions.width(); + scaleAdjust[1] = ((SkScalar)copyParams->fDimensions.height()) / dimensions.height(); switch (filter) { case GrSamplerState::Filter::kNearest: copyParams->fFilter = GrSamplerState::Filter::kNearest; @@ -75,8 +75,7 @@ bool GrGpu::IsACopyNeededForRepeatWrapMode(const GrCaps* caps, GrTextureProxy* t // those capabilities are required) force a copy. if (texProxy->hasRestrictedSampling()) { copyParams->fFilter = GrSamplerState::Filter::kNearest; - copyParams->fWidth = texProxy->width(); - copyParams->fHeight = texProxy->height(); + copyParams->fDimensions = texProxy->dimensions(); return true; } } @@ -93,8 +92,7 @@ bool GrGpu::IsACopyNeededForMips(const GrCaps* caps, const GrTextureProxy* texPr // force a copy. if (willNeedMips && texProxy->mipMapped() == GrMipMapped::kNo) { copyParams->fFilter = GrSamplerState::Filter::kNearest; - copyParams->fWidth = texProxy->width(); - copyParams->fHeight = texProxy->height(); + copyParams->fDimensions = texProxy->dimensions(); return true; } @@ -643,25 +641,59 @@ GrSemaphoresSubmitted GrGpu::finishFlush(GrSurfaceProxy* proxies[], this->stats()->incNumFinishFlushes(); GrResourceProvider* resourceProvider = fContext->priv().resourceProvider(); - if (this->caps()->semaphoreSupport()) { - for (int i = 0; i < info.fNumSemaphores; ++i) { - sk_sp semaphore; + struct SemaphoreInfo { + std::unique_ptr fSemaphore; + bool fDidCreate = false; + }; + + bool failedSemaphoreCreation = false; + std::unique_ptr semaphoreInfos(new SemaphoreInfo[info.fNumSemaphores]); + if (this->caps()->semaphoreSupport() && info.fNumSemaphores) { + for (int i = 0; i < info.fNumSemaphores && !failedSemaphoreCreation; ++i) { if (info.fSignalSemaphores[i].isInitialized()) { - semaphore = resourceProvider->wrapBackendSemaphore( + semaphoreInfos[i].fSemaphore = resourceProvider->wrapBackendSemaphore( info.fSignalSemaphores[i], GrResourceProvider::SemaphoreWrapType::kWillSignal, kBorrow_GrWrapOwnership); } else { - semaphore = resourceProvider->makeSemaphore(false); + semaphoreInfos[i].fSemaphore = resourceProvider->makeSemaphore(false); + semaphoreInfos[i].fDidCreate = true; + } + if (!semaphoreInfos[i].fSemaphore) { + semaphoreInfos[i].fDidCreate = false; + failedSemaphoreCreation = true; + } + } + if (!failedSemaphoreCreation) { + for (int i = 0; i < info.fNumSemaphores && !failedSemaphoreCreation; ++i) { + this->insertSemaphore(semaphoreInfos[i].fSemaphore.get()); } - this->insertSemaphore(semaphore); + } + } - if (!info.fSignalSemaphores[i].isInitialized()) { - info.fSignalSemaphores[i] = semaphore->backendSemaphore(); + // We always want to try flushing, so do that before checking if we failed semaphore creation. + if (!this->onFinishFlush(proxies, n, access, info, externalRequests) || + failedSemaphoreCreation) { + // If we didn't do the flush or failed semaphore creations then none of the semaphores were + // submitted. Therefore the client can't wait on any of the semaphores. Additionally any + // semaphores we created here the client is not responsible for deleting so we must make + // sure they get deleted. We do this by changing the ownership from borrowed to owned. + for (int i = 0; i < info.fNumSemaphores; ++i) { + if (semaphoreInfos[i].fDidCreate) { + SkASSERT(semaphoreInfos[i].fSemaphore); + semaphoreInfos[i].fSemaphore->setIsOwned(); } } + return GrSemaphoresSubmitted::kNo; } - this->onFinishFlush(proxies, n, access, info, externalRequests); + + for (int i = 0; i < info.fNumSemaphores; ++i) { + if (!info.fSignalSemaphores[i].isInitialized()) { + SkASSERT(semaphoreInfos[i].fSemaphore); + info.fSignalSemaphores[i] = semaphoreInfos[i].fSemaphore->backendSemaphore(); + } + } + return this->caps()->semaphoreSupport() ? GrSemaphoresSubmitted::kYes : GrSemaphoresSubmitted::kNo; } @@ -703,49 +735,40 @@ void GrGpu::Stats::dumpKeyValuePairs(SkTArray* keys, SkTArray* #endif // GR_GPU_STATS #endif // GR_TEST_UTILS +bool GrGpu::MipMapsAreCorrect(SkISize dimensions, const BackendTextureData* data, int numLevels) { + if (numLevels != 1 && + numLevels != SkMipMap::ComputeLevelCount(dimensions.width(), dimensions.height()) + 1) { + return false; + } -bool GrGpu::MipMapsAreCorrect(int baseWidth, int baseHeight, GrMipMapped mipMapped, - const SkPixmap srcData[], int numMipLevels) { - if (!srcData) { + if (!data || data->type() != BackendTextureData::Type::kPixmaps) { return true; } - if (baseWidth != srcData[0].width() || baseHeight != srcData[0].height()) { + if (data->pixmap(0).dimensions() != dimensions) { return false; } - if (mipMapped == GrMipMapped::kYes) { - if (numMipLevels != SkMipMap::ComputeLevelCount(baseWidth, baseHeight) + 1) { + SkColorType colorType = data->pixmap(0).colorType(); + for (int i = 1; i < numLevels; ++i) { + dimensions = {SkTMax(1, dimensions.width() /2), + SkTMax(1, dimensions.height()/2)}; + if (dimensions != data->pixmap(i).dimensions()) { return false; } - - SkColorType colorType = srcData[0].colorType(); - - int currentWidth = baseWidth; - int currentHeight = baseHeight; - for (int i = 1; i < numMipLevels; ++i) { - currentWidth = SkTMax(1, currentWidth / 2); - currentHeight = SkTMax(1, currentHeight / 2); - - if (srcData[i].colorType() != colorType) { // all levels must have same colorType - return false; - } - - if (srcData[i].width() != currentWidth || srcData[i].height() != currentHeight) { - return false; - } + if (colorType != data->pixmap(i).colorType()) { + return false; } - } else if (numMipLevels != 1) { - return false; } - return true; } -GrBackendTexture GrGpu::createBackendTexture(int w, int h, const GrBackendFormat& format, - GrMipMapped mipMapped, GrRenderable renderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrProtected isProtected) { +GrBackendTexture GrGpu::createBackendTexture(SkISize dimensions, + const GrBackendFormat& format, + GrRenderable renderable, + const BackendTextureData* data, + int numMipLevels, + GrProtected isProtected) { const GrCaps* caps = this->caps(); if (!format.isValid()) { @@ -757,19 +780,26 @@ GrBackendTexture GrGpu::createBackendTexture(int w, int h, const GrBackendFormat return {}; } - if (w < 1 || w > caps->maxTextureSize() || h < 1 || h > caps->maxTextureSize()) { + if (data && data->type() == BackendTextureData::Type::kPixmaps) { + auto ct = SkColorTypeToGrColorType(data->pixmap(0).colorType()); + if (!caps->areColorTypeAndFormatCompatible(ct, format)) { + return {}; + } + } + + if (dimensions.isEmpty() || dimensions.width() > caps->maxTextureSize() || + dimensions.height() > caps->maxTextureSize()) { return {}; } - // TODO: maybe just ignore the mipMapped parameter in this case - if (mipMapped == GrMipMapped::kYes && !this->caps()->mipMapSupport()) { + if (numMipLevels > 1 && !this->caps()->mipMapSupport()) { return {}; } - if (!MipMapsAreCorrect(w, h, mipMapped, srcData, numMipLevels)) { + if (!MipMapsAreCorrect(dimensions, data, numMipLevels)) { return {}; } - return this->onCreateBackendTexture(w, h, format, mipMapped, renderable, - srcData, numMipLevels, color, isProtected); + return this->onCreateBackendTexture(dimensions, format, renderable, data, numMipLevels, + isProtected); } diff --git a/third_party/skia/src/gpu/GrGpu.h b/third_party/skia/src/gpu/GrGpu.h index 580345778eac..5fd9ea055cff 100644 --- a/third_party/skia/src/gpu/GrGpu.h +++ b/third_party/skia/src/gpu/GrGpu.h @@ -15,7 +15,6 @@ #include "src/gpu/GrAllocator.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrOpsRenderPass.h" -#include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrSamplePatternDictionary.h" #include "src/gpu/GrSwizzle.h" #include "src/gpu/GrTextureProducer.h" @@ -342,7 +341,7 @@ class GrGpu : public SkRefCnt { GrRenderTarget* renderTarget, GrSurfaceOrigin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo&, const GrOpsRenderPass::StencilLoadAndStoreInfo&, - const SkTArray& sampledProxies) = 0; + const SkTArray& sampledProxies) = 0; // Called by GrDrawingManager when flushing. // Provides a hook for post-flush actions (e.g. Vulkan command buffer submits). This will also @@ -358,12 +357,12 @@ class GrGpu : public SkRefCnt { virtual bool waitFence(GrFence, uint64_t timeout = 1000) = 0; virtual void deleteFence(GrFence) const = 0; - virtual sk_sp SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned = true) = 0; - virtual sk_sp wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) = 0; - virtual void insertSemaphore(sk_sp semaphore) = 0; - virtual void waitSemaphore(sk_sp semaphore) = 0; + virtual std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore( + bool isOwned = true) = 0; + virtual std::unique_ptr wrapBackendSemaphore(const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, GrWrapOwnership ownership) = 0; + virtual void insertSemaphore(GrSemaphore* semaphore) = 0; + virtual void waitSemaphore(GrSemaphore* semaphore) = 0; virtual void checkFinishProcs() = 0; @@ -372,7 +371,7 @@ class GrGpu : public SkRefCnt { * the backend, this may return a GrSemaphore. If so, other contexts should wait on that * semaphore before using this texture. */ - virtual sk_sp prepareTextureForCrossContextUsage(GrTexture*) = 0; + virtual std::unique_ptr prepareTextureForCrossContextUsage(GrTexture*) = 0; /////////////////////////////////////////////////////////////////////////// // Debugging and Stats @@ -454,27 +453,54 @@ class GrGpu : public SkRefCnt { Stats* stats() { return &fStats; } void dumpJSON(SkJSONWriter*) const; + /** Used to initialize a backend texture with either a constant color or from pixmaps. */ + class BackendTextureData { + public: + enum class Type { kColor, kPixmaps }; + BackendTextureData() = default; + BackendTextureData(const SkColor4f& color) : fType(Type::kColor), fColor(color) {} + BackendTextureData(const SkPixmap pixmaps[]) : fType(Type::kPixmaps), fPixmaps(pixmaps) { + SkASSERT(pixmaps); + } + + Type type() const { return fType; } + SkColor4f color() const { + SkASSERT(this->type() == Type::kColor); + return fColor; + } + + const SkPixmap& pixmap(int i) const { return fPixmaps[i]; } + const SkPixmap* pixmaps() const { return fPixmaps; } + + private: + Type fType = Type::kColor; + union { + SkColor4f fColor = {0, 0, 0, 0}; + const SkPixmap* fPixmaps; + }; + }; + /** * Creates a texture directly in the backend API without wrapping it in a GrTexture. * Must be matched with a call to deleteBackendTexture(). * - * If srcData is provided it will be used to initialize the texture. If srcData is - * not provided but a color is then it is used to initialize the texture. If neither - * srcData nor a color is provided then the texture is left uninitialized. + * numMipLevels must be 1 or be the number of levels for a complete MIP hierarchy with + * dimensions as the base size. Otherwise this will fail. + * + * If data is null the texture is uninitialized. * - * If srcData is provided and mipMapped is kYes then data for all the miplevels must be - * provided (or the method will fail). If only a color is provided and mipMapped is kYes - * then all the mip levels will be allocated and initialized to the color. If neither - * srcData nor a color is provided but mipMapped is kYes then the mip levels will be allocated - * but left uninitialized. + * If data represents a color then all texture levels are cleared to that color. * - * Note: if more than one pixmap is provided (i.e., for mipmap levels) they must all share - * the same SkColorType. + * If data represents pixmaps then it must have numMipLevels pixmaps and they must be sized + * correctly according to the MIP sizes implied by dimensions. They must all have the same color + * type and that color type must be compatible with the texture format. */ - GrBackendTexture createBackendTexture(int w, int h, const GrBackendFormat&, - GrMipMapped, GrRenderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrProtected isProtected); + GrBackendTexture createBackendTexture(SkISize dimensions, + const GrBackendFormat&, + GrRenderable, + const BackendTextureData* data, + int numMipLevels, + GrProtected isProtected); /** * Frees a texture created by createBackendTexture(). If ownership of the backend @@ -521,8 +547,9 @@ class GrGpu : public SkRefCnt { // Determines whether a texture will need to be rescaled in order to be used with the // GrSamplerState. - static bool IsACopyNeededForRepeatWrapMode(const GrCaps*, GrTextureProxy* texProxy, - int width, int height, + static bool IsACopyNeededForRepeatWrapMode(const GrCaps*, + GrTextureProxy* texProxy, + SkISize dimensions, GrSamplerState::Filter, GrTextureProducer::CopyParams*, SkScalar scaleAdjust[2]); @@ -541,23 +568,10 @@ class GrGpu : public SkRefCnt { } } - /** - * Returns a key that represents the sampler that will be created for the passed in parameters. - * Currently this key is only used when we are building a vulkan pipeline with immutable - * samplers. In that case, we need our cache key to also contain this key. - * - * A return value of 0 indicates that the program/pipeline we are creating is not affected by - * the sampler. - */ - virtual uint32_t getExtraSamplerKeyForProgram(const GrSamplerState&, const GrBackendFormat&) { - return 0; - } - virtual void storeVkPipelineCacheData() {} protected: - static bool MipMapsAreCorrect(int baseWidth, int baseHeight, GrMipMapped, - const SkPixmap srcData[], int numMipLevels); + static bool MipMapsAreCorrect(SkISize, const BackendTextureData*, int numMipLevels); // Handles cases where a surface will be updated without a call to flushRenderTarget. void didWriteToSurface(GrSurface* surface, GrSurfaceOrigin origin, const SkIRect* bounds, @@ -569,10 +583,12 @@ class GrGpu : public SkRefCnt { sk_sp fCaps; private: - virtual GrBackendTexture onCreateBackendTexture(int w, int h, const GrBackendFormat&, - GrMipMapped, GrRenderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrProtected) = 0; + virtual GrBackendTexture onCreateBackendTexture(SkISize dimensions, + const GrBackendFormat&, + GrRenderable, + const BackendTextureData*, + int numMipLevels, + GrProtected isProtected) = 0; // called when the 3D context state is unknown. Subclass should emit any // assumed 3D context state and dirty any state cache. @@ -652,7 +668,7 @@ class GrGpu : public SkRefCnt { virtual bool onCopySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRect, const SkIPoint& dstPoint) = 0; - virtual void onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, + virtual bool onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, const GrFlushInfo&, const GrPrepareForExternalIORequests&) = 0; #ifdef SK_ENABLE_DUMP_GPU diff --git a/third_party/skia/src/gpu/GrImageInfo.h b/third_party/skia/src/gpu/GrImageInfo.h index 800d3f433f3c..12ebdb220528 100644 --- a/third_party/skia/src/gpu/GrImageInfo.h +++ b/third_party/skia/src/gpu/GrImageInfo.h @@ -25,23 +25,31 @@ class GrImageInfo { GrImageInfo(GrColorType ct, SkAlphaType at, sk_sp cs, const SkISize& dimensions) : fColorInfo(ct, at, std::move(cs)), fDimensions(dimensions) {} + GrImageInfo(const GrColorInfo& info, const SkISize& dimensions) + : fColorInfo(info), fDimensions(dimensions) {} + + GrImageInfo(GrColorInfo&& info, const SkISize& dimensions) + : fColorInfo(std::move(info)), fDimensions(dimensions) {} + GrImageInfo(const GrImageInfo&) = default; GrImageInfo(GrImageInfo&&) = default; GrImageInfo& operator=(const GrImageInfo&) = default; GrImageInfo& operator=(GrImageInfo&&) = default; - GrImageInfo makeColorType(GrColorType ct) { + GrImageInfo makeColorType(GrColorType ct) const { return {ct, this->alphaType(), this->refColorSpace(), this->width(), this->height()}; } - GrImageInfo makeAlphaType(SkAlphaType at) { + GrImageInfo makeAlphaType(SkAlphaType at) const { return {this->colorType(), at, this->refColorSpace(), this->width(), this->height()}; } - GrImageInfo makeWH(int width, int height) { + GrImageInfo makeWH(int width, int height) const { return {this->colorType(), this->alphaType(), this->refColorSpace(), width, height}; } + const GrColorInfo& colorInfo() const { return fColorInfo; } + GrColorType colorType() const { return fColorInfo.colorType(); } SkAlphaType alphaType() const { return fColorInfo.alphaType(); } diff --git a/third_party/skia/src/gpu/GrImageTextureMaker.cpp b/third_party/skia/src/gpu/GrImageTextureMaker.cpp index 13ca46dad3bc..a0b9aae506aa 100644 --- a/third_party/skia/src/gpu/GrImageTextureMaker.cpp +++ b/third_party/skia/src/gpu/GrImageTextureMaker.cpp @@ -15,13 +15,11 @@ GrImageTextureMaker::GrImageTextureMaker(GrRecordingContext* context, const SkImage* client, SkImage::CachingHint chint, bool useDecal) - : INHERITED(context, client->width(), client->height(), client->imageInfo().colorInfo(), - useDecal) + : INHERITED(context, client->imageInfo(), useDecal) , fImage(static_cast(client)) , fCachingHint(chint) { SkASSERT(client->isLazyGenerated()); - GrMakeKeyFromImageID(&fOriginalKey, client->uniqueID(), - SkIRect::MakeWH(this->width(), this->height())); + GrMakeKeyFromImageID(&fOriginalKey, client->uniqueID(), SkIRect::MakeSize(this->dimensions())); } sk_sp GrImageTextureMaker::refOriginalTextureProxy(bool willBeMipped, @@ -43,12 +41,10 @@ void GrImageTextureMaker::makeCopyKey(const CopyParams& stretch, GrUniqueKey* pa GrYUVAImageTextureMaker::GrYUVAImageTextureMaker(GrContext* context, const SkImage* client, bool useDecal) - : INHERITED(context, client->width(), client->height(), client->imageInfo().colorInfo(), - useDecal) + : INHERITED(context, client->imageInfo(), useDecal) , fImage(static_cast(client)) { SkASSERT(as_IB(client)->isYUVA()); - GrMakeKeyFromImageID(&fOriginalKey, client->uniqueID(), - SkIRect::MakeWH(this->width(), this->height())); + GrMakeKeyFromImageID(&fOriginalKey, client->uniqueID(), SkIRect::MakeSize(this->dimensions())); } sk_sp GrYUVAImageTextureMaker::refOriginalTextureProxy(bool willBeMipped, diff --git a/third_party/skia/src/gpu/GrLegacyDirectContext.cpp b/third_party/skia/src/gpu/GrLegacyDirectContext.cpp index 15746e9d71e5..34002a88faeb 100644 --- a/third_party/skia/src/gpu/GrLegacyDirectContext.cpp +++ b/third_party/skia/src/gpu/GrLegacyDirectContext.cpp @@ -122,6 +122,7 @@ class GrLegacyDirectContext : public GrContext { typedef GrContext INHERITED; }; +#ifdef SK_GL sk_sp GrContext::MakeGL(sk_sp interface) { GrContextOptions defaultOptions; return MakeGL(std::move(interface), defaultOptions); @@ -150,6 +151,7 @@ sk_sp GrContext::MakeGL(sk_sp interface, } return context; } +#endif sk_sp GrContext::MakeMock(const GrMockOptions* mockOptions) { GrContextOptions defaultOptions; @@ -222,12 +224,12 @@ sk_sp GrContext::MakeMetal(void* device, void* queue, const GrContext #endif #ifdef SK_DAWN -sk_sp GrContext::MakeDawn(const dawn::Device& device) { +sk_sp GrContext::MakeDawn(const wgpu::Device& device) { GrContextOptions defaultOptions; return MakeDawn(device, defaultOptions); } -sk_sp GrContext::MakeDawn(const dawn::Device& device, const GrContextOptions& options) { +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()); diff --git a/third_party/skia/src/gpu/GrOnFlushResourceProvider.cpp b/third_party/skia/src/gpu/GrOnFlushResourceProvider.cpp index 2cf4af869ccf..8cb748f236ed 100644 --- a/third_party/skia/src/gpu/GrOnFlushResourceProvider.cpp +++ b/third_party/skia/src/gpu/GrOnFlushResourceProvider.cpp @@ -50,7 +50,8 @@ void GrOnFlushResourceProvider::addTextureResolveTask(sk_sp text } auto task = static_cast(fDrawingMgr->fOnFlushRenderTasks.push_back( sk_make_sp()).get()); - task->addProxy(textureProxy, resolveFlags, *this->caps()); + task->addProxy(GrSurfaceProxyView(textureProxy, textureProxy->origin(), GrSwizzle()), + resolveFlags, *this->caps()); task->makeClosed(*this->caps()); } diff --git a/third_party/skia/src/gpu/GrOpFlushState.cpp b/third_party/skia/src/gpu/GrOpFlushState.cpp index 05e42e18ac72..60ffa51c4781 100644 --- a/third_party/skia/src/gpu/GrOpFlushState.cpp +++ b/third_party/skia/src/gpu/GrOpFlushState.cpp @@ -38,13 +38,13 @@ void GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp( GrPipeline::InitArgs pipelineArgs; pipelineArgs.fInputFlags = pipelineFlags; - pipelineArgs.fDstProxy = this->dstProxy(); + pipelineArgs.fDstProxyView = this->dstProxyView(); pipelineArgs.fCaps = &this->caps(); pipelineArgs.fUserStencil = stencilSettings; pipelineArgs.fOutputSwizzle = this->drawOpArgs().outputSwizzle(); - GrPipeline* pipeline = this->allocator()->make(pipelineArgs, - std::move(processorSet), - this->detachAppliedClip()); + auto pipeline = this->allocator()->make(pipelineArgs, + std::move(processorSet), + this->detachAppliedClip()); while (fCurrDraw != fDraws.end() && fCurrDraw->fOp == op) { GrDeferredUploadToken drawToken = fTokenTracker->nextTokenToFlush(); @@ -55,12 +55,15 @@ void GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp( } GrProgramInfo programInfo(this->proxy()->numSamples(), - this->proxy()->origin(), - *pipeline, - *fCurrDraw->fGeometryProcessor, + this->proxy()->numStencilSamples(), + this->proxy()->backendFormat(), + this->view()->origin(), + pipeline, + fCurrDraw->fGeometryProcessor, fCurrDraw->fFixedDynamicState, fCurrDraw->fDynamicStateArrays, - fCurrDraw->fMeshCnt); + fCurrDraw->fMeshCnt, + fCurrDraw->fPrimitiveType); this->opsRenderPass()->draw(programInfo, fCurrDraw->fMeshes, fCurrDraw->fMeshCnt, chainBounds); @@ -138,9 +141,10 @@ GrDeferredUploadToken GrOpFlushState::addASAPUpload(GrDeferredTextureUploadFn&& } void GrOpFlushState::recordDraw( - sk_sp gp, const GrMesh meshes[], int meshCnt, + const GrGeometryProcessor* gp, const GrMesh meshes[], int meshCnt, const GrPipeline::FixedDynamicState* fixedDynamicState, - const GrPipeline::DynamicStateArrays* dynamicStateArrays) { + const GrPipeline::DynamicStateArrays* dynamicStateArrays, + GrPrimitiveType primitiveType) { SkASSERT(fOpArgs); SkDEBUGCODE(fOpArgs->validate()); bool firstDraw = fDraws.begin() == fDraws.end(); @@ -157,12 +161,13 @@ void GrOpFlushState::recordDraw( dynamicStateArrays->fPrimitiveProcessorTextures[i]->ref(); } } - draw.fGeometryProcessor = std::move(gp); + draw.fGeometryProcessor = gp; draw.fFixedDynamicState = fixedDynamicState; draw.fDynamicStateArrays = dynamicStateArrays; draw.fMeshes = meshes; draw.fMeshCnt = meshCnt; draw.fOp = fOpArgs->op(); + draw.fPrimitiveType = primitiveType; if (firstDraw) { fBaseDrawToken = token; } diff --git a/third_party/skia/src/gpu/GrOpFlushState.h b/third_party/skia/src/gpu/GrOpFlushState.h index 27dac2477403..b9340975a92d 100644 --- a/third_party/skia/src/gpu/GrOpFlushState.h +++ b/third_party/skia/src/gpu/GrOpFlushState.h @@ -15,6 +15,7 @@ #include "src/gpu/GrBufferAllocPool.h" #include "src/gpu/GrDeferredUpload.h" #include "src/gpu/GrRenderTargetProxy.h" +#include "src/gpu/GrSurfaceProxyView.h" #include "src/gpu/ops/GrMeshDrawOp.h" class GrGpu; @@ -57,37 +58,40 @@ class GrOpFlushState final : public GrDeferredUploadTarget, public GrMeshDrawOp: /** Additional data required on a per-op basis when executing GrOps. */ struct OpArgs { - explicit OpArgs(GrOp* op, GrRenderTargetProxy* proxy, GrAppliedClip* appliedClip, - const GrXferProcessor::DstProxy& dstProxy) - : fOp(op) - , fProxy(proxy) - , fAppliedClip(appliedClip) - , fDstProxy(dstProxy) { + // TODO: why does OpArgs have the op we're going to pass it to as a member? Remove it. + explicit OpArgs(GrOp* op, GrSurfaceProxyView* surfaceView, GrAppliedClip* appliedClip, + const GrXferProcessor::DstProxyView& dstProxyView) + : fOp(op) + , fSurfaceView(surfaceView) + , fRenderTargetProxy(surfaceView->asRenderTargetProxy()) + , fAppliedClip(appliedClip) + , fDstProxyView(dstProxyView) { + SkASSERT(surfaceView->asRenderTargetProxy()); } - int numSamples() const { return fProxy->numSamples(); } - GrSurfaceOrigin origin() const { return fProxy->origin(); } - GrSwizzle outputSwizzle() const { return fProxy->outputSwizzle(); } + GrSurfaceOrigin origin() const { return fSurfaceView->origin(); } + GrSwizzle outputSwizzle() const { return fSurfaceView->swizzle(); } GrOp* op() { return fOp; } - GrRenderTargetProxy* proxy() const { return fProxy; } - GrRenderTarget* renderTarget() const { return fProxy->peekRenderTarget(); } + const GrSurfaceProxyView* view() const { return fSurfaceView; } + GrRenderTargetProxy* proxy() const { return fRenderTargetProxy; } GrAppliedClip* appliedClip() { return fAppliedClip; } const GrAppliedClip* appliedClip() const { return fAppliedClip; } - const GrXferProcessor::DstProxy& dstProxy() const { return fDstProxy; } + const GrXferProcessor::DstProxyView& dstProxyView() const { return fDstProxyView; } #ifdef SK_DEBUG void validate() const { SkASSERT(fOp); - SkASSERT(fProxy); + SkASSERT(fSurfaceView); } #endif private: - GrOp* fOp; - GrRenderTargetProxy* fProxy; - GrAppliedClip* fAppliedClip; - GrXferProcessor::DstProxy fDstProxy; // TODO: do we still need the dst proxy here? + GrOp* fOp; + GrSurfaceProxyView* fSurfaceView; + GrRenderTargetProxy* fRenderTargetProxy; + GrAppliedClip* fAppliedClip; + GrXferProcessor::DstProxyView fDstProxyView; // TODO: do we still need the dst proxy here? }; void setOpArgs(OpArgs* opArgs) { fOpArgs = opArgs; } @@ -98,11 +102,11 @@ class GrOpFlushState final : public GrDeferredUploadTarget, public GrMeshDrawOp: return *fOpArgs; } - void setSampledProxyArray(SkTArray* sampledProxies) { + void setSampledProxyArray(SkTArray* sampledProxies) { fSampledProxies = sampledProxies; } - SkTArray* sampledProxyArray() override { + SkTArray* sampledProxyArray() override { return fSampledProxies; } @@ -113,9 +117,9 @@ class GrOpFlushState final : public GrDeferredUploadTarget, public GrMeshDrawOp: GrDeferredUploadToken addASAPUpload(GrDeferredTextureUploadFn&&) final; /** Overrides of GrMeshDrawOp::Target. */ - void recordDraw(sk_sp, const GrMesh[], int meshCnt, + void recordDraw(const GrGeometryProcessor*, const GrMesh[], int meshCnt, const GrPipeline::FixedDynamicState*, - const GrPipeline::DynamicStateArrays*) final; + const GrPipeline::DynamicStateArrays*, GrPrimitiveType) final; void* makeVertexSpace(size_t vertexSize, int vertexCount, sk_sp*, int* startVertex) final; uint16_t* makeIndexSpace(int indexCount, sk_sp*, int* startIndex) final; @@ -127,10 +131,13 @@ class GrOpFlushState final : public GrDeferredUploadTarget, public GrMeshDrawOp: int* actualIndexCount) final; void putBackIndices(int indexCount) final; void putBackVertices(int vertices, size_t vertexStride) final; - GrRenderTargetProxy* proxy() const final { return fOpArgs->proxy(); } - const GrAppliedClip* appliedClip() final { return fOpArgs->appliedClip(); } + const GrSurfaceProxyView* view() const { return this->drawOpArgs().view(); } + GrRenderTargetProxy* proxy() const final { return this->drawOpArgs().proxy(); } + const GrAppliedClip* appliedClip() const final { return this->drawOpArgs().appliedClip(); } GrAppliedClip detachAppliedClip() final; - const GrXferProcessor::DstProxy& dstProxy() const final { return fOpArgs->dstProxy(); } + const GrXferProcessor::DstProxyView& dstProxyView() const final { + return this->drawOpArgs().dstProxyView(); + } GrDeferredUploadTarget* deferredUploadTarget() final { return this; } const GrCaps& caps() const final; GrResourceProvider* resourceProvider() const final { return fResourceProvider; } @@ -158,12 +165,16 @@ class GrOpFlushState final : public GrDeferredUploadTarget, public GrMeshDrawOp: // the shared state once and then issue draws for each mesh. struct Draw { ~Draw(); - sk_sp fGeometryProcessor; - const GrPipeline::FixedDynamicState* fFixedDynamicState; - const GrPipeline::DynamicStateArrays* fDynamicStateArrays; + // The geometry processor is always forced to be in an arena allocation or appears on + // the stack (for CCPR). In either case this object does not need to manage its + // lifetime. + const GrGeometryProcessor* fGeometryProcessor = nullptr; + const GrPipeline::FixedDynamicState* fFixedDynamicState = nullptr; + const GrPipeline::DynamicStateArrays* fDynamicStateArrays = nullptr; const GrMesh* fMeshes = nullptr; const GrOp* fOp = nullptr; int fMeshCnt = 0; + GrPrimitiveType fPrimitiveType; }; // Storage for ops' pipelines, draws, and inline uploads. @@ -188,7 +199,7 @@ class GrOpFlushState final : public GrDeferredUploadTarget, public GrMeshDrawOp: // This field is only transiently set during flush. Each GrOpsTask will set it to point to an // array of proxies it uses before call onPrepare and onExecute. - SkTArray* fSampledProxies; + SkTArray* fSampledProxies; GrGpu* fGpu; GrResourceProvider* fResourceProvider; diff --git a/third_party/skia/src/gpu/GrOpsTask.cpp b/third_party/skia/src/gpu/GrOpsTask.cpp index 4d4236b2d9c4..b57066f90b72 100644 --- a/third_party/skia/src/gpu/GrOpsTask.cpp +++ b/third_party/skia/src/gpu/GrOpsTask.cpp @@ -35,7 +35,7 @@ static const int kMaxOpChainDistance = 10; //////////////////////////////////////////////////////////////////////////////// -using DstProxy = GrXferProcessor::DstProxy; +using DstProxyView = GrXferProcessor::DstProxyView; //////////////////////////////////////////////////////////////////////////////// @@ -123,13 +123,13 @@ inline void GrOpsTask::OpChain::List::validate() const { GrOpsTask::OpChain::OpChain(std::unique_ptr op, GrProcessorSet::Analysis processorAnalysis, - GrAppliedClip* appliedClip, const DstProxy* dstProxy) + GrAppliedClip* appliedClip, const DstProxyView* dstProxyView) : fList{std::move(op)} , fProcessorAnalysis(processorAnalysis) , fAppliedClip(appliedClip) { if (fProcessorAnalysis.requiresDstTexture()) { - SkASSERT(dstProxy && dstProxy->proxy()); - fDstProxy = *dstProxy; + SkASSERT(dstProxyView && dstProxyView->proxy()); + fDstProxyView = *dstProxyView; } fBounds = fList.head()->bounds(); } @@ -141,8 +141,8 @@ void GrOpsTask::OpChain::visitProxies(const GrOp::VisitProxyFunc& func) const { for (const auto& op : GrOp::ChainRange<>(fList.head())) { op.visitProxies(func); } - if (fDstProxy.proxy()) { - func(fDstProxy.proxy(), GrMipMapped::kNo); + if (fDstProxyView.proxy()) { + func(fDstProxyView.proxy(), GrMipMapped::kNo); } if (fAppliedClip) { fAppliedClip->visitProxies(func); @@ -234,13 +234,13 @@ GrOpsTask::OpChain::List GrOpsTask::OpChain::DoConcat( // Attempts to concatenate the given chain onto our own and merge ops across the chains. Returns // whether the operation succeeded. On success, the provided list will be returned empty. bool GrOpsTask::OpChain::tryConcat( - List* list, GrProcessorSet::Analysis processorAnalysis, const DstProxy& dstProxy, + List* list, GrProcessorSet::Analysis processorAnalysis, const DstProxyView& dstProxyView, const GrAppliedClip* appliedClip, const SkRect& bounds, const GrCaps& caps, GrOpMemoryPool* pool, GrAuditTrail* auditTrail) { SkASSERT(!fList.empty()); SkASSERT(!list->empty()); - SkASSERT(fProcessorAnalysis.requiresDstTexture() == SkToBool(fDstProxy.proxy())); - SkASSERT(processorAnalysis.requiresDstTexture() == SkToBool(dstProxy.proxy())); + SkASSERT(fProcessorAnalysis.requiresDstTexture() == SkToBool(fDstProxyView.proxy())); + SkASSERT(processorAnalysis.requiresDstTexture() == SkToBool(dstProxyView.proxy())); // All returns use explicit tuple constructor rather than {a, b} to work around old GCC bug. if (fList.head()->classID() != list->head()->classID() || SkToBool(fAppliedClip) != SkToBool(appliedClip) || @@ -253,7 +253,7 @@ bool GrOpsTask::OpChain::tryConcat( // chain nor combine overlapping Ops. GrRectsTouchOrOverlap(fBounds, bounds)) || (fProcessorAnalysis.requiresDstTexture() != processorAnalysis.requiresDstTexture()) || - (fProcessorAnalysis.requiresDstTexture() && fDstProxy != dstProxy)) { + (fProcessorAnalysis.requiresDstTexture() && fDstProxyView != dstProxyView)) { return false; } @@ -293,8 +293,8 @@ bool GrOpsTask::OpChain::tryConcat( bool GrOpsTask::OpChain::prependChain(OpChain* that, const GrCaps& caps, GrOpMemoryPool* pool, GrAuditTrail* auditTrail) { - if (!that->tryConcat( - &fList, fProcessorAnalysis, fDstProxy, fAppliedClip, fBounds, caps, pool, auditTrail)) { + if (!that->tryConcat(&fList, fProcessorAnalysis, fDstProxyView, fAppliedClip, fBounds, caps, + pool, auditTrail)) { this->validate(); // append failed return false; @@ -305,7 +305,7 @@ bool GrOpsTask::OpChain::prependChain(OpChain* that, const GrCaps& caps, GrOpMem fList = std::move(that->fList); fBounds = that->fBounds; - that->fDstProxy.setProxy(nullptr); + that->fDstProxyView.setProxyView({}); if (that->fAppliedClip) { for (int i = 0; i < that->fAppliedClip->numClipCoverageFragmentProcessors(); ++i) { that->fAppliedClip->detachClipCoverageFragmentProcessor(i); @@ -317,17 +317,18 @@ bool GrOpsTask::OpChain::prependChain(OpChain* that, const GrCaps& caps, GrOpMem std::unique_ptr GrOpsTask::OpChain::appendOp( std::unique_ptr op, GrProcessorSet::Analysis processorAnalysis, - const DstProxy* dstProxy, const GrAppliedClip* appliedClip, const GrCaps& caps, + const DstProxyView* dstProxyView, const GrAppliedClip* appliedClip, const GrCaps& caps, GrOpMemoryPool* pool, GrAuditTrail* auditTrail) { - const GrXferProcessor::DstProxy noDstProxy; - if (!dstProxy) { - dstProxy = &noDstProxy; + const GrXferProcessor::DstProxyView noDstProxyView; + if (!dstProxyView) { + dstProxyView = &noDstProxyView; } SkASSERT(op->isChainHead() && op->isChainTail()); SkRect opBounds = op->bounds(); List chain(std::move(op)); if (!this->tryConcat( - &chain, processorAnalysis, *dstProxy, appliedClip, opBounds, caps, pool, auditTrail)) { + &chain, processorAnalysis, *dstProxyView, appliedClip, opBounds, caps, pool, + auditTrail)) { // append failed, give the op back to the caller. this->validate(); return chain.popHead(); @@ -352,15 +353,15 @@ inline void GrOpsTask::OpChain::validate() const { //////////////////////////////////////////////////////////////////////////////// GrOpsTask::GrOpsTask(sk_sp opMemoryPool, - sk_sp rtProxy, + GrSurfaceProxyView view, GrAuditTrail* auditTrail) - : GrRenderTask(std::move(rtProxy)) + : GrRenderTask(std::move(view)) , fOpMemoryPool(std::move(opMemoryPool)) , fAuditTrail(auditTrail) , fLastClipStackGenID(SK_InvalidUniqueID) SkDEBUGCODE(, fNumClips(0)) { SkASSERT(fOpMemoryPool); - fTarget->setLastRenderTask(this); + fTargetView.proxy()->setLastRenderTask(this); } void GrOpsTask::deleteOps() { @@ -381,11 +382,12 @@ void GrOpsTask::endFlush() { this->deleteOps(); fClipAllocator.reset(); - if (fTarget && this == fTarget->getLastRenderTask()) { - fTarget->setLastRenderTask(nullptr); + GrSurfaceProxy* proxy = fTargetView.proxy(); + if (proxy && this == proxy->getLastRenderTask()) { + proxy->setLastRenderTask(nullptr); } - fTarget.reset(); + fTargetView.reset(); fDeferredProxies.reset(); fSampledProxies.reset(); fAuditTrail = nullptr; @@ -406,13 +408,16 @@ void GrOpsTask::onPrePrepare(GrRecordingContext* context) { for (const auto& chain : fOpChains) { if (chain.shouldExecute()) { - chain.head()->prePrepare(context); + chain.head()->prePrepare(context, + &fTargetView, + chain.appliedClip(), + chain.dstProxyView()); } } } void GrOpsTask::onPrepare(GrOpFlushState* flushState) { - SkASSERT(fTarget->peekRenderTarget()); + SkASSERT(fTargetView.proxy()->peekRenderTarget()); SkASSERT(this->isClosed()); #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK TRACE_EVENT0("skia.gpu", TRACE_FUNC); @@ -433,11 +438,17 @@ void GrOpsTask::onPrepare(GrOpFlushState* flushState) { TRACE_EVENT0("skia.gpu", chain.head()->name()); #endif GrOpFlushState::OpArgs opArgs(chain.head(), - fTarget->asRenderTargetProxy(), + &fTargetView, chain.appliedClip(), - chain.dstProxy()); + chain.dstProxyView()); flushState->setOpArgs(&opArgs); + + // 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.appliedClip()); + // GrOp::prePrepare may or may not have been called at this point chain.head()->prepare(flushState); flushState->setOpArgs(nullptr); @@ -449,7 +460,7 @@ void GrOpsTask::onPrepare(GrOpFlushState* flushState) { static GrOpsRenderPass* create_render_pass( GrGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin, const SkIRect& bounds, GrLoadOp colorLoadOp, const SkPMColor4f& loadClearColor, GrLoadOp stencilLoadOp, - GrStoreOp stencilStoreOp, const SkTArray& sampledProxies) { + GrStoreOp stencilStoreOp, const SkTArray& sampledProxies) { const GrOpsRenderPass::LoadAndStoreInfo kColorLoadStoreInfo { colorLoadOp, GrStoreOp::kStore, @@ -482,7 +493,9 @@ bool GrOpsTask::onExecute(GrOpFlushState* flushState) { return false; } - SkASSERT(fTarget->peekRenderTarget()); + SkASSERT(fTargetView.proxy()); + GrRenderTargetProxy* proxy = fTargetView.proxy()->asRenderTargetProxy(); + SkASSERT(proxy); TRACE_EVENT0("skia.gpu", TRACE_FUNC); // Make sure load ops are not kClear if the GPU needs to use draws for clears @@ -490,9 +503,20 @@ bool GrOpsTask::onExecute(GrOpFlushState* flushState) { !flushState->gpu()->caps()->performColorClearsAsDraws()); const GrCaps& caps = *flushState->gpu()->caps(); - GrRenderTarget* renderTarget = fTarget.get()->peekRenderTarget(); + GrRenderTarget* renderTarget = proxy->peekRenderTarget(); SkASSERT(renderTarget); - GrStencilAttachment* stencil = renderTarget->renderTargetPriv().getStencilAttachment(); + + GrStencilAttachment* stencil = nullptr; + if (int numStencilSamples = proxy->numStencilSamples()) { + if (!flushState->resourceProvider()->attachStencilAttachment( + renderTarget, numStencilSamples)) { + SkDebugf("WARNING: failed to attach a stencil buffer. Rendering will be skipped.\n"); + return false; + } + stencil = renderTarget->renderTargetPriv().getStencilAttachment(); + } + + SkASSERT(!stencil || stencil->numSamples() == proxy->numStencilSamples()); GrLoadOp stencilLoadOp; switch (fInitialStencilContent) { @@ -536,9 +560,12 @@ bool GrOpsTask::onExecute(GrOpFlushState* flushState) { : GrStoreOp::kStore; GrOpsRenderPass* renderPass = create_render_pass( - flushState->gpu(), fTarget->peekRenderTarget(), fTarget->origin(), + flushState->gpu(), proxy->peekRenderTarget(), fTargetView.origin(), fClippedContentBounds, fColorLoadOp, fLoadClearColor, stencilLoadOp, stencilStoreOp, fSampledProxies); + if (!renderPass) { + return false; + } flushState->setOpsRenderPass(renderPass); renderPass->begin(); @@ -552,9 +579,9 @@ bool GrOpsTask::onExecute(GrOpFlushState* flushState) { #endif GrOpFlushState::OpArgs opArgs(chain.head(), - fTarget->asRenderTargetProxy(), + &fTargetView, chain.appliedClip(), - chain.dstProxy()); + chain.dstProxyView()); flushState->setOpArgs(&opArgs); chain.head()->execute(flushState, chain.bounds()); @@ -572,7 +599,9 @@ void GrOpsTask::setColorLoadOp(GrLoadOp op, const SkPMColor4f& color) { fColorLoadOp = op; fLoadClearColor = color; if (GrLoadOp::kClear == fColorLoadOp) { - fTotalBounds.setWH(fTarget->width(), fTarget->height()); + GrSurfaceProxy* proxy = fTargetView.proxy(); + SkASSERT(proxy); + fTotalBounds = proxy->getBoundsRect(); } } @@ -591,7 +620,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 !fTarget->asRenderTargetProxy()->wrapsVkSecondaryCB(); + return !fTargetView.asRenderTargetProxy()->wrapsVkSecondaryCB(); } // Could not empty the task, so an op must be added to handle the clear @@ -661,8 +690,8 @@ void GrOpsTask::dump(bool printDependencies) const { } } -void GrOpsTask::visitProxies_debugOnly(const VisitSurfaceProxyFunc& func) const { - auto textureFunc = [ func ] (GrTextureProxy* tex, GrMipMapped mipmapped) { +void GrOpsTask::visitProxies_debugOnly(const GrOp::VisitProxyFunc& func) const { + auto textureFunc = [ func ] (GrSurfaceProxy* tex, GrMipMapped mipmapped) { func(tex, mipmapped); }; @@ -717,24 +746,26 @@ void GrOpsTask::gatherProxyIntervals(GrResourceAllocator* alloc) const { alloc->addInterval(fDeferredProxies[i], 0, 0, GrResourceAllocator::ActualUse::kNo); } + GrSurfaceProxy* targetProxy = fTargetView.proxy(); + // Add the interval for all the writes to this GrOpsTasks's target if (fOpChains.count()) { unsigned int cur = alloc->curOp(); - alloc->addInterval(fTarget.get(), cur, cur + fOpChains.count() - 1, + alloc->addInterval(targetProxy, cur, cur + fOpChains.count() - 1, GrResourceAllocator::ActualUse::kYes); } else { // This can happen if there is a loadOp (e.g., a clear) but no other draws. In this case we // still need to add an interval for the destination so we create a fake op# for // the missing clear op. - alloc->addInterval(fTarget.get(), alloc->curOp(), alloc->curOp(), + alloc->addInterval(targetProxy, alloc->curOp(), alloc->curOp(), GrResourceAllocator::ActualUse::kYes); alloc->incOps(); } auto gather = [ alloc SkDEBUGCODE(, this) ] (GrSurfaceProxy* p, GrMipMapped) { alloc->addInterval(p, alloc->curOp(), alloc->curOp(), GrResourceAllocator::ActualUse::kYes - SkDEBUGCODE(, fTarget.get() == p)); + SkDEBUGCODE(, fTargetView.proxy() == p)); }; for (const OpChain& recordedOp : fOpChains) { recordedOp.visitProxies(gather); @@ -747,10 +778,11 @@ void GrOpsTask::gatherProxyIntervals(GrResourceAllocator* alloc) const { void GrOpsTask::recordOp( std::unique_ptr op, GrProcessorSet::Analysis processorAnalysis, GrAppliedClip* clip, - const DstProxy* dstProxy, const GrCaps& caps) { + const DstProxyView* dstProxyView, const GrCaps& caps) { SkDEBUGCODE(op->validate();) - SkASSERT(processorAnalysis.requiresDstTexture() == (dstProxy && dstProxy->proxy())); - SkASSERT(fTarget); + SkASSERT(processorAnalysis.requiresDstTexture() == (dstProxyView && dstProxyView->proxy())); + GrSurfaceProxy* proxy = fTargetView.proxy(); + SkASSERT(proxy); // A closed GrOpsTask should never receive new/more ops SkASSERT(!this->isClosed()); @@ -767,7 +799,7 @@ void GrOpsTask::recordOp( // 1) check every op // 2) intersect with something // 3) find a 'blocker' - GR_AUDIT_TRAIL_ADD_OP(fAuditTrail, op.get(), fTarget->uniqueID()); + GR_AUDIT_TRAIL_ADD_OP(fAuditTrail, op.get(), proxy->uniqueID()); GrOP_INFO("opsTask: %d Recording (%s, opID: %u)\n" "\tBounds [L: %.2f, T: %.2f R: %.2f B: %.2f]\n", this->uniqueID(), @@ -782,7 +814,7 @@ void GrOpsTask::recordOp( int i = 0; while (true) { OpChain& candidate = fOpChains.fromBack(i); - op = candidate.appendOp(std::move(op), processorAnalysis, dstProxy, clip, caps, + op = candidate.appendOp(std::move(op), processorAnalysis, dstProxyView, clip, caps, fOpMemoryPool.get(), fAuditTrail); if (!op) { return; @@ -805,7 +837,7 @@ void GrOpsTask::recordOp( clip = fClipAllocator.make(std::move(*clip)); SkDEBUGCODE(fNumClips++;) } - fOpChains.emplace_back(std::move(op), processorAnalysis, clip, dstProxy); + fOpChains.emplace_back(std::move(op), processorAnalysis, clip, dstProxyView); } void GrOpsTask::forwardCombine(const GrCaps& caps) { @@ -843,9 +875,10 @@ GrRenderTask::ExpectedOutcome GrOpsTask::onMakeClosed( const GrCaps& caps, SkIRect* targetUpdateBounds) { this->forwardCombine(caps); if (!this->isNoOp()) { - SkRect clippedContentBounds = SkRect::MakeIWH(fTarget->width(), fTarget->height()); - // TODO: If we can fix up GLPrograms test to always intersect the fTarget bounds then we can - // simply assert here that the bounds intersect. + GrSurfaceProxy* proxy = fTargetView.proxy(); + SkRect clippedContentBounds = proxy->getBoundsRect(); + // TODO: If we can fix up GLPrograms test to always intersect the fTargetView proxy bounds + // then we can simply assert here that the bounds intersect. if (clippedContentBounds.intersect(fTotalBounds)) { clippedContentBounds.roundOut(&fClippedContentBounds); *targetUpdateBounds = fClippedContentBounds; diff --git a/third_party/skia/src/gpu/GrOpsTask.h b/third_party/skia/src/gpu/GrOpsTask.h index c2238120b647..a1b2ed12f9c6 100644 --- a/third_party/skia/src/gpu/GrOpsTask.h +++ b/third_party/skia/src/gpu/GrOpsTask.h @@ -35,10 +35,10 @@ class GrRenderTargetProxy; class GrOpsTask : public GrRenderTask { private: - using DstProxy = GrXferProcessor::DstProxy; + using DstProxyView = GrXferProcessor::DstProxyView; public: - GrOpsTask(sk_sp, sk_sp, GrAuditTrail*); + GrOpsTask(sk_sp, GrSurfaceProxyView, GrAuditTrail*); ~GrOpsTask() override; GrOpsTask* asOpsTask() override { return this; } @@ -58,14 +58,20 @@ class GrOpsTask : public GrRenderTask { void onPrepare(GrOpFlushState* flushState) override; bool onExecute(GrOpFlushState* flushState) override; - void addSampledTexture(GrTextureProxy* proxy) { + void addSampledTexture(GrSurfaceProxy* proxy) { + // This function takes a GrSurfaceProxy because all subsequent uses of the proxy do not + // require the specifics of GrTextureProxy, so this avoids a number of unnecessary virtual + // asTextureProxy() calls. However, sampling the proxy implicitly requires that the proxy + // be a texture. Eventually, when proxies are a unified type with flags, this can just + // assert that capability. + SkASSERT(proxy->asTextureProxy()); fSampledProxies.push_back(proxy); } void addOp(std::unique_ptr op, GrTextureResolveManager textureResolveManager, const GrCaps& caps) { auto addDependency = [ textureResolveManager, &caps, this ] ( - GrTextureProxy* p, GrMipMapped mipmapped) { + GrSurfaceProxy* p, GrMipMapped mipmapped) { this->addDependency(p, mipmapped, textureResolveManager, caps); }; @@ -81,30 +87,35 @@ class GrOpsTask : public GrRenderTask { } void addDrawOp(std::unique_ptr op, const GrProcessorSet::Analysis& processorAnalysis, - GrAppliedClip&& clip, const DstProxy& dstProxy, + GrAppliedClip&& clip, const DstProxyView& dstProxyView, GrTextureResolveManager textureResolveManager, const GrCaps& caps) { auto addDependency = [ textureResolveManager, &caps, this ] ( - GrTextureProxy* p, GrMipMapped mipmapped) { + GrSurfaceProxy* p, GrMipMapped mipmapped) { this->addSampledTexture(p); this->addDependency(p, mipmapped, textureResolveManager, caps); }; op->visitProxies(addDependency); clip.visitProxies(addDependency); - if (dstProxy.proxy()) { - this->addSampledTexture(dstProxy.proxy()); - addDependency(dstProxy.proxy(), GrMipMapped::kNo); + if (dstProxyView.proxy()) { + this->addSampledTexture(dstProxyView.proxy()); + addDependency(dstProxyView.proxy(), GrMipMapped::kNo); } this->recordOp(std::move(op), processorAnalysis, clip.doesClip() ? &clip : nullptr, - &dstProxy, caps); + &dstProxyView, caps); } void discard(); SkDEBUGCODE(void dump(bool printDependencies) const override;) SkDEBUGCODE(int numClips() const override { return fNumClips; }) - SkDEBUGCODE(void visitProxies_debugOnly(const VisitSurfaceProxyFunc&) const override;) + SkDEBUGCODE(void visitProxies_debugOnly(const GrOp::VisitProxyFunc&) const override;) + +#if GR_TEST_UTILS + int numOpChains() const { return fOpChains.count(); } + const GrOp* getChain(int index) const { return fOpChains[index].head(); } +#endif private: bool isNoOp() const { @@ -164,7 +175,8 @@ class GrOpsTask : public GrRenderTask { public: OpChain(const OpChain&) = delete; OpChain& operator=(const OpChain&) = delete; - OpChain(std::unique_ptr, GrProcessorSet::Analysis, GrAppliedClip*, const DstProxy*); + OpChain(std::unique_ptr, GrProcessorSet::Analysis, GrAppliedClip*, + const DstProxyView*); ~OpChain() { // The ops are stored in a GrMemoryPool and must be explicitly deleted via the pool. @@ -176,7 +188,7 @@ class GrOpsTask : public GrRenderTask { GrOp* head() const { return fList.head(); } GrAppliedClip* appliedClip() const { return fAppliedClip; } - const DstProxy& dstProxy() const { return fDstProxy; } + const DstProxyView& dstProxyView() const { return fDstProxyView; } const SkRect& bounds() const { return fBounds; } // Deletes all the ops in the chain via the pool. @@ -191,7 +203,7 @@ class GrOpsTask : public GrRenderTask { // 'op' to the caller upon failure, otherwise null. Fails when the op and chain aren't of // the same op type, have different clips or dst proxies. std::unique_ptr appendOp(std::unique_ptr op, GrProcessorSet::Analysis, - const DstProxy*, const GrAppliedClip*, const GrCaps&, + const DstProxyView*, const GrAppliedClip*, const GrCaps&, GrOpMemoryPool*, GrAuditTrail*); void setSkipExecuteFlag() { fSkipExecute = true; } @@ -225,13 +237,13 @@ class GrOpsTask : public GrRenderTask { void validate() const; - bool tryConcat(List*, GrProcessorSet::Analysis, const DstProxy&, const GrAppliedClip*, + bool tryConcat(List*, GrProcessorSet::Analysis, const DstProxyView&, const GrAppliedClip*, const SkRect& bounds, const GrCaps&, GrOpMemoryPool*, GrAuditTrail*); static List DoConcat(List, List, const GrCaps&, GrOpMemoryPool*, GrAuditTrail*); List fList; GrProcessorSet::Analysis fProcessorAnalysis; - DstProxy fDstProxy; + DstProxyView fDstProxyView; GrAppliedClip* fAppliedClip; SkRect fBounds; @@ -247,8 +259,8 @@ class GrOpsTask : public GrRenderTask { void gatherProxyIntervals(GrResourceAllocator*) const override; - void recordOp(std::unique_ptr, GrProcessorSet::Analysis, GrAppliedClip*, const DstProxy*, - const GrCaps& caps); + void recordOp(std::unique_ptr, GrProcessorSet::Analysis, GrAppliedClip*, + const DstProxyView*, const GrCaps& caps); void forwardCombine(const GrCaps&); @@ -290,7 +302,7 @@ class GrOpsTask : public GrRenderTask { // TODO: We could look into this being a set if we find we're adding a lot of duplicates that is // causing slow downs. - SkTArray fSampledProxies; + SkTArray fSampledProxies; SkRect fTotalBounds = SkRect::MakeEmpty(); SkIRect fClippedContentBounds = SkIRect::MakeEmpty(); diff --git a/third_party/skia/src/gpu/GrPaint.cpp b/third_party/skia/src/gpu/GrPaint.cpp index bc7f5384a827..cb8d479005aa 100644 --- a/third_party/skia/src/gpu/GrPaint.cpp +++ b/third_party/skia/src/gpu/GrPaint.cpp @@ -35,16 +35,10 @@ void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCovera this->setXPFactory(GrCoverageSetOpXPFactory::Get(regionOp, invertCoverage)); } -void GrPaint::addColorTextureProcessor(sk_sp proxy, GrColorType srcColorType, - const SkMatrix& matrix) { - this->addColorFragmentProcessor(GrSimpleTextureEffect::Make(std::move(proxy), srcColorType, - matrix)); -} - -void GrPaint::addColorTextureProcessor(sk_sp proxy, GrColorType srcColorType, +void GrPaint::addColorTextureProcessor(sk_sp proxy, SkAlphaType alphaType, const SkMatrix& matrix, const GrSamplerState& samplerState) { - this->addColorFragmentProcessor(GrSimpleTextureEffect::Make(std::move(proxy), srcColorType, - matrix, samplerState)); + this->addColorFragmentProcessor( + GrSimpleTextureEffect::Make(std::move(proxy), alphaType, matrix, samplerState)); } bool GrPaint::isConstantBlendedColor(SkPMColor4f* constantColor) const { diff --git a/third_party/skia/src/gpu/GrPaint.h b/third_party/skia/src/gpu/GrPaint.h index c2520b0eaf09..a13dc82750cb 100644 --- a/third_party/skia/src/gpu/GrPaint.h +++ b/third_party/skia/src/gpu/GrPaint.h @@ -81,9 +81,8 @@ class GrPaint { * Helpers for adding color or coverage effects that sample a texture. The matrix is applied * to the src space position to compute texture coordinates. */ - void addColorTextureProcessor(sk_sp, GrColorType srcColorType, const SkMatrix&); - void addColorTextureProcessor(sk_sp, GrColorType srcColorType, const SkMatrix&, - const GrSamplerState&); + void addColorTextureProcessor(sk_sp, SkAlphaType, const SkMatrix&, + const GrSamplerState& = GrSamplerState::ClampBilerp()); int numColorFragmentProcessors() const { return fColorFragmentProcessors.count(); } int numCoverageFragmentProcessors() const { return fCoverageFragmentProcessors.count(); } diff --git a/third_party/skia/src/gpu/GrPathProcessor.cpp b/third_party/skia/src/gpu/GrPathProcessor.cpp index 861ff1bd3c70..f944e232c9fb 100644 --- a/third_party/skia/src/gpu/GrPathProcessor.cpp +++ b/third_party/skia/src/gpu/GrPathProcessor.cpp @@ -10,7 +10,9 @@ #include "include/private/SkTo.h" #include "src/gpu/GrShaderCaps.h" #include "src/gpu/gl/GrGLGpu.h" +#ifdef SK_GL #include "src/gpu/gl/GrGLVaryingHandler.h" +#endif #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLPrimitiveProcessor.h" #include "src/gpu/glsl/GrGLSLUniformHandler.h" @@ -56,33 +58,32 @@ class GrGLPathProcessor : public GrGLSLPrimitiveProcessor { void emitTransforms(GrGLSLVaryingHandler* varyingHandler, FPCoordTransformHandler* transformHandler) { - int i = 0; - while (const GrCoordTransform* coordTransform = transformHandler->nextCoordTransform()) { + for (int i = 0; *transformHandler; ++*transformHandler, ++i) { + auto [coordTransform, fp] = transformHandler->get(); GrSLType varyingType = - coordTransform->getMatrix().hasPerspective() ? kHalf3_GrSLType - : kHalf2_GrSLType; + coordTransform.matrix().hasPerspective() ? kHalf3_GrSLType : kHalf2_GrSLType; SkString strVaryingName; strVaryingName.printf("TransformedCoord_%d", i); GrGLSLVarying v(varyingType); +#ifdef SK_GL GrGLVaryingHandler* glVaryingHandler = (GrGLVaryingHandler*) varyingHandler; fInstalledTransforms.push_back().fHandle = - glVaryingHandler->addPathProcessingVarying(strVaryingName.c_str(), - &v).toIndex(); + glVaryingHandler->addPathProcessingVarying(strVaryingName.c_str(), &v).toIndex(); +#endif fInstalledTransforms.back().fType = varyingType; transformHandler->specifyCoordsForCurrCoordTransform( - matrix_to_sksl(coordTransform->getMatrix()), - UniformHandle(), - GrShaderVar(SkString(v.fsIn()), - varyingType)); + matrix_to_sksl(coordTransform.matrix()), + UniformHandle(), + GrShaderVar(SkString(v.fsIn()), varyingType)); ++i; } } void setData(const GrGLSLProgramDataManager& pd, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const GrPathProcessor& pathProc = primProc.cast(); if (pathProc.color() != fColor) { pd.set4fv(fColorUniform, 1, pathProc.color().vec()); @@ -90,9 +91,14 @@ class GrGLPathProcessor : public GrGLSLPrimitiveProcessor { } int t = 0; - while (const GrCoordTransform* coordTransform = transformIter.next()) { + for (auto [transform, fp] : transformRange) { SkASSERT(fInstalledTransforms[t].fHandle.isValid()); - const SkMatrix& m = GetTransformMatrix(pathProc.localMatrix(), *coordTransform); + SkMatrix m; + if (fp.coordTransformsApplyToLocalCoords()) { + m = GetTransformMatrix(transform, pathProc.localMatrix()); + } else { + m = GetTransformMatrix(transform, SkMatrix::I()); + } if (fInstalledTransforms[t].fCurrentValue.cheapEqualTo(m)) { continue; } diff --git a/third_party/skia/src/gpu/GrPathRenderer.cpp b/third_party/skia/src/gpu/GrPathRenderer.cpp index 16d98db46026..d576b4cc8b33 100644 --- a/third_party/skia/src/gpu/GrPathRenderer.cpp +++ b/third_party/skia/src/gpu/GrPathRenderer.cpp @@ -81,13 +81,12 @@ bool GrPathRenderer::IsStrokeHairlineOrEquivalent(const GrStyle& style, const Sk SkDrawTreatAAStrokeAsHairline(stroke.getWidth(), matrix, outCoverage); } - void GrPathRenderer::GetPathDevBounds(const SkPath& path, - int devW, int devH, + SkISize devSize, const SkMatrix& matrix, SkRect* bounds) { if (path.isInverseFillType()) { - *bounds = SkRect::MakeWH(SkIntToScalar(devW), SkIntToScalar(devH)); + *bounds = SkRect::Make(devSize); return; } *bounds = path.getBounds(); diff --git a/third_party/skia/src/gpu/GrPathRenderer.h b/third_party/skia/src/gpu/GrPathRenderer.h index a1d074154aff..ab61a3a3ea4d 100644 --- a/third_party/skia/src/gpu/GrPathRenderer.h +++ b/third_party/skia/src/gpu/GrPathRenderer.h @@ -173,8 +173,7 @@ class GrPathRenderer : public SkRefCnt { // Helper for getting the device bounds of a path. Inverse filled paths will have bounds set // by devSize. Non-inverse path bounds will not necessarily be clipped to devSize. static void GetPathDevBounds(const SkPath& path, - int devW, - int devH, + SkISize devSize, const SkMatrix& matrix, SkRect* bounds); diff --git a/third_party/skia/src/gpu/GrPipeline.cpp b/third_party/skia/src/gpu/GrPipeline.cpp index 3e5e18d68c72..f653542062d5 100644 --- a/third_party/skia/src/gpu/GrPipeline.cpp +++ b/third_party/skia/src/gpu/GrPipeline.cpp @@ -38,11 +38,9 @@ GrPipeline::GrPipeline(const InitArgs& args, fXferProcessor = processors.refXferProcessor(); - if (args.fDstProxy.proxy()) { - SkASSERT(args.fDstProxy.proxy()->isInstantiated()); - - fDstTextureProxy = args.fDstProxy.refProxy(); - fDstTextureOffset = args.fDstProxy.offset(); + if (args.fDstProxyView.proxy()) { + fDstProxyView = args.fDstProxyView.proxyView(); + fDstTextureOffset = args.fDstProxyView.offset(); } // Copy GrFragmentProcessors from GrProcessorSet to Pipeline @@ -62,19 +60,11 @@ GrPipeline::GrPipeline(const InitArgs& args, for (int i = 0; i < appliedClip.numClipCoverageFragmentProcessors(); ++i, ++currFPIdx) { fFragmentProcessors[currFPIdx] = appliedClip.detachClipCoverageFragmentProcessor(i); } - -#ifdef SK_DEBUG - for (int i = 0; i < numTotalProcessors; ++i) { - if (!fFragmentProcessors[i]->isInstantiated()) { - this->markAsBad(); - break; - } - } -#endif } GrXferBarrierType GrPipeline::xferBarrierType(GrTexture* texture, const GrCaps& caps) const { - if (fDstTextureProxy && fDstTextureProxy->peekTexture() == texture) { + auto proxy = fDstProxyView.proxy(); + if (proxy && proxy->peekTexture() == texture) { return kTexture_GrXferBarrierType; } return this->getXferProcessor().xferBarrierType(caps); @@ -98,7 +88,15 @@ GrPipeline::GrPipeline(GrScissorTest scissorTest, sk_sp x } } -uint32_t GrPipeline::getBlendInfoKey() const { +void GrPipeline::genKey(GrProcessorKeyBuilder* b, const GrCaps& caps) const { + // kSnapVerticesToPixelCenters is implemented in a shader. + InputFlags ignoredFlags = InputFlags::kSnapVerticesToPixelCenters; + if (!caps.multisampleDisableSupport()) { + // Ganesh will omit kHWAntialias regardless multisampleDisableSupport. + ignoredFlags |= InputFlags::kHWAntialias; + } + b->add32((uint32_t)fFlags & ~(uint32_t)ignoredFlags); + const GrXferProcessor::BlendInfo& blendInfo = this->getXferProcessor().getBlendInfo(); static const uint32_t kBlendWriteShift = 1; @@ -106,10 +104,21 @@ uint32_t GrPipeline::getBlendInfoKey() const { GR_STATIC_ASSERT(kLast_GrBlendCoeff < (1 << kBlendCoeffShift)); GR_STATIC_ASSERT(kFirstAdvancedGrBlendEquation - 1 < 4); - uint32_t key = blendInfo.fWriteColor; - key |= (blendInfo.fSrcBlend << kBlendWriteShift); - key |= (blendInfo.fDstBlend << (kBlendWriteShift + kBlendCoeffShift)); - key |= (blendInfo.fEquation << (kBlendWriteShift + 2 * kBlendCoeffShift)); + uint32_t blendKey = blendInfo.fWriteColor; + blendKey |= (blendInfo.fSrcBlend << kBlendWriteShift); + blendKey |= (blendInfo.fDstBlend << (kBlendWriteShift + kBlendCoeffShift)); + blendKey |= (blendInfo.fEquation << (kBlendWriteShift + 2 * kBlendCoeffShift)); - return key; + b->add32(blendKey); +} + +void GrPipeline::visitProxies(const GrOp::VisitProxyFunc& func) const { + // This iteration includes any clip coverage FPs + for (auto [sampler, fp] : GrFragmentProcessor::PipelineTextureSamplerRange(*this)) { + bool mipped = (GrSamplerState::Filter::kMipMap == sampler.samplerState().filter()); + func(sampler.proxy(), GrMipMapped(mipped)); + } + if (fDstProxyView.asTextureProxy()) { + func(fDstProxyView.asTextureProxy(), GrMipMapped::kNo); + } } diff --git a/third_party/skia/src/gpu/GrPipeline.h b/third_party/skia/src/gpu/GrPipeline.h index b57e66d200ae..59210622486a 100644 --- a/third_party/skia/src/gpu/GrPipeline.h +++ b/third_party/skia/src/gpu/GrPipeline.h @@ -14,8 +14,8 @@ #include "src/gpu/GrFragmentProcessor.h" #include "src/gpu/GrNonAtomicRef.h" #include "src/gpu/GrProcessorSet.h" -#include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrScissorState.h" +#include "src/gpu/GrSurfaceProxyView.h" #include "src/gpu/GrUserStencilSettings.h" #include "src/gpu/GrWindowRectsState.h" #include "src/gpu/effects/GrCoverageSetOpXP.h" @@ -58,7 +58,7 @@ class GrPipeline { InputFlags fInputFlags = InputFlags::kNone; const GrUserStencilSettings* fUserStencil = &GrUserStencilSettings::kUnused; const GrCaps* fCaps = nullptr; - GrXferProcessor::DstProxy fDstProxy; + GrXferProcessor::DstProxyView fDstProxyView; GrSwizzle fOutputSwizzle; }; @@ -75,7 +75,7 @@ class GrPipeline { SkIRect fScissorRect = SkIRect::EmptyIRect(); // Must have GrPrimitiveProcessor::numTextureSamplers() entries. Can be null if no samplers // or textures are passed using DynamicStateArrays. - GrTextureProxy** fPrimitiveProcessorTextures = nullptr; + GrSurfaceProxy** fPrimitiveProcessorTextures = nullptr; }; /** @@ -87,7 +87,7 @@ class GrPipeline { // Must have GrPrimitiveProcessor::numTextureSamplers() * num_meshes entries. // Can be null if no samplers or to use the same textures for all meshes via' // FixedDynamicState. - GrTextureProxy** fPrimitiveProcessorTextures = nullptr; + GrSurfaceProxy** fPrimitiveProcessorTextures = nullptr; }; /** @@ -132,20 +132,25 @@ class GrPipeline { } } + /** + * This returns the GrSurfaceProxyView for the texture used to access the dst color. If the + * GrXferProcessor does not use the dst color then the proxy on the GrSurfaceProxyView will be + * nullptr. + */ + const GrSurfaceProxyView& dstProxyView() const { + return fDstProxyView; + } + /** * If the GrXferProcessor uses a texture to access the dst color, then this returns that * texture and the offset to the dst contents within that texture. */ - GrTextureProxy* dstTextureProxy(SkIPoint* offset = nullptr) const { + GrTexture* peekDstTexture(SkIPoint* offset = nullptr) const { if (offset) { *offset = fDstTextureOffset; } - return fDstTextureProxy.get(); - } - - GrTexture* peekDstTexture(SkIPoint* offset = nullptr) const { - if (GrTextureProxy* dstProxy = this->dstTextureProxy(offset)) { + if (GrTextureProxy* dstProxy = fDstProxyView.asTextureProxy()) { return dstProxy->peekTexture(); } @@ -186,19 +191,31 @@ class GrPipeline { bool isStencilEnabled() const { return SkToBool(fFlags & Flags::kStencilEnabled); } - SkDEBUGCODE(bool isBad() const { return SkToBool(fFlags & Flags::kIsBad); }) +#ifdef SK_DEBUG + bool allProxiesInstantiated() const { + for (int i = 0; i < fFragmentProcessors.count(); ++i) { + if (!fFragmentProcessors[i]->isInstantiated()) { + return false; + } + } + if (fDstProxyView.proxy()) { + return fDstProxyView.proxy()->isInstantiated(); + } + + return true; + } +#endif GrXferBarrierType xferBarrierType(GrTexture*, const GrCaps&) const; // Used by Vulkan and Metal to cache their respective pipeline objects - uint32_t getBlendInfoKey() const; + void genKey(GrProcessorKeyBuilder*, const GrCaps&) const; const GrSwizzle& outputSwizzle() const { return fOutputSwizzle; } -private: - - SkDEBUGCODE(void markAsBad() { fFlags |= Flags::kIsBad; }) + void visitProxies(const GrOp::VisitProxyFunc&) const; +private: static constexpr uint8_t kLastInputFlag = (uint8_t)InputFlags::kSnapVerticesToPixelCenters; /** This is a continuation of the public "InputFlags" enum. */ @@ -206,9 +223,6 @@ class GrPipeline { kHasStencilClip = (kLastInputFlag << 1), kStencilEnabled = (kLastInputFlag << 2), kScissorEnabled = (kLastInputFlag << 3), -#ifdef SK_DEBUG - kIsBad = (kLastInputFlag << 4), -#endif }; GR_DECL_BITFIELD_CLASS_OPS_FRIENDS(Flags); @@ -217,7 +231,7 @@ class GrPipeline { using FragmentProcessorArray = SkAutoSTArray<8, std::unique_ptr>; - sk_sp fDstTextureProxy; + GrSurfaceProxyView fDstProxyView; SkIPoint fDstTextureOffset; GrWindowRectsState fWindowRectsState; const GrUserStencilSettings* fUserStencilSettings; diff --git a/third_party/skia/src/gpu/GrPrimitiveProcessor.cpp b/third_party/skia/src/gpu/GrPrimitiveProcessor.cpp index fea8e2dc6bc2..270a14cd3243 100644 --- a/third_party/skia/src/gpu/GrPrimitiveProcessor.cpp +++ b/third_party/skia/src/gpu/GrPrimitiveProcessor.cpp @@ -8,13 +8,15 @@ #include "src/gpu/GrPrimitiveProcessor.h" #include "src/gpu/GrCoordTransform.h" +#include "src/gpu/GrFragmentProcessor.h" /** * We specialize the vertex code for each of these matrix types. */ enum MatrixType { - kNoPersp_MatrixType = 0, - kGeneral_MatrixType = 1, + kNone_MatrixType = 0, + kNoPersp_MatrixType = 1, + kGeneral_MatrixType = 2, }; GrPrimitiveProcessor::GrPrimitiveProcessor(ClassID classID) : GrProcessor(classID) {} @@ -24,19 +26,24 @@ const GrPrimitiveProcessor::TextureSampler& GrPrimitiveProcessor::textureSampler return this->onTextureSampler(i); } -uint32_t -GrPrimitiveProcessor::getTransformKey(const SkTArray& coords, - int numCoords) const { +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 < numCoords; ++t) { + for (int t = 0; t < fp.numCoordTransforms(); ++t) { uint32_t key = 0; - const GrCoordTransform* coordTransform = coords[t]; - if (coordTransform->getMatrix().hasPerspective()) { - key |= kGeneral_MatrixType; + const GrCoordTransform& coordTransform = fp.coordTransform(t); + if (!fp.coordTransformsApplyToLocalCoords() && coordTransform.isNoOp()) { + key = kNone_MatrixType; + } else if (coordTransform.matrix().hasPerspective()) { + // 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; } else { - key |= kNoPersp_MatrixType; + key = kNoPersp_MatrixType; } - key <<= t; + key <<= 2*t; SkASSERT(0 == (totalKey & key)); // keys for each transform ought not to overlap totalKey |= key; } @@ -53,22 +60,19 @@ static inline GrSamplerState::Filter clamp_filter(GrTextureType type, return requestedFilter; } -GrPrimitiveProcessor::TextureSampler::TextureSampler(GrTextureType textureType, - const GrSamplerState& samplerState, - const GrSwizzle& swizzle, - uint32_t extraSamplerKey) { - this->reset(textureType, samplerState, swizzle, extraSamplerKey); +GrPrimitiveProcessor::TextureSampler::TextureSampler(const GrSamplerState& samplerState, + const GrBackendFormat& backendFormat, + const GrSwizzle& swizzle) { + this->reset(samplerState, backendFormat, swizzle); } -void GrPrimitiveProcessor::TextureSampler::reset(GrTextureType textureType, - const GrSamplerState& samplerState, - const GrSwizzle& swizzle, - uint32_t extraSamplerKey) { +void GrPrimitiveProcessor::TextureSampler::reset(const GrSamplerState& samplerState, + const GrBackendFormat& backendFormat, + const GrSwizzle& swizzle) { fSamplerState = samplerState; - fSamplerState.setFilterMode(clamp_filter(textureType, samplerState.filter())); + fSamplerState.setFilterMode(clamp_filter(backendFormat.textureType(), samplerState.filter())); + fBackendFormat = backendFormat; fSwizzle = swizzle; - fTextureType = textureType; - fExtraSamplerKey = extraSamplerKey; fIsInitialized = true; } diff --git a/third_party/skia/src/gpu/GrPrimitiveProcessor.h b/third_party/skia/src/gpu/GrPrimitiveProcessor.h index 41f37a3c48c1..4a0bd724176c 100644 --- a/third_party/skia/src/gpu/GrPrimitiveProcessor.h +++ b/third_party/skia/src/gpu/GrPrimitiveProcessor.h @@ -169,13 +169,10 @@ class GrPrimitiveProcessor : public GrProcessor, public GrNonAtomicRef transforms in the array. - * - * TODO: A better name for this function would be "compute" instead of "get". + * Computes a key for the transforms owned by an FP based on the shader code that will be + * emitted by the primitive processor to implement them. */ - uint32_t getTransformKey(const SkTArray& coords, - int numCoords) const; + uint32_t computeCoordTransformsKey(const GrFragmentProcessor& fp) const; /** * Sets a unique key on the GrProcessorKeyBuilder that is directly associated with this geometry @@ -255,30 +252,26 @@ class GrPrimitiveProcessor::TextureSampler { public: TextureSampler() = default; - TextureSampler(GrTextureType, const GrSamplerState&, const GrSwizzle&, - uint32_t extraSamplerKey = 0); + TextureSampler(const GrSamplerState&, const GrBackendFormat&, const GrSwizzle&); TextureSampler(const TextureSampler&) = delete; TextureSampler& operator=(const TextureSampler&) = delete; - void reset(GrTextureType, const GrSamplerState&, const GrSwizzle&, - uint32_t extraSamplerKey = 0); + void reset(const GrSamplerState&, const GrBackendFormat&, const GrSwizzle&); - GrTextureType textureType() const { return fTextureType; } + const GrBackendFormat& backendFormat() const { return fBackendFormat; } + GrTextureType textureType() const { return fBackendFormat.textureType(); } const GrSamplerState& samplerState() const { return fSamplerState; } const GrSwizzle& swizzle() const { return fSwizzle; } - uint32_t extraSamplerKey() const { return fExtraSamplerKey; } - bool isInitialized() const { return fIsInitialized; } private: - GrSamplerState fSamplerState; - GrSwizzle fSwizzle; - GrTextureType fTextureType = GrTextureType::k2D; - uint32_t fExtraSamplerKey = 0; - bool fIsInitialized = false; + GrSamplerState fSamplerState; + GrBackendFormat fBackendFormat; + GrSwizzle fSwizzle; + bool fIsInitialized = false; }; const GrPrimitiveProcessor::TextureSampler& GrPrimitiveProcessor::IthTextureSampler(int i) { diff --git a/third_party/skia/src/gpu/GrProcessor.cpp b/third_party/skia/src/gpu/GrProcessor.cpp index d7a0c57860e9..aae10297504e 100644 --- a/third_party/skia/src/gpu/GrProcessor.cpp +++ b/third_party/skia/src/gpu/GrProcessor.cpp @@ -116,8 +116,8 @@ class MemoryPoolAccessor { #endif GrMemoryPool* pool() const { - static GrMemoryPool gPool(4096, 4096); - return &gPool; + static GrMemoryPool* gPool = new GrMemoryPool(4096, 4096); + return gPool; } }; } diff --git a/third_party/skia/src/gpu/GrProcessor.h b/third_party/skia/src/gpu/GrProcessor.h index 326c6742b8af..60b89abd98ec 100644 --- a/third_party/skia/src/gpu/GrProcessor.h +++ b/third_party/skia/src/gpu/GrProcessor.h @@ -105,11 +105,13 @@ class GrProcessor { kGrDistanceFieldA8TextGeoProc_ClassID, kGrDistanceFieldLCDTextGeoProc_ClassID, kGrDistanceFieldPathGeoProc_ClassID, + kGrDomainEffect_ClassID, kGrDualIntervalGradientColorizer_ClassID, kGrEllipseEffect_ClassID, kGrFillRRectOp_Processor_ClassID, kGrGaussianConvolutionFragmentProcessor_ClassID, kGrGSCoverageProcessor_ClassID, + kGrHSLToRGBFilterEffect_ClassID, kGrImprovedPerlinNoiseEffect_ClassID, kGrLinearGradientLayout_ClassID, kGrLumaColorFilterEffect_ClassID, @@ -126,6 +128,7 @@ class GrProcessor { kGrQuadEffect_ClassID, kGrRadialGradientLayout_ClassID, kGrRectBlurEffect_ClassID, + kGrRGBToHSLFilterEffect_ClassID, kGrRRectBlurEffect_ClassID, kGrRRectShadowGeoProc_ClassID, kGrSimpleTextureEffect_ClassID, @@ -136,7 +139,6 @@ class GrProcessor { kGrSampleMaskProcessor_ClassID, kGrSaturateProcessor_ClassID, kGrSweepGradientLayout_ClassID, - kGrTextureDomainEffect_ClassID, kGrTextureGradientColorizer_ClassID, kGrTiledGradientEffect_ClassID, kGrTwoPointConicalGradientLayout_ClassID, @@ -157,6 +159,7 @@ class GrProcessor { kFwidthSquircleTestProcessor_ClassID, kSwizzleFragmentProcessor_ClassID, kTestFP_ClassID, + kTestRectOp_ClassID, kFlatNormalsFP_ClassID, kMappedNormalsFP_ClassID, kLightingFP_ClassID, @@ -221,6 +224,6 @@ class GrProcessor { CustomFeatures fRequestedFeatures = CustomFeatures::kNone; }; -GR_MAKE_BITFIELD_CLASS_OPS(GrProcessor::CustomFeatures); +GR_MAKE_BITFIELD_CLASS_OPS(GrProcessor::CustomFeatures) #endif diff --git a/third_party/skia/src/gpu/GrProcessorSet.cpp b/third_party/skia/src/gpu/GrProcessorSet.cpp index 60ed4d82b9c5..e9f711f796ee 100644 --- a/third_party/skia/src/gpu/GrProcessorSet.cpp +++ b/third_party/skia/src/gpu/GrProcessorSet.cpp @@ -251,3 +251,10 @@ GrProcessorSet::Analysis GrProcessorSet::finalize( #endif return analysis; } + +void GrProcessorSet::visitProxies(const GrOp::VisitProxyFunc& func) const { + for (auto [sampler, fp] : GrFragmentProcessor::ProcessorSetTextureSamplerRange(*this)) { + bool mipped = (GrSamplerState::Filter::kMipMap == sampler.samplerState().filter()); + func(sampler.proxy(), GrMipMapped(mipped)); + } +} diff --git a/third_party/skia/src/gpu/GrProcessorSet.h b/third_party/skia/src/gpu/GrProcessorSet.h index 95838645d5e3..e155c673743f 100644 --- a/third_party/skia/src/gpu/GrProcessorSet.h +++ b/third_party/skia/src/gpu/GrProcessorSet.h @@ -153,15 +153,7 @@ class GrProcessorSet { SkString dumpProcessors() const; #endif - void visitProxies(const GrOp::VisitProxyFunc& func) const { - for (int i = 0; i < this->numFragmentProcessors(); ++i) { - GrFragmentProcessor::TextureAccessIter iter(this->fragmentProcessor(i)); - while (const GrFragmentProcessor::TextureSampler* sampler = iter.next()) { - bool mipped = (GrSamplerState::Filter::kMipMap == sampler->samplerState().filter()); - func(sampler->proxy(), GrMipMapped(mipped)); - } - } - } + void visitProxies(const GrOp::VisitProxyFunc& func) const; private: GrProcessorSet(Empty) : fXP((const GrXferProcessor*)nullptr), fFlags(kFinalized_Flag) {} diff --git a/third_party/skia/src/gpu/GrProcessorUnitTest.h b/third_party/skia/src/gpu/GrProcessorUnitTest.h index 6b0443e2b1c8..d10f5c1a2113 100644 --- a/third_party/skia/src/gpu/GrProcessorUnitTest.h +++ b/third_party/skia/src/gpu/GrProcessorUnitTest.h @@ -13,6 +13,7 @@ #if GR_TEST_UTILS #include "include/private/SkTArray.h" +#include "src/core/SkArenaAlloc.h" #include "src/gpu/GrTestUtils.h" #include "src/gpu/GrTextureProxy.h" @@ -51,17 +52,15 @@ struct GrProcessorTestData { GrProcessorTestData(SkRandom* random, GrContext* context, const GrRenderTargetContext* renderTargetContext, - sk_sp proxies[2], - GrColorType proxyColorTypes[2]) - : fRandom(random) - , fRenderTargetContext(renderTargetContext) - , fContext(context) { + sk_sp proxies[2]) + : fRandom(random), fRenderTargetContext(renderTargetContext), fContext(context) { SkASSERT(proxies[0] && proxies[1]); fProxies[0] = proxies[0]; fProxies[1] = proxies[1]; - fProxyColorTypes[0] = proxyColorTypes[0]; - fProxyColorTypes[1] = proxyColorTypes[1]; + + fArena = std::unique_ptr(new SkArenaAlloc(1000)); } + SkRandom* fRandom; const GrRenderTargetContext* fRenderTargetContext; @@ -70,12 +69,13 @@ struct GrProcessorTestData { GrProxyProvider* proxyProvider(); const GrCaps* caps(); sk_sp textureProxy(int index) { return fProxies[index]; } - GrColorType textureProxyColorType(int index) { return fProxyColorTypes[index]; } + SkArenaAlloc* allocator() { return fArena.get(); } private: GrContext* fContext; sk_sp fProxies[2]; - GrColorType fProxyColorTypes[2]; + + std::unique_ptr fArena; }; class GrProcessor; @@ -84,7 +84,6 @@ class GrTexture; template class GrProcessorTestFactory : private SkNoncopyable { public: - using Processor = typename ProcessorSmartPtr::element_type; using MakeProc = ProcessorSmartPtr (*)(GrProcessorTestData*); GrProcessorTestFactory(MakeProc makeProc) { @@ -126,7 +125,7 @@ class GrProcessorTestFactory : private SkNoncopyable { }; using GrFragmentProcessorTestFactory = GrProcessorTestFactory>; -using GrGeometryProcessorTestFactory = GrProcessorTestFactory>; +using GrGeometryProcessorTestFactory = GrProcessorTestFactory; class GrXPFactoryTestFactory : private SkNoncopyable { public: @@ -159,7 +158,7 @@ class GrXPFactoryTestFactory : private SkNoncopyable { */ #define GR_DECLARE_GEOMETRY_PROCESSOR_TEST \ static GrGeometryProcessorTestFactory gTestFactory SK_UNUSED; \ - static sk_sp TestCreate(GrProcessorTestData*); + static GrGeometryProcessor* TestCreate(GrProcessorTestData*); #define GR_DECLARE_FRAGMENT_PROCESSOR_TEST \ static GrFragmentProcessorTestFactory gTestFactory SK_UNUSED; \ @@ -193,7 +192,7 @@ class GrXPFactoryTestFactory : private SkNoncopyable { // The unit test relies on static initializers. Just declare the TestCreate function so that // its definitions will compile. #define GR_DECLARE_GEOMETRY_PROCESSOR_TEST \ - static sk_sp TestCreate(GrProcessorTestData*); + static GrGeometryProcessor* TestCreate(GrProcessorTestData*); #define GR_DEFINE_GEOMETRY_PROCESSOR_TEST(X) // The unit test relies on static initializers. Just declare the TestGet function so that diff --git a/third_party/skia/src/gpu/GrProgramDesc.cpp b/third_party/skia/src/gpu/GrProgramDesc.cpp index 9d42d694a5fd..38161c6e555d 100644 --- a/third_party/skia/src/gpu/GrProgramDesc.cpp +++ b/third_party/skia/src/gpu/GrProgramDesc.cpp @@ -45,62 +45,48 @@ static inline uint16_t texture_type_key(GrTextureType type) { } static uint32_t sampler_key(GrTextureType textureType, const GrSwizzle& swizzle, - const GrShaderCaps& caps) { + const GrCaps& caps) { int samplerTypeKey = texture_type_key(textureType); GR_STATIC_ASSERT(2 == sizeof(swizzle.asKey())); uint16_t swizzleKey = 0; - if (caps.textureSwizzleAppliedInShader()) { + if (caps.shaderCaps()->textureSwizzleAppliedInShader()) { swizzleKey = swizzle.asKey(); } return SkToU32(samplerTypeKey | swizzleKey << kSamplerOrImageTypeKeyBits); } -static void add_sampler_keys(GrProcessorKeyBuilder* b, const GrFragmentProcessor& fp, - GrGpu* gpu, const GrShaderCaps& caps) { +static void add_fp_sampler_keys(GrProcessorKeyBuilder* b, const GrFragmentProcessor& fp, + const GrCaps& caps) { int numTextureSamplers = fp.numTextureSamplers(); if (!numTextureSamplers) { return; } for (int i = 0; i < numTextureSamplers; ++i) { const GrFragmentProcessor::TextureSampler& sampler = fp.textureSampler(i); - const GrTexture* tex = sampler.peekTexture(); - uint32_t samplerKey = sampler_key( - tex->texturePriv().textureType(), sampler.swizzle(), caps); - uint32_t extraSamplerKey = gpu->getExtraSamplerKeyForProgram( - sampler.samplerState(), sampler.proxy()->backendFormat()); - if (extraSamplerKey) { - // We first mark the normal sampler key with last bit to flag that it has an extra - // sampler key. We then add both keys. - SkASSERT((samplerKey & (1 << 31)) == 0); - b->add32(samplerKey | (1 << 31)); - b->add32(extraSamplerKey); - } else { - b->add32(samplerKey); - } + const GrBackendFormat& backendFormat = sampler.proxy()->backendFormat(); + + uint32_t samplerKey = sampler_key(backendFormat.textureType(), sampler.swizzle(), caps); + b->add32(samplerKey); + + caps.addExtraSamplerKey(b, sampler.samplerState(), backendFormat); } } -static void add_sampler_keys(GrProcessorKeyBuilder* b, const GrPrimitiveProcessor& pp, - const GrShaderCaps& caps) { +static void add_pp_sampler_keys(GrProcessorKeyBuilder* b, const GrPrimitiveProcessor& pp, + const GrCaps& caps) { int numTextureSamplers = pp.numTextureSamplers(); if (!numTextureSamplers) { return; } for (int i = 0; i < numTextureSamplers; ++i) { const GrPrimitiveProcessor::TextureSampler& sampler = pp.textureSampler(i); - uint32_t samplerKey = sampler_key( - sampler.textureType(), sampler.swizzle(), caps); - uint32_t extraSamplerKey = sampler.extraSamplerKey(); - if (extraSamplerKey) { - // We first mark the normal sampler key with last bit to flag that it has an extra - // sampler key. We then add both keys. - SkASSERT((samplerKey & (1 << 31)) == 0); - b->add32(samplerKey | (1 << 31)); - b->add32(extraSamplerKey); - } else { - b->add32(samplerKey); - } + const GrBackendFormat& backendFormat = sampler.backendFormat(); + + uint32_t samplerKey = sampler_key(backendFormat.textureType(), sampler.swizzle(), caps); + b->add32(samplerKey); + + caps.addExtraSamplerKey(b, sampler.samplerState(), backendFormat); } } @@ -113,11 +99,10 @@ static void add_sampler_keys(GrProcessorKeyBuilder* b, const GrPrimitiveProcesso * transforms, etc, for the space allotted in the meta-key. NOTE, both FPs and GPs share this * function because it is hairy, though FPs do not have attribs, and GPs do not have transforms */ -static bool gen_meta_key(const GrFragmentProcessor& fp, - GrGpu* gpu, - const GrShaderCaps& shaderCaps, - uint32_t transformKey, - GrProcessorKeyBuilder* b) { +static bool gen_fp_meta_key(const GrFragmentProcessor& fp, + const GrCaps& caps, + uint32_t transformKey, + GrProcessorKeyBuilder* b) { size_t processorKeySize = b->size(); uint32_t classID = fp.classID(); @@ -127,7 +112,7 @@ static bool gen_meta_key(const GrFragmentProcessor& fp, return false; } - add_sampler_keys(b, fp, gpu, shaderCaps); + add_fp_sampler_keys(b, fp, caps); uint32_t* key = b->add32n(2); key[0] = (classID << 16) | SkToU32(processorKeySize); @@ -135,10 +120,10 @@ static bool gen_meta_key(const GrFragmentProcessor& fp, return true; } -static bool gen_meta_key(const GrPrimitiveProcessor& pp, - const GrShaderCaps& shaderCaps, - uint32_t transformKey, - GrProcessorKeyBuilder* b) { +static bool gen_pp_meta_key(const GrPrimitiveProcessor& pp, + const GrCaps& caps, + uint32_t transformKey, + GrProcessorKeyBuilder* b) { size_t processorKeySize = b->size(); uint32_t classID = pp.classID(); @@ -148,7 +133,7 @@ static bool gen_meta_key(const GrPrimitiveProcessor& pp, return false; } - add_sampler_keys(b, pp, shaderCaps); + add_pp_sampler_keys(b, pp, caps); uint32_t* key = b->add32n(2); key[0] = (classID << 16) | SkToU32(processorKeySize); @@ -156,9 +141,7 @@ static bool gen_meta_key(const GrPrimitiveProcessor& pp, return true; } -static bool gen_meta_key(const GrXferProcessor& xp, - const GrShaderCaps& shaderCaps, - GrProcessorKeyBuilder* b) { +static bool gen_xp_meta_key(const GrXferProcessor& xp, GrProcessorKeyBuilder* b) { size_t processorKeySize = b->size(); uint32_t classID = xp.classID(); @@ -174,31 +157,33 @@ static bool gen_meta_key(const GrXferProcessor& xp, static bool gen_frag_proc_and_meta_keys(const GrPrimitiveProcessor& primProc, const GrFragmentProcessor& fp, - GrGpu* gpu, - const GrShaderCaps& shaderCaps, + const GrCaps& caps, GrProcessorKeyBuilder* b) { for (int i = 0; i < fp.numChildProcessors(); ++i) { - if (!gen_frag_proc_and_meta_keys(primProc, fp.childProcessor(i), gpu, shaderCaps, b)) { + if (!gen_frag_proc_and_meta_keys(primProc, fp.childProcessor(i), caps, b)) { return false; } } - fp.getGLSLProcessorKey(shaderCaps, b); + fp.getGLSLProcessorKey(*caps.shaderCaps(), b); - return gen_meta_key(fp, gpu, shaderCaps, primProc.getTransformKey(fp.coordTransforms(), - fp.numCoordTransforms()), b); + return gen_fp_meta_key(fp, caps, primProc.computeCoordTransformsKey(fp), b); } bool GrProgramDesc::Build(GrProgramDesc* desc, const GrRenderTarget* renderTarget, - const GrProgramInfo& programInfo, GrPrimitiveType primitiveType, - GrGpu* gpu) { + const GrProgramInfo& programInfo, const GrCaps& caps) { + +#ifdef SK_DEBUG + if (renderTarget) { + SkASSERT(programInfo.backendFormat() == renderTarget->backendFormat()); + } +#endif + // The descriptor is used as a cache key. Thus when a field of the // descriptor will not affect program generation (because of the attribute // bindings in use or other descriptor field settings) it should be set // to a canonical value to avoid duplicate programs with different keys. - const GrShaderCaps& shaderCaps = *gpu->caps()->shaderCaps(); - GR_STATIC_ASSERT(0 == kProcessorKeysOffset % sizeof(uint32_t)); // Make room for everything up to the effect keys. desc->key().reset(); @@ -206,16 +191,16 @@ bool GrProgramDesc::Build(GrProgramDesc* desc, const GrRenderTarget* renderTarge GrProcessorKeyBuilder b(&desc->key()); - programInfo.primProc().getGLSLProcessorKey(shaderCaps, &b); + programInfo.primProc().getGLSLProcessorKey(*caps.shaderCaps(), &b); programInfo.primProc().getAttributeKey(&b); - if (!gen_meta_key(programInfo.primProc(), shaderCaps, 0, &b)) { + if (!gen_pp_meta_key(programInfo.primProc(), caps, 0, &b)) { desc->key().reset(); return false; } for (int i = 0; i < programInfo.pipeline().numFragmentProcessors(); ++i) { const GrFragmentProcessor& fp = programInfo.pipeline().getFragmentProcessor(i); - if (!gen_frag_proc_and_meta_keys(programInfo.primProc(), fp, gpu, shaderCaps, &b)) { + if (!gen_frag_proc_and_meta_keys(programInfo.primProc(), fp, caps, &b)) { desc->key().reset(); return false; } @@ -224,12 +209,12 @@ bool GrProgramDesc::Build(GrProgramDesc* desc, const GrRenderTarget* renderTarge const GrXferProcessor& xp = programInfo.pipeline().getXferProcessor(); const GrSurfaceOrigin* originIfDstTexture = nullptr; GrSurfaceOrigin origin; - if (programInfo.pipeline().dstTextureProxy()) { - origin = programInfo.pipeline().dstTextureProxy()->origin(); + if (programInfo.pipeline().dstProxyView().proxy()) { + origin = programInfo.pipeline().dstProxyView().origin(); originIfDstTexture = &origin; } - xp.getGLSLProcessorKey(shaderCaps, &b, originIfDstTexture); - if (!gen_meta_key(xp, shaderCaps, &b)) { + xp.getGLSLProcessorKey(*caps.shaderCaps(), &b, originIfDstTexture); + if (!gen_xp_meta_key(xp, &b)) { desc->key().reset(); return false; } @@ -253,6 +238,7 @@ bool GrProgramDesc::Build(GrProgramDesc* desc, const GrRenderTarget* renderTarge if (header->fColorFragmentProcessorCnt != programInfo.pipeline().numColorFragmentProcessors() || header->fCoverageFragmentProcessorCnt != programInfo.pipeline().numCoverageFragmentProcessors()) { + desc->key().reset(); return false; } // If we knew the shader won't depend on origin, we could skip this (and use the same program @@ -263,6 +249,16 @@ bool GrProgramDesc::Build(GrProgramDesc* desc, const GrRenderTarget* renderTarge // Ensure enough bits. SkASSERT(header->fProcessorFeatures == (int) programInfo.requestedFeatures()); header->fSnapVerticesToPixelCenters = programInfo.pipeline().snapVerticesToPixelCenters(); - header->fHasPointSize = (primitiveType == GrPrimitiveType::kPoints); + // The base descriptor only stores whether or not the primitiveType is kPoints. Backend- + // specific versions (e.g., Vulkan) require more detail + header->fHasPointSize = (programInfo.primitiveType() == GrPrimitiveType::kPoints); + + header->fInitialKeyLength = desc->keyLength(); + // Fail if the initial key length won't fit in 27 bits. + if (header->fInitialKeyLength != desc->keyLength()) { + desc->key().reset(); + return false; + } + return true; } diff --git a/third_party/skia/src/gpu/GrProgramDesc.h b/third_party/skia/src/gpu/GrProgramDesc.h index 391bfe1a80c5..c0cfaa88c4fe 100644 --- a/third_party/skia/src/gpu/GrProgramDesc.h +++ b/third_party/skia/src/gpu/GrProgramDesc.h @@ -11,42 +11,18 @@ #include "include/private/GrTypesPriv.h" #include "include/private/SkTArray.h" #include "include/private/SkTo.h" -#include "src/core/SkOpts.h" -#include "src/gpu/GrColor.h" -#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" +class GrCaps; class GrProgramInfo; +class GrRenderTarget; class GrShaderCaps; -/** This class describes a program to generate. It also serves as a program cache key */ +/** This class is used to generate a generic program cache key. The Dawn, Metal and Vulkan + * backends derive backend-specific versions which add additional information. + */ class GrProgramDesc { public: - // Creates an uninitialized key that must be populated by GrGpu::buildProgramDesc() - GrProgramDesc() {} - - /** - * Builds a program descriptor. Before the descriptor can be used, the client must call finalize - * on the filled in GrProgramDesc. - * - * @param desc The built and finalized descriptor - * @param renderTarget The target of the draw - * @param programInfo Program information need to build the key - * @param primitiveType Controls whether the shader will output a point size. - * @param gpu Pointer to the GrGpu object the program will be used with. - **/ - static bool Build(GrProgramDesc*, const GrRenderTarget*, const GrProgramInfo&, - GrPrimitiveType, GrGpu*); - - // This is strictly an OpenGL call since the other backends have additional data in their - // keys - static bool BuildFromData(GrProgramDesc* desc, const void* keyData, size_t keyLength) { - if (!SkTFitsIn(keyLength)) { - return false; - } - desc->fKey.reset(SkToInt(keyLength)); - memcpy(desc->fKey.begin(), keyData, keyLength); - return true; - } + bool isValid() const { return !fKey.empty(); } // Returns this as a uint32_t array to be used as a key in the program cache. const uint32_t* asKey() const { @@ -87,23 +63,57 @@ class GrProgramDesc { return !(*this == other); } - // TODO: remove this use of the header - bool hasPointSize() const { return this->header().fHasPointSize; } + uint32_t initialKeyLength() const { return this->header().fInitialKeyLength; } protected: + friend class GrDawnCaps; + friend class GrGLCaps; + friend class GrMockCaps; + friend class GrMtlCaps; + friend class GrVkCaps; + + friend class GrGLGpu; // for ProgramCache to access BuildFromData + + // Creates an uninitialized key that must be populated by Build + GrProgramDesc() {} + + /** + * Builds a program descriptor. + * + * @param desc The built descriptor + * @param renderTarget The target of the draw + * @param programInfo Program information need to build the key + * @param caps the caps + **/ + static bool Build(GrProgramDesc*, const GrRenderTarget*, const GrProgramInfo&, const GrCaps&); + + // This is strictly an OpenGL call since the other backends have additional data in their + // keys + static bool BuildFromData(GrProgramDesc* desc, const void* keyData, size_t keyLength) { + if (!SkTFitsIn(keyLength)) { + return false; + } + desc->fKey.reset(SkToInt(keyLength)); + memcpy(desc->fKey.begin(), keyData, keyLength); + return true; + } + + // TODO: this should be removed and converted to just data added to the key struct KeyHeader { // Set to uniquely identify any swizzling of the shader's output color(s). uint16_t fOutputSwizzle; uint8_t fColorFragmentProcessorCnt; // Can be packed into 4 bits if required. uint8_t fCoverageFragmentProcessorCnt; // Set to uniquely identify the rt's origin, or 0 if the shader does not require this info. - uint8_t fSurfaceOriginKey : 2; - uint8_t fProcessorFeatures : 1; - bool fSnapVerticesToPixelCenters : 1; - bool fHasPointSize : 1; - uint8_t fPad : 3; + uint32_t fSurfaceOriginKey : 2; + uint32_t fProcessorFeatures : 1; + uint32_t fSnapVerticesToPixelCenters : 1; + uint32_t fHasPointSize : 1; + // This is the key size (in bytes) after core key construction. It doesn't include any + // portions added by the platform-specific backends. + uint32_t fInitialKeyLength : 27; }; - GR_STATIC_ASSERT(sizeof(KeyHeader) == 6); + GR_STATIC_ASSERT(sizeof(KeyHeader) == 8); const KeyHeader& header() const { return *this->atOffset(); } @@ -121,7 +131,6 @@ class GrProgramDesc { enum KeyOffsets { kHeaderOffset = 0, kHeaderSize = SkAlign4(sizeof(KeyHeader)), - // Part 4. // This is the offset into the backenend specific part of the key, which includes // per-processor keys. kProcessorKeysOffset = kHeaderOffset + kHeaderSize, @@ -135,7 +144,6 @@ class GrProgramDesc { }; SkSTArray& key() { return fKey; } - const SkSTArray& key() const { return fKey; } private: SkSTArray fKey; diff --git a/third_party/skia/src/gpu/GrProgramInfo.cpp b/third_party/skia/src/gpu/GrProgramInfo.cpp index 3391b61c27ba..2b0fb8459a13 100644 --- a/third_party/skia/src/gpu/GrProgramInfo.cpp +++ b/third_party/skia/src/gpu/GrProgramInfo.cpp @@ -7,24 +7,39 @@ #include "src/gpu/GrProgramInfo.h" +#include "src/gpu/GrStencilSettings.h" + +GrStencilSettings GrProgramInfo::nonGLStencilSettings() const { + GrStencilSettings stencil; + + if (this->pipeline().isStencilEnabled()) { + stencil.reset(*this->pipeline().getUserStencil(), + this->pipeline().hasStencilClip(), + 8); + } + + return stencil; +} #ifdef SK_DEBUG #include "src/gpu/GrMesh.h" #include "src/gpu/GrTexturePriv.h" -void GrProgramInfo::validate() const { - SkASSERT(!fPipeline.isBad()); +void GrProgramInfo::validate(bool flushTime) const { + if (flushTime) { + SkASSERT(fPipeline->allProxiesInstantiated()); + } if (this->hasDynamicPrimProcTextures()) { SkASSERT(!this->hasFixedPrimProcTextures()); - SkASSERT(fPrimProc.numTextureSamplers()); + SkASSERT(fPrimProc->numTextureSamplers()); } else if (this->hasFixedPrimProcTextures()) { - SkASSERT(fPrimProc.numTextureSamplers()); + SkASSERT(fPrimProc->numTextureSamplers()); } else { - SkASSERT(!fPrimProc.numTextureSamplers()); + SkASSERT(!fPrimProc->numTextureSamplers()); } - SkASSERT(!fPipeline.isScissorEnabled() || this->hasFixedScissor() || + SkASSERT(!fPipeline->isScissorEnabled() || this->hasFixedScissor() || this->hasDynamicScissors()); if (this->hasDynamicPrimProcTextures()) { @@ -34,15 +49,16 @@ void GrProgramInfo::validate() const { auto dynamicPrimProcTextures = this->dynamicPrimProcTextures(0); const GrBackendFormat& format = dynamicPrimProcTextures[s]->backendFormat(); - GrTextureType type = dynamicPrimProcTextures[s]->textureType(); + GrTextureType type = dynamicPrimProcTextures[s]->backendFormat().textureType(); GrPixelConfig config = dynamicPrimProcTextures[s]->config(); for (int m = 1; m < fNumDynamicStateArrays; ++m) { dynamicPrimProcTextures = this->dynamicPrimProcTextures(m); auto testProxy = dynamicPrimProcTextures[s]; + SkASSERT(testProxy->asTextureProxy()); SkASSERT(testProxy->backendFormat() == format); - SkASSERT(testProxy->textureType() == type); + SkASSERT(testProxy->backendFormat().textureType() == type); SkASSERT(testProxy->config() == config); } } @@ -100,12 +116,8 @@ void GrProgramInfo::checkMSAAAndMIPSAreResolved() const { } } - GrFragmentProcessor::Iter iter(this->pipeline()); - while (const GrFragmentProcessor* fp = iter.next()) { - for (int s = 0; s < fp->numTextureSamplers(); ++s) { - const auto& textureSampler = fp->textureSampler(s); - assertResolved(textureSampler.peekTexture(), textureSampler.samplerState()); - } + for (auto [sampler, fp] : GrFragmentProcessor::PipelineTextureSamplerRange(this->pipeline())) { + assertResolved(sampler.peekTexture(), sampler.samplerState()); } } @@ -113,8 +125,8 @@ void GrProgramInfo::compatibleWithMeshes(const GrMesh meshes[], int meshCount) c SkASSERT(!fNumDynamicStateArrays || meshCount == fNumDynamicStateArrays); for (int i = 0; i < meshCount; ++i) { - SkASSERT(fPrimProc.hasVertexAttributes() == meshes[i].hasVertexData()); - SkASSERT(fPrimProc.hasInstanceAttributes() == meshes[i].hasInstanceData()); + SkASSERT(fPrimProc->hasVertexAttributes() == meshes[i].hasVertexData()); + SkASSERT(fPrimProc->hasInstanceAttributes() == meshes[i].hasInstanceData()); } } diff --git a/third_party/skia/src/gpu/GrProgramInfo.h b/third_party/skia/src/gpu/GrProgramInfo.h index a4c46e6749ab..2cad573ed0ed 100644 --- a/third_party/skia/src/gpu/GrProgramInfo.h +++ b/third_party/skia/src/gpu/GrProgramInfo.h @@ -13,43 +13,54 @@ #include "src/gpu/GrPrimitiveProcessor.h" class GrMesh; +class GrStencilSettings; class GrProgramInfo { public: GrProgramInfo(int numSamples, + int numStencilSamples, + const GrBackendFormat& backendFormat, GrSurfaceOrigin origin, - const GrPipeline& pipeline, - const GrPrimitiveProcessor& primProc, + const GrPipeline* pipeline, + const GrPrimitiveProcessor* primProc, const GrPipeline::FixedDynamicState* fixedDynamicState, const GrPipeline::DynamicStateArrays* dynamicStateArrays, - int numDynamicStateArrays) - : fNumSamples(numSamples) + int numDynamicStateArrays, + GrPrimitiveType primitiveType) + : fNumRasterSamples(pipeline->isStencilEnabled() ? numStencilSamples : numSamples) + , fIsMixedSampled(fNumRasterSamples > numSamples) + , fBackendFormat(backendFormat) , fOrigin(origin) , fPipeline(pipeline) , fPrimProc(primProc) , fFixedDynamicState(fixedDynamicState) , fDynamicStateArrays(dynamicStateArrays) - , fNumDynamicStateArrays(numDynamicStateArrays) { - fRequestedFeatures = fPrimProc.requestedFeatures(); - for (int i = 0; i < fPipeline.numFragmentProcessors(); ++i) { - fRequestedFeatures |= fPipeline.getFragmentProcessor(i).requestedFeatures(); + , fNumDynamicStateArrays(numDynamicStateArrays) + , fPrimitiveType(primitiveType) { + SkASSERT(fNumRasterSamples > 0); + fRequestedFeatures = fPrimProc->requestedFeatures(); + for (int i = 0; i < fPipeline->numFragmentProcessors(); ++i) { + fRequestedFeatures |= fPipeline->getFragmentProcessor(i).requestedFeatures(); } - fRequestedFeatures |= fPipeline.getXferProcessor().requestedFeatures(); + fRequestedFeatures |= fPipeline->getXferProcessor().requestedFeatures(); - SkDEBUGCODE(this->validate();) + SkDEBUGCODE(this->validate(false);) (void) fNumDynamicStateArrays; // touch this to quiet unused member warnings } GrProcessor::CustomFeatures requestedFeatures() const { return fRequestedFeatures; } - int numSamples() const { return fNumSamples; } + int numRasterSamples() const { return fNumRasterSamples; } + bool isMixedSampled() const { return fIsMixedSampled; } + // The backend format of the destination render target [proxy] + const GrBackendFormat& backendFormat() const { return fBackendFormat; } GrSurfaceOrigin origin() const { return fOrigin; } - const GrPipeline& pipeline() const { return fPipeline; } - const GrPrimitiveProcessor& primProc() const { return fPrimProc; } + const GrPipeline& pipeline() const { return *fPipeline; } + const GrPrimitiveProcessor& primProc() const { return *fPrimProc; } const GrPipeline::FixedDynamicState* fixedDynamicState() const { return fFixedDynamicState; } bool hasDynamicScissors() const { - return fPipeline.isScissorEnabled() && + return fPipeline->isScissorEnabled() && fDynamicStateArrays && fDynamicStateArrays->fScissorRects; } @@ -59,7 +70,7 @@ class GrProgramInfo { return fDynamicStateArrays->fScissorRects[i]; } - bool hasFixedScissor() const { return fPipeline.isScissorEnabled() && fFixedDynamicState; } + bool hasFixedScissor() const { return fPipeline->isScissorEnabled() && fFixedDynamicState; } const SkIRect& fixedScissor() const { SkASSERT(this->hasFixedScissor()); @@ -71,45 +82,58 @@ class GrProgramInfo { return fDynamicStateArrays && fDynamicStateArrays->fPrimitiveProcessorTextures; } - const GrTextureProxy* const* dynamicPrimProcTextures(int i) const { + const GrSurfaceProxy* const* dynamicPrimProcTextures(int i) const { SkASSERT(this->hasDynamicPrimProcTextures()); SkASSERT(i < fNumDynamicStateArrays); return fDynamicStateArrays->fPrimitiveProcessorTextures + - i * fPrimProc.numTextureSamplers(); + i * fPrimProc->numTextureSamplers(); } bool hasFixedPrimProcTextures() const { return fFixedDynamicState && fFixedDynamicState->fPrimitiveProcessorTextures; } - const GrTextureProxy* const* fixedPrimProcTextures() const { + const GrSurfaceProxy* const* fixedPrimProcTextures() const { SkASSERT(this->hasFixedPrimProcTextures()); return fFixedDynamicState->fPrimitiveProcessorTextures; } + GrPrimitiveType primitiveType() const { return fPrimitiveType; } + + // For Dawn, Metal and Vulkan the number of stencil bits is known a priori so we can + // create the stencil settings here. + GrStencilSettings nonGLStencilSettings() const; + + void visitProxies(const GrOp::VisitProxyFunc& fn) const { + fPipeline->visitProxies(fn); + } + #ifdef SK_DEBUG - void validate() const; + void validate(bool flushTime) const; void checkAllInstantiated() const; void checkMSAAAndMIPSAreResolved() const; void compatibleWithMeshes(const GrMesh meshes[], int meshCount) const; bool isNVPR() const { - return fPrimProc.isPathRendering() && !fPrimProc.willUseGeoShader() && - !fPrimProc.numVertexAttributes() && !fPrimProc.numInstanceAttributes(); + return fPrimProc->isPathRendering() && !fPrimProc->willUseGeoShader() && + !fPrimProc->numVertexAttributes() && !fPrimProc->numInstanceAttributes(); } #endif private: - const int fNumSamples; + const int fNumRasterSamples; + const bool fIsMixedSampled; + const GrBackendFormat fBackendFormat; const GrSurfaceOrigin fOrigin; - const GrPipeline& fPipeline; - const GrPrimitiveProcessor& fPrimProc; + const GrPipeline* fPipeline; + const GrPrimitiveProcessor* fPrimProc; const GrPipeline::FixedDynamicState* fFixedDynamicState; const GrPipeline::DynamicStateArrays* fDynamicStateArrays; const int fNumDynamicStateArrays; GrProcessor::CustomFeatures fRequestedFeatures; + GrPrimitiveType fPrimitiveType; }; #endif diff --git a/third_party/skia/src/gpu/GrProxyProvider.cpp b/third_party/skia/src/gpu/GrProxyProvider.cpp index 939d883f1894..ba2f7e9ceaae 100644 --- a/third_party/skia/src/gpu/GrProxyProvider.cpp +++ b/third_party/skia/src/gpu/GrProxyProvider.cpp @@ -114,7 +114,7 @@ sk_sp GrProxyProvider::findProxyByUniqueKey(const GrUniqueKey& k #if GR_TEST_UTILS sk_sp GrProxyProvider::testingOnly_createInstantiatedProxy( - const SkISize& size, + const SkISize& dimensions, GrColorType colorType, const GrBackendFormat& format, GrRenderable renderable, @@ -138,8 +138,8 @@ sk_sp GrProxyProvider::testingOnly_createInstantiatedProxy( GrSurfaceDesc desc; desc.fConfig = GrColorTypeToPixelConfig(colorType); desc.fConfig = this->caps()->makeConfigSpecific(desc.fConfig, format); - desc.fWidth = size.width(); - desc.fHeight = size.height(); + desc.fWidth = dimensions.width(); + desc.fHeight = dimensions.height(); GrResourceProvider* resourceProvider = direct->priv().resourceProvider(); sk_sp tex; @@ -159,7 +159,7 @@ sk_sp GrProxyProvider::testingOnly_createInstantiatedProxy( } sk_sp GrProxyProvider::testingOnly_createInstantiatedProxy( - const SkISize& size, + const SkISize& dimensions, GrColorType colorType, GrRenderable renderable, int renderTargetSampleCnt, @@ -168,7 +168,7 @@ sk_sp GrProxyProvider::testingOnly_createInstantiatedProxy( SkBudgeted budgeted, GrProtected isProtected) { auto format = this->caps()->getDefaultBackendFormat(colorType, renderable); - return this->testingOnly_createInstantiatedProxy(size, + return this->testingOnly_createInstantiatedProxy(dimensions, colorType, format, renderable, @@ -198,9 +198,8 @@ sk_sp GrProxyProvider::createWrapped(sk_sp tex, GrSwizzle texSwizzle = this->caps()->getTextureSwizzle(tex->backendFormat(), colorType); if (tex->asRenderTarget()) { - GrSwizzle outSwizzle = this->caps()->getOutputSwizzle(tex->backendFormat(), colorType); return sk_sp(new GrTextureRenderTargetProxy( - std::move(tex), origin, texSwizzle, outSwizzle, useAllocator)); + std::move(tex), origin, texSwizzle, useAllocator)); } else { return sk_sp( new GrTextureProxy(std::move(tex), origin, texSwizzle, useAllocator)); @@ -473,10 +472,9 @@ sk_sp GrProxyProvider::createProxy(const GrBackendFormat& format SkASSERT(renderTargetSampleCnt); // We know anything we instantiate later from this deferred path will be // both texturable and renderable - GrSwizzle outSwizzle = caps->getOutputSwizzle(format, colorType); return sk_sp(new GrTextureRenderTargetProxy( *caps, format, copyDesc, renderTargetSampleCnt, origin, mipMapped, mipMapsStatus, - texSwizzle, outSwizzle, fit, budgeted, isProtected, surfaceFlags, useAllocator)); + texSwizzle, fit, budgeted, isProtected, surfaceFlags, useAllocator)); } return sk_sp(new GrTextureProxy(format, copyDesc, origin, mipMapped, @@ -506,7 +504,7 @@ sk_sp GrProxyProvider::createCompressedTextureProxy( width, height, format, compressionType, budgeted, data.get())); }, format, desc, GrRenderable::kNo, 1, kTopLeft_GrSurfaceOrigin, GrMipMapped::kNo, - GrMipMapsStatus::kNotAllocated, GrInternalSurfaceFlags::kNone, SkBackingFit::kExact, + GrMipMapsStatus::kNotAllocated, GrInternalSurfaceFlags::kReadOnly, SkBackingFit::kExact, SkBudgeted::kYes, GrProtected::kNo, UseAllocator::kYes); if (!proxy) { @@ -611,10 +609,9 @@ sk_sp GrProxyProvider::wrapRenderableBackendTexture( SkASSERT(GrBudgetedType::kBudgeted != tex->resourcePriv().budgetedType()); GrSwizzle texSwizzle = caps->getTextureSwizzle(tex->backendFormat(), colorType); - GrSwizzle outSwizzle = caps->getOutputSwizzle(tex->backendFormat(), colorType); return sk_sp(new GrTextureRenderTargetProxy(std::move(tex), origin, texSwizzle, - outSwizzle, UseAllocator::kNo)); + UseAllocator::kNo)); } sk_sp GrProxyProvider::wrapBackendRenderTarget( @@ -649,10 +646,9 @@ sk_sp GrProxyProvider::wrapBackendRenderTarget( SkASSERT(GrBudgetedType::kBudgeted != rt->resourcePriv().budgetedType()); GrSwizzle texSwizzle = caps->getTextureSwizzle(rt->backendFormat(), grColorType); - GrSwizzle outSwizzle = caps->getOutputSwizzle(rt->backendFormat(), grColorType); return sk_sp(new GrRenderTargetProxy(std::move(rt), origin, texSwizzle, - outSwizzle, UseAllocator::kNo)); + UseAllocator::kNo)); } sk_sp GrProxyProvider::wrapBackendTextureAsRenderTarget( @@ -683,10 +679,9 @@ sk_sp GrProxyProvider::wrapBackendTextureAsRenderTarget( SkASSERT(GrBudgetedType::kBudgeted != rt->resourcePriv().budgetedType()); GrSwizzle texSwizzle = caps->getTextureSwizzle(rt->backendFormat(), grColorType); - GrSwizzle outSwizzle = caps->getOutputSwizzle(rt->backendFormat(), grColorType); return sk_sp(new GrRenderTargetProxy(std::move(rt), origin, texSwizzle, - outSwizzle, UseAllocator::kNo)); + UseAllocator::kNo)); } sk_sp GrProxyProvider::wrapVulkanSecondaryCBAsRenderTarget( @@ -716,7 +711,6 @@ sk_sp GrProxyProvider::wrapVulkanSecondaryCBAsRenderTarget( GrColorType colorType = SkColorTypeToGrColorType(imageInfo.colorType()); GrSwizzle texSwizzle = this->caps()->getTextureSwizzle(rt->backendFormat(), colorType); - GrSwizzle outSwizzle = this->caps()->getOutputSwizzle(rt->backendFormat(), colorType); if (!this->caps()->isFormatAsColorTypeRenderable(colorType, rt->backendFormat(), rt->numSamples())) { @@ -725,7 +719,7 @@ sk_sp GrProxyProvider::wrapVulkanSecondaryCBAsRenderTarget( // All Vulkan surfaces uses top left origins. return sk_sp(new GrRenderTargetProxy( - std::move(rt), kTopLeft_GrSurfaceOrigin, texSwizzle, outSwizzle, UseAllocator::kNo, + std::move(rt), kTopLeft_GrSurfaceOrigin, texSwizzle, UseAllocator::kNo, GrRenderTargetProxy::WrapsVkSecondaryCB::kYes)); } @@ -756,7 +750,6 @@ sk_sp GrProxyProvider::createLazyProxy(LazyInstantiateCallback&& GrColorType colorType = GrPixelConfigToColorType(desc.fConfig); GrSwizzle texSwizzle = this->caps()->getTextureSwizzle(format, colorType); - GrSwizzle outSwizzle = this->caps()->getOutputSwizzle(format, colorType); if (renderable == GrRenderable::kYes) { return sk_sp(new GrTextureRenderTargetProxy(*this->caps(), @@ -768,7 +761,6 @@ sk_sp GrProxyProvider::createLazyProxy(LazyInstantiateCallback&& mipMapped, mipMapsStatus, texSwizzle, - outSwizzle, fit, budgeted, isProtected, @@ -814,7 +806,6 @@ sk_sp GrProxyProvider::createLazyRenderTargetProxy( GrColorType colorType = GrPixelConfigToColorType(desc.fConfig); GrSwizzle texSwizzle = this->caps()->getTextureSwizzle(format, colorType); - GrSwizzle outSwizzle = this->caps()->getOutputSwizzle(format, colorType); if (textureInfo) { // Wrapped vulkan secondary command buffers don't support texturing since we won't have an @@ -822,8 +813,8 @@ sk_sp GrProxyProvider::createLazyRenderTargetProxy( SkASSERT(!wrapsVkSecondaryCB); return sk_sp(new GrTextureRenderTargetProxy( *this->caps(), std::move(callback), format, desc, sampleCnt, origin, - textureInfo->fMipMapped, mipMapsStatus, texSwizzle, outSwizzle, fit, budgeted, - isProtected, surfaceFlags, useAllocator)); + textureInfo->fMipMapped, mipMapsStatus, texSwizzle, fit, budgeted, isProtected, + surfaceFlags, useAllocator)); } GrRenderTargetProxy::WrapsVkSecondaryCB vkSCB = @@ -831,8 +822,8 @@ sk_sp GrProxyProvider::createLazyRenderTargetProxy( : GrRenderTargetProxy::WrapsVkSecondaryCB::kNo; return sk_sp(new GrRenderTargetProxy( - std::move(callback), format, desc, sampleCnt, origin, texSwizzle, outSwizzle, fit, - budgeted, isProtected, surfaceFlags, useAllocator, vkSCB)); + std::move(callback), format, desc, sampleCnt, origin, texSwizzle, fit, budgeted, + isProtected, surfaceFlags, useAllocator, vkSCB)); } sk_sp GrProxyProvider::MakeFullyLazyProxy(LazyInstantiateCallback&& callback, @@ -857,13 +848,12 @@ sk_sp GrProxyProvider::MakeFullyLazyProxy(LazyInstantiateCallbac GrColorType colorType = GrPixelConfigToColorType(desc.fConfig); GrSwizzle texSwizzle = caps.getTextureSwizzle(format, colorType); - GrSwizzle outSwizzle = caps.getOutputSwizzle(format, colorType); if (GrRenderable::kYes == renderable) { return sk_sp(new GrTextureRenderTargetProxy( caps, std::move(callback), format, desc, renderTargetSampleCnt, origin, - GrMipMapped::kNo, GrMipMapsStatus::kNotAllocated, texSwizzle, outSwizzle, - SkBackingFit::kApprox, SkBudgeted::kYes, isProtected, surfaceFlags, useAllocator)); + GrMipMapped::kNo, GrMipMapsStatus::kNotAllocated, texSwizzle, SkBackingFit::kApprox, + SkBudgeted::kYes, isProtected, surfaceFlags, useAllocator)); } else { return sk_sp(new GrTextureProxy( std::move(callback), format, desc, origin, GrMipMapped::kNo, @@ -877,11 +867,10 @@ bool GrProxyProvider::IsFunctionallyExact(GrSurfaceProxy* proxy) { // A proxy is functionally exact if: // it is exact (obvs) // when it is instantiated it will be exact (i.e., power of two dimensions) - // it is already instantiated and the proxy covers the entire backing surface + // when it is instantiated the content rect will cover the entire backing surface return proxy->priv().isExact() || (!isInstantiated && SkIsPow2(proxy->width()) && SkIsPow2(proxy->height())) || - (isInstantiated && proxy->worstCaseWidth() == proxy->width() && - proxy->worstCaseHeight() == proxy->height()); + (proxy->backingStoreDimensions() == proxy->dimensions()); } void GrProxyProvider::processInvalidUniqueKey(const GrUniqueKey& key, GrTextureProxy* proxy, diff --git a/third_party/skia/src/gpu/GrProxyProvider.h b/third_party/skia/src/gpu/GrProxyProvider.h index b8de8c8983c2..6e15367a9759 100644 --- a/third_party/skia/src/gpu/GrProxyProvider.h +++ b/third_party/skia/src/gpu/GrProxyProvider.h @@ -246,7 +246,7 @@ class GrProxyProvider { * Create a texture proxy that is backed by an instantiated GrSurface. * TODO: Remove GrColorType. Currently used to infer a GrPixelConfig. */ - sk_sp testingOnly_createInstantiatedProxy(const SkISize& size, + sk_sp testingOnly_createInstantiatedProxy(const SkISize& dimensions, GrColorType colorType, const GrBackendFormat& format, GrRenderable renderable, @@ -257,7 +257,7 @@ class GrProxyProvider { GrProtected isProtected); /** Version of above that picks the default format for the color type. */ - sk_sp testingOnly_createInstantiatedProxy(const SkISize& size, + sk_sp testingOnly_createInstantiatedProxy(const SkISize& dimensions, GrColorType colorType, GrRenderable renderable, int renderTargetSampleCnt, diff --git a/third_party/skia/src/gpu/GrRecordingContext.cpp b/third_party/skia/src/gpu/GrRecordingContext.cpp index 081b693f51a0..b7f9d4677f4b 100644 --- a/third_party/skia/src/gpu/GrRecordingContext.cpp +++ b/third_party/skia/src/gpu/GrRecordingContext.cpp @@ -8,6 +8,7 @@ #include "include/private/GrRecordingContext.h" #include "include/gpu/GrContext.h" +#include "src/core/SkArenaAlloc.h" #include "src/gpu/GrAuditTrail.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrDrawingManager.h" @@ -115,6 +116,9 @@ GrDrawingManager* GrRecordingContext::drawingManager() { return fDrawingManager.get(); } +// This entry point exists bc the GrOpsTask (and SkAtlasTextTarget) take refs on the memory pool. +// Ostensibly, this is to keep the op's data alive in DDL mode but the back pointer is also +// used for deletion. sk_sp GrRecordingContext::refOpMemoryPool() { if (!fOpMemoryPool) { // DDL TODO: should the size of the memory pool be decreased in DDL mode? CPU-side memory @@ -131,6 +135,24 @@ GrOpMemoryPool* GrRecordingContext::opMemoryPool() { return this->refOpMemoryPool().get(); } +// Stored in this arena: +// GrTextureOp's DynamicStateArrays and FixedDynamicState +// some GrGeometryProcessors, GrPipelines and GrProgramInfos +SkArenaAlloc* GrRecordingContext::recordTimeAllocator() { + if (!fRecordTimeAllocator) { + // TODO: empirically determine a better number for SkArenaAlloc's firstHeapAllocation param + fRecordTimeAllocator = std::unique_ptr( + new SkArenaAlloc(sizeof(GrPipeline) * 100)); + } + + SkASSERT(fRecordTimeAllocator); + return fRecordTimeAllocator.get(); +} + +std::unique_ptr GrRecordingContext::detachRecordTimeAllocator() { + return std::move(fRecordTimeAllocator); +} + GrTextBlobCache* GrRecordingContext::getTextBlobCache() { return fTextBlobCache.get(); } @@ -302,6 +324,10 @@ sk_sp GrRecordingContextPriv::refCaps() const { return fContext->refCaps(); } +std::unique_ptr GrRecordingContextPriv::detachRecordTimeAllocator() { + return fContext->detachRecordTimeAllocator(); +} + sk_sp GrRecordingContextPriv::fpFactoryCache() { return fContext->fpFactoryCache(); } diff --git a/third_party/skia/src/gpu/GrRecordingContextPriv.h b/third_party/skia/src/gpu/GrRecordingContextPriv.h index 2987778d6b2c..c11873defd9e 100644 --- a/third_party/skia/src/gpu/GrRecordingContextPriv.h +++ b/third_party/skia/src/gpu/GrRecordingContextPriv.h @@ -46,6 +46,9 @@ class GrRecordingContextPriv { sk_sp refOpMemoryPool(); GrOpMemoryPool* opMemoryPool() { return fContext->opMemoryPool(); } + SkArenaAlloc* recordTimeAllocator() { return fContext->recordTimeAllocator(); } + std::unique_ptr detachRecordTimeAllocator(); + GrStrikeCache* getGrStrikeCache() { return fContext->getGrStrikeCache(); } GrTextBlobCache* getTextBlobCache() { return fContext->getTextBlobCache(); } diff --git a/third_party/skia/src/gpu/GrRenderTarget.cpp b/third_party/skia/src/gpu/GrRenderTarget.cpp index 2197d6323970..f29eea4ae3b2 100644 --- a/third_party/skia/src/gpu/GrRenderTarget.cpp +++ b/third_party/skia/src/gpu/GrRenderTarget.cpp @@ -18,14 +18,13 @@ #include "src/gpu/GrStencilAttachment.h" #include "src/gpu/GrStencilSettings.h" -GrRenderTarget::GrRenderTarget(GrGpu* gpu, const SkISize& size, GrPixelConfig config, +GrRenderTarget::GrRenderTarget(GrGpu* gpu, const SkISize& dimensions, GrPixelConfig config, int sampleCount, GrProtected isProtected, GrStencilAttachment* stencil) - : INHERITED(gpu, size, config, isProtected) + : INHERITED(gpu, dimensions, config, isProtected) , fSampleCnt(sampleCount) , fSamplePatternKey(GrSamplePatternDictionary::kInvalidSamplePatternKey) - , fStencilAttachment(stencil) { -} + , fStencilAttachment(stencil) {} GrRenderTarget::~GrRenderTarget() = default; diff --git a/third_party/skia/src/gpu/GrRenderTargetContext.cpp b/third_party/skia/src/gpu/GrRenderTargetContext.cpp index bd2082f3868b..a128cb35c164 100644 --- a/third_party/skia/src/gpu/GrRenderTargetContext.cpp +++ b/third_party/skia/src/gpu/GrRenderTargetContext.cpp @@ -21,6 +21,7 @@ #include "src/core/SkMatrixPriv.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" @@ -145,11 +146,16 @@ class AutoCheckFlush { GrRenderTargetContext::GrRenderTargetContext(GrRecordingContext* context, sk_sp rtp, GrColorType colorType, + GrSurfaceOrigin origin, + GrSwizzle texSwizzle, + GrSwizzle outSwizzle, sk_sp colorSpace, const SkSurfaceProps* surfaceProps, bool managedOpsTask) - : GrSurfaceContext(context, colorType, kPremul_SkAlphaType, std::move(colorSpace)) + : GrSurfaceContext(context, colorType, kPremul_SkAlphaType, std::move(colorSpace), origin, + texSwizzle) , fRenderTargetProxy(std::move(rtp)) + , fOutputSwizzle(outSwizzle) , fOpsTask(sk_ref_sp(fRenderTargetProxy->getLastOpsTask())) , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps)) , fManagedOpsTask(managedOpsTask) { @@ -212,7 +218,7 @@ GrOpsTask* GrRenderTargetContext::getOpsTask() { if (!fOpsTask || fOpsTask->isClosed()) { sk_sp newOpsTask = - this->drawingManager()->newOpsTask(fRenderTargetProxy, fManagedOpsTask); + this->drawingManager()->newOpsTask(this->outputSurfaceView(), fManagedOpsTask); if (fOpsTask && fNumStencilSamples > 0) { // Store the stencil values in memory upon completion of fOpsTask. fOpsTask->setMustPreserveStencil(); @@ -425,10 +431,9 @@ GrRenderTargetContext::QuadOptimization GrRenderTargetContext::attemptQuadOptimi SkRect rtRect; if (stencilSettings) { - // Must use worst case bounds so that stencil buffer updates on approximately sized render - // targets don't get corrupted. - rtRect = SkRect::MakeWH(fRenderTargetProxy->worstCaseWidth(), - fRenderTargetProxy->worstCaseHeight()); + // 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 = fRenderTargetProxy->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 @@ -605,8 +610,8 @@ void GrRenderTargetContext::drawFilledQuad(const GrClip& clip, } void GrRenderTargetContext::drawTexturedQuad(const GrClip& clip, - sk_sp proxy, - GrColorType srcColorType, + GrSurfaceProxyView proxyView, + SkAlphaType srcAlphaType, sk_sp textureXform, GrSamplerState::Filter filter, const SkPMColor4f& color, @@ -619,7 +624,7 @@ void GrRenderTargetContext::drawTexturedQuad(const GrClip& clip, ASSERT_SINGLE_OWNER RETURN_IF_ABANDONED SkDEBUGCODE(this->validate();) - SkASSERT(proxy); + SkASSERT(proxyView.asTextureProxy()); GR_CREATE_TRACE_MARKER_CONTEXT("GrRenderTargetContext", "drawTexturedQuad", fContext); AutoCheckFlush acf(this->drawingManager()); @@ -642,11 +647,11 @@ void GrRenderTargetContext::drawTexturedQuad(const GrClip& clip, : GrTextureOp::Saturate::kNo; // Use the provided domain, although hypothetically we could detect that the cropped local // quad is sufficiently inside the domain and the constraint could be dropped. - this->addDrawOp(finalClip, - GrTextureOp::Make(fContext, std::move(proxy), srcColorType, - std::move(textureXform), filter, color, saturate, - blendMode, aaType, edgeFlags, croppedDeviceQuad, - croppedLocalQuad, domain)); + this->addDrawOp( + finalClip, + GrTextureOp::Make(fContext, std::move(proxyView), srcAlphaType, + std::move(textureXform), filter, color, saturate, blendMode, + aaType, edgeFlags, croppedDeviceQuad, croppedLocalQuad, domain)); } } @@ -728,8 +733,9 @@ void GrRenderTargetContext::drawQuadSet(const GrClip& clip, GrPaint&& paint, GrA const SkMatrix& viewMatrix, const QuadSetEntry quads[], int cnt) { GrAAType aaType = this->chooseAAType(aa); - this->addDrawOp(clip, GrFillRectOp::MakeSet(fContext, std::move(paint), aaType, viewMatrix, - quads, cnt)); + + GrFillRectOp::AddFillRectOps(this, clip, fContext, std::move(paint), aaType, viewMatrix, + quads, cnt); } int GrRenderTargetContextPriv::maxWindowRectangles() const { @@ -857,7 +863,7 @@ void GrRenderTargetContextPriv::stencilPath(const GrHardClip& clip, fRenderTargetContext->addOp(std::move(op)); } -void GrRenderTargetContext::drawTextureSet(const GrClip& clip, const TextureSetEntry set[], int cnt, +void GrRenderTargetContext::drawTextureSet(const GrClip& clip, TextureSetEntry set[], int cnt, GrSamplerState::Filter filter, SkBlendMode mode, GrAA aa, SkCanvas::SrcRectConstraint constraint, const SkMatrix& viewMatrix, @@ -867,47 +873,15 @@ void GrRenderTargetContext::drawTextureSet(const GrClip& clip, const TextureSetE SkDEBUGCODE(this->validate();) GR_CREATE_TRACE_MARKER_CONTEXT("GrRenderTargetContext", "drawTextureSet", fContext); - if (mode != SkBlendMode::kSrcOver || - !fContext->priv().caps()->dynamicStateArrayGeometryProcessorTextureSupport()) { - // Draw one at a time since the bulk API doesn't support non src-over blending, or the - // backend can't support the bulk geometry processor yet. - SkMatrix ctm; - for (int i = 0; i < cnt; ++i) { - float alpha = set[i].fAlpha; - ctm = viewMatrix; - if (set[i].fPreViewMatrix) { - ctm.preConcat(*set[i].fPreViewMatrix); - } - - GrQuad quad, srcQuad; - if (set[i].fDstClipQuad) { - quad = GrQuad::MakeFromSkQuad(set[i].fDstClipQuad, ctm); - - SkPoint srcPts[4]; - GrMapRectPoints(set[i].fDstRect, set[i].fSrcRect, set[i].fDstClipQuad, srcPts, 4); - srcQuad = GrQuad::MakeFromSkQuad(srcPts, SkMatrix::I()); - } else { - quad = GrQuad::MakeFromRect(set[i].fDstRect, ctm); - srcQuad = GrQuad(set[i].fSrcRect); - } - - const SkRect* domain = constraint == SkCanvas::kStrict_SrcRectConstraint - ? &set[i].fSrcRect : nullptr; - this->drawTexturedQuad(clip, set[i].fProxy, set[i].fSrcColorType, texXform, filter, - {alpha, alpha, alpha, alpha}, mode, aa, set[i].fAAFlags, - quad, srcQuad, domain); - } - } else { - // Can use a single op, avoiding GrPaint creation, and can batch across proxies - AutoCheckFlush acf(this->drawingManager()); - GrAAType aaType = this->chooseAAType(aa); - auto clampType = GrColorTypeClampType(this->colorInfo().colorType()); - auto saturate = clampType == GrClampType::kManual ? GrTextureOp::Saturate::kYes - : GrTextureOp::Saturate::kNo; - auto op = GrTextureOp::MakeSet(fContext, set, cnt, filter, saturate, aaType, constraint, - viewMatrix, std::move(texXform)); - this->addDrawOp(clip, std::move(op)); - } + // Create the minimum number of GrTextureOps needed to draw this set. Individual + // GrTextureOps can rebind the texture between draws thus avoiding GrPaint (re)creation. + AutoCheckFlush acf(this->drawingManager()); + GrAAType aaType = this->chooseAAType(aa); + auto clampType = GrColorTypeClampType(this->colorInfo().colorType()); + auto saturate = clampType == GrClampType::kManual ? GrTextureOp::Saturate::kYes + : GrTextureOp::Saturate::kNo; + GrTextureOp::AddTextureSetOps(this, clip, fContext, set, cnt, filter, saturate, mode, aaType, + constraint, viewMatrix, std::move(texXform)); } void GrRenderTargetContext::drawVertices(const GrClip& clip, @@ -1341,7 +1315,7 @@ void GrRenderTargetContext::drawDRRect(const GrClip& clip, path.setIsVolatile(true); path.addRRect(inner); path.addRRect(outer); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); this->drawShapeUsingPathRenderer(clip, std::move(paint), aa, viewMatrix, GrShape(path)); } @@ -1441,7 +1415,7 @@ void GrRenderTargetContext::drawOval(const GrClip& clip, assert_alive(paint); this->drawShapeUsingPathRenderer( clip, std::move(paint), aa, viewMatrix, - GrShape(SkRRect::MakeOval(oval), SkPath::kCW_Direction, 2, false, style)); + GrShape(SkRRect::MakeOval(oval), SkPathDirection::kCW, 2, false, style)); } void GrRenderTargetContext::drawArc(const GrClip& clip, @@ -1525,9 +1499,7 @@ void GrRenderTargetContext::asyncRescaleAndReadPixels( return; } auto dstCT = SkColorTypeToGrColorType(info.colorType()); - // TODO: Support reading to gray. - if (dstCT == GrColorType::kUnknown || - GrColorTypeComponentFlags(dstCT) & kGray_SkColorTypeComponentFlag) { + if (dstCT == GrColorType::kUnknown) { callback(context, nullptr); return; } @@ -1586,7 +1558,6 @@ void GrRenderTargetContext::asyncRescaleAndReadPixels( // If the src is not texturable first try to make a copy to a texture. if (!texProxy) { texProxy = GrSurfaceProxy::Copy(fContext, fRenderTargetProxy.get(), - this->colorInfo().colorType(), GrMipMapped::kNo, srcRect, SkBackingFit::kApprox, SkBudgeted::kNo); if (!texProxy) { @@ -1604,8 +1575,8 @@ void GrRenderTargetContext::asyncRescaleAndReadPixels( return; } tempRTC->drawTexture(GrNoClip(), std::move(texProxy), this->colorInfo().colorType(), - GrSamplerState::Filter::kNearest, SkBlendMode::kSrc, - SK_PMColor4fWHITE, srcRectToDraw, + 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)); @@ -1636,7 +1607,7 @@ class GrRenderTargetContext::AsyncReadResult : public SkSurface::AsyncReadResult size_t rowBytes(int i) const override { return fPlanes[i].fRowBytes; } bool addTransferResult(const PixelTransferResult& result, - SkISize size, + SkISize dimensions, size_t rowBytes, GrClientMappedBufferManager* manager) { SkASSERT(!result.fTransferBuffer->isMapped()); @@ -1645,7 +1616,7 @@ class GrRenderTargetContext::AsyncReadResult : public SkSurface::AsyncReadResult return false; } if (result.fPixelConverter) { - std::unique_ptr convertedData(new char[rowBytes * size.height()]); + std::unique_ptr convertedData(new char[rowBytes * dimensions.height()]); result.fPixelConverter(convertedData.get(), mappedData); this->addCpuPlane(convertedData.release(), rowBytes); result.fTransferBuffer->unmap(); @@ -1689,6 +1660,11 @@ void GrRenderTargetContext::asyncReadPixels(const SkIRect& rect, SkColorType col SkASSERT(rect.fLeft >= 0 && rect.fRight <= this->width()); SkASSERT(rect.fTop >= 0 && rect.fBottom <= this->height()); + if (this->asSurfaceProxy()->isProtected()) { + callback(context, nullptr); + return; + } + auto directContext = fContext->priv().asDirectContext(); SkASSERT(directContext); auto mappedBufferManager = directContext->priv().clientMappedBufferManager(); @@ -1767,6 +1743,10 @@ void GrRenderTargetContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvC callback(context, nullptr); return; } + if (this->asSurfaceProxy()->isProtected()) { + callback(context, nullptr); + return; + } int x = srcRect.fLeft; int y = srcRect.fTop; std::unique_ptr tempRTC; @@ -1806,8 +1786,8 @@ void GrRenderTargetContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvC return; } tempRTC->drawTexture(GrNoClip(), std::move(texProxy), this->colorInfo().colorType(), - GrSamplerState::Filter::kNearest, SkBlendMode::kSrc, - SK_PMColor4fWHITE, srcRectToDraw, + 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)); @@ -1820,8 +1800,6 @@ void GrRenderTargetContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvC callback(context, nullptr); return; } - GrColorType srcColorType = tempRTC ? tempRTC->colorInfo().colorType() - : this->colorInfo().colorType(); auto yRTC = direct->priv().makeDeferredRenderTargetContextWithFallback( SkBackingFit::kApprox, dstSize.width(), dstSize.height(), GrColorType::kAlpha_8, @@ -1839,41 +1817,9 @@ void GrRenderTargetContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvC return; } - static constexpr float kRec601M[] { - 65.481f / 255, 128.553f / 255, 24.966f / 255, 16.f / 255, // y - -37.797f / 255, -74.203f / 255, 112.0f / 255, 128.f / 255, // u - 112.f / 255, -93.786f / 255, -18.214f / 255, 128.f / 255, // v - }; - static constexpr float kRec709M[] { - 45.5594f / 255, 156.6288f / 255, 15.8118f / 255, 16.f / 255, // y - -25.6642f / 255, -86.3358f / 255, 112.f / 255, 128.f / 255, // u - 112.f / 255, -101.7303f / 255, -10.2697f / 255, 128.f / 255, // v - }; - static constexpr float kJpegM[] { - 0.299f , 0.587f , 0.114f , 0.f / 255, // y - -0.168736f, -0.331264f, 0.5f , 128.f / 255, // u - 0.5f , -0.418688f, -0.081312f, 128.f / 255, // v - }; - static constexpr float kIM[] { - 1.f, 0.f, 0.f, 0.f, - 0.f, 1.f, 0.f, 0.f, - 0.f, 0.f, 1.f, 0.f, - }; - const float* baseM = kIM; - switch (yuvColorSpace) { - case kRec601_SkYUVColorSpace: - baseM = kRec601M; - break; - case kRec709_SkYUVColorSpace: - baseM = kRec709M; - break; - case kJPEG_SkYUVColorSpace: - baseM = kJpegM; - break; - case kIdentity_SkYUVColorSpace: - baseM = kIM; - break; - } + float baseM[20]; + SkColorMatrix_RGB2YUV(yuvColorSpace, baseM); + // TODO: Use one transfer buffer for all three planes to reduce map/unmap cost? auto texMatrix = SkMatrix::MakeTrans(x, y); @@ -1884,9 +1830,9 @@ void GrRenderTargetContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvC // This matrix generates (r,g,b,a) = (0, 0, 0, y) float yM[20]; std::fill_n(yM, 15, 0.f); - yM[15] = baseM[0]; yM[16] = baseM[1]; yM[17] = baseM[2]; yM[18] = 0; yM[19] = baseM[3]; + std::copy_n(baseM + 0, 5, yM + 15); GrPaint yPaint; - yPaint.addColorTextureProcessor(srcProxy, srcColorType, texMatrix); + yPaint.addColorTextureProcessor(srcProxy, this->colorInfo().alphaType(), texMatrix); auto yFP = GrColorMatrixFragmentProcessor::Make(yM, false, true, false); yPaint.addColorFragmentProcessor(std::move(yFP)); yPaint.setPorterDuffXPFactory(SkBlendMode::kSrc); @@ -1903,9 +1849,9 @@ void GrRenderTargetContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvC // This matrix generates (r,g,b,a) = (0, 0, 0, u) float uM[20]; std::fill_n(uM, 15, 0.f); - uM[15] = baseM[4]; uM[16] = baseM[5]; uM[17] = baseM[6]; uM[18] = 0; uM[19] = baseM[7]; + std::copy_n(baseM + 5, 5, uM + 15); GrPaint uPaint; - uPaint.addColorTextureProcessor(srcProxy, srcColorType, texMatrix, + uPaint.addColorTextureProcessor(srcProxy, this->colorInfo().alphaType(), texMatrix, GrSamplerState::ClampBilerp()); auto uFP = GrColorMatrixFragmentProcessor::Make(uM, false, true, false); uPaint.addColorFragmentProcessor(std::move(uFP)); @@ -1922,9 +1868,9 @@ void GrRenderTargetContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvC // This matrix generates (r,g,b,a) = (0, 0, 0, v) float vM[20]; std::fill_n(vM, 15, 0.f); - vM[15] = baseM[8]; vM[16] = baseM[9]; vM[17] = baseM[10]; vM[18] = 0; vM[19] = baseM[11]; + std::copy_n(baseM + 10, 5, vM + 15); GrPaint vPaint; - vPaint.addColorTextureProcessor(srcProxy, srcColorType, texMatrix, + vPaint.addColorTextureProcessor(srcProxy, this->colorInfo().alphaType(), texMatrix, GrSamplerState::ClampBilerp()); auto vFP = GrColorMatrixFragmentProcessor::Make(vM, false, true, false); vPaint.addColorFragmentProcessor(std::move(vFP)); @@ -2020,7 +1966,8 @@ bool GrRenderTargetContext::waitOnSemaphores(int numSemaphores, auto resourceProvider = direct->priv().resourceProvider(); - std::unique_ptr[]> grSemaphores(new sk_sp[numSemaphores]); + std::unique_ptr[]> grSemaphores( + new std::unique_ptr[numSemaphores]); for (int i = 0; i < numSemaphores; ++i) { grSemaphores[i] = resourceProvider->wrapBackendSemaphore( waitSemaphores[i], GrResourceProvider::SemaphoreWrapType::kWillWait, @@ -2323,35 +2270,34 @@ void GrRenderTargetContext::addDrawOp(const GrClip& clip, std::unique_ptrfixedFunctionFlags(); bool usesHWAA = fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesHWAA; - bool usesStencil = fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesStencil; + bool usesUserStencilBits = fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesStencil; - if (usesStencil) { + if (usesUserStencilBits) { // Stencil clipping will call setNeedsStencil on its own, if needed. this->setNeedsStencil(usesHWAA); } - if (!clip.apply(fContext, this, usesHWAA, usesStencil, &appliedClip, &bounds)) { + if (!clip.apply(fContext, this, usesHWAA, usesUserStencilBits, &appliedClip, &bounds)) { fContext->priv().opMemoryPool()->release(std::move(op)); return; } - SkASSERT((!usesStencil && !appliedClip.hasStencilClip()) || (fNumStencilSamples > 0)); + bool willUseStencil = usesUserStencilBits || appliedClip.hasStencilClip(); + SkASSERT(!willUseStencil || fNumStencilSamples > 0); + + // If stencil is enabled and the framebuffer is mixed sampled, then the graphics pipeline will + // have mixed sampled coverage, regardless of whether HWAA is enabled. (e.g., a non-aa draw + // that uses a stencil test when the stencil buffer is multisampled.) + bool hasMixedSampledCoverage = ( + willUseStencil && fNumStencilSamples > this->numSamples()); + SkASSERT(!hasMixedSampledCoverage || fRenderTargetProxy->canUseMixedSamples(*this->caps())); GrClampType clampType = GrColorTypeClampType(this->colorInfo().colorType()); - // MIXED SAMPLES TODO: If we start using mixed samples for clips we will need to check the clip - // here as well. - bool hasMixedSampledCoverage = (usesHWAA && this->numSamples() <= 1); -#ifdef SK_DEBUG - if (hasMixedSampledCoverage) { - SkASSERT(usesStencil); - SkASSERT(fRenderTargetProxy->canUseMixedSamples(*this->caps())); - } -#endif GrProcessorSet::Analysis analysis = op->finalize( *this->caps(), &appliedClip, hasMixedSampledCoverage, clampType); - GrXferProcessor::DstProxy dstProxy; + GrXferProcessor::DstProxyView dstProxyView; if (analysis.requiresDstTexture()) { - if (!this->setupDstProxy(clip, *op, &dstProxy)) { + if (!this->setupDstProxyView(clip, *op, &dstProxyView)) { fContext->priv().opMemoryPool()->release(std::move(op)); return; } @@ -2362,12 +2308,12 @@ void GrRenderTargetContext::addDrawOp(const GrClip& clip, std::unique_ptruniqueID()); } - opsTask->addDrawOp(std::move(op), analysis, std::move(appliedClip), dstProxy, + opsTask->addDrawOp(std::move(op), analysis, std::move(appliedClip), dstProxyView, GrTextureResolveManager(this->drawingManager()), *this->caps()); } -bool GrRenderTargetContext::setupDstProxy(const GrClip& clip, const GrOp& op, - GrXferProcessor::DstProxy* dstProxy) { +bool GrRenderTargetContext::setupDstProxyView(const GrClip& clip, 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 // start and stop the render pass in order to make the copy. @@ -2376,16 +2322,16 @@ bool GrRenderTargetContext::setupDstProxy(const GrClip& clip, const GrOp& op, } if (this->caps()->textureBarrierSupport() && !fRenderTargetProxy->requiresManualMSAAResolve()) { - if (GrTextureProxy* texProxy = fRenderTargetProxy->asTextureProxy()) { + if (fRenderTargetProxy->asTextureProxy()) { // The render target is a texture, so we can read from it directly in the shader. The XP // will be responsible to detect this situation and request a texture barrier. - dstProxy->setProxy(sk_ref_sp(texProxy)); - dstProxy->setOffset(0, 0); + dstProxyView->setProxyView(this->textureSurfaceView()); + dstProxyView->setOffset(0, 0); return true; } } - SkIRect copyRect = SkIRect::MakeWH(fRenderTargetProxy->width(), fRenderTargetProxy->height()); + SkIRect copyRect = SkIRect::MakeSize(fRenderTargetProxy->dimensions()); SkIRect clippedRect; clip.getConservativeBounds( @@ -2399,8 +2345,7 @@ bool GrRenderTargetContext::setupDstProxy(const GrClip& clip, const GrOp& op, // 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::MakeWH( - fRenderTargetProxy->width(), fRenderTargetProxy->height())); + clippedRect.intersect(SkIRect::MakeSize(fRenderTargetProxy->dimensions())); } SkIRect opIBounds; opBounds.roundOut(&opIBounds); @@ -2429,28 +2374,28 @@ bool GrRenderTargetContext::setupDstProxy(const GrClip& clip, const GrOp& op, dstOffset = {copyRect.fLeft, copyRect.fTop}; fit = SkBackingFit::kApprox; } - sk_sp newProxy = GrSurfaceProxy::Copy( - fContext, fRenderTargetProxy.get(), this->colorInfo().colorType(), GrMipMapped::kNo, - copyRect, fit, SkBudgeted::kYes, restrictions.fRectsMustMatch); + sk_sp newProxy = + GrSurfaceProxy::Copy(fContext, fRenderTargetProxy.get(), GrMipMapped::kNo, copyRect, + fit, SkBudgeted::kYes, restrictions.fRectsMustMatch); SkASSERT(newProxy); - dstProxy->setProxy(std::move(newProxy)); - dstProxy->setOffset(dstOffset); + dstProxyView->setProxyView({std::move(newProxy), this->origin(), this->textureSwizzle()}); + dstProxyView->setOffset(dstOffset); return true; } -bool GrRenderTargetContext::blitTexture(GrTextureProxy* src, GrColorType srcColorType, - const SkIRect& srcRect, const SkIPoint& dstPoint) { +bool GrRenderTargetContext::blitTexture(GrTextureProxy* src, const SkIRect& srcRect, + const SkIPoint& dstPoint) { SkIRect clippedSrcRect; SkIPoint clippedDstPoint; - if (!GrClipSrcRectAndDstPoint(this->asSurfaceProxy()->isize(), src->isize(), srcRect, dstPoint, - &clippedSrcRect, &clippedDstPoint)) { + if (!GrClipSrcRectAndDstPoint(this->asSurfaceProxy()->dimensions(), src->dimensions(), srcRect, + dstPoint, &clippedSrcRect, &clippedDstPoint)) { return false; } GrPaint paint; paint.setPorterDuffXPFactory(SkBlendMode::kSrc); - auto fp = GrSimpleTextureEffect::Make(sk_ref_sp(src), srcColorType, SkMatrix::I()); + auto fp = GrSimpleTextureEffect::Make(sk_ref_sp(src), kUnknown_SkAlphaType, SkMatrix::I()); if (!fp) { return false; } @@ -2463,4 +2408,3 @@ bool GrRenderTargetContext::blitTexture(GrTextureProxy* src, GrColorType srcColo SkRect::Make(clippedSrcRect)); return true; } - diff --git a/third_party/skia/src/gpu/GrRenderTargetContext.h b/third_party/skia/src/gpu/GrRenderTargetContext.h index c10bf008a86b..689ba977263e 100644 --- a/third_party/skia/src/gpu/GrRenderTargetContext.h +++ b/third_party/skia/src/gpu/GrRenderTargetContext.h @@ -18,6 +18,7 @@ #include "src/gpu/GrPaint.h" #include "src/gpu/GrRenderTargetProxy.h" #include "src/gpu/GrSurfaceContext.h" +#include "src/gpu/GrSurfaceProxyView.h" #include "src/gpu/GrXferProcessor.h" #include "src/gpu/geometry/GrQuad.h" #include "src/gpu/text/GrTextTarget.h" @@ -195,15 +196,18 @@ class GrRenderTargetContext : public GrSurfaceContext { * device space. */ void drawTexture(const GrClip& clip, sk_sp proxy, GrColorType srcColorType, - GrSamplerState::Filter filter, SkBlendMode mode, const SkPMColor4f& color, - const SkRect& srcRect, const SkRect& dstRect, GrAA aa, GrQuadAAFlags edgeAA, - SkCanvas::SrcRectConstraint constraint, const SkMatrix& viewMatrix, - sk_sp texXform) { + SkAlphaType srcAlphaType, GrSamplerState::Filter filter, SkBlendMode mode, + const SkPMColor4f& color, const SkRect& srcRect, const SkRect& dstRect, + GrAA aa, GrQuadAAFlags edgeAA, SkCanvas::SrcRectConstraint constraint, + const SkMatrix& viewMatrix, sk_sp texXform) { const SkRect* domain = constraint == SkCanvas::kStrict_SrcRectConstraint ? &srcRect : nullptr; - this->drawTexturedQuad(clip, std::move(proxy), srcColorType, std::move(texXform), filter, - color, mode, aa, edgeAA, GrQuad::MakeFromRect(dstRect, viewMatrix), - GrQuad(srcRect), domain); + GrSurfaceOrigin origin = proxy->origin(); + const GrSwizzle& swizzle = proxy->textureSwizzle(); + GrSurfaceProxyView proxyView(std::move(proxy), origin, swizzle); + this->drawTexturedQuad(clip, std::move(proxyView), srcAlphaType, std::move(texXform), + filter, color, mode, aa, edgeAA, + GrQuad::MakeFromRect(dstRect, viewMatrix), GrQuad(srcRect), domain); } /** @@ -213,19 +217,24 @@ class GrRenderTargetContext : public GrSurfaceContext { * provided, the strict src rect constraint is applied using 'domain'. */ void drawTextureQuad(const GrClip& clip, sk_sp proxy, GrColorType srcColorType, - GrSamplerState::Filter filter, SkBlendMode mode, const SkPMColor4f& color, - const SkPoint srcQuad[4], const SkPoint dstQuad[4], GrAA aa, - GrQuadAAFlags edgeAA, const SkRect* domain, const SkMatrix& viewMatrix, + SkAlphaType srcAlphaType, GrSamplerState::Filter filter, SkBlendMode mode, + const SkPMColor4f& color, const SkPoint srcQuad[4], + const SkPoint dstQuad[4], GrAA aa, GrQuadAAFlags edgeAA, + const SkRect* domain, const SkMatrix& viewMatrix, sk_sp texXform) { - this->drawTexturedQuad(clip, std::move(proxy), srcColorType, std::move(texXform), filter, - color, mode, aa, edgeAA, GrQuad::MakeFromSkQuad(dstQuad, viewMatrix), + GrSurfaceOrigin origin = proxy->origin(); + const GrSwizzle& swizzle = proxy->textureSwizzle(); + GrSurfaceProxyView proxyView(std::move(proxy), origin, swizzle); + this->drawTexturedQuad(clip, std::move(proxyView), srcAlphaType, std::move(texXform), + filter, color, mode, aa, edgeAA, + GrQuad::MakeFromSkQuad(dstQuad, viewMatrix), GrQuad::MakeFromSkQuad(srcQuad, SkMatrix::I()), domain); } /** Used with drawTextureSet */ struct TextureSetEntry { - sk_sp fProxy; - GrColorType fSrcColorType; + GrSurfaceProxyView fProxyView; + SkAlphaType fSrcAlphaType; SkRect fSrcRect; SkRect fDstRect; const SkPoint* fDstClipQuad; // Must be null, or point to an array of 4 points @@ -240,7 +249,7 @@ class GrRenderTargetContext : public GrSurfaceContext { * If any entries provide a non-null fDstClip array, it will be read from immediately based on * fDstClipCount, so the pointer can become invalid after this returns. */ - void drawTextureSet(const GrClip&, const TextureSetEntry[], int cnt, GrSamplerState::Filter, + void drawTextureSet(const GrClip&, TextureSetEntry[], int cnt, GrSamplerState::Filter, SkBlendMode mode, GrAA aa, SkCanvas::SrcRectConstraint, const SkMatrix& viewMatrix, sk_sp texXform); @@ -434,8 +443,7 @@ class GrRenderTargetContext : public GrSurfaceContext { * of the srcRect. The srcRect and dstRect are clipped to the bounds of the src and dst surfaces * respectively. */ - bool blitTexture(GrTextureProxy* src, GrColorType srcColorType, const SkIRect& srcRect, - const SkIPoint& dstPoint); + bool blitTexture(GrTextureProxy* src, const SkIRect& srcRect, const SkIPoint& dstPoint); /** * Adds the necessary signal and wait semaphores and adds the passed in SkDrawable to the @@ -480,10 +488,13 @@ class GrRenderTargetContext : public GrSurfaceContext { int height() const { return fRenderTargetProxy->height(); } int numSamples() const { return fRenderTargetProxy->numSamples(); } const SkSurfaceProps& surfaceProps() const { return fSurfaceProps; } - GrSurfaceOrigin origin() const { return fRenderTargetProxy->origin(); } bool wrapsVkSecondaryCB() const { return fRenderTargetProxy->wrapsVkSecondaryCB(); } GrMipMapped mipMapped() const; + GrSurfaceProxyView outputSurfaceView() { + return { fRenderTargetProxy, fOrigin, fOutputSwizzle }; + } + // This entry point should only be called if the backing GPU object is known to be // instantiated. GrRenderTarget* accessRenderTarget() { return fRenderTargetProxy->peekRenderTarget(); } @@ -513,12 +524,6 @@ class GrRenderTargetContext : public GrSurfaceContext { GrOpsTask* testingOnly_PeekLastOpsTask() { return fOpsTask.get(); } #endif -protected: - GrRenderTargetContext(GrRecordingContext*, sk_sp, GrColorType, - sk_sp, const SkSurfaceProps*, bool managedOpsTask = true); - - SkDEBUGCODE(void validate() const override;) - private: class TextTarget; enum class QuadOptimization; @@ -544,12 +549,15 @@ class GrRenderTargetContext : public GrSurfaceContext { friend class GrTessellatingPathRenderer; // for access to add[Mesh]DrawOp friend class GrCCPerFlushResources; // for access to addDrawOp friend class GrCoverageCountingPathRenderer; // for access to addDrawOp - // for a unit test - friend void test_draw_op(GrContext*, - GrRenderTargetContext*, - std::unique_ptr, - sk_sp, - GrColorType); + friend class GrFillRectOp; // for access to addDrawOp + friend class GrTextureOp; // for access to addDrawOp + + GrRenderTargetContext(GrRecordingContext*, sk_sp, GrColorType, + GrSurfaceOrigin, GrSwizzle texSwizzle, GrSwizzle outSwizzle, + sk_sp, const SkSurfaceProps*, bool managedOpsTask = true); + + SkDEBUGCODE(void validate() const override;) + GrOpsTask::CanDiscardPreviousOps canDiscardPreviousOpsOnFullClear() const; void setNeedsStencil(bool useMixedSamplesIfNotMSAA); @@ -596,8 +604,8 @@ class GrRenderTargetContext : public GrSurfaceContext { // Like drawFilledQuad but does not require using a GrPaint or FP for texturing void drawTexturedQuad(const GrClip& clip, - sk_sp proxy, - GrColorType srcColorType, + GrSurfaceProxyView proxyView, + SkAlphaType alphaType, sk_sp textureXform, GrSamplerState::Filter filter, const SkPMColor4f& color, @@ -625,8 +633,8 @@ class GrRenderTargetContext : public GrSurfaceContext { // 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 setupDstProxy(const GrClip&, const GrOp& op, - GrXferProcessor::DstProxy* result); + bool SK_WARN_UNUSED_RESULT setupDstProxyView(const GrClip&, const GrOp& op, + GrXferProcessor::DstProxyView* result); class AsyncReadResult; @@ -637,7 +645,9 @@ class GrRenderTargetContext : public GrSurfaceContext { GrOpsTask* getOpsTask(); std::unique_ptr fTextTarget; + sk_sp fRenderTargetProxy; + GrSwizzle fOutputSwizzle; // In MDB-mode the GrOpsTask can be closed by some other renderTargetContext that has picked // it up. For this reason, the GrOpsTask should only ever be accessed via 'getOpsTask'. diff --git a/third_party/skia/src/gpu/GrRenderTargetProxy.cpp b/third_party/skia/src/gpu/GrRenderTargetProxy.cpp index 6e7d3a5ed0d1..82682690379c 100644 --- a/third_party/skia/src/gpu/GrRenderTargetProxy.cpp +++ b/third_party/skia/src/gpu/GrRenderTargetProxy.cpp @@ -27,7 +27,6 @@ GrRenderTargetProxy::GrRenderTargetProxy(const GrCaps& caps, int sampleCount, GrSurfaceOrigin origin, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, SkBackingFit fit, SkBudgeted budgeted, GrProtected isProtected, @@ -36,8 +35,7 @@ GrRenderTargetProxy::GrRenderTargetProxy(const GrCaps& caps, : INHERITED(format, desc, GrRenderable::kYes, origin, textureSwizzle, fit, budgeted, isProtected, surfaceFlags, useAllocator) , fSampleCnt(sampleCount) - , fWrapsVkSecondaryCB(WrapsVkSecondaryCB::kNo) - , fOutputSwizzle(outputSwizzle) {} + , fWrapsVkSecondaryCB(WrapsVkSecondaryCB::kNo) {} // Lazy-callback version GrRenderTargetProxy::GrRenderTargetProxy(LazyInstantiateCallback&& callback, @@ -46,7 +44,6 @@ GrRenderTargetProxy::GrRenderTargetProxy(LazyInstantiateCallback&& callback, int sampleCount, GrSurfaceOrigin origin, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, SkBackingFit fit, SkBudgeted budgeted, GrProtected isProtected, @@ -56,20 +53,17 @@ GrRenderTargetProxy::GrRenderTargetProxy(LazyInstantiateCallback&& callback, : INHERITED(std::move(callback), format, desc, GrRenderable::kYes, origin, textureSwizzle, fit, budgeted, isProtected, surfaceFlags, useAllocator) , fSampleCnt(sampleCount) - , fWrapsVkSecondaryCB(wrapsVkSecondaryCB) - , fOutputSwizzle(outputSwizzle) {} + , fWrapsVkSecondaryCB(wrapsVkSecondaryCB) {} // Wrapped version GrRenderTargetProxy::GrRenderTargetProxy(sk_sp surf, GrSurfaceOrigin origin, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, UseAllocator useAllocator, WrapsVkSecondaryCB wrapsVkSecondaryCB) : INHERITED(std::move(surf), origin, textureSwizzle, SkBackingFit::kExact, useAllocator) , fSampleCnt(fTarget->asRenderTarget()->numSamples()) - , fWrapsVkSecondaryCB(wrapsVkSecondaryCB) - , fOutputSwizzle(outputSwizzle) { + , fWrapsVkSecondaryCB(wrapsVkSecondaryCB) { // The kRequiresManualMSAAResolve flag better not be set if we are not multisampled or if // MSAA resolve should happen automatically. // @@ -89,8 +83,8 @@ bool GrRenderTargetProxy::instantiate(GrResourceProvider* resourceProvider) { if (this->isLazy()) { return false; } - if (!this->instantiateImpl(resourceProvider, fSampleCnt, fNumStencilSamples, GrRenderable::kYes, - GrMipMapped::kNo, nullptr)) { + if (!this->instantiateImpl(resourceProvider, fSampleCnt, GrRenderable::kYes, GrMipMapped::kNo, + nullptr)) { return false; } @@ -109,8 +103,8 @@ bool GrRenderTargetProxy::canChangeStencilAttachment() const { } sk_sp GrRenderTargetProxy::createSurface(GrResourceProvider* resourceProvider) const { - sk_sp surface = this->createSurfaceImpl( - resourceProvider, fSampleCnt, fNumStencilSamples, GrRenderable::kYes, GrMipMapped::kNo); + sk_sp surface = this->createSurfaceImpl(resourceProvider, fSampleCnt, + GrRenderable::kYes, GrMipMapped::kNo); if (!surface) { return nullptr; } @@ -127,7 +121,7 @@ size_t GrRenderTargetProxy::onUninstantiatedGpuMemorySize(const GrCaps& caps) co } // TODO: do we have enough information to improve this worst case estimate? - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), colorSamplesPerPixel, GrMipMapped::kNo, !this->priv().isExact()); } diff --git a/third_party/skia/src/gpu/GrRenderTargetProxy.h b/third_party/skia/src/gpu/GrRenderTargetProxy.h index d4fad64331b7..b67554c926fb 100644 --- a/third_party/skia/src/gpu/GrRenderTargetProxy.h +++ b/third_party/skia/src/gpu/GrRenderTargetProxy.h @@ -45,10 +45,7 @@ class GrRenderTargetProxy : virtual public GrSurfaceProxy { } /** - * Returns the number of stencil samples required by this proxy. - * NOTE: Once instantiated, the actual render target may have more samples, but it is guaranteed - * to have at least this many. (After a multisample stencil buffer has been attached to a render - * target, we never "downgrade" it to one with fewer samples.) + * Returns the number of stencil samples this proxy will use, or 0 if it does not use stencil. */ int numStencilSamples() const { return fNumStencilSamples; } @@ -59,12 +56,10 @@ class GrRenderTargetProxy : virtual public GrSurfaceProxy { int maxWindowRectangles(const GrCaps& caps) const; - const GrSwizzle& outputSwizzle() const { return fOutputSwizzle; } - bool wrapsVkSecondaryCB() const { return fWrapsVkSecondaryCB == WrapsVkSecondaryCB::kYes; } void markMSAADirty(const SkIRect& dirtyRect) { - SkASSERT(SkIRect::MakeWH(this->width(), this->height()).contains(dirtyRect)); + SkASSERT(SkIRect::MakeSize(this->dimensions()).contains(dirtyRect)); SkASSERT(this->requiresManualMSAAResolve()); fMSAADirtyRect.join(dirtyRect); } @@ -99,7 +94,6 @@ class GrRenderTargetProxy : virtual public GrSurfaceProxy { int sampleCount, GrSurfaceOrigin, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, SkBackingFit, SkBudgeted, GrProtected, @@ -124,7 +118,6 @@ class GrRenderTargetProxy : virtual public GrSurfaceProxy { int sampleCount, GrSurfaceOrigin, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, SkBackingFit, SkBudgeted, GrProtected, @@ -136,7 +129,6 @@ class GrRenderTargetProxy : virtual public GrSurfaceProxy { GrRenderTargetProxy(sk_sp, GrSurfaceOrigin, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, UseAllocator, WrapsVkSecondaryCB = WrapsVkSecondaryCB::kNo); @@ -164,14 +156,14 @@ class GrRenderTargetProxy : virtual public GrSurfaceProxy { int8_t fSampleCnt; int8_t fNumStencilSamples = 0; WrapsVkSecondaryCB fWrapsVkSecondaryCB; - GrSwizzle fOutputSwizzle; SkIRect fMSAADirtyRect = SkIRect::MakeEmpty(); - // This is to fix issue in large comment above. Without the padding we end 6 bytes into a 16 - // byte range, so the GrTextureProxy ends up starting 8 byte aligned by not 16. We add the - // padding here to get us right up to the 16 byte alignment (technically any padding of 3-10 - // bytes would work since it always goes up to 8 byte alignment, but we use 10 to more explicit - // about what we're doing). - char fDummyPadding[10]; + // This is to fix issue in large comment above. Without the padding we can end up with the + // GrTextureProxy starting 8 byte aligned by not 16. This happens when the RT ends at bytes 1-8. + // Note: with the virtual inheritance an 8 byte pointer is at the start of GrRenderTargetProxy. + // + // In the current world we end the RT proxy at 12 bytes. Technically any padding between 0-4 + // will work, but we use 4 to be more explicit about getting it to 16 byte alignment. + char fDummyPadding[4]; typedef GrSurfaceProxy INHERITED; }; diff --git a/third_party/skia/src/gpu/GrRenderTask.cpp b/third_party/skia/src/gpu/GrRenderTask.cpp index a69c48ba0cc1..b1a5a8b05d39 100644 --- a/third_party/skia/src/gpu/GrRenderTask.cpp +++ b/third_party/skia/src/gpu/GrRenderTask.cpp @@ -21,16 +21,22 @@ uint32_t GrRenderTask::CreateUniqueID() { return id; } -GrRenderTask::GrRenderTask(sk_sp target) - : fTarget(std::move(target)) +GrRenderTask::GrRenderTask() + : fUniqueID(CreateUniqueID()) + , fFlags(0) { +} + +GrRenderTask::GrRenderTask(GrSurfaceProxyView targetView) + : fTargetView(std::move(targetView)) , fUniqueID(CreateUniqueID()) , fFlags(0) { } GrRenderTask::~GrRenderTask() { - if (fTarget && this == fTarget->getLastRenderTask()) { + GrSurfaceProxy* proxy = fTargetView.proxy(); + if (proxy && this == proxy->getLastRenderTask()) { // Ensure the target proxy doesn't keep hold of a dangling back pointer. - fTarget->setLastRenderTask(nullptr); + proxy->setLastRenderTask(nullptr); } } @@ -53,12 +59,13 @@ void GrRenderTask::makeClosed(const GrCaps& caps) { SkIRect targetUpdateBounds; if (ExpectedOutcome::kTargetDirty == this->onMakeClosed(caps, &targetUpdateBounds)) { - SkASSERT(SkIRect::MakeWH(fTarget->width(), fTarget->height()).contains(targetUpdateBounds)); - if (fTarget->requiresManualMSAAResolve()) { - SkASSERT(fTarget->asRenderTargetProxy()); - fTarget->asRenderTargetProxy()->markMSAADirty(targetUpdateBounds); + GrSurfaceProxy* proxy = fTargetView.proxy(); + SkASSERT(SkIRect::MakeSize(proxy->dimensions()).contains(targetUpdateBounds)); + if (proxy->requiresManualMSAAResolve()) { + SkASSERT(fTargetView.asRenderTargetProxy()); + fTargetView.asRenderTargetProxy()->markMSAADirty(targetUpdateBounds); } - GrTextureProxy* textureProxy = fTarget->asTextureProxy(); + GrTextureProxy* textureProxy = fTargetView.asTextureProxy(); if (textureProxy && GrMipMapped::kYes == textureProxy->mipMapped()) { textureProxy->markMipMapsDirty(); } @@ -161,7 +168,9 @@ void GrRenderTask::addDependency(GrSurfaceProxy* dependedOn, GrMipMapped mipMapp if (!fTextureResolveTask) { fTextureResolveTask = textureResolveManager.newTextureResolveRenderTask(caps); } - fTextureResolveTask->addProxy(sk_ref_sp(dependedOn), resolveFlags, caps); + fTextureResolveTask->addProxy( + GrSurfaceProxyView(sk_ref_sp(dependedOn), dependedOn->origin(), GrSwizzle()), + resolveFlags, caps); // addProxy() should have closed the texture proxy's previous task. SkASSERT(!dependedOnTask || dependedOnTask->isClosed()); @@ -244,30 +253,16 @@ void GrRenderTask::closeThoseWhoDependOnMe(const GrCaps& caps) { bool GrRenderTask::isInstantiated() const { // Some renderTasks (e.g. GrTransferFromRenderTask) don't have a target. - if (!fTarget) { + GrSurfaceProxy* proxy = fTargetView.proxy(); + if (!proxy) { return true; } - if (!fTarget->isInstantiated()) { + if (!proxy->isInstantiated()) { return false; } - int minStencilSampleCount = (fTarget->asRenderTargetProxy()) - ? fTarget->asRenderTargetProxy()->numStencilSamples() - : 0; - - if (minStencilSampleCount) { - GrRenderTarget* rt = fTarget->peekRenderTarget(); - SkASSERT(rt); - - GrStencilAttachment* stencil = rt->renderTargetPriv().getStencilAttachment(); - if (!stencil) { - return false; - } - SkASSERT(stencil->numSamples() >= minStencilSampleCount); - } - - GrSurface* surface = fTarget->peekSurface(); + GrSurface* surface = proxy->peekSurface(); if (surface->wasDestroyed()) { return false; } @@ -278,10 +273,11 @@ bool GrRenderTask::isInstantiated() const { #ifdef SK_DEBUG void GrRenderTask::dump(bool printDependencies) const { SkDebugf("--------------------------------------------------------------\n"); + GrSurfaceProxy* proxy = fTargetView.proxy(); SkDebugf("renderTaskID: %d - proxyID: %d - surfaceID: %d\n", fUniqueID, - fTarget ? fTarget->uniqueID().asUInt() : -1, - fTarget && fTarget->peekSurface() - ? fTarget->peekSurface()->uniqueID().asUInt() + proxy ? proxy->uniqueID().asUInt() : -1, + proxy && proxy->peekSurface() + ? proxy->peekSurface()->uniqueID().asUInt() : -1); if (printDependencies) { diff --git a/third_party/skia/src/gpu/GrRenderTask.h b/third_party/skia/src/gpu/GrRenderTask.h index 3fb3a18bab08..15e5ffd63bc8 100644 --- a/third_party/skia/src/gpu/GrRenderTask.h +++ b/third_party/skia/src/gpu/GrRenderTask.h @@ -11,6 +11,7 @@ #include "include/core/SkRefCnt.h" #include "include/private/SkColorData.h" #include "include/private/SkTDArray.h" +#include "src/gpu/GrSurfaceProxyView.h" #include "src/gpu/GrTextureProxy.h" #include "src/gpu/GrTextureResolveManager.h" @@ -24,7 +25,8 @@ class GrTextureResolveRenderTask; // contents. (e.g., an opsTask that executes a command buffer, a task to regenerate mipmaps, etc.) class GrRenderTask : public SkRefCnt { public: - GrRenderTask(sk_sp target); + GrRenderTask(); + GrRenderTask(GrSurfaceProxyView); ~GrRenderTask() override; void makeClosed(const GrCaps&); @@ -74,14 +76,12 @@ class GrRenderTask : public SkRefCnt { virtual int numClips() const { return 0; } - using VisitSurfaceProxyFunc = std::function; + virtual void visitProxies_debugOnly(const GrOp::VisitProxyFunc&) const = 0; - virtual void visitProxies_debugOnly(const VisitSurfaceProxyFunc&) const = 0; - - void visitTargetAndSrcProxies_debugOnly(const VisitSurfaceProxyFunc& fn) const { + void visitTargetAndSrcProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const { this->visitProxies_debugOnly(fn); - if (fTarget) { - fn(fTarget.get(), GrMipMapped::kNo); + if (fTargetView.proxy()) { + fn(fTargetView.proxy(), GrMipMapped::kNo); } } #endif @@ -105,7 +105,7 @@ class GrRenderTask : public SkRefCnt { // targetUpdateBounds must not extend beyond the proxy bounds. virtual ExpectedOutcome onMakeClosed(const GrCaps&, SkIRect* targetUpdateBounds) = 0; - sk_sp fTarget; + GrSurfaceProxyView fTargetView; // 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 @@ -117,14 +117,14 @@ 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 fTarget. That is handled when the drawingManager - // calls isInstantiated. + // NOTE: Derived classes don't need to check fTargetView. That is handled when the + // drawingManager calls isInstantiated. virtual void handleInternalAllocationFailure() = 0; virtual bool onIsUsed(GrSurfaceProxy*) const = 0; bool isUsed(GrSurfaceProxy* proxy) const { - if (proxy == fTarget.get()) { + if (proxy == fTargetView.proxy()) { return true; } diff --git a/third_party/skia/src/gpu/GrResourceAllocator.cpp b/third_party/skia/src/gpu/GrResourceAllocator.cpp index 576dfc4c3ed4..110e38b01b4d 100644 --- a/third_party/skia/src/gpu/GrResourceAllocator.cpp +++ b/third_party/skia/src/gpu/GrResourceAllocator.cpp @@ -76,19 +76,6 @@ void GrResourceAllocator::addInterval(GrSurfaceProxy* proxy, unsigned int start, SkASSERT(!fAssigned); // We shouldn't be adding any intervals after (or during) assignment if (proxy->canSkipResourceAllocator()) { - // If the proxy is still not instantiated at this point but will need stencil, it will - // attach its own stencil buffer upon onFlush instantiation. - if (proxy->isInstantiated()) { - auto rt = proxy->asRenderTargetProxy(); - int minStencilSampleCount = rt ? rt->numStencilSamples() : 0; - if (minStencilSampleCount) { - if (!GrSurfaceProxyPriv::AttachStencilIfNeeded( - fResourceProvider, proxy->peekSurface(), minStencilSampleCount)) { - SkDebugf("WARNING: failed to attach stencil buffer. " - "Rendering may be incorrect.\n"); - } - } - } return; } @@ -265,19 +252,11 @@ void GrResourceAllocator::recycleSurface(sk_sp surface) { // First try to reuse one of the recently allocated/used GrSurfaces in the free pool. // If we can't find a useable one, create a new one. -sk_sp GrResourceAllocator::findSurfaceFor(const GrSurfaceProxy* proxy, - int minStencilSampleCount) { - +sk_sp GrResourceAllocator::findSurfaceFor(const GrSurfaceProxy* proxy) { if (proxy->asTextureProxy() && proxy->asTextureProxy()->getUniqueKey().isValid()) { // First try to reattach to a cached version if the proxy is uniquely keyed - sk_sp surface = fResourceProvider->findByUniqueKey( - proxy->asTextureProxy()->getUniqueKey()); - if (surface) { - if (!GrSurfaceProxyPriv::AttachStencilIfNeeded(fResourceProvider, surface.get(), - minStencilSampleCount)) { - return nullptr; - } - + if (sk_sp surface = fResourceProvider->findByUniqueKey( + proxy->asTextureProxy()->getUniqueKey())) { return surface; } } @@ -298,11 +277,6 @@ sk_sp GrResourceAllocator::findSurfaceFor(const GrSurfaceProxy* proxy // match budgeted proxies w/ budgeted surfaces and unbudgeted w/ unbudgeted. surface->resourcePriv().makeBudgeted(); } - - if (!GrSurfaceProxyPriv::AttachStencilIfNeeded(fResourceProvider, surface.get(), - minStencilSampleCount)) { - return nullptr; - } SkASSERT(!surface->getUniqueKey().isValid()); return surface; } @@ -405,16 +379,7 @@ bool GrResourceAllocator::assign(int* startIndex, int* stopIndex, AssignError* o this->expire(cur->start()); - int minStencilSampleCount = (cur->proxy()->asRenderTargetProxy()) - ? cur->proxy()->asRenderTargetProxy()->numStencilSamples() - : 0; - if (cur->proxy()->isInstantiated()) { - if (!GrSurfaceProxyPriv::AttachStencilIfNeeded( - fResourceProvider, cur->proxy()->peekSurface(), minStencilSampleCount)) { - *outError = AssignError::kFailedProxyInstantiation; - } - fActiveIntvls.insertByIncreasingEnd(cur); if (fResourceProvider->overBudget()) { @@ -432,8 +397,7 @@ bool GrResourceAllocator::assign(int* startIndex, int* stopIndex, AssignError* o if (!cur->proxy()->priv().doLazyInstantiation(fResourceProvider)) { *outError = AssignError::kFailedProxyInstantiation; } - } else if (sk_sp surface = - this->findSurfaceFor(cur->proxy(), minStencilSampleCount)) { + } else if (sk_sp surface = this->findSurfaceFor(cur->proxy())) { // TODO: make getUniqueKey virtual on GrSurfaceProxy GrTextureProxy* texProxy = cur->proxy()->asTextureProxy(); diff --git a/third_party/skia/src/gpu/GrResourceAllocator.h b/third_party/skia/src/gpu/GrResourceAllocator.h index 6108b545371b..da3c7353c1a5 100644 --- a/third_party/skia/src/gpu/GrResourceAllocator.h +++ b/third_party/skia/src/gpu/GrResourceAllocator.h @@ -121,7 +121,7 @@ class GrResourceAllocator { // These two methods wrap the interactions with the free pool void recycleSurface(sk_sp surface); - sk_sp findSurfaceFor(const GrSurfaceProxy* proxy, int minStencilSampleCount); + sk_sp findSurfaceFor(const GrSurfaceProxy* proxy); struct FreePoolTraits { static const GrScratchKey& GetKey(const GrSurface& s) { diff --git a/third_party/skia/src/gpu/GrResourceCache.cpp b/third_party/skia/src/gpu/GrResourceCache.cpp index 6d9a961886ff..5b0fafc3db80 100644 --- a/third_party/skia/src/gpu/GrResourceCache.cpp +++ b/third_party/skia/src/gpu/GrResourceCache.cpp @@ -645,15 +645,13 @@ void GrResourceCache::processFreedGpuResources() { SkASSERT(msgs[i].fOwningUniqueID == fContextUniqueID); uint32_t id = msgs[i].fTexture->uniqueID().asUInt(); TextureAwaitingUnref* info = fTexturesAwaitingUnref.find(id); - // If we called release or abandon on the GrContext we will have already released our ref on - // the GrGpuResource. If then the message arrives before the actual GrContext gets destroyed - // we will try to process the message when we destroy the GrContext. This protects us from - // trying to unref the resource twice. - if (info) { - info->unref(); - if (info->finished()) { - fTexturesAwaitingUnref.remove(id); - } + // If the GrContext was released or abandoned then fTexturesAwaitingUnref should have been + // empty and we would have returned early above. Thus, any texture from a message should be + // in the list of fTexturesAwaitingUnref. + SkASSERT(info); + info->unref(); + if (info->finished()) { + fTexturesAwaitingUnref.remove(id); } } } diff --git a/third_party/skia/src/gpu/GrResourceProvider.cpp b/third_party/skia/src/gpu/GrResourceProvider.cpp index 9ba9505a4ac2..3068b9b8ab30 100644 --- a/third_party/skia/src/gpu/GrResourceProvider.cpp +++ b/third_party/skia/src/gpu/GrResourceProvider.cpp @@ -28,7 +28,7 @@ #include "src/gpu/GrTexturePriv.h" #include "src/gpu/SkGr.h" -const uint32_t GrResourceProvider::kMinScratchTextureSize = 16; +const int GrResourceProvider::kMinScratchTextureSize = 16; #define ASSERT_SINGLE_OWNER \ SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fSingleOwner);) @@ -173,14 +173,15 @@ sk_sp GrResourceProvider::createTexture(const GrSurfaceDesc& desc, return nullptr; } - // Compressed textures are read-only so they don't support re-use for scratch. + // Currently we don't recycle compressed textures as scratch. Additionally all compressed + // textures should be created through the createCompressedTexture function. + SkASSERT(!this->caps()->isFormatCompressed(format)); + // TODO: Support GrMipMapped::kYes in scratch texture lookup here. - if (!GrPixelConfigIsCompressed(desc.fConfig)) { - sk_sp tex = this->getExactScratch( - desc, format, renderable, renderTargetSampleCnt, budgeted, mipMapped, isProtected); - if (tex) { - return tex; - } + sk_sp tex = this->getExactScratch( + desc, format, renderable, renderTargetSampleCnt, budgeted, mipMapped, isProtected); + if (tex) { + return tex; } return fGpu->createTexture(desc, format, renderable, renderTargetSampleCnt, mipMapped, budgeted, @@ -189,28 +190,31 @@ sk_sp GrResourceProvider::createTexture(const GrSurfaceDesc& desc, // Map 'value' to a larger multiple of 2. Values <= 'kMagicTol' will pop up to // the next power of 2. Those above 'kMagicTol' will only go up half the floor power of 2. -uint32_t GrResourceProvider::MakeApprox(uint32_t value) { - static const int kMagicTol = 1024; +SkISize GrResourceProvider::MakeApprox(SkISize dimensions) { + auto adjust = [](int value) { + static const int kMagicTol = 1024; - value = SkTMax(kMinScratchTextureSize, value); + value = SkTMax(kMinScratchTextureSize, value); - if (SkIsPow2(value)) { - return value; - } + if (SkIsPow2(value)) { + return value; + } - uint32_t ceilPow2 = GrNextPow2(value); - if (value <= kMagicTol) { - return ceilPow2; - } + int ceilPow2 = SkNextPow2(value); + if (value <= kMagicTol) { + return ceilPow2; + } - uint32_t floorPow2 = ceilPow2 >> 1; - uint32_t mid = floorPow2 + (floorPow2 >> 1); + int floorPow2 = ceilPow2 >> 1; + int mid = floorPow2 + (floorPow2 >> 1); - if (value <= mid) { - return mid; - } + if (value <= mid) { + return mid; + } + return ceilPow2; + }; - return ceilPow2; + return {adjust(dimensions.width()), adjust(dimensions.height())}; } sk_sp GrResourceProvider::createApproxTexture(const GrSurfaceDesc& desc, @@ -224,10 +228,9 @@ sk_sp GrResourceProvider::createApproxTexture(const GrSurfaceDesc& de return nullptr; } - // Currently we don't recycle compressed textures as scratch. - if (GrPixelConfigIsCompressed(desc.fConfig)) { - return nullptr; - } + // Currently we don't recycle compressed textures as scratch. Additionally all compressed + // textures should be created through the createCompressedTexture function. + SkASSERT(!this->caps()->isFormatCompressed(format)); if (!fCaps->validateSurfaceParams({desc.fWidth, desc.fHeight}, format, desc.fConfig, renderable, renderTargetSampleCnt, GrMipMapped::kNo)) { @@ -236,8 +239,9 @@ sk_sp GrResourceProvider::createApproxTexture(const GrSurfaceDesc& de // bin by some multiple or power of 2 with a reasonable min GrSurfaceDesc copyDesc(desc); - copyDesc.fWidth = MakeApprox(desc.fWidth); - copyDesc.fHeight = MakeApprox(desc.fHeight); + auto size = MakeApprox({desc.fWidth, desc.fHeight}); + copyDesc.fWidth = size.width(); + copyDesc.fHeight = size.height(); if (auto tex = this->refScratchTexture(copyDesc, format, renderable, renderTargetSampleCnt, GrMipMapped::kNo, isProtected)) { @@ -256,7 +260,7 @@ sk_sp GrResourceProvider::refScratchTexture(const GrSurfaceDesc& desc GrProtected isProtected) { ASSERT_SINGLE_OWNER SkASSERT(!this->isAbandoned()); - SkASSERT(!GrPixelConfigIsCompressed(desc.fConfig)); + SkASSERT(!this->caps()->isFormatCompressed(format)); SkASSERT(fCaps->validateSurfaceParams({desc.fWidth, desc.fHeight}, format, desc.fConfig, renderable, renderTargetSampleCnt, GrMipMapped::kNo)); @@ -264,7 +268,7 @@ sk_sp GrResourceProvider::refScratchTexture(const GrSurfaceDesc& desc // to fall back to making a new texture. if (fGpu->caps()->reuseScratchTextures() || renderable == GrRenderable::kYes) { GrScratchKey key; - GrTexturePriv::ComputeScratchKey(desc.fConfig, desc.fWidth, desc.fHeight, renderable, + GrTexturePriv::ComputeScratchKey(desc.fConfig, {desc.fWidth, desc.fHeight}, renderable, renderTargetSampleCnt, mipMapped, isProtected, &key); GrGpuResource* resource = fCache->findAndRefScratchResource(key); if (resource) { @@ -387,16 +391,57 @@ sk_sp GrResourceProvider::createPatternedIndexBuffer(const ui return buffer; } -static constexpr int kMaxQuads = 1 << 12; // max possible: (1 << 14) - 1; +/////////////////////////////////////////////////////////////////////////////////////////////////// +static constexpr int kMaxNumNonAAQuads = 1 << 12; // max possible: (1 << 14) - 1; +static const int kVertsPerNonAAQuad = 4; +static const int kIndicesPerNonAAQuad = 6; + +sk_sp GrResourceProvider::createNonAAQuadIndexBuffer() { + GR_STATIC_ASSERT(kVertsPerNonAAQuad * kMaxNumNonAAQuads <= 65535); // indices fit in a uint16_t + + static const uint16_t kNonAAQuadIndexPattern[] = { + 0, 1, 2, 2, 1, 3 + }; + + GR_STATIC_ASSERT(SK_ARRAY_COUNT(kNonAAQuadIndexPattern) == kIndicesPerNonAAQuad); + + return this->createPatternedIndexBuffer(kNonAAQuadIndexPattern, kIndicesPerNonAAQuad, + kMaxNumNonAAQuads, kVertsPerNonAAQuad, nullptr); +} + +int GrResourceProvider::MaxNumNonAAQuads() { return kMaxNumNonAAQuads; } +int GrResourceProvider::NumVertsPerNonAAQuad() { return kVertsPerNonAAQuad; } +int GrResourceProvider::NumIndicesPerNonAAQuad() { return kIndicesPerNonAAQuad; } + +/////////////////////////////////////////////////////////////////////////////////////////////////// +static constexpr int kMaxNumAAQuads = 1 << 9; // max possible: (1 << 13) - 1; +static const int kVertsPerAAQuad = 8; +static const int kIndicesPerAAQuad = 30; + +sk_sp GrResourceProvider::createAAQuadIndexBuffer() { + GR_STATIC_ASSERT(kVertsPerAAQuad * kMaxNumAAQuads <= 65535); // indices fit in a uint16_t + + // clang-format off + static const uint16_t kAAQuadIndexPattern[] = { + 0, 1, 2, 1, 3, 2, + 0, 4, 1, 4, 5, 1, + 0, 6, 4, 0, 2, 6, + 2, 3, 6, 3, 7, 6, + 1, 5, 3, 3, 5, 7, + }; + // clang-format on + + GR_STATIC_ASSERT(SK_ARRAY_COUNT(kAAQuadIndexPattern) == kIndicesPerAAQuad); -sk_sp GrResourceProvider::createQuadIndexBuffer() { - GR_STATIC_ASSERT(4 * kMaxQuads <= 65535); - static const uint16_t kPattern[] = { 0, 1, 2, 2, 1, 3 }; - return this->createPatternedIndexBuffer(kPattern, 6, kMaxQuads, 4, nullptr); + return this->createPatternedIndexBuffer(kAAQuadIndexPattern, kIndicesPerAAQuad, + kMaxNumAAQuads, kVertsPerAAQuad, nullptr); } -int GrResourceProvider::QuadCountOfQuadBuffer() { return kMaxQuads; } +int GrResourceProvider::MaxNumAAQuads() { return kMaxNumAAQuads; } +int GrResourceProvider::NumVertsPerAAQuad() { return kVertsPerAAQuad; } +int GrResourceProvider::NumIndicesPerAAQuad() { return kIndicesPerAAQuad; } +/////////////////////////////////////////////////////////////////////////////////////////////////// sk_sp GrResourceProvider::createPath(const SkPath& path, const GrStyle& style) { if (this->isAbandoned()) { return nullptr; @@ -436,10 +481,10 @@ sk_sp GrResourceProvider::createBuffer(size_t size, GrGpuBufferType return buffer; } -bool GrResourceProvider::attachStencilAttachment(GrRenderTarget* rt, int minStencilSampleCount) { +bool GrResourceProvider::attachStencilAttachment(GrRenderTarget* rt, int numStencilSamples) { SkASSERT(rt); GrStencilAttachment* stencil = rt->renderTargetPriv().getStencilAttachment(); - if (stencil && stencil->numSamples() >= minStencilSampleCount) { + if (stencil && stencil->numSamples() == numStencilSamples) { return true; } @@ -455,12 +500,12 @@ bool GrResourceProvider::attachStencilAttachment(GrRenderTarget* rt, int minSten } #endif GrStencilAttachment::ComputeSharedStencilAttachmentKey( - width, height, minStencilSampleCount, &sbKey); + width, height, numStencilSamples, &sbKey); auto stencil = this->findByUniqueKey(sbKey); if (!stencil) { // Need to try and create a new stencil stencil.reset(this->gpu()->createStencilAttachmentForRenderTarget( - rt, width, height, minStencilSampleCount)); + rt, width, height, numStencilSamples)); if (!stencil) { return false; } @@ -470,7 +515,7 @@ bool GrResourceProvider::attachStencilAttachment(GrRenderTarget* rt, int minSten } if (GrStencilAttachment* stencil = rt->renderTargetPriv().getStencilAttachment()) { - return stencil->numSamples() >= minStencilSampleCount; + return stencil->numSamples() == numStencilSamples; } return false; } @@ -484,13 +529,15 @@ sk_sp GrResourceProvider::wrapBackendTextureAsRenderTarget( return fGpu->wrapBackendTextureAsRenderTarget(tex, sampleCnt, colorType); } -sk_sp SK_WARN_UNUSED_RESULT GrResourceProvider::makeSemaphore(bool isOwned) { - return fGpu->makeSemaphore(isOwned); +std::unique_ptr SK_WARN_UNUSED_RESULT GrResourceProvider::makeSemaphore( + bool isOwned) { + return this->isAbandoned() ? nullptr : fGpu->makeSemaphore(isOwned); } -sk_sp GrResourceProvider::wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - SemaphoreWrapType wrapType, - GrWrapOwnership ownership) { +std::unique_ptr GrResourceProvider::wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + SemaphoreWrapType wrapType, + GrWrapOwnership ownership) { ASSERT_SINGLE_OWNER return this->isAbandoned() ? nullptr : fGpu->wrapBackendSemaphore(semaphore, wrapType, @@ -500,7 +547,7 @@ sk_sp GrResourceProvider::wrapBackendSemaphore(const GrBackendSemap // Ensures the row bytes are populated (not 0) and makes a copy to a temporary // to make the row bytes tight if necessary. Returns false if the input row bytes are invalid. static bool prepare_level(const GrMipLevel& inLevel, - const SkISize& size, + const SkISize& dimensions, bool rowBytesSupport, GrColorType origColorType, GrColorType allowedColorType, @@ -511,7 +558,7 @@ static bool prepare_level(const GrMipLevel& inLevel, outLevel->fRowBytes = 0; return true; } - size_t minRB = size.fWidth * GrColorTypeBytesPerPixel(origColorType); + size_t minRB = dimensions.fWidth * GrColorTypeBytesPerPixel(origColorType); size_t actualRB = inLevel.fRowBytes ? inLevel.fRowBytes : minRB; if (actualRB < minRB) { return false; @@ -521,12 +568,12 @@ static bool prepare_level(const GrMipLevel& inLevel, outLevel->fPixels = inLevel.fPixels; return true; } - auto tempRB = size.fWidth * GrColorTypeBytesPerPixel(allowedColorType); - data->reset(new char[tempRB * size.fHeight]); + auto tempRB = dimensions.fWidth * GrColorTypeBytesPerPixel(allowedColorType); + data->reset(new char[tempRB * dimensions.fHeight]); outLevel->fPixels = data->get(); outLevel->fRowBytes = tempRB; - GrImageInfo srcInfo(origColorType, kUnpremul_SkAlphaType, nullptr, size); - GrImageInfo dstInfo(allowedColorType, kUnpremul_SkAlphaType, nullptr, size); + GrImageInfo srcInfo(origColorType, kUnpremul_SkAlphaType, nullptr, dimensions); + GrImageInfo dstInfo(allowedColorType, kUnpremul_SkAlphaType, nullptr, dimensions); return GrConvertPixels(dstInfo, data->get(), tempRB, srcInfo, inLevel.fPixels, actualRB); } diff --git a/third_party/skia/src/gpu/GrResourceProvider.h b/third_party/skia/src/gpu/GrResourceProvider.h index 12d5d02ce9a5..976c130ab4ac 100644 --- a/third_party/skia/src/gpu/GrResourceProvider.h +++ b/third_party/skia/src/gpu/GrResourceProvider.h @@ -154,7 +154,7 @@ class GrResourceProvider { sk_sp wrapVulkanSecondaryCBAsRenderTarget(const SkImageInfo&, const GrVkDrawableInfo&); - static const uint32_t kMinScratchTextureSize; + static const int kMinScratchTextureSize; /** * Either finds and refs, or creates a static buffer with the given parameters and contents. @@ -194,20 +194,40 @@ class GrResourceProvider { } /** - * Returns an index buffer that can be used to render quads. - * Six indices per quad: 0, 1, 2, 2, 1, 3, etc. - * The max number of quads is the buffer's index capacity divided by 6. + * Returns an index buffer that can be used to render non-antialiased quads. + * Each quad consumes 6 indices (0, 1, 2, 2, 1, 3) and 4 vertices. + * Call MaxNumNonAAQuads to get the max allowed number of non-AA quads. * Draw with GrPrimitiveType::kTriangles - * @ return the quad index buffer + * @ return the non-AA quad index buffer */ - sk_sp refQuadIndexBuffer() { - if (!fQuadIndexBuffer) { - fQuadIndexBuffer = this->createQuadIndexBuffer(); + sk_sp refNonAAQuadIndexBuffer() { + if (!fNonAAQuadIndexBuffer) { + fNonAAQuadIndexBuffer = this->createNonAAQuadIndexBuffer(); } - return fQuadIndexBuffer; + return fNonAAQuadIndexBuffer; } - static int QuadCountOfQuadBuffer(); + static int MaxNumNonAAQuads(); + static int NumVertsPerNonAAQuad(); + static int NumIndicesPerNonAAQuad(); + + /** + * Returns an index buffer that can be used to render antialiased quads. + * Each quad consumes 30 indices and 8 vertices. + * Call MaxNumAAQuads to get the max allowed number of AA quads. + * Draw with GrPrimitiveType::kTriangles + * @ return the AA quad index buffer + */ + sk_sp refAAQuadIndexBuffer() { + if (!fAAQuadIndexBuffer) { + fAAQuadIndexBuffer = this->createAAQuadIndexBuffer(); + } + return fAAQuadIndexBuffer; + } + + static int MaxNumAAQuads(); + static int NumVertsPerAAQuad(); + static int NumIndicesPerAAQuad(); /** * Factories for GrPath objects. It's an error to call these if path rendering @@ -254,16 +274,16 @@ class GrResourceProvider { */ void assignUniqueKeyToResource(const GrUniqueKey&, GrGpuResource*); - sk_sp SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned = true); + std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned = true); enum class SemaphoreWrapType { kWillSignal, kWillWait, }; - sk_sp wrapBackendSemaphore(const GrBackendSemaphore&, - SemaphoreWrapType wrapType, - GrWrapOwnership = kBorrow_GrWrapOwnership); + std::unique_ptr wrapBackendSemaphore(const GrBackendSemaphore&, + SemaphoreWrapType wrapType, + GrWrapOwnership = kBorrow_GrWrapOwnership); void abandon() { fCache = nullptr; @@ -274,7 +294,7 @@ class GrResourceProvider { const GrCaps* caps() const { return fCaps.get(); } bool overBudget() const { return fCache->overBudget(); } - static uint32_t MakeApprox(uint32_t value); + static SkISize MakeApprox(SkISize); inline GrResourceProviderPriv priv(); inline const GrResourceProviderPriv priv() const; @@ -346,12 +366,14 @@ class GrResourceProvider { int vertCount, const GrUniqueKey* key); - sk_sp createQuadIndexBuffer(); + sk_sp createNonAAQuadIndexBuffer(); + sk_sp createAAQuadIndexBuffer(); GrResourceCache* fCache; GrGpu* fGpu; sk_sp fCaps; - sk_sp fQuadIndexBuffer; + sk_sp fNonAAQuadIndexBuffer; + sk_sp fAAQuadIndexBuffer; // In debug builds we guard against improper thread handling SkDEBUGCODE(mutable GrSingleOwner* fSingleOwner;) diff --git a/third_party/skia/src/gpu/GrSamplerState.h b/third_party/skia/src/gpu/GrSamplerState.h index 34915c7bbdcc..a31e40f7a570 100644 --- a/third_party/skia/src/gpu/GrSamplerState.h +++ b/third_party/skia/src/gpu/GrSamplerState.h @@ -15,8 +15,12 @@ */ class GrSamplerState { public: - enum class Filter : uint8_t { kNearest, kBilerp, kMipMap }; - enum class WrapMode : uint8_t { kClamp, kRepeat, kMirrorRepeat, kClampToBorder }; + enum class Filter : uint8_t { kNearest, kBilerp, kMipMap, kLast = kMipMap }; + enum class WrapMode : uint8_t { kClamp, kRepeat, kMirrorRepeat, kClampToBorder, + kLast = kClampToBorder }; + + static const int kFilterCount = static_cast(Filter::kLast) + 1; + static const int kWrapModeCount = static_cast(WrapMode::kLast) + 1; static constexpr GrSamplerState ClampNearest() { return GrSamplerState(); } static constexpr GrSamplerState ClampBilerp() { diff --git a/third_party/skia/src/gpu/GrScissorState.h b/third_party/skia/src/gpu/GrScissorState.h index 79ba47f1e621..dac735b023da 100644 --- a/third_party/skia/src/gpu/GrScissorState.h +++ b/third_party/skia/src/gpu/GrScissorState.h @@ -30,7 +30,10 @@ class GrScissorState { bool operator!=(const GrScissorState& other) const { return !(*this == other); } bool enabled() const { return fEnabled; } - const SkIRect& rect() const { return fRect; } + const SkIRect& rect() const { + SkASSERT(fEnabled); + return fRect; + } private: bool fEnabled; diff --git a/third_party/skia/src/gpu/GrSemaphore.h b/third_party/skia/src/gpu/GrSemaphore.h index 858cf63cbc74..77e5b79d4ea1 100644 --- a/third_party/skia/src/gpu/GrSemaphore.h +++ b/third_party/skia/src/gpu/GrSemaphore.h @@ -18,22 +18,21 @@ * along with other resources. If more cases like this arise we could consider moving some of the * unused functionality off of GrGpuResource. */ -class GrSemaphore : public GrGpuResource { +class GrSemaphore { public: + virtual ~GrSemaphore() {} + // The derived class can return its GrBackendSemaphore. This is used when flushing with signal // semaphores so we can set the client's GrBackendSemaphore object after we've created the // internal semaphore. virtual GrBackendSemaphore backendSemaphore() const = 0; - const char* getResourceType() const override { return "semaphore"; } - -protected: - explicit GrSemaphore(GrGpu* gpu) : INHERITED(gpu) {} - private: - size_t onGpuMemorySize() const override { return 0; } - - typedef GrGpuResource INHERITED; + friend class GrGpu; // for setIsOwned + // This is only used in GrGpu to handle the case where we created a semaphore that was meant to + // be borrowed, but we failed to submit it. So we must go back and switch the semaphore to owned + // so that it gets deleted. + virtual void setIsOwned() = 0; }; #endif diff --git a/third_party/skia/src/gpu/GrShaderCaps.cpp b/third_party/skia/src/gpu/GrShaderCaps.cpp index b2be03bd0148..60ea381d9fa1 100644 --- a/third_party/skia/src/gpu/GrShaderCaps.cpp +++ b/third_party/skia/src/gpu/GrShaderCaps.cpp @@ -43,11 +43,11 @@ GrShaderCaps::GrShaderCaps(const GrContextOptions& options) { fRemovePowWithConstantExponent = false; fMustWriteToFragColor = false; fNoDefaultPrecisionForExternalSamplers = false; + fCanOnlyUseSampleMaskWithStencil = false; fFlatInterpolationSupport = false; fPreferFlatInterpolation = false; fNoPerspectiveInterpolationSupport = false; - fSampleVariablesSupport = false; - fSampleVariablesStencilSupport = false; + fSampleMaskSupport = false; fExternalTextureSupport = false; fVertexIDSupport = false; fFPManipulationSupport = false; @@ -120,12 +120,11 @@ void GrShaderCaps::dumpJSON(SkJSONWriter* writer) const { writer->appendBool("Must write to sk_FragColor [workaround]", fMustWriteToFragColor); writer->appendBool("Don't add default precision statement for samplerExternalOES", fNoDefaultPrecisionForExternalSamplers); + writer->appendBool("Can only use sample mask with stencil", fCanOnlyUseSampleMaskWithStencil); writer->appendBool("Flat interpolation support", fFlatInterpolationSupport); writer->appendBool("Prefer flat interpolation", fPreferFlatInterpolation); writer->appendBool("No perspective interpolation support", fNoPerspectiveInterpolationSupport); - writer->appendBool("Sample variables support", fSampleVariablesSupport); - writer->appendBool("Sample variables stencil support [workaround]", - fSampleVariablesStencilSupport); + writer->appendBool("Sample mask support", fSampleMaskSupport); writer->appendBool("External texture support", fExternalTextureSupport); writer->appendBool("sk_VertexID support", fVertexIDSupport); writer->appendBool("Floating point manipulation support", fFPManipulationSupport); @@ -167,6 +166,11 @@ void GrShaderCaps::applyOptionsOverrides(const GrContextOptions& options) { SkASSERT(!fNoDefaultPrecisionForExternalSamplers); } #if GR_TEST_UTILS - fDualSourceBlendingSupport = fDualSourceBlendingSupport && !options.fSuppressDualSourceBlending; + if (options.fSuppressDualSourceBlending) { + fDualSourceBlendingSupport = false; + } + if (options.fSuppressGeometryShaders) { + fGeometryShaderSupport = false; + } #endif } diff --git a/third_party/skia/src/gpu/GrShaderCaps.h b/third_party/skia/src/gpu/GrShaderCaps.h index fb68ec354eef..8165b0de1a2b 100644 --- a/third_party/skia/src/gpu/GrShaderCaps.h +++ b/third_party/skia/src/gpu/GrShaderCaps.h @@ -70,12 +70,7 @@ class GrShaderCaps : public SkRefCnt { bool noperspectiveInterpolationSupport() const { return fNoPerspectiveInterpolationSupport; } - // Can we use sample variables everywhere? - bool sampleVariablesSupport() const { return fSampleVariablesSupport; } - - // Can we use sample variables when rendering to stencil? (This is a workaround for platforms - // where sample variables are broken in general, but seem to work when rendering to stencil.) - bool sampleVariablesStencilSupport() const { return fSampleVariablesStencilSupport; } + bool sampleMaskSupport() const { return fSampleMaskSupport; } bool externalTextureSupport() const { return fExternalTextureSupport; } @@ -164,6 +159,11 @@ class GrShaderCaps : public SkRefCnt { return fNoDefaultPrecisionForExternalSamplers; } + // The sample mask round rect op draws nothing on several Adreno and Radeon bots. Other ops that + // use sample mask while rendering to stencil seem to work fine. + // http://skbug.com/8921 + bool canOnlyUseSampleMaskWithStencil() const { return fCanOnlyUseSampleMaskWithStencil; } + // Returns the string of an extension that must be enabled in the shader to support // derivatives. If nullptr is returned then no extension needs to be enabled. Before calling // this function, the caller should check that shaderDerivativeSupport exists. @@ -222,7 +222,7 @@ class GrShaderCaps : public SkRefCnt { } const char* sampleVariablesExtensionString() const { - SkASSERT(this->sampleVariablesSupport() || this->sampleVariablesStencilSupport()); + SkASSERT(this->sampleMaskSupport()); return fSampleVariablesExtensionString; } @@ -250,8 +250,7 @@ class GrShaderCaps : public SkRefCnt { bool fFlatInterpolationSupport : 1; bool fPreferFlatInterpolation : 1; bool fNoPerspectiveInterpolationSupport : 1; - bool fSampleVariablesSupport : 1; - bool fSampleVariablesStencilSupport : 1; + bool fSampleMaskSupport : 1; bool fExternalTextureSupport : 1; bool fVertexIDSupport : 1; bool fFPManipulationSupport : 1; @@ -282,6 +281,7 @@ class GrShaderCaps : public SkRefCnt { bool fRemovePowWithConstantExponent : 1; bool fMustWriteToFragColor : 1; bool fNoDefaultPrecisionForExternalSamplers : 1; + bool fCanOnlyUseSampleMaskWithStencil : 1; const char* fVersionDeclString; diff --git a/third_party/skia/src/gpu/GrSoftwarePathRenderer.cpp b/third_party/skia/src/gpu/GrSoftwarePathRenderer.cpp index 4245e9ed2974..e4ae6c069d67 100644 --- a/third_party/skia/src/gpu/GrSoftwarePathRenderer.cpp +++ b/third_party/skia/src/gpu/GrSoftwarePathRenderer.cpp @@ -144,7 +144,6 @@ void GrSoftwarePathRenderer::DrawAroundInvPath(GrRenderTargetContext* renderTarg void GrSoftwarePathRenderer::DrawToTargetWithShapeMask( sk_sp proxy, - GrColorType srcColorType, GrRenderTargetContext* renderTargetContext, GrPaint&& paint, const GrUserStencilSettings& userStencilSettings, @@ -166,7 +165,7 @@ void GrSoftwarePathRenderer::DrawToTargetWithShapeMask( SkIntToScalar(-textureOriginInDeviceSpace.fY)); maskMatrix.preConcat(viewMatrix); paint.addCoverageFragmentProcessor(GrSimpleTextureEffect::Make( - std::move(proxy), srcColorType, maskMatrix, GrSamplerState::Filter::kNearest)); + std::move(proxy), kPremul_SkAlphaType, maskMatrix, GrSamplerState::Filter::kNearest)); DrawNonAARect(renderTargetContext, std::move(paint), userStencilSettings, clip, SkMatrix::I(), dstRect, invert); } @@ -386,10 +385,9 @@ bool GrSoftwarePathRenderer::onDrawPath(const DrawPathArgs& args) { *args.fUserStencilSettings, *args.fClip, *args.fViewMatrix, devClipBounds, unclippedDevShapeBounds); } - DrawToTargetWithShapeMask( - std::move(proxy), GrColorType::kAlpha_8, args.fRenderTargetContext, - std::move(args.fPaint), *args.fUserStencilSettings, *args.fClip, *args.fViewMatrix, - SkIPoint{boundsForMask->fLeft, boundsForMask->fTop}, *boundsForMask); + DrawToTargetWithShapeMask(std::move(proxy), args.fRenderTargetContext, std::move(args.fPaint), + *args.fUserStencilSettings, *args.fClip, *args.fViewMatrix, + SkIPoint{boundsForMask->fLeft, boundsForMask->fTop}, *boundsForMask); return true; } diff --git a/third_party/skia/src/gpu/GrSoftwarePathRenderer.h b/third_party/skia/src/gpu/GrSoftwarePathRenderer.h index d407791137ee..a510c7b52b79 100644 --- a/third_party/skia/src/gpu/GrSoftwarePathRenderer.h +++ b/third_party/skia/src/gpu/GrSoftwarePathRenderer.h @@ -52,7 +52,6 @@ class GrSoftwarePathRenderer : public GrPathRenderer { // space. The 'viewMatrix' will be used to ensure the correct local coords are provided to // any fragment processors in the paint. static void DrawToTargetWithShapeMask(sk_sp proxy, - GrColorType srcColorType, GrRenderTargetContext* renderTargetContext, GrPaint&& paint, const GrUserStencilSettings& userStencilSettings, diff --git a/third_party/skia/src/gpu/GrStencilSettings.cpp b/third_party/skia/src/gpu/GrStencilSettings.cpp index d03165cad4e5..f39648cd4f83 100644 --- a/third_party/skia/src/gpu/GrStencilSettings.cpp +++ b/third_party/skia/src/gpu/GrStencilSettings.cpp @@ -20,36 +20,36 @@ constexpr const GrUserStencilSettings gUnused( 0x0000>() ); -GR_STATIC_ASSERT(kAll_StencilFlags == (gUnused.fFrontFlags[0] & gUnused.fBackFlags[0])); +GR_STATIC_ASSERT(kAll_StencilFlags == (gUnused.fCWFlags[0] & gUnused.fCCWFlags[0])); const GrUserStencilSettings& GrUserStencilSettings::kUnused = gUnused; void GrStencilSettings::reset(const GrUserStencilSettings& user, bool hasStencilClip, int numStencilBits) { - uint16_t frontFlags = user.fFrontFlags[hasStencilClip]; - if (frontFlags & kSingleSided_StencilFlag) { - SkASSERT(frontFlags == user.fBackFlags[hasStencilClip]); - fFlags = frontFlags; + uint16_t cwFlags = user.fCWFlags[hasStencilClip]; + if (cwFlags & kSingleSided_StencilFlag) { + SkASSERT(cwFlags == user.fCCWFlags[hasStencilClip]); + fFlags = cwFlags; if (!this->isDisabled()) { - fFront.reset(user.fFront, hasStencilClip, numStencilBits); + fCWFace.reset(user.fCWFace, hasStencilClip, numStencilBits); } return; } - uint16_t backFlags = user.fBackFlags[hasStencilClip]; - fFlags = frontFlags & backFlags; + uint16_t ccwFlags = user.fCCWFlags[hasStencilClip]; + fFlags = cwFlags & ccwFlags; if (this->isDisabled()) { return; } - if (!(frontFlags & kDisabled_StencilFlag)) { - fFront.reset(user.fFront, hasStencilClip, numStencilBits); + if (!(cwFlags & kDisabled_StencilFlag)) { + fCWFace.reset(user.fCWFace, hasStencilClip, numStencilBits); } else { - fFront.setDisabled(); + fCWFace.setDisabled(); } - if (!(backFlags & kDisabled_StencilFlag)) { - fBack.reset(user.fBack, hasStencilClip, numStencilBits); + if (!(ccwFlags & kDisabled_StencilFlag)) { + fCCWFace.reset(user.fCCWFace, hasStencilClip, numStencilBits); } else { - fBack.setDisabled(); + fCCWFace.setDisabled(); } } @@ -59,11 +59,11 @@ void GrStencilSettings::reset(const GrStencilSettings& that) { return; } if (!this->isTwoSided()) { - memcpy(&fFront, &that.fFront, sizeof(Face)); + memcpy(&fCWFace, &that.fCWFace, sizeof(Face)); } else { - memcpy(&fFront, &that.fFront, 2 * sizeof(Face)); + memcpy(&fCWFace, &that.fCWFace, 2 * sizeof(Face)); GR_STATIC_ASSERT(sizeof(Face) == - offsetof(GrStencilSettings, fBack) - offsetof(GrStencilSettings, fFront)); + offsetof(GrStencilSettings, fCCWFace) - offsetof(GrStencilSettings, fCWFace)); } } @@ -77,13 +77,13 @@ bool GrStencilSettings::operator==(const GrStencilSettings& that) const { return kDisabled_StencilFlag & (fFlags & that.fFlags); } if (kSingleSided_StencilFlag & (fFlags & that.fFlags)) { - return 0 == memcmp(&fFront, &that.fFront, sizeof(Face)); // Both are single sided. + return 0 == memcmp(&fCWFace, &that.fCWFace, sizeof(Face)); // Both are single sided. } else if (kSingleSided_StencilFlag & (fFlags | that.fFlags)) { return false; } else { - return 0 == memcmp(&fFront, &that.fFront, 2 * sizeof(Face)); + return 0 == memcmp(&fCWFace, &that.fCWFace, 2 * sizeof(Face)); GR_STATIC_ASSERT(sizeof(Face) == - offsetof(GrStencilSettings, fBack) - offsetof(GrStencilSettings, fFront)); + offsetof(GrStencilSettings, fCCWFace) - offsetof(GrStencilSettings, fCWFace)); } // memcmp relies on GrStencilSettings::Face being tightly packed. GR_STATIC_ASSERT(0 == offsetof(Face, fRef)); @@ -478,16 +478,16 @@ void GrStencilSettings::genKey(GrProcessorKeyBuilder* b) const { constexpr int kCount16 = sizeof(Face) / sizeof(uint16_t); GR_STATIC_ASSERT(0 == sizeof(Face) % sizeof(uint16_t)); uint16_t* key = reinterpret_cast(b->add32n((kCount16 + 1) / 2)); - memcpy(key, &fFront, sizeof(Face)); + memcpy(key, &fCWFace, sizeof(Face)); key[kCount16] = 0; GR_STATIC_ASSERT(1 == kCount16 % 2); } else { constexpr int kCount32 = (2 * sizeof(Face)) / sizeof(uint32_t); GR_STATIC_ASSERT(0 == (2 * sizeof(Face)) % sizeof(uint32_t)); uint32_t* key = b->add32n(kCount32); - memcpy(key, &fFront, 2 * sizeof(Face)); + memcpy(key, &fCWFace, 2 * sizeof(Face)); GR_STATIC_ASSERT(sizeof(Face) == - offsetof(GrStencilSettings, fBack) - offsetof(GrStencilSettings, fFront)); + offsetof(GrStencilSettings, fCCWFace) - offsetof(GrStencilSettings, fCWFace)); } // We rely on GrStencilSettings::Face being tightly packed for the key to be reliable. GR_STATIC_ASSERT(0 == offsetof(Face, fRef)); diff --git a/third_party/skia/src/gpu/GrStencilSettings.h b/third_party/skia/src/gpu/GrStencilSettings.h index e6942361b880..fc1e66a50dec 100644 --- a/third_party/skia/src/gpu/GrStencilSettings.h +++ b/third_party/skia/src/gpu/GrStencilSettings.h @@ -78,18 +78,24 @@ class GrStencilSettings { void setDisabled(); }; - const Face& frontAndBack() const { + const Face& singleSidedFace() const { SkASSERT(!this->isDisabled()); SkASSERT(!this->isTwoSided()); - return fFront; + return fCWFace; } - const Face& front(GrSurfaceOrigin origin) const { + // Returns the stencil settings for triangles that wind clockwise in "post-origin" space. + // (i.e., the space that results after a potential y-axis flip on device space for bottom-left + // origins.) + const Face& postOriginCWFace(GrSurfaceOrigin origin) const { SkASSERT(this->isTwoSided()); - return (kTopLeft_GrSurfaceOrigin == origin) ? fFront : fBack; + return (kTopLeft_GrSurfaceOrigin == origin) ? fCWFace : fCCWFace; } - const Face& back(GrSurfaceOrigin origin) const { + // Returns the stencil settings for triangles that wind counter-clockwise in "post-origin" + // space. (i.e., the space that results after a potential y-axis flip on device space for + // bottom-left origins.) + const Face& postOriginCCWFace(GrSurfaceOrigin origin) const { SkASSERT(this->isTwoSided()); - return (kTopLeft_GrSurfaceOrigin == origin) ? fBack : fFront; + return (kTopLeft_GrSurfaceOrigin == origin) ? fCCWFace : fCWFace; } /** @@ -128,8 +134,8 @@ class GrStencilSettings { enum { kInvalid_PrivateFlag = (kLast_StencilFlag << 1) }; uint32_t fFlags; - Face fFront; - Face fBack; + Face fCWFace; + Face fCCWFace; }; #endif diff --git a/third_party/skia/src/gpu/GrSurface.cpp b/third_party/skia/src/gpu/GrSurface.cpp index 90f75a82cb01..b1707beb1ddc 100644 --- a/third_party/skia/src/gpu/GrSurface.cpp +++ b/third_party/skia/src/gpu/GrSurface.cpp @@ -17,29 +17,35 @@ size_t GrSurface::ComputeSize(const GrCaps& caps, const GrBackendFormat& format, - int width, - int height, + SkISize dimensions, int colorSamplesPerPixel, GrMipMapped mipMapped, bool binSize) { + // For external formats we do not actually know the real size of the resource so we just return + // 0 here to indicate this. + if (format.textureType() == GrTextureType::kExternal) { + return 0; + } + size_t colorSize; - width = binSize ? GrResourceProvider::MakeApprox(width) : width; - height = binSize ? GrResourceProvider::MakeApprox(height) : height; + if (binSize) { + dimensions = GrResourceProvider::MakeApprox(dimensions); + } // Just setting a defualt value here to appease warnings on uninitialized object. SkImage::CompressionType compressionType = SkImage::kETC1_CompressionType; if (caps.isFormatCompressed(format, &compressionType)) { - colorSize = GrCompressedFormatDataSize(compressionType, width, height); + colorSize = GrCompressedFormatDataSize(compressionType, dimensions); } else { - colorSize = (size_t)width * height * caps.bytesPerPixel(format); + colorSize = (size_t)dimensions.width() * dimensions.height() * caps.bytesPerPixel(format); } SkASSERT(colorSize > 0); size_t finalSize = colorSamplesPerPixel * colorSize; if (GrMipMapped::kYes == mipMapped) { - // We don't have to worry about the mipmaps being a different size than + // We don't have to worry about the mipmaps being a different dimensions than // we'd expect because we never change fDesc.fWidth/fHeight. finalSize += colorSize/3; } diff --git a/third_party/skia/src/gpu/GrSurfaceContext.cpp b/third_party/skia/src/gpu/GrSurfaceContext.cpp index 4b5e0a8c7c42..46844c458c6d 100644 --- a/third_party/skia/src/gpu/GrSurfaceContext.cpp +++ b/third_party/skia/src/gpu/GrSurfaceContext.cpp @@ -35,8 +35,13 @@ GrSurfaceContext::GrSurfaceContext(GrRecordingContext* context, GrColorType colorType, SkAlphaType alphaType, - sk_sp colorSpace) - : fContext(context), fColorInfo(colorType, alphaType, std::move(colorSpace)) {} + sk_sp colorSpace, + GrSurfaceOrigin origin, + GrSwizzle texSwizzle) + : fContext(context) + , fOrigin(origin) + , fColorInfo(colorType, alphaType, std::move(colorSpace)) + , fTextureSwizzle(texSwizzle) {} const GrCaps* GrSurfaceContext::caps() const { return fContext->priv().caps(); } @@ -100,13 +105,10 @@ bool GrSurfaceContext::readPixels(const GrImageInfo& origDstInfo, void* dst, siz // Our tight row bytes may have been changed by clipping. tightRowBytes = dstInfo.minRowBytes(); - bool premul = this->colorInfo().alphaType() == kUnpremul_SkAlphaType && - dstInfo.alphaType() == kPremul_SkAlphaType; - bool unpremul = this->colorInfo().alphaType() == kPremul_SkAlphaType && - dstInfo.alphaType() == kUnpremul_SkAlphaType; - - bool needColorConversion = - SkColorSpaceXformSteps::Required(this->colorInfo().colorSpace(), dstInfo.colorSpace()); + SkColorSpaceXformSteps::Flags flags = SkColorSpaceXformSteps{this->colorInfo(), dstInfo}.flags; + bool unpremul = flags.unpremul, + needColorConversion = flags.linearize || flags.gamut_transform || flags.encode, + premul = flags.premul; const GrCaps* caps = direct->priv().caps(); // This is the getImageData equivalent to the canvas2D putImageData fast path. We probably don't @@ -146,7 +148,7 @@ bool GrSurfaceContext::readPixels(const GrImageInfo& origDstInfo, void* dst, siz if (canvas2DFastPath) { fp = direct->priv().createPMToUPMEffect( GrSimpleTextureEffect::Make(sk_ref_sp(srcProxy->asTextureProxy()), - this->colorInfo().colorType(), SkMatrix::I())); + this->colorInfo().alphaType(), SkMatrix::I())); if (dstInfo.colorType() == GrColorType::kBGRA_8888) { fp = GrFragmentProcessor::SwizzleOutput(std::move(fp), GrSwizzle::BGRA()); dstInfo = dstInfo.makeColorType(GrColorType::kRGBA_8888); @@ -157,7 +159,7 @@ bool GrSurfaceContext::readPixels(const GrImageInfo& origDstInfo, void* dst, siz dstInfo = dstInfo.makeAlphaType(kPremul_SkAlphaType); } else { fp = GrSimpleTextureEffect::Make(sk_ref_sp(srcProxy->asTextureProxy()), - this->colorInfo().colorType(), SkMatrix::I()); + this->colorInfo().alphaType(), SkMatrix::I()); } if (!fp) { return false; @@ -259,13 +261,10 @@ bool GrSurfaceContext::writePixels(const GrImageInfo& origSrcInfo, const void* s // Our tight row bytes may have been changed by clipping. tightRowBytes = srcInfo.minRowBytes(); - bool premul = this->colorInfo().alphaType() == kPremul_SkAlphaType && - srcInfo.alphaType() == kUnpremul_SkAlphaType; - bool unpremul = this->colorInfo().alphaType() == kUnpremul_SkAlphaType && - srcInfo.alphaType() == kPremul_SkAlphaType; - - bool needColorConversion = - SkColorSpaceXformSteps::Required(srcInfo.colorSpace(), this->colorInfo().colorSpace()); + SkColorSpaceXformSteps::Flags flags = SkColorSpaceXformSteps{srcInfo, this->colorInfo()}.flags; + bool unpremul = flags.unpremul, + needColorConversion = flags.linearize || flags.gamut_transform || flags.encode, + premul = flags.premul; const GrCaps* caps = direct->priv().caps(); @@ -340,15 +339,14 @@ bool GrSurfaceContext::writePixels(const GrImageInfo& origSrcInfo, const void* s if (this->asRenderTargetContext()) { std::unique_ptr fp; if (canvas2DFastPath) { - fp = direct->priv().createUPMToPMEffect( - GrSimpleTextureEffect::Make(std::move(tempProxy), colorType, - SkMatrix::I())); + fp = direct->priv().createUPMToPMEffect(GrSimpleTextureEffect::Make( + std::move(tempProxy), alphaType, SkMatrix::I())); // Important: check the original src color type here! if (origSrcInfo.colorType() == GrColorType::kBGRA_8888) { fp = GrFragmentProcessor::SwizzleOutput(std::move(fp), GrSwizzle::BGRA()); } } else { - fp = GrSimpleTextureEffect::Make(std::move(tempProxy), colorType, SkMatrix::I()); + fp = GrSimpleTextureEffect::Make(std::move(tempProxy), alphaType, SkMatrix::I()); } if (!fp) { return false; @@ -425,8 +423,10 @@ bool GrSurfaceContext::copy(GrSurfaceProxy* src, const SkIRect& srcRect, const S return false; } - return this->drawingManager()->newCopyRenderTask(sk_ref_sp(src), srcRect, - this->asSurfaceProxyRef(), dstPoint); + // The swizzle doesn't matter for copies and it is not used. + return this->drawingManager()->newCopyRenderTask( + GrSurfaceProxyView(sk_ref_sp(src), src->origin(), GrSwizzle()), srcRect, + this->textureSurfaceView(), dstPoint); } std::unique_ptr GrSurfaceContext::rescale( @@ -455,10 +455,10 @@ std::unique_ptr GrSurfaceContext::rescale( sk_sp texProxy = sk_ref_sp(this->asTextureProxy()); SkCanvas::SrcRectConstraint constraint = SkCanvas::kStrict_SrcRectConstraint; GrColorType srcColorType = this->colorInfo().colorType(); + SkAlphaType srcAlphaType = this->colorInfo().alphaType(); if (!texProxy) { - texProxy = GrSurfaceProxy::Copy(fContext, this->asSurfaceProxy(), srcColorType, - GrMipMapped::kNo, srcRect, SkBackingFit::kApprox, - SkBudgeted::kNo); + texProxy = GrSurfaceProxy::Copy(fContext, this->asSurfaceProxy(), GrMipMapped::kNo, srcRect, + SkBackingFit::kApprox, SkBudgeted::kNo); if (!texProxy) { return nullptr; } @@ -492,8 +492,7 @@ std::unique_ptr GrSurfaceContext::rescale( if (rescaleGamma == SkSurface::kLinear && this->colorInfo().colorSpace() && !this->colorInfo().colorSpace()->gammaIsLinear()) { auto cs = this->colorInfo().colorSpace()->makeLinearGamma(); - auto xform = GrColorSpaceXform::Make(this->colorInfo().colorSpace(), - this->colorInfo().alphaType(), cs.get(), + auto xform = GrColorSpaceXform::Make(this->colorInfo().colorSpace(), srcAlphaType, cs.get(), kPremul_SkAlphaType); // We'll fall back to kRGBA_8888 if half float not supported. auto linearRTC = fContext->priv().makeDeferredRenderTargetContextWithFallback( @@ -502,10 +501,11 @@ std::unique_ptr GrSurfaceContext::rescale( if (!linearRTC) { return nullptr; } - linearRTC->drawTexture(GrNoClip(), texProxy, srcColorType, GrSamplerState::Filter::kNearest, - SkBlendMode::kSrc, SK_PMColor4fWHITE, SkRect::Make(srcRect), - SkRect::MakeWH(srcW, srcH), GrAA::kNo, GrQuadAAFlags::kNone, - constraint, SkMatrix::I(), std::move(xform)); + linearRTC->drawTexture(GrNoClip(), texProxy, srcColorType, srcAlphaType, + GrSamplerState::Filter::kNearest, SkBlendMode::kSrc, + SK_PMColor4fWHITE, SkRect::Make(srcRect), SkRect::MakeWH(srcW, srcH), + GrAA::kNo, GrQuadAAFlags::kNone, constraint, SkMatrix::I(), + std::move(xform)); texProxy = linearRTC->asTextureProxyRef(); tempA = std::move(linearRTC); srcX = 0; @@ -566,10 +566,9 @@ std::unique_ptr GrSurfaceContext::rescale( if (srcW != texProxy->width() || srcH != texProxy->height()) { auto domain = GrTextureDomain::MakeTexelDomain( SkIRect::MakeXYWH(srcX, srcY, srcW, srcH), GrTextureDomain::kClamp_Mode); - fp = GrBicubicEffect::Make(texProxy, srcColorType, matrix, domain, dir, - prevAlphaType); + fp = GrBicubicEffect::Make(texProxy, matrix, domain, dir, prevAlphaType); } else { - fp = GrBicubicEffect::Make(texProxy, srcColorType, matrix, dir, prevAlphaType); + fp = GrBicubicEffect::Make(texProxy, matrix, dir, prevAlphaType); } if (xform) { fp = GrColorSpaceXformEffect::Make(std::move(fp), std::move(xform)); @@ -583,8 +582,8 @@ std::unique_ptr GrSurfaceContext::rescale( auto filter = rescaleQuality == kNone_SkFilterQuality ? GrSamplerState::Filter::kNearest : GrSamplerState::Filter::kBilerp; auto srcSubset = SkRect::MakeXYWH(srcX, srcY, srcW, srcH); - tempB->drawTexture(GrNoClip(), texProxy, srcColorType, filter, SkBlendMode::kSrc, - SK_PMColor4fWHITE, srcSubset, dstRect, GrAA::kNo, + tempB->drawTexture(GrNoClip(), texProxy, srcColorType, srcAlphaType, filter, + SkBlendMode::kSrc, SK_PMColor4fWHITE, srcSubset, dstRect, GrAA::kNo, GrQuadAAFlags::kNone, constraint, SkMatrix::I(), std::move(xform)); } texProxy = tempB->asTextureProxyRef(); diff --git a/third_party/skia/src/gpu/GrSurfaceContext.h b/third_party/skia/src/gpu/GrSurfaceContext.h index c9de7d0c16d3..29e5d7f64381 100644 --- a/third_party/skia/src/gpu/GrSurfaceContext.h +++ b/third_party/skia/src/gpu/GrSurfaceContext.h @@ -16,6 +16,7 @@ #include "src/gpu/GrColorInfo.h" #include "src/gpu/GrDataUtils.h" #include "src/gpu/GrSurfaceProxy.h" +#include "src/gpu/GrSurfaceProxyView.h" class GrAuditTrail; class GrDrawingManager; @@ -38,6 +39,11 @@ class GrSurfaceContext { virtual ~GrSurfaceContext() = default; const GrColorInfo& colorInfo() const { return fColorInfo; } + GrSurfaceOrigin origin() const { return fOrigin; } + const GrSwizzle& textureSwizzle() const { return fTextureSwizzle; } + GrSurfaceProxyView textureSurfaceView() { + return { this->asSurfaceProxyRef(), fOrigin, fTextureSwizzle }; + } // TODO: these two calls would be way cooler if this object had a GrSurfaceProxy pointer int width() const { return this->asSurfaceProxy()->width(); } @@ -100,11 +106,11 @@ class GrSurfaceContext { } #endif - protected: friend class GrSurfaceContextPriv; - GrSurfaceContext(GrRecordingContext*, GrColorType, SkAlphaType, sk_sp); + GrSurfaceContext(GrRecordingContext*, GrColorType, SkAlphaType, sk_sp, + GrSurfaceOrigin, GrSwizzle texSwizzle); GrDrawingManager* drawingManager(); const GrDrawingManager* drawingManager() const; @@ -115,6 +121,8 @@ class GrSurfaceContext { GrRecordingContext* fContext; + GrSurfaceOrigin fOrigin; + // The rescaling step of asyncRescaleAndReadPixels[YUV420](). std::unique_ptr rescale(const SkImageInfo& info, const SkIRect& srcRect, SkSurface::RescaleGamma rescaleGamma, @@ -155,10 +163,11 @@ class GrSurfaceContext { bool copy(GrSurfaceProxy* src, const SkIRect& srcRect, const SkIPoint& dstPoint); bool copy(GrSurfaceProxy* src) { - return this->copy(src, SkIRect::MakeWH(src->width(), src->height()), SkIPoint::Make(0, 0)); + return this->copy(src, SkIRect::MakeSize(src->dimensions()), SkIPoint::Make(0, 0)); } GrColorInfo fColorInfo; + GrSwizzle fTextureSwizzle; typedef SkRefCnt INHERITED; }; diff --git a/third_party/skia/src/gpu/GrSurfaceProxy.cpp b/third_party/skia/src/gpu/GrSurfaceProxy.cpp index a4878477e941..7577811650ba 100644 --- a/third_party/skia/src/gpu/GrSurfaceProxy.cpp +++ b/third_party/skia/src/gpu/GrSurfaceProxy.cpp @@ -58,8 +58,7 @@ GrSurfaceProxy::GrSurfaceProxy(const GrBackendFormat& format, : fSurfaceFlags(surfaceFlags) , fFormat(format) , fConfig(desc.fConfig) - , fWidth(desc.fWidth) - , fHeight(desc.fHeight) + , fDimensions{desc.fWidth, desc.fHeight} , fOrigin(origin) , fTextureSwizzle(textureSwizzle) , fFit(fit) @@ -69,10 +68,6 @@ GrSurfaceProxy::GrSurfaceProxy(const GrBackendFormat& format, , fGpuMemorySize(kInvalidGpuMemorySize) { SkASSERT(fFormat.isValid()); SkASSERT(is_valid_non_lazy(desc)); - if (GrPixelConfigIsCompressed(desc.fConfig)) { - SkASSERT(renderable == GrRenderable::kNo); - fSurfaceFlags |= GrInternalSurfaceFlags::kReadOnly; - } } // Lazy-callback version @@ -90,8 +85,7 @@ GrSurfaceProxy::GrSurfaceProxy(LazyInstantiateCallback&& callback, : fSurfaceFlags(surfaceFlags) , fFormat(format) , fConfig(desc.fConfig) - , fWidth(desc.fWidth) - , fHeight(desc.fHeight) + , fDimensions{desc.fWidth, desc.fHeight} , fOrigin(origin) , fTextureSwizzle(textureSwizzle) , fFit(fit) @@ -103,10 +97,6 @@ GrSurfaceProxy::GrSurfaceProxy(LazyInstantiateCallback&& callback, SkASSERT(fFormat.isValid()); SkASSERT(fLazyInstantiateCallback); SkASSERT(is_valid_lazy(desc, fit)); - if (GrPixelConfigIsCompressed(desc.fConfig)) { - SkASSERT(renderable == GrRenderable::kNo); - fSurfaceFlags |= GrInternalSurfaceFlags::kReadOnly; - } } // Wrapped version @@ -119,8 +109,7 @@ GrSurfaceProxy::GrSurfaceProxy(sk_sp surface, , fSurfaceFlags(fTarget->surfacePriv().flags()) , fFormat(fTarget->backendFormat()) , fConfig(fTarget->config()) - , fWidth(fTarget->width()) - , fHeight(fTarget->height()) + , fDimensions(fTarget->dimensions()) , fOrigin(origin) , fTextureSwizzle(textureSwizzle) , fFit(fit) @@ -140,34 +129,16 @@ GrSurfaceProxy::~GrSurfaceProxy() { SkASSERT(!fLastRenderTask); } -bool GrSurfaceProxyPriv::AttachStencilIfNeeded(GrResourceProvider* resourceProvider, - GrSurface* surface, int minStencilSampleCount) { - if (minStencilSampleCount) { - GrRenderTarget* rt = surface->asRenderTarget(); - if (!rt) { - SkASSERT(0); - return false; - } - - if (!resourceProvider->attachStencilAttachment(rt, minStencilSampleCount)) { - return false; - } - } - - return true; -} - sk_sp GrSurfaceProxy::createSurfaceImpl(GrResourceProvider* resourceProvider, int sampleCnt, - int minStencilSampleCount, GrRenderable renderable, GrMipMapped mipMapped) const { SkASSERT(mipMapped == GrMipMapped::kNo || fFit == SkBackingFit::kExact); SkASSERT(!this->isLazy()); SkASSERT(!fTarget); GrSurfaceDesc desc; - desc.fWidth = fWidth; - desc.fHeight = fHeight; + desc.fWidth = fDimensions.width(); + desc.fHeight = fDimensions.height(); desc.fConfig = fConfig; sk_sp surface; @@ -182,11 +153,6 @@ sk_sp GrSurfaceProxy::createSurfaceImpl(GrResourceProvider* resourceP return nullptr; } - if (!GrSurfaceProxyPriv::AttachStencilIfNeeded(resourceProvider, surface.get(), - minStencilSampleCount)) { - return nullptr; - } - return surface; } @@ -215,11 +181,6 @@ void GrSurfaceProxy::assign(sk_sp surface) { #ifdef SK_DEBUG if (this->asRenderTargetProxy()) { SkASSERT(fTarget->asRenderTarget()); - if (int minStencilSampleCount = this->asRenderTargetProxy()->numStencilSamples()) { - auto* stencil = fTarget->asRenderTarget()->renderTargetPriv().getStencilAttachment(); - SkASSERT(stencil); - SkASSERT(stencil->numSamples() >= minStencilSampleCount); - } } if (kInvalidGpuMemorySize != this->getRawGpuMemorySize_debugOnly()) { @@ -229,19 +190,18 @@ void GrSurfaceProxy::assign(sk_sp surface) { } bool GrSurfaceProxy::instantiateImpl(GrResourceProvider* resourceProvider, int sampleCnt, - int minStencilSampleCount, GrRenderable renderable, - GrMipMapped mipMapped, const GrUniqueKey* uniqueKey) { + GrRenderable renderable, GrMipMapped mipMapped, + const GrUniqueKey* uniqueKey) { SkASSERT(!this->isLazy()); if (fTarget) { if (uniqueKey && uniqueKey->isValid()) { SkASSERT(fTarget->getUniqueKey().isValid() && fTarget->getUniqueKey() == *uniqueKey); } - return GrSurfaceProxyPriv::AttachStencilIfNeeded(resourceProvider, fTarget.get(), - minStencilSampleCount); + return true; } - sk_sp surface = this->createSurfaceImpl( - resourceProvider, sampleCnt, minStencilSampleCount, renderable, mipMapped); + sk_sp surface = this->createSurfaceImpl(resourceProvider, sampleCnt, renderable, + mipMapped); if (!surface) { return false; } @@ -277,11 +237,8 @@ void GrSurfaceProxy::computeScratchKey(GrScratchKey* key) const { mipMapped = tp->mipMapped(); } - int width = this->worstCaseWidth(); - int height = this->worstCaseHeight(); - - GrTexturePriv::ComputeScratchKey(this->config(), width, height, renderable, sampleCount, - mipMapped, fIsProtected, key); + GrTexturePriv::ComputeScratchKey(this->config(), this->backingStoreDimensions(), renderable, + sampleCount, mipMapped, fIsProtected, key); } void GrSurfaceProxy::setLastRenderTask(GrRenderTask* renderTask) { @@ -299,28 +256,16 @@ GrOpsTask* GrSurfaceProxy::getLastOpsTask() { return fLastRenderTask ? fLastRenderTask->asOpsTask() : nullptr; } -int GrSurfaceProxy::worstCaseWidth() const { - SkASSERT(!this->isFullyLazy()); - if (fTarget) { - return fTarget->width(); - } - - if (SkBackingFit::kExact == fFit) { - return fWidth; - } - return GrResourceProvider::MakeApprox(fWidth); -} - -int GrSurfaceProxy::worstCaseHeight() const { +SkISize GrSurfaceProxy::backingStoreDimensions() const { SkASSERT(!this->isFullyLazy()); if (fTarget) { - return fTarget->height(); + return fTarget->dimensions(); } if (SkBackingFit::kExact == fFit) { - return fHeight; + return fDimensions; } - return GrResourceProvider::MakeApprox(fHeight); + return GrResourceProvider::MakeApprox(fDimensions); } #ifdef SK_DEBUG @@ -333,7 +278,6 @@ void GrSurfaceProxy::validate(GrContext_Base* context) const { sk_sp GrSurfaceProxy::Copy(GrRecordingContext* context, GrSurfaceProxy* src, - GrColorType srcColorType, GrMipMapped mipMapped, SkIRect srcRect, SkBackingFit fit, @@ -355,7 +299,7 @@ sk_sp GrSurfaceProxy::Copy(GrRecordingContext* context, dstPoint = {0, 0}; } - if (!srcRect.intersect(SkIRect::MakeWH(src->width(), src->height()))) { + if (!srcRect.intersect(SkIRect::MakeSize(src->dimensions()))) { return nullptr; } auto colorType = GrPixelConfigToColorType(src->config()); @@ -375,8 +319,7 @@ sk_sp GrSurfaceProxy::Copy(GrRecordingContext* context, fit, width, height, colorType, nullptr, 1, mipMapped, src->origin(), nullptr, budgeted); - if (dstContext && dstContext->blitTexture(src->asTextureProxy(), srcColorType, srcRect, - dstPoint)) { + if (dstContext && dstContext->blitTexture(src->asTextureProxy(), srcRect, dstPoint)) { return dstContext->asTextureProxyRef(); } } @@ -385,11 +328,10 @@ sk_sp GrSurfaceProxy::Copy(GrRecordingContext* context, } sk_sp GrSurfaceProxy::Copy(GrRecordingContext* context, GrSurfaceProxy* src, - GrColorType srcColorType, GrMipMapped mipMapped, - SkBackingFit fit, SkBudgeted budgeted) { + GrMipMapped mipMapped, SkBackingFit fit, + SkBudgeted budgeted) { SkASSERT(!src->isFullyLazy()); - return Copy(context, src, srcColorType, mipMapped, SkIRect::MakeWH(src->width(), src->height()), - fit, budgeted); + return Copy(context, src, mipMapped, SkIRect::MakeSize(src->dimensions()), fit, budgeted); } #if GR_TEST_UTILS @@ -420,8 +362,7 @@ void GrSurfaceProxyPriv::exactify(bool allocatedCaseOnly) { // obliterating the area of interest information. This call (exactify) only used // when converting an SkSpecialImage to an SkImage so the proxy shouldn't be // used for additional draws. - fProxy->fWidth = fProxy->fTarget->width(); - fProxy->fHeight = fProxy->fTarget->height(); + fProxy->fDimensions = fProxy->fTarget->dimensions(); return; } @@ -464,8 +405,7 @@ bool GrSurfaceProxyPriv::doLazyInstantiation(GrResourceProvider* resourceProvide releaseCallback = surface && result.fReleaseCallback; } if (!surface) { - fProxy->fWidth = 0; - fProxy->fHeight = 0; + fProxy->fDimensions.setEmpty(); return false; } @@ -473,20 +413,11 @@ bool GrSurfaceProxyPriv::doLazyInstantiation(GrResourceProvider* resourceProvide // This was a fully lazy proxy. We need to fill in the width & height. For partially // lazy proxies we must preserve the original width & height since that indicates // the content area. - fProxy->fWidth = surface->width(); - fProxy->fHeight = surface->height(); + fProxy->fDimensions = surface->dimensions(); } - SkASSERT(fProxy->fWidth <= surface->width()); - SkASSERT(fProxy->fHeight <= surface->height()); - - auto rt = fProxy->asRenderTargetProxy(); - int minStencilSampleCount = rt ? rt->numSamples() : 0; - - if (!GrSurfaceProxyPriv::AttachStencilIfNeeded( - resourceProvider, surface.get(), minStencilSampleCount)) { - return false; - } + SkASSERT(fProxy->width() <= surface->width()); + SkASSERT(fProxy->height() <= surface->height()); if (GrTextureProxy* texProxy = fProxy->asTextureProxy()) { texProxy->setTargetKeySync(syncKey); diff --git a/third_party/skia/src/gpu/GrSurfaceProxy.h b/third_party/skia/src/gpu/GrSurfaceProxy.h index 1e67a7c42ef3..f4e2d15f8e77 100644 --- a/third_party/skia/src/gpu/GrSurfaceProxy.h +++ b/third_party/skia/src/gpu/GrSurfaceProxy.h @@ -102,41 +102,33 @@ class GrSurfaceProxy : public SkNVRefCnt { bool isLazy() const { return !this->isInstantiated() && SkToBool(fLazyInstantiateCallback); } bool isFullyLazy() const { - bool result = fHeight < 0; - SkASSERT(result == (fWidth < 0)); + bool result = fDimensions.width() < 0; + SkASSERT(result == (fDimensions.height() < 0)); SkASSERT(!result || this->isLazy()); return result; } GrPixelConfig config() const { return fConfig; } - int width() const { + SkISize dimensions() const { SkASSERT(!this->isFullyLazy()); - return fWidth; + return fDimensions; } + int width() const { return this->dimensions().width(); } + int height() const { return this->dimensions().height(); } - int height() const { - SkASSERT(!this->isFullyLazy()); - return fHeight; - } + SkISize backingStoreDimensions() const; - SkISize isize() const { return {fWidth, fHeight}; } - - int worstCaseWidth() const; - int worstCaseHeight() const; /** - * Helper that gets the width and height of the surface as a bounding rectangle. + * Helper that gets the width and height of the proxy as a bounding rectangle. */ - SkRect getBoundsRect() const { - SkASSERT(!this->isFullyLazy()); - return SkRect::MakeIWH(this->width(), this->height()); - } + SkRect getBoundsRect() const { return SkRect::Make(this->dimensions()); } + /** - * Helper that gets the worst case width and height of the surface as a bounding rectangle. + * Helper that gets the dimensions the backing GrSurface will have as a bounding rectangle. */ - SkRect getWorstCaseBoundsRect() const { - SkASSERT(!this->isFullyLazy()); - return SkRect::MakeIWH(this->worstCaseWidth(), this->worstCaseHeight()); + SkRect backingStoreBoundsRect() const { + return SkRect::Make(this->backingStoreDimensions()); } GrSurfaceOrigin origin() const { @@ -292,15 +284,13 @@ class GrSurfaceProxy : public SkNVRefCnt { // Helper function that creates a temporary SurfaceContext to perform the copy // The copy is is not a render target and not multisampled. - static sk_sp Copy(GrRecordingContext*, GrSurfaceProxy* src, - GrColorType srcColorType, GrMipMapped, + static sk_sp Copy(GrRecordingContext*, GrSurfaceProxy* src, GrMipMapped, SkIRect srcRect, SkBackingFit, SkBudgeted, RectsMustMatch = RectsMustMatch::kNo); // Copy the entire 'src' - static sk_sp Copy(GrRecordingContext*, GrSurfaceProxy* src, - GrColorType srcColortype, GrMipMapped, SkBackingFit, - SkBudgeted); + static sk_sp Copy(GrRecordingContext*, GrSurfaceProxy* src, GrMipMapped, + SkBackingFit, SkBudgeted); #if GR_TEST_UTILS int32_t testingOnly_getBackingRefCnt() const; @@ -362,22 +352,21 @@ class GrSurfaceProxy : public SkNVRefCnt { virtual sk_sp createSurface(GrResourceProvider*) const = 0; void assign(sk_sp surface); - sk_sp createSurfaceImpl(GrResourceProvider*, int sampleCnt, - int minStencilSampleCount, GrRenderable, GrMipMapped) const; + sk_sp createSurfaceImpl(GrResourceProvider*, int sampleCnt, GrRenderable, + GrMipMapped) const; - // Once the size of a fully-lazy proxy is decided, and before it gets instantiated, the client - // can use this optional method to specify the proxy's size. (A proxy's size can be less than - // the GPU surface that backs it. e.g., SkBackingFit::kApprox.) Otherwise, the proxy's size will - // be set to match the underlying GPU surface upon instantiation. - void setLazySize(int width, int height) { + // Once the dimensions of a fully-lazy proxy are decided, and before it gets instantiated, the + // client can use this optional method to specify the proxy's dimensions. (A proxy's dimensions + // can be less than the GPU surface that backs it. e.g., SkBackingFit::kApprox.) Otherwise, + // the proxy's dimensions will be set to match the underlying GPU surface upon instantiation. + void setLazyDimensions(SkISize dimensions) { SkASSERT(this->isFullyLazy()); - SkASSERT(width > 0 && height > 0); - fWidth = width; - fHeight = height; + SkASSERT(!dimensions.isEmpty()); + fDimensions = dimensions; } - bool instantiateImpl(GrResourceProvider* resourceProvider, int sampleCnt, - int minStencilSampleCount, GrRenderable, GrMipMapped, const GrUniqueKey*); + bool instantiateImpl(GrResourceProvider* resourceProvider, int sampleCnt, GrRenderable, + GrMipMapped, const GrUniqueKey*); // For deferred proxies this will be null until the proxy is instantiated. // For wrapped proxies it will point to the wrapped resource. @@ -396,8 +385,7 @@ class GrSurfaceProxy : public SkNVRefCnt { // be filled in from the wrapped resource. const GrBackendFormat fFormat; const GrPixelConfig fConfig; - int fWidth; - int fHeight; + SkISize fDimensions; const GrSurfaceOrigin fOrigin; const GrSwizzle fTextureSwizzle; diff --git a/third_party/skia/src/gpu/GrSurfaceProxyPriv.h b/third_party/skia/src/gpu/GrSurfaceProxyPriv.h index 60704ac0d8a6..806fc59a1b38 100644 --- a/third_party/skia/src/gpu/GrSurfaceProxyPriv.h +++ b/third_party/skia/src/gpu/GrSurfaceProxyPriv.h @@ -34,14 +34,10 @@ class GrSurfaceProxyPriv { // Don't. Just don't. void exactify(bool allocatedCaseOnly); - void setLazySize(int width, int height) { fProxy->setLazySize(width, height); } + void setLazyDimensions(SkISize dimensions) { fProxy->setLazyDimensions(dimensions); } bool doLazyInstantiation(GrResourceProvider*); - - static bool SK_WARN_UNUSED_RESULT AttachStencilIfNeeded(GrResourceProvider*, GrSurface*, - int minStencilSampleCount); - private: explicit GrSurfaceProxyPriv(GrSurfaceProxy* proxy) : fProxy(proxy) {} GrSurfaceProxyPriv(const GrSurfaceProxyPriv&) {} // unimpl diff --git a/third_party/skia/src/gpu/GrSurfaceProxyView.h b/third_party/skia/src/gpu/GrSurfaceProxyView.h new file mode 100644 index 000000000000..bab3b9a1ad41 --- /dev/null +++ b/third_party/skia/src/gpu/GrSurfaceProxyView.h @@ -0,0 +1,73 @@ +/* + * Copyright 2019 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrSurfaceProxyView_DEFINED +#define GrSurfaceProxyView_DEFINED + +#include "include/core/SkRefCnt.h" +#include "include/gpu/GrTypes.h" +#include "src/gpu/GrSurfaceProxy.h" +#include "src/gpu/GrSwizzle.h" + +class GrSurfaceProxyView { +public: + GrSurfaceProxyView() = default; + + GrSurfaceProxyView(sk_sp proxy, GrSurfaceOrigin origin, GrSwizzle swizzle) + : fProxy(proxy), fOrigin(origin), fSwizzle(swizzle) {} + + // This entry point is used when we don't care about the origin or the swizzle. + GrSurfaceProxyView(sk_sp proxy) + : fProxy(proxy), fOrigin(kTopLeft_GrSurfaceOrigin) {} + + GrSurfaceProxyView(GrSurfaceProxyView&& view) = default; + GrSurfaceProxyView(const GrSurfaceProxyView&) = default; + + GrSurfaceProxyView& operator=(const GrSurfaceProxyView&) = default; + + bool operator==(const GrSurfaceProxyView& view) const { + return fProxy->uniqueID() == view.fProxy->uniqueID() && + fOrigin == view.fOrigin && + fSwizzle == view.fSwizzle; + } + bool operator!=(const GrSurfaceProxyView& other) const { return !(*this == other); } + + GrSurfaceProxy* proxy() const { return fProxy.get(); } + GrTextureProxy* asTextureProxy() const { + if (!fProxy) { + return nullptr; + } + return fProxy->asTextureProxy(); + } + GrRenderTargetProxy* asRenderTargetProxy() const { + if (!fProxy) { + return nullptr; + } + return fProxy->asRenderTargetProxy(); + } + + GrSurfaceOrigin origin() const { return fOrigin; } + const GrSwizzle& swizzle() const { return fSwizzle; } + + void reset() { + *this = {}; + } + + // This does not reset the origin or proxy, so the View can still be used to access those + // properties associated with the detached proxy. + sk_sp detachProxy() { + return std::move(fProxy); + } + +private: + sk_sp fProxy; + GrSurfaceOrigin fOrigin = kTopLeft_GrSurfaceOrigin; + GrSwizzle fSwizzle; +}; + +#endif + diff --git a/third_party/skia/src/gpu/GrSwizzle.cpp b/third_party/skia/src/gpu/GrSwizzle.cpp index f1b3b8583cb6..b52d2073583a 100644 --- a/third_party/skia/src/gpu/GrSwizzle.cpp +++ b/third_party/skia/src/gpu/GrSwizzle.cpp @@ -28,9 +28,20 @@ void GrSwizzle::apply(SkRasterPipeline* pipeline) const { // Rather than allocate the 4 control bytes on the heap somewhere, just jam them right // into a uintptr_t context. uintptr_t ctx; - memcpy(&ctx, fSwiz, 4 * sizeof(char)); + memcpy(&ctx, this->asString().c_str(), 4 * sizeof(char)); pipeline->append(SkRasterPipeline::swizzle, ctx); return; } } } + +SkString GrSwizzle::asString() const { + char swiz[5]; + uint16_t key = fKey; + for (int i = 0; i < 4; ++i) { + swiz[i] = IToC(key & 0xfU); + key >>= 4; + } + swiz[4] = '\0'; + return SkString(swiz); +} diff --git a/third_party/skia/src/gpu/GrSwizzle.h b/third_party/skia/src/gpu/GrSwizzle.h index 94562ff52780..a250842d6b4d 100644 --- a/third_party/skia/src/gpu/GrSwizzle.h +++ b/third_party/skia/src/gpu/GrSwizzle.h @@ -8,6 +8,7 @@ #ifndef GrSwizzle_DEFINED #define GrSwizzle_DEFINED +#include "include/core/SkString.h" #include "include/private/SkColorData.h" #include "src/gpu/GrColor.h" @@ -31,11 +32,12 @@ class GrSwizzle { constexpr uint16_t asKey() const { return fKey; } /** 4 char null terminated string consisting only of chars 'r', 'g', 'b', 'a', '0', and '1'. */ - constexpr const char* c_str() const { return fSwiz; } + SkString asString() const; constexpr char operator[](int i) const { SkASSERT(i >= 0 && i < 4); - return fSwiz[i]; + int idx = (fKey >> (4U * i)) & 0xfU; + return IToC(idx); } /** Applies this swizzle to the input color and returns the swizzled color. */ @@ -52,29 +54,23 @@ class GrSwizzle { static constexpr GrSwizzle RGB1() { return GrSwizzle("rgb1"); } private: + explicit constexpr GrSwizzle(uint16_t key) : fKey(key) {} + template static constexpr float ComponentIndexToFloat(const SkRGBA4f& color, int idx); static constexpr int CToI(char c); static constexpr char IToC(int idx); - char fSwiz[5]; uint16_t fKey; }; constexpr GrSwizzle::GrSwizzle(const char c[4]) - : fSwiz{c[0], c[1], c[2], c[3], '\0'} - , fKey((CToI(c[0]) << 0) | (CToI(c[1]) << 4) | (CToI(c[2]) << 8) | (CToI(c[3]) << 12)) {} + : fKey((CToI(c[0]) << 0) | (CToI(c[1]) << 4) | (CToI(c[2]) << 8) | (CToI(c[3]) << 12)) {} constexpr GrSwizzle::GrSwizzle(const GrSwizzle& that) - : fSwiz{that.fSwiz[0], that.fSwiz[1], that.fSwiz[2], that.fSwiz[3], '\0'} - , fKey(that.fKey) {} + : fKey(that.fKey) {} constexpr GrSwizzle& GrSwizzle::operator=(const GrSwizzle& that) { - fSwiz[0] = that.fSwiz[0]; - fSwiz[1] = that.fSwiz[1]; - fSwiz[2] = that.fSwiz[2]; - fSwiz[3] = that.fSwiz[3]; - SkASSERT(fSwiz[4] == '\0'); fKey = that.fKey; return *this; } @@ -137,15 +133,16 @@ constexpr char GrSwizzle::IToC(int idx) { } constexpr GrSwizzle GrSwizzle::Concat(const GrSwizzle& a, const GrSwizzle& b) { - char swiz[4]{}; + uint16_t key = 0; for (int i = 0; i < 4; ++i) { int idx = (b.fKey >> (4U * i)) & 0xfU; - switch (idx) { - case CToI('0'): swiz[i] = '0'; break; - case CToI('1'): swiz[i] = '1'; break; - default: swiz[i] = a.fSwiz[idx]; break; + if (idx != CToI('0') && idx != CToI('1')) { + SkASSERT(idx >= 0 && idx < 4); + // Get the index value stored in a at location idx. + idx = ((a.fKey >> (4U * idx)) & 0xfU); } + key |= (idx << (4U * i)); } - return GrSwizzle(swiz); + return GrSwizzle(key); } #endif diff --git a/third_party/skia/src/gpu/GrTessellator.cpp b/third_party/skia/src/gpu/GrTessellator.cpp index 6f4fd44ffe94..863e86479780 100644 --- a/third_party/skia/src/gpu/GrTessellator.cpp +++ b/third_party/skia/src/gpu/GrTessellator.cpp @@ -861,15 +861,15 @@ void path_to_contours(const SkPath& path, SkScalar tolerance, const SkRect& clip } } -inline bool apply_fill_type(SkPath::FillType fillType, int winding) { +inline bool apply_fill_type(SkPathFillType fillType, int winding) { switch (fillType) { - case SkPath::kWinding_FillType: + case SkPathFillType::kWinding: return winding != 0; - case SkPath::kEvenOdd_FillType: + case SkPathFillType::kEvenOdd: return (winding & 1) != 0; - case SkPath::kInverseWinding_FillType: + case SkPathFillType::kInverseWinding: return winding == 1; - case SkPath::kInverseEvenOdd_FillType: + case SkPathFillType::kInverseEvenOdd: return (winding & 1) == 1; default: SkASSERT(false); @@ -877,7 +877,7 @@ inline bool apply_fill_type(SkPath::FillType fillType, int winding) { } } -inline bool apply_fill_type(SkPath::FillType fillType, Poly* poly) { +inline bool apply_fill_type(SkPathFillType fillType, Poly* poly) { return poly && apply_fill_type(fillType, poly->fWinding); } @@ -1699,7 +1699,7 @@ Poly* tessellate(const VertexList& vertices, SkArenaAlloc& alloc) { return polys; } -void remove_non_boundary_edges(const VertexList& mesh, SkPath::FillType fillType, +void remove_non_boundary_edges(const VertexList& mesh, SkPathFillType fillType, SkArenaAlloc& alloc) { TESS_LOG("removing non-boundary edges\n"); EdgeList activeEdges; @@ -2118,7 +2118,7 @@ void stroke_boundary(EdgeList* boundary, VertexList* innerMesh, VertexList* oute outerMesh->append(outerVertices); } -void extract_boundary(EdgeList* boundary, Edge* e, SkPath::FillType fillType, SkArenaAlloc& alloc) { +void extract_boundary(EdgeList* boundary, Edge* e, SkPathFillType fillType, SkArenaAlloc& alloc) { TESS_LOG("\nextracting boundary\n"); bool down = apply_fill_type(fillType, e->fWinding); Vertex* start = down ? e->fTop : e->fBottom; @@ -2155,7 +2155,7 @@ void extract_boundary(EdgeList* boundary, Edge* e, SkPath::FillType fillType, Sk // Stage 5b: Extract boundaries from mesh, simplify and stroke them into a new mesh. void extract_boundaries(const VertexList& inMesh, VertexList* innerVertices, - VertexList* outerVertices, SkPath::FillType fillType, + VertexList* outerVertices, SkPathFillType fillType, Comparator& c, SkArenaAlloc& alloc) { remove_non_boundary_edges(inMesh, fillType, alloc); for (Vertex* v = inMesh.fHead; v; v = v->fNext) { @@ -2205,7 +2205,7 @@ void sort_mesh(VertexList* vertices, Comparator& c, SkArenaAlloc& alloc) { #endif } -Poly* contours_to_polys(VertexList* contours, int contourCnt, SkPath::FillType fillType, +Poly* contours_to_polys(VertexList* contours, int contourCnt, SkPathFillType fillType, const SkRect& pathBounds, bool antialias, VertexList* outerMesh, SkArenaAlloc& alloc) { Comparator c(pathBounds.width() > pathBounds.height() ? Comparator::Direction::kHorizontal @@ -2260,7 +2260,7 @@ Poly* contours_to_polys(VertexList* contours, int contourCnt, SkPath::FillType f } // Stage 6: Triangulate the monotone polygons into a vertex buffer. -void* polys_to_triangles(Poly* polys, SkPath::FillType fillType, bool emitCoverage, void* data) { +void* polys_to_triangles(Poly* polys, SkPathFillType fillType, bool emitCoverage, void* data) { for (Poly* poly = polys; poly; poly = poly->fNext) { if (apply_fill_type(fillType, poly)) { data = poly->emit(emitCoverage, data); @@ -2272,14 +2272,14 @@ void* polys_to_triangles(Poly* polys, SkPath::FillType fillType, bool emitCovera Poly* path_to_polys(const SkPath& path, SkScalar tolerance, const SkRect& clipBounds, int contourCnt, SkArenaAlloc& alloc, bool antialias, bool* isLinear, VertexList* outerMesh) { - SkPath::FillType fillType = path.getFillType(); - if (SkPath::IsInverseFillType(fillType)) { + SkPathFillType fillType = path.getNewFillType(); + if (SkPathFillType_IsInverse(fillType)) { contourCnt++; } std::unique_ptr contours(new VertexList[contourCnt]); path_to_contours(path, tolerance, clipBounds, contours.get(), alloc, isLinear); - return contours_to_polys(contours.get(), contourCnt, path.getFillType(), path.getBounds(), + return contours_to_polys(contours.get(), contourCnt, path.getNewFillType(), path.getBounds(), antialias, outerMesh, alloc); } @@ -2292,7 +2292,7 @@ int get_contour_count(const SkPath& path, SkScalar tolerance) { return contourCnt; } -int64_t count_points(Poly* polys, SkPath::FillType fillType) { +int64_t count_points(Poly* polys, SkPathFillType fillType) { int64_t count = 0; for (Poly* poly = polys; poly; poly = poly->fNext) { if (apply_fill_type(fillType, poly) && poly->fCount >= 3) { @@ -2343,7 +2343,7 @@ int PathToTriangles(const SkPath& path, SkScalar tolerance, const SkRect& clipBo VertexList outerMesh; Poly* polys = path_to_polys(path, tolerance, clipBounds, contourCnt, alloc, antialias, isLinear, &outerMesh); - SkPath::FillType fillType = antialias ? SkPath::kWinding_FillType : path.getFillType(); + SkPathFillType fillType = antialias ? SkPathFillType::kWinding : path.getNewFillType(); int64_t count64 = count_points(polys, fillType); if (antialias) { count64 += count_outer_mesh_points(outerMesh); @@ -2381,7 +2381,7 @@ int PathToVertices(const SkPath& path, SkScalar tolerance, const SkRect& clipBou bool isLinear; Poly* polys = path_to_polys(path, tolerance, clipBounds, contourCnt, alloc, false, &isLinear, nullptr); - SkPath::FillType fillType = path.getFillType(); + SkPathFillType fillType = path.getNewFillType(); int64_t count64 = count_points(polys, fillType); if (0 == count64 || count64 > SK_MaxS32) { *verts = nullptr; diff --git a/third_party/skia/src/gpu/GrTestUtils.cpp b/third_party/skia/src/gpu/GrTestUtils.cpp index 42aba5ef53d8..b348c78ce3c3 100644 --- a/third_party/skia/src/gpu/GrTestUtils.cpp +++ b/third_party/skia/src/gpu/GrTestUtils.cpp @@ -232,7 +232,7 @@ const SkPath& TestPathConvex(SkRandom* random) { gPath[2].lineTo(-50.0f, 31.0f); for (size_t i = 0; i < SK_ARRAY_COUNT(gPath); i++) { - SkASSERT(SkPath::kConvex_Convexity == gPath[i].getConvexity()); + SkASSERT(SkPathConvexityType::kConvex == gPath[i].getConvexityType()); } } diff --git a/third_party/skia/src/gpu/GrTexture.cpp b/third_party/skia/src/gpu/GrTexture.cpp index df0f2ebbbdc5..2373610d3edf 100644 --- a/third_party/skia/src/gpu/GrTexture.cpp +++ b/third_party/skia/src/gpu/GrTexture.cpp @@ -32,14 +32,18 @@ void GrTexture::markMipMapsClean() { size_t GrTexture::onGpuMemorySize() const { const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), - 1, this->texturePriv().mipMapped()); + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), 1, + this->texturePriv().mipMapped()); } ///////////////////////////////////////////////////////////////////////////// -GrTexture::GrTexture(GrGpu* gpu, const SkISize& size, GrPixelConfig config, GrProtected isProtected, - GrTextureType textureType, GrMipMapsStatus mipMapsStatus) - : INHERITED(gpu, size, config, isProtected) +GrTexture::GrTexture(GrGpu* gpu, + const SkISize& dimensions, + GrPixelConfig config, + GrProtected isProtected, + GrTextureType textureType, + GrMipMapsStatus mipMapsStatus) + : INHERITED(gpu, dimensions, config, isProtected) , fTextureType(textureType) , fMipMapsStatus(mipMapsStatus) { if (GrMipMapsStatus::kNotAllocated == fMipMapsStatus) { @@ -88,23 +92,21 @@ void GrTexture::computeScratchKey(GrScratchKey* key) const { renderable = GrRenderable::kYes; } auto isProtected = this->isProtected() ? GrProtected::kYes : GrProtected::kNo; - GrTexturePriv::ComputeScratchKey(this->config(), this->width(), this->height(), renderable, + GrTexturePriv::ComputeScratchKey(this->config(), this->dimensions(), renderable, sampleCount, this->texturePriv().mipMapped(), isProtected, key); } } void GrTexturePriv::ComputeScratchKey(GrPixelConfig config, - int width, - int height, + SkISize dimensions, GrRenderable renderable, int sampleCnt, GrMipMapped mipMapped, GrProtected isProtected, GrScratchKey* key) { static const GrScratchKey::ResourceType kType = GrScratchKey::GenerateResourceType(); - SkASSERT(width > 0); - SkASSERT(height > 0); + SkASSERT(!dimensions.isEmpty()); SkASSERT(sampleCnt > 0); SkASSERT(1 == sampleCnt || renderable == GrRenderable::kYes); @@ -117,8 +119,8 @@ void GrTexturePriv::ComputeScratchKey(GrPixelConfig config, SkASSERT(static_cast(sampleCnt) < (1 << (32 - 8))); GrScratchKey::Builder builder(key, kType, 3); - builder[0] = width; - builder[1] = height; + builder[0] = dimensions.width(); + builder[1] = dimensions.height(); builder[2] = (static_cast(config) << 0) | (static_cast(mipMapped) << 5) | (static_cast(isProtected) << 6) diff --git a/third_party/skia/src/gpu/GrTextureAdjuster.cpp b/third_party/skia/src/gpu/GrTextureAdjuster.cpp index 9b6ce36311e8..a024db1f0275 100644 --- a/third_party/skia/src/gpu/GrTextureAdjuster.cpp +++ b/third_party/skia/src/gpu/GrTextureAdjuster.cpp @@ -13,31 +13,19 @@ #include "src/gpu/GrTextureAdjuster.h" #include "src/gpu/SkGr.h" -GrTextureAdjuster::GrTextureAdjuster(GrRecordingContext* context, - sk_sp original, - GrColorType colorType, - SkAlphaType alphaType, - uint32_t uniqueID, - SkColorSpace* cs, - bool useDecal) - : INHERITED(context, original->width(), original->height(), - GrColorInfo(colorType, alphaType, sk_ref_sp(cs)), useDecal) - , fOriginal(std::move(original)) - , fUniqueID(uniqueID) {} - GrTextureAdjuster::GrTextureAdjuster(GrRecordingContext* context, sk_sp original, const GrColorInfo& colorInfo, uint32_t uniqueID, bool useDecal) - : INHERITED(context, original->width(), original->height(), colorInfo, useDecal) + : INHERITED(context, {colorInfo, original->dimensions()}, useDecal) , fOriginal(std::move(original)) , fUniqueID(uniqueID) {} void GrTextureAdjuster::makeCopyKey(const CopyParams& params, GrUniqueKey* copyKey) { // Destination color space is irrelevant - we already have a texture so we're just sub-setting GrUniqueKey baseKey; - GrMakeKeyFromImageID(&baseKey, fUniqueID, SkIRect::MakeWH(this->width(), this->height())); + GrMakeKeyFromImageID(&baseKey, fUniqueID, SkIRect::MakeSize(this->dimensions())); MakeCopyKeyFromOrigKey(baseKey, params, copyKey); } @@ -101,8 +89,8 @@ sk_sp GrTextureAdjuster::onRefTextureProxyForParams( bool needsCopyForMipsOnly = false; if (!params.isRepeated() || !GrGpu::IsACopyNeededForRepeatWrapMode(this->context()->priv().caps(), proxy.get(), - proxy->width(), proxy->height(), params.filter(), - ©Params, scaleAdjust)) { + proxy->dimensions(), params.filter(), ©Params, + scaleAdjust)) { needsCopyForMipsOnly = GrGpu::IsACopyNeededForMips(this->context()->priv().caps(), proxy.get(), params.filter(), ©Params); diff --git a/third_party/skia/src/gpu/GrTextureAdjuster.h b/third_party/skia/src/gpu/GrTextureAdjuster.h index ce93eee61ee8..cdae5316365b 100644 --- a/third_party/skia/src/gpu/GrTextureAdjuster.h +++ b/third_party/skia/src/gpu/GrTextureAdjuster.h @@ -29,9 +29,6 @@ class GrTextureAdjuster : public GrTextureProducer { bool coordsLimitedToConstraintRect, const GrSamplerState::Filter* filterOrNullForBicubic) override; - GrTextureAdjuster(GrRecordingContext*, sk_sp, GrColorType, SkAlphaType, - uint32_t uniqueID, SkColorSpace*, bool useDecal = false); - GrTextureAdjuster(GrRecordingContext*, sk_sp, const GrColorInfo&, uint32_t uniqueID, bool useDecal = false); diff --git a/third_party/skia/src/gpu/GrTextureContext.cpp b/third_party/skia/src/gpu/GrTextureContext.cpp index ccdcc800e3f1..6aa7cfa03729 100644 --- a/third_party/skia/src/gpu/GrTextureContext.cpp +++ b/third_party/skia/src/gpu/GrTextureContext.cpp @@ -20,8 +20,10 @@ GrTextureContext::GrTextureContext(GrRecordingContext* context, sk_sp textureProxy, GrColorType colorType, SkAlphaType alphaType, - sk_sp colorSpace) - : GrSurfaceContext(context, colorType, alphaType, std::move(colorSpace)) + sk_sp colorSpace, + GrSurfaceOrigin origin, + GrSwizzle texSwizzle) + : GrSurfaceContext(context, colorType, alphaType, std::move(colorSpace), origin, texSwizzle) , fTextureProxy(std::move(textureProxy)) { SkDEBUGCODE(this->validate();) } diff --git a/third_party/skia/src/gpu/GrTextureContext.h b/third_party/skia/src/gpu/GrTextureContext.h index 626c2d345189..97bf72a41dd4 100644 --- a/third_party/skia/src/gpu/GrTextureContext.h +++ b/third_party/skia/src/gpu/GrTextureContext.h @@ -42,7 +42,9 @@ class GrTextureContext : public GrSurfaceContext { sk_sp, GrColorType, SkAlphaType, - sk_sp); + sk_sp, + GrSurfaceOrigin origin, + GrSwizzle texSwizzle); SkDEBUGCODE(void validate() const override;) diff --git a/third_party/skia/src/gpu/GrTextureMaker.cpp b/third_party/skia/src/gpu/GrTextureMaker.cpp index fa428ed0fbbe..6ee2f752b467 100644 --- a/third_party/skia/src/gpu/GrTextureMaker.cpp +++ b/third_party/skia/src/gpu/GrTextureMaker.cpp @@ -29,8 +29,8 @@ sk_sp GrTextureMaker::onRefTextureProxyForParams(const GrSampler if (original) { if (!params.isRepeated() || !GrGpu::IsACopyNeededForRepeatWrapMode(this->context()->priv().caps(), original.get(), - original->width(), original->height(), - params.filter(), ©Params, scaleAdjust)) { + original->dimensions(), params.filter(), + ©Params, scaleAdjust)) { needsCopyForMipsOnly = GrGpu::IsACopyNeededForMips(this->context()->priv().caps(), original.get(), params.filter(), ©Params); @@ -41,8 +41,8 @@ sk_sp GrTextureMaker::onRefTextureProxyForParams(const GrSampler } else { if (!params.isRepeated() || !GrGpu::IsACopyNeededForRepeatWrapMode(this->context()->priv().caps(), nullptr, - this->width(), this->height(), - params.filter(), ©Params, scaleAdjust)) { + this->dimensions(), params.filter(), ©Params, + scaleAdjust)) { return this->refOriginalTextureProxy(willBeMipped, AllowedTexGenType::kAny); } } diff --git a/third_party/skia/src/gpu/GrTextureMaker.h b/third_party/skia/src/gpu/GrTextureMaker.h index 5d558d1c68d1..03d7bd81cbcf 100644 --- a/third_party/skia/src/gpu/GrTextureMaker.h +++ b/third_party/skia/src/gpu/GrTextureMaker.h @@ -26,9 +26,8 @@ class GrTextureMaker : public GrTextureProducer { const GrSamplerState::Filter* filterOrNullForBicubic) override; protected: - GrTextureMaker(GrRecordingContext* context, int width, int height, const GrColorInfo& info, - bool domainNeedsLocal) - : INHERITED(context, width, height, info, domainNeedsLocal) {} + GrTextureMaker(GrRecordingContext* context, const GrImageInfo& info, bool domainNeedsLocal) + : INHERITED(context, info, domainNeedsLocal) {} /** * Return the maker's "original" texture. It is the responsibility of the maker to handle any diff --git a/third_party/skia/src/gpu/GrTexturePriv.h b/third_party/skia/src/gpu/GrTexturePriv.h index 4ce3e057ea63..309e46d388d3 100644 --- a/third_party/skia/src/gpu/GrTexturePriv.h +++ b/third_party/skia/src/gpu/GrTexturePriv.h @@ -54,8 +54,7 @@ class GrTexturePriv { } static void ComputeScratchKey(GrPixelConfig config, - int width, - int height, + SkISize dimensions, GrRenderable, int sampleCnt, GrMipMapped, diff --git a/third_party/skia/src/gpu/GrTextureProducer.cpp b/third_party/skia/src/gpu/GrTextureProducer.cpp index 7b54e9c9d012..711edb3c6e28 100644 --- a/third_party/skia/src/gpu/GrTextureProducer.cpp +++ b/third_party/skia/src/gpu/GrTextureProducer.cpp @@ -27,10 +27,10 @@ sk_sp GrTextureProducer::CopyOnGpu(GrRecordingContext* context, bool dstWillRequireMipMaps) { SkASSERT(context); - const SkRect dstRect = SkRect::MakeIWH(copyParams.fWidth, copyParams.fHeight); + const SkRect dstRect = SkRect::Make(copyParams.fDimensions); GrMipMapped mipMapped = dstWillRequireMipMaps ? GrMipMapped::kYes : GrMipMapped::kNo; - SkRect localRect = SkRect::MakeWH(inputProxy->width(), inputProxy->height()); + SkRect localRect = inputProxy->getBoundsRect(); bool needsDomain = false; bool resizing = false; @@ -58,19 +58,17 @@ sk_sp GrTextureProducer::CopyOnGpu(GrRecordingContext* context, GrPaint paint; + auto fp = GrSimpleTextureEffect::Make(std::move(inputProxy), kUnknown_SkAlphaType, + SkMatrix::I(), copyParams.fFilter); if (needsDomain) { const SkRect domain = localRect.makeInset(0.5f, 0.5f); // This would cause us to read values from outside the subset. Surely, the caller knows // better! SkASSERT(copyParams.fFilter != GrSamplerState::Filter::kMipMap); - paint.addColorFragmentProcessor( - GrTextureDomainEffect::Make(std::move(inputProxy), colorType, SkMatrix::I(), domain, - GrTextureDomain::kClamp_Mode, copyParams.fFilter)); - } else { - GrSamplerState samplerState(GrSamplerState::WrapMode::kClamp, copyParams.fFilter); - paint.addColorTextureProcessor(std::move(inputProxy), colorType, SkMatrix::I(), - samplerState); + fp = GrDomainEffect::Make(std::move(fp), domain, GrTextureDomain::kClamp_Mode, + copyParams.fFilter); } + paint.addColorFragmentProcessor(std::move(fp)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); copyRTC->fillRectToRect(GrNoClip(), std::move(paint), GrAA::kNo, SkMatrix::I(), dstRect, @@ -97,7 +95,7 @@ GrTextureProducer::DomainMode GrTextureProducer::DetermineDomainMode( GrTextureProxy* proxy, const GrSamplerState::Filter* filterModeOrNullForBicubic, SkRect* domainRect) { - const SkIRect proxyBounds = SkIRect::MakeWH(proxy->width(), proxy->height()); + const SkIRect proxyBounds = SkIRect::MakeSize(proxy->dimensions()); SkASSERT(proxyBounds.contains(constraintRect)); @@ -201,21 +199,20 @@ std::unique_ptr GrTextureProducer::createFragmentProcessorF const GrSamplerState::Filter* filterOrNullForBicubic) { SkASSERT(kTightCopy_DomainMode != domainMode); bool clampToBorderSupport = fContext->priv().caps()->clampToBorderSupport(); - GrColorType srcColorType = this->colorType(); + SkAlphaType srcAlphaType = this->alphaType(); if (filterOrNullForBicubic) { + GrSamplerState::WrapMode wrapMode = fDomainNeedsDecal && clampToBorderSupport + ? GrSamplerState::WrapMode::kClampToBorder + : GrSamplerState::WrapMode::kClamp; + GrSamplerState samplerState(wrapMode, *filterOrNullForBicubic); + auto fp = GrSimpleTextureEffect::Make(std::move(proxy), srcAlphaType, textureMatrix, + samplerState); if (kDomain_DomainMode == domainMode || (fDomainNeedsDecal && !clampToBorderSupport)) { GrTextureDomain::Mode wrapMode = fDomainNeedsDecal ? GrTextureDomain::kDecal_Mode : GrTextureDomain::kClamp_Mode; - return GrTextureDomainEffect::Make(std::move(proxy), srcColorType, textureMatrix, - domain, wrapMode, *filterOrNullForBicubic); - } else { - GrSamplerState::WrapMode wrapMode = - fDomainNeedsDecal ? GrSamplerState::WrapMode::kClampToBorder - : GrSamplerState::WrapMode::kClamp; - GrSamplerState samplerState(wrapMode, *filterOrNullForBicubic); - return GrSimpleTextureEffect::Make(std::move(proxy), srcColorType, textureMatrix, - samplerState); + return GrDomainEffect::Make(std::move(fp), domain, wrapMode, *filterOrNullForBicubic); } + return fp; } else { static const GrSamplerState::WrapMode kClampClamp[] = { GrSamplerState::WrapMode::kClamp, GrSamplerState::WrapMode::kClamp}; @@ -226,13 +223,13 @@ std::unique_ptr GrTextureProducer::createFragmentProcessorF if (kDomain_DomainMode == domainMode || (fDomainNeedsDecal && !clampToBorderSupport)) { GrTextureDomain::Mode wrapMode = fDomainNeedsDecal ? GrTextureDomain::kDecal_Mode : GrTextureDomain::kClamp_Mode; - return GrBicubicEffect::Make(std::move(proxy), srcColorType, textureMatrix, kClampClamp, - wrapMode, wrapMode, kDir, this->alphaType(), + return GrBicubicEffect::Make(std::move(proxy), textureMatrix, kClampClamp, wrapMode, + wrapMode, kDir, srcAlphaType, kDomain_DomainMode == domainMode ? &domain : nullptr); } else { - return GrBicubicEffect::Make(std::move(proxy), srcColorType, textureMatrix, + return GrBicubicEffect::Make(std::move(proxy), textureMatrix, fDomainNeedsDecal ? kDecalDecal : kClampClamp, kDir, - this->alphaType()); + srcAlphaType); } } } @@ -278,8 +275,7 @@ sk_sp GrTextureProducer::refTextureProxyForParams( // Check that the "no scaling expected" case always returns a proxy of the same size as the // producer. - SkASSERT(!result || !expectNoScale || - (result->width() == this->width() && result->height() == this->height())); + SkASSERT(!result || !expectNoScale || result->dimensions() == this->dimensions()); return result; } @@ -301,6 +297,6 @@ sk_sp GrTextureProducer::refTextureProxy(GrMipMapped willNeedMip !this->context()->priv().caps()->isFormatCopyable(result->backendFormat())); // Check that no scaling occured and we returned a proxy of the same size as the producer. - SkASSERT(!result || (result->width() == this->width() && result->height() == this->height())); + SkASSERT(!result || result->dimensions() == this->dimensions()); return result; } diff --git a/third_party/skia/src/gpu/GrTextureProducer.h b/third_party/skia/src/gpu/GrTextureProducer.h index d124bf7328e4..c0244db11c5b 100644 --- a/third_party/skia/src/gpu/GrTextureProducer.h +++ b/third_party/skia/src/gpu/GrTextureProducer.h @@ -11,7 +11,7 @@ #include "include/core/SkImageInfo.h" #include "include/private/GrResourceKey.h" #include "include/private/SkNoncopyable.h" -#include "src/gpu/GrColorInfo.h" +#include "src/gpu/GrImageInfo.h" #include "src/gpu/GrSamplerState.h" class GrFragmentProcessor; @@ -34,8 +34,7 @@ class GrTextureProducer : public SkNoncopyable { public: struct CopyParams { GrSamplerState::Filter fFilter; - int fWidth; - int fHeight; + SkISize fDimensions; }; enum FilterConstraint { @@ -102,13 +101,14 @@ class GrTextureProducer : public SkNoncopyable { virtual ~GrTextureProducer() {} - int width() const { return fWidth; } - int height() const { return fHeight; } - const GrColorInfo& colorInfo() const { return fColorInfo; } - GrColorType colorType() const { return fColorInfo.colorType(); } - SkAlphaType alphaType() const { return fColorInfo.alphaType(); } - SkColorSpace* colorSpace() const { return fColorInfo.colorSpace(); } - bool isAlphaOnly() const { return GrColorTypeIsAlphaOnly(fColorInfo.colorType()); } + int width() const { return fImageInfo.width(); } + int height() const { return fImageInfo.height(); } + SkISize dimensions() const { return fImageInfo.dimensions(); } + const GrColorInfo& colorInfo() const { return fImageInfo.colorInfo(); } + GrColorType colorType() const { return fImageInfo.colorType(); } + SkAlphaType alphaType() const { return fImageInfo.alphaType(); } + SkColorSpace* colorSpace() const { return fImageInfo.colorSpace(); } + bool isAlphaOnly() const { return GrColorTypeIsAlphaOnly(fImageInfo.colorType()); } bool domainNeedsDecal() const { return fDomainNeedsDecal; } // If the "texture" samples multiple images that have different resolutions (e.g. YUV420) virtual bool hasMixedResolutions() const { return false; } @@ -116,13 +116,10 @@ class GrTextureProducer : public SkNoncopyable { protected: friend class GrTextureProducer_TestAccess; - GrTextureProducer(GrRecordingContext* context, int width, int height, - const GrColorInfo& colorInfo, bool domainNeedsDecal) - : fContext(context) - , fWidth(width) - , fHeight(height) - , fColorInfo(colorInfo) - , fDomainNeedsDecal(domainNeedsDecal) {} + GrTextureProducer(GrRecordingContext* context, + const GrImageInfo& imageInfo, + bool domainNeedsDecal) + : fContext(context), fImageInfo(imageInfo), fDomainNeedsDecal(domainNeedsDecal) {} /** Helper for creating a key for a copy from an original key. */ static void MakeCopyKeyFromOrigKey(const GrUniqueKey& origKey, @@ -133,8 +130,8 @@ class GrTextureProducer : public SkNoncopyable { static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); GrUniqueKey::Builder builder(copyKey, origKey, kDomain, 3); builder[0] = static_cast(copyParams.fFilter); - builder[1] = copyParams.fWidth; - builder[2] = copyParams.fHeight; + builder[1] = copyParams.fDimensions.width(); + builder[2] = copyParams.fDimensions.height(); } } @@ -190,9 +187,7 @@ class GrTextureProducer : public SkNoncopyable { SkScalar scaleAdjust[2]) = 0; GrRecordingContext* fContext; - const int fWidth; - const int fHeight; - const GrColorInfo fColorInfo; + const GrImageInfo fImageInfo; // If true, any domain effect uses kDecal instead of kClamp, and sampler filter uses // kClampToBorder instead of kClamp. const bool fDomainNeedsDecal; diff --git a/third_party/skia/src/gpu/GrTextureProxy.cpp b/third_party/skia/src/gpu/GrTextureProxy.cpp index ba8530e32d6f..2d2f766221a3 100644 --- a/third_party/skia/src/gpu/GrTextureProxy.cpp +++ b/third_party/skia/src/gpu/GrTextureProxy.cpp @@ -91,8 +91,8 @@ bool GrTextureProxy::instantiate(GrResourceProvider* resourceProvider) { if (this->isLazy()) { return false; } - if (!this->instantiateImpl(resourceProvider, 1, /* needsStencil = */ false, GrRenderable::kNo, - fMipMapped, fUniqueKey.isValid() ? &fUniqueKey : nullptr)) { + if (!this->instantiateImpl(resourceProvider, 1, GrRenderable::kNo, fMipMapped, + fUniqueKey.isValid() ? &fUniqueKey : nullptr)) { return false; } @@ -102,9 +102,8 @@ bool GrTextureProxy::instantiate(GrResourceProvider* resourceProvider) { } sk_sp GrTextureProxy::createSurface(GrResourceProvider* resourceProvider) const { - sk_sp surface = - this->createSurfaceImpl(resourceProvider, 1, - /* needsStencil = */ false, GrRenderable::kNo, fMipMapped); + sk_sp surface = this->createSurfaceImpl(resourceProvider, 1, GrRenderable::kNo, + fMipMapped); if (!surface) { return nullptr; } @@ -131,11 +130,6 @@ void GrTextureProxyPriv::resetDeferredUploader() { fTextureProxy->fDeferredUploader.reset(); } -GrSamplerState::Filter GrTextureProxy::highestFilterMode() const { - return this->hasRestrictedSampling() ? GrSamplerState::Filter::kBilerp - : GrSamplerState::Filter::kMipMap; -} - GrMipMapped GrTextureProxy::mipMapped() const { if (this->isInstantiated()) { return this->peekTexture()->texturePriv().mipMapped(); @@ -144,14 +138,21 @@ GrMipMapped GrTextureProxy::mipMapped() const { } size_t GrTextureProxy::onUninstantiatedGpuMemorySize(const GrCaps& caps) const { - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), - 1, this->proxyMipMapped(), !this->priv().isExact()); + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), 1, + this->proxyMipMapped(), !this->priv().isExact()); +} + +GrSamplerState::Filter GrTextureProxy::HighestFilterMode(GrTextureType textureType) { + return GrTextureTypeHasRestrictedSampling(textureType) ? GrSamplerState::Filter::kBilerp + : GrSamplerState::Filter::kMipMap; } -bool GrTextureProxy::ProxiesAreCompatibleAsDynamicState(const GrTextureProxy* first, - const GrTextureProxy* second) { +bool GrTextureProxy::ProxiesAreCompatibleAsDynamicState(const GrSurfaceProxy* first, + const GrSurfaceProxy* second) { + // In order to be compatible, the proxies should also have the same texture type. This is + // checked explicitly since the GrBackendFormat == operator does not compare texture type return first->config() == second->config() && - first->textureType() == second->textureType() && + first->backendFormat().textureType() == second->backendFormat().textureType() && first->backendFormat() == second->backendFormat(); } diff --git a/third_party/skia/src/gpu/GrTextureProxy.h b/third_party/skia/src/gpu/GrTextureProxy.h index 1718794815dd..8c23a5860dcd 100644 --- a/third_party/skia/src/gpu/GrTextureProxy.h +++ b/third_party/skia/src/gpu/GrTextureProxy.h @@ -26,8 +26,6 @@ class GrTextureProxy : virtual public GrSurfaceProxy { // Actually instantiate the backing texture, if necessary bool instantiate(GrResourceProvider*) override; - GrSamplerState::Filter highestFilterMode() const; - // If we are instantiated and have a target, return the mip state of that target. Otherwise // returns the proxy's mip state from creation time. This is useful for lazy proxies which may // claim to not need mips at creation time, but the instantiation happens to give us a mipped @@ -60,10 +58,15 @@ class GrTextureProxy : virtual public GrSurfaceProxy { return GrTextureTypeHasRestrictedSampling(this->textureType()); } + // Returns the highest allowed filter mode for a given texture type + static GrSamplerState::Filter HighestFilterMode(const GrTextureType textureType); + // Returns true if the passed in proxies can be used as dynamic state together when flushing - // draws to the gpu. - static bool ProxiesAreCompatibleAsDynamicState(const GrTextureProxy* first, - const GrTextureProxy* second); + // draws to the gpu. This accepts GrSurfaceProxy since the information needed is defined on + // that type, but this function exists in GrTextureProxy because it's only relevant when the + // proxies are being used as textures. + static bool ProxiesAreCompatibleAsDynamicState(const GrSurfaceProxy* first, + const GrSurfaceProxy* second); /** * Return the texture proxy's unique key. It will be invalid if the proxy doesn't have one. @@ -170,7 +173,7 @@ class GrTextureProxy : virtual public GrSurfaceProxy { // // NOTE: fMipMapsStatus may no longer be equal to fInitialMipMapsStatus by the time the texture // is instantiated, since it tracks mipmaps in the time frame in which the DAG is being built. - SkDEBUGCODE(const GrMipMapsStatus fInitialMipMapsStatus); + SkDEBUGCODE(const GrMipMapsStatus fInitialMipMapsStatus;) bool fSyncTargetKey = true; // Should target's unique key be sync'ed with ours. diff --git a/third_party/skia/src/gpu/GrTextureRenderTargetProxy.cpp b/third_party/skia/src/gpu/GrTextureRenderTargetProxy.cpp index ae70c0fa76c5..667588402eb8 100644 --- a/third_party/skia/src/gpu/GrTextureRenderTargetProxy.cpp +++ b/third_party/skia/src/gpu/GrTextureRenderTargetProxy.cpp @@ -28,7 +28,6 @@ GrTextureRenderTargetProxy::GrTextureRenderTargetProxy(const GrCaps& caps, GrMipMapped mipMapped, GrMipMapsStatus mipMapsStatus, const GrSwizzle& texSwizzle, - const GrSwizzle& outSwizzle, SkBackingFit fit, SkBudgeted budgeted, GrProtected isProtected, @@ -37,8 +36,8 @@ GrTextureRenderTargetProxy::GrTextureRenderTargetProxy(const GrCaps& caps, : GrSurfaceProxy(format, desc, GrRenderable::kYes, origin, texSwizzle, fit, budgeted, isProtected, surfaceFlags, useAllocator) // for now textures w/ data are always wrapped - , GrRenderTargetProxy(caps, format, desc, sampleCnt, origin, texSwizzle, outSwizzle, fit, - budgeted, isProtected, surfaceFlags, useAllocator) + , GrRenderTargetProxy(caps, format, desc, sampleCnt, origin, texSwizzle, fit, budgeted, + isProtected, surfaceFlags, useAllocator) , GrTextureProxy(format, desc, origin, mipMapped, mipMapsStatus, texSwizzle, fit, budgeted, isProtected, surfaceFlags, useAllocator) { this->initSurfaceFlags(caps); @@ -54,7 +53,6 @@ GrTextureRenderTargetProxy::GrTextureRenderTargetProxy(const GrCaps& caps, GrMipMapped mipMapped, GrMipMapsStatus mipMapsStatus, const GrSwizzle& texSwizzle, - const GrSwizzle& outSwizzle, SkBackingFit fit, SkBudgeted budgeted, GrProtected isProtected, @@ -65,8 +63,8 @@ GrTextureRenderTargetProxy::GrTextureRenderTargetProxy(const GrCaps& caps, // Since we have virtual inheritance, we initialize GrSurfaceProxy directly. Send null // callbacks to the texture and RT proxies simply to route to the appropriate constructors. , GrRenderTargetProxy(LazyInstantiateCallback(), format, desc, sampleCnt, origin, - texSwizzle, outSwizzle, fit, budgeted, isProtected, surfaceFlags, - useAllocator, WrapsVkSecondaryCB::kNo) + texSwizzle, fit, budgeted, isProtected, surfaceFlags, useAllocator, + WrapsVkSecondaryCB::kNo) , GrTextureProxy(LazyInstantiateCallback(), format, desc, origin, mipMapped, mipMapsStatus, texSwizzle, fit, budgeted, isProtected, surfaceFlags, useAllocator) { this->initSurfaceFlags(caps); @@ -78,10 +76,9 @@ GrTextureRenderTargetProxy::GrTextureRenderTargetProxy(const GrCaps& caps, GrTextureRenderTargetProxy::GrTextureRenderTargetProxy(sk_sp surf, GrSurfaceOrigin origin, const GrSwizzle& texSwizzle, - const GrSwizzle& outSwizzle, UseAllocator useAllocator) : GrSurfaceProxy(surf, origin, texSwizzle, SkBackingFit::kExact, useAllocator) - , GrRenderTargetProxy(surf, origin, texSwizzle, outSwizzle, useAllocator) + , GrRenderTargetProxy(surf, origin, texSwizzle, useAllocator) , GrTextureProxy(surf, origin, texSwizzle, useAllocator) { SkASSERT(surf->asTexture()); SkASSERT(surf->asRenderTarget()); @@ -114,7 +111,7 @@ size_t GrTextureRenderTargetProxy::onUninstantiatedGpuMemorySize(const GrCaps& c } // TODO: do we have enough information to improve this worst case estimate? - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), colorSamplesPerPixel, this->proxyMipMapped(), !this->priv().isExact()); } @@ -126,9 +123,8 @@ bool GrTextureRenderTargetProxy::instantiate(GrResourceProvider* resourceProvide const GrUniqueKey& key = this->getUniqueKey(); - if (!this->instantiateImpl(resourceProvider, this->numSamples(), this->numStencilSamples(), - GrRenderable::kYes, this->mipMapped(), - key.isValid() ? &key : nullptr)) { + if (!this->instantiateImpl(resourceProvider, this->numSamples(), GrRenderable::kYes, + this->mipMapped(), key.isValid() ? &key : nullptr)) { return false; } if (key.isValid()) { @@ -143,9 +139,8 @@ bool GrTextureRenderTargetProxy::instantiate(GrResourceProvider* resourceProvide sk_sp GrTextureRenderTargetProxy::createSurface( GrResourceProvider* resourceProvider) const { - sk_sp surface = - this->createSurfaceImpl(resourceProvider, this->numSamples(), this->numStencilSamples(), - GrRenderable::kYes, this->mipMapped()); + sk_sp surface = this->createSurfaceImpl(resourceProvider, this->numSamples(), + GrRenderable::kYes, this->mipMapped()); if (!surface) { return nullptr; } diff --git a/third_party/skia/src/gpu/GrTextureRenderTargetProxy.h b/third_party/skia/src/gpu/GrTextureRenderTargetProxy.h index 46c273d6a2b8..68e68f72fbb0 100644 --- a/third_party/skia/src/gpu/GrTextureRenderTargetProxy.h +++ b/third_party/skia/src/gpu/GrTextureRenderTargetProxy.h @@ -36,7 +36,6 @@ class GrTextureRenderTargetProxy : public GrRenderTargetProxy, public GrTextureP GrMipMapped, GrMipMapsStatus, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, SkBackingFit, SkBudgeted, GrProtected, @@ -53,7 +52,6 @@ class GrTextureRenderTargetProxy : public GrRenderTargetProxy, public GrTextureP GrMipMapped, GrMipMapsStatus, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, SkBackingFit, SkBudgeted, GrProtected, @@ -64,7 +62,6 @@ class GrTextureRenderTargetProxy : public GrRenderTargetProxy, public GrTextureP GrTextureRenderTargetProxy(sk_sp, GrSurfaceOrigin, const GrSwizzle& textureSwizzle, - const GrSwizzle& outputSwizzle, UseAllocator); void initSurfaceFlags(const GrCaps&); diff --git a/third_party/skia/src/gpu/GrTextureResolveRenderTask.cpp b/third_party/skia/src/gpu/GrTextureResolveRenderTask.cpp index e12bbc8e3087..80ef7e99f6bd 100644 --- a/third_party/skia/src/gpu/GrTextureResolveRenderTask.cpp +++ b/third_party/skia/src/gpu/GrTextureResolveRenderTask.cpp @@ -17,14 +17,14 @@ GrTextureResolveRenderTask::~GrTextureResolveRenderTask() { for (const auto& resolve : fResolves) { // Ensure the proxy doesn't keep hold of a dangling back pointer. - resolve.fProxy->setLastRenderTask(nullptr); + resolve.fProxyView.proxy()->setLastRenderTask(nullptr); } } void GrTextureResolveRenderTask::addProxy( - sk_sp proxyHolder, GrSurfaceProxy::ResolveFlags flags, const GrCaps& caps) { - fResolves.emplace_back(std::move(proxyHolder), flags); - GrSurfaceProxy* proxy = fResolves.back().fProxy.get(); + GrSurfaceProxyView proxyView, GrSurfaceProxy::ResolveFlags flags, const GrCaps& caps) { + fResolves.emplace_back(std::move(proxyView), flags); + GrSurfaceProxy* proxy = fResolves.back().fProxyView.proxy(); // Ensure the last render task that operated on the proxy is closed. That's where msaa and // mipmaps should have been marked dirty. @@ -58,7 +58,7 @@ void GrTextureResolveRenderTask::gatherProxyIntervals(GrResourceAllocator* alloc // manipulate the resolve proxies. auto fakeOp = alloc->curOp(); for (const auto& resolve : fResolves) { - alloc->addInterval(resolve.fProxy.get(), fakeOp, fakeOp, + alloc->addInterval(resolve.fProxyView.proxy(), fakeOp, fakeOp, GrResourceAllocator::ActualUse::kYes); } alloc->incOps(); @@ -68,10 +68,11 @@ bool GrTextureResolveRenderTask::onExecute(GrOpFlushState* flushState) { // Resolve all msaa back-to-back, before regenerating mipmaps. for (const auto& resolve : fResolves) { if (GrSurfaceProxy::ResolveFlags::kMSAA & resolve.fFlags) { + GrSurfaceProxy* proxy = resolve.fProxyView.proxy(); // peekRenderTarget might be null if there was an instantiation error. - if (GrRenderTarget* renderTarget = resolve.fProxy->peekRenderTarget()) { + if (GrRenderTarget* renderTarget = proxy->peekRenderTarget()) { flushState->gpu()->resolveRenderTarget(renderTarget, resolve.fMSAAResolveRect, - resolve.fProxy->origin(), + resolve.fProxyView.origin(), GrGpu::ForExternalIO::kNo); } } @@ -80,7 +81,7 @@ bool GrTextureResolveRenderTask::onExecute(GrOpFlushState* flushState) { for (const auto& resolve : fResolves) { if (GrSurfaceProxy::ResolveFlags::kMipMaps & resolve.fFlags) { // peekTexture might be null if there was an instantiation error. - GrTexture* texture = resolve.fProxy->peekTexture(); + GrTexture* texture = resolve.fProxyView.proxy()->peekTexture(); if (texture && texture->texturePriv().mipMapsAreDirty()) { flushState->gpu()->regenerateMipMapLevels(texture); SkASSERT(!texture->texturePriv().mipMapsAreDirty()); @@ -92,9 +93,9 @@ bool GrTextureResolveRenderTask::onExecute(GrOpFlushState* flushState) { } #ifdef SK_DEBUG -void GrTextureResolveRenderTask::visitProxies_debugOnly(const VisitSurfaceProxyFunc& fn) const { +void GrTextureResolveRenderTask::visitProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const { for (const auto& resolve : fResolves) { - fn(resolve.fProxy.get(), GrMipMapped::kNo); + fn(resolve.fProxyView.proxy(), GrMipMapped::kNo); } } #endif diff --git a/third_party/skia/src/gpu/GrTextureResolveRenderTask.h b/third_party/skia/src/gpu/GrTextureResolveRenderTask.h index 48fea3905b00..9d567d3ef054 100644 --- a/third_party/skia/src/gpu/GrTextureResolveRenderTask.h +++ b/third_party/skia/src/gpu/GrTextureResolveRenderTask.h @@ -12,14 +12,15 @@ class GrTextureResolveRenderTask final : public GrRenderTask { public: - GrTextureResolveRenderTask() : GrRenderTask(nullptr) {} + GrTextureResolveRenderTask() : GrRenderTask() {} ~GrTextureResolveRenderTask() override; - void addProxy(sk_sp, GrSurfaceProxy::ResolveFlags, const GrCaps&); + void addProxy(GrSurfaceProxyView proxyView, GrSurfaceProxy::ResolveFlags, const GrCaps&); private: bool onIsUsed(GrSurfaceProxy* proxy) const override { - SkASSERT(proxy != fTarget.get()); // This case should be handled by GrRenderTask. + // This case should be handled by GrRenderTask. + SkASSERT(proxy != fTargetView.proxy()); return false; } void handleInternalAllocationFailure() override { @@ -34,13 +35,13 @@ class GrTextureResolveRenderTask final : public GrRenderTask { bool onExecute(GrOpFlushState*) override; #ifdef SK_DEBUG - SkDEBUGCODE(void visitProxies_debugOnly(const VisitSurfaceProxyFunc&) const override;) + SkDEBUGCODE(void visitProxies_debugOnly(const GrOp::VisitProxyFunc&) const override;) #endif struct Resolve { - Resolve(sk_sp proxy, GrSurfaceProxy::ResolveFlags flags) - : fProxy(std::move(proxy)), fFlags(flags) {} - sk_sp fProxy; + Resolve(GrSurfaceProxyView proxyView, GrSurfaceProxy::ResolveFlags flags) + : fProxyView(std::move(proxyView)), fFlags(flags) {} + GrSurfaceProxyView fProxyView; GrSurfaceProxy::ResolveFlags fFlags; SkIRect fMSAAResolveRect; }; diff --git a/third_party/skia/src/gpu/GrTransferFromRenderTask.h b/third_party/skia/src/gpu/GrTransferFromRenderTask.h index 40e89da6be6a..ce29b97fb26f 100644 --- a/third_party/skia/src/gpu/GrTransferFromRenderTask.h +++ b/third_party/skia/src/gpu/GrTransferFromRenderTask.h @@ -18,7 +18,7 @@ class GrTransferFromRenderTask final : public GrRenderTask { GrColorType dstColorType, sk_sp dstBuffer, size_t dstOffset) - : GrRenderTask(nullptr) + : GrRenderTask() , fSrcProxy(std::move(srcProxy)) , fSrcRect(srcRect) , fSurfaceColorType(surfaceColorType) @@ -28,7 +28,7 @@ class GrTransferFromRenderTask final : public GrRenderTask { private: bool onIsUsed(GrSurfaceProxy* proxy) const override { - SkASSERT(!fTarget); + SkASSERT(!fTargetView.proxy()); return proxy == fSrcProxy.get(); } // If fSrcProxy is uninstantiated at flush time we simply will skip doing the transfer. @@ -42,7 +42,7 @@ class GrTransferFromRenderTask final : public GrRenderTask { bool onExecute(GrOpFlushState*) override; #ifdef SK_DEBUG - void visitProxies_debugOnly(const VisitSurfaceProxyFunc& fn) const override { + void visitProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const override { fn(fSrcProxy.get(), GrMipMapped::kNo); } #endif diff --git a/third_party/skia/src/gpu/GrUserStencilSettings.h b/third_party/skia/src/gpu/GrUserStencilSettings.h index 83a19b776ea0..95e97bcfb69d 100644 --- a/third_party/skia/src/gpu/GrUserStencilSettings.h +++ b/third_party/skia/src/gpu/GrUserStencilSettings.h @@ -118,12 +118,12 @@ struct GrUserStencilSettings { template struct Init {}; - template struct InitSeparate {}; + template struct InitSeparate {}; template @@ -131,17 +131,17 @@ struct GrUserStencilSettings { return Init(); } - template - constexpr static InitSeparate StaticInitSeparate() { - return InitSeparate(); + template + constexpr static InitSeparate StaticInitSeparate() { + return InitSeparate(); } // We construct with template arguments in order to enforce that the struct be compile-time @@ -151,40 +151,41 @@ struct GrUserStencilSettings { typename Attrs = Attrs > constexpr explicit GrUserStencilSettings( const Init&) - : fFrontFlags{(uint16_t)(Attrs::Flags(false) | kSingleSided_StencilFlag), + : fCWFlags{(uint16_t)(Attrs::Flags(false) | kSingleSided_StencilFlag), (uint16_t)(Attrs::Flags(true) | kSingleSided_StencilFlag)} - , fFront{Ref, Test, Attrs::EffectiveTestMask(TestMask), PassOp, FailOp, + , fCWFace{Ref, Test, Attrs::EffectiveTestMask(TestMask), PassOp, FailOp, Attrs::EffectiveWriteMask(WriteMask)} - , fBackFlags{(uint16_t)(Attrs::Flags(false) | kSingleSided_StencilFlag), + , fCCWFlags{(uint16_t)(Attrs::Flags(false) | kSingleSided_StencilFlag), (uint16_t)(Attrs::Flags(true) | kSingleSided_StencilFlag)} - , fBack{Ref, Test, Attrs::EffectiveTestMask(TestMask), PassOp, FailOp, + , fCCWFace{Ref, Test, Attrs::EffectiveTestMask(TestMask), PassOp, FailOp, Attrs::EffectiveWriteMask(WriteMask)} { } - template, - typename BkAttrs = Attrs > + template, + typename CCWAttrs = Attrs > constexpr explicit GrUserStencilSettings( - const InitSeparate&) - : fFrontFlags{FtAttrs::Flags(false), FtAttrs::Flags(true)} - , fFront{FtRef, FtTest, FtAttrs::EffectiveTestMask(FtTestMask), FtPassOp, FtFailOp, - FtAttrs::EffectiveWriteMask(FtWriteMask)} - , fBackFlags{BkAttrs::Flags(false), BkAttrs::Flags(true)} - , fBack{BkRef, BkTest, BkAttrs::EffectiveTestMask(BkTestMask), BkPassOp, BkFailOp, - BkAttrs::EffectiveWriteMask(BkWriteMask)} {} + const InitSeparate&) + : fCWFlags{CWAttrs::Flags(false), CWAttrs::Flags(true)} + , fCWFace{CWRef, CWTest, CWAttrs::EffectiveTestMask(CWTestMask), CWPassOp, CWFailOp, + CWAttrs::EffectiveWriteMask(CWWriteMask)} + , fCCWFlags{CCWAttrs::Flags(false), CCWAttrs::Flags(true)} + , fCCWFace{CCWRef, CCWTest, CCWAttrs::EffectiveTestMask(CCWTestMask), CCWPassOp, CCWFailOp, + CCWAttrs::EffectiveWriteMask(CCWWriteMask)} {} // This struct can only be constructed with static initializers. GrUserStencilSettings() = delete; GrUserStencilSettings(const GrUserStencilSettings&) = delete; uint16_t flags(bool hasStencilClip) const { - return fFrontFlags[hasStencilClip] & fBackFlags[hasStencilClip]; + return fCWFlags[hasStencilClip] & fCCWFlags[hasStencilClip]; } bool isDisabled(bool hasStencilClip) const { return this->flags(hasStencilClip) & kDisabled_StencilFlag; @@ -199,10 +200,10 @@ struct GrUserStencilSettings { return !(this->flags(hasStencilClip) & kNoWrapOps_StencilFlag); } - const uint16_t fFrontFlags[2]; // frontFlagsForDraw = fFrontFlags[hasStencilClip]. - const Face fFront; - const uint16_t fBackFlags[2]; // backFlagsForDraw = fBackFlags[hasStencilClip]. - const Face fBack; + const uint16_t fCWFlags[2]; // cwFlagsForDraw = fCWFlags[hasStencilClip]. + const Face fCWFace; + const uint16_t fCCWFlags[2]; // ccwFlagsForDraw = fCCWFlags[hasStencilClip]. + const Face fCCWFace; static const GrUserStencilSettings& kUnused; diff --git a/third_party/skia/src/gpu/GrVertexWriter.h b/third_party/skia/src/gpu/GrVertexWriter.h index 7b1ddc1d6b5e..74706ffa8981 100644 --- a/third_party/skia/src/gpu/GrVertexWriter.h +++ b/third_party/skia/src/gpu/GrVertexWriter.h @@ -71,6 +71,8 @@ struct GrVertexWriter { this->write(color.fColor[0]); if (color.fWideColor) { this->write(color.fColor[1]); + this->write(color.fColor[2]); + this->write(color.fColor[3]); } this->write(remainder...); } diff --git a/third_party/skia/src/gpu/GrWaitRenderTask.cpp b/third_party/skia/src/gpu/GrWaitRenderTask.cpp index a09a9a617edd..d7b2a7cc081b 100644 --- a/third_party/skia/src/gpu/GrWaitRenderTask.cpp +++ b/third_party/skia/src/gpu/GrWaitRenderTask.cpp @@ -14,15 +14,15 @@ 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 fTarget. - alloc->addInterval(fTarget.get(), alloc->curOp(), alloc->curOp(), + // we manipulate fTargetView's proxy. + alloc->addInterval(fTargetView.proxy(), alloc->curOp(), alloc->curOp(), GrResourceAllocator::ActualUse::kYes); alloc->incOps(); } bool GrWaitRenderTask::onExecute(GrOpFlushState* flushState) { for (int i = 0; i < fNumSemaphores; ++i) { - flushState->gpu()->waitSemaphore(fSemaphores[i]); + flushState->gpu()->waitSemaphore(fSemaphores[i].get()); } return true; } diff --git a/third_party/skia/src/gpu/GrWaitRenderTask.h b/third_party/skia/src/gpu/GrWaitRenderTask.h index fc736e1c9b9f..f93aadee4853 100644 --- a/third_party/skia/src/gpu/GrWaitRenderTask.h +++ b/third_party/skia/src/gpu/GrWaitRenderTask.h @@ -13,15 +13,17 @@ class GrWaitRenderTask final : public GrRenderTask { public: - GrWaitRenderTask(sk_sp proxy, std::unique_ptr[]> semaphores, + GrWaitRenderTask(GrSurfaceProxyView surfaceView, + std::unique_ptr[]> semaphores, int numSemaphores) - : GrRenderTask(std::move(proxy)) + : GrRenderTask(std::move(surfaceView)) , fSemaphores(std::move(semaphores)) - , fNumSemaphores(numSemaphores){} + , fNumSemaphores(numSemaphores) {} private: bool onIsUsed(GrSurfaceProxy* proxy) const override { - SkASSERT(proxy != fTarget.get()); // This case should be handled by GrRenderTask. + // This case should be handled by GrRenderTask. + SkASSERT(proxy != fTargetView.proxy()); return false; } void handleInternalAllocationFailure() override {} @@ -35,9 +37,9 @@ class GrWaitRenderTask final : public GrRenderTask { #ifdef SK_DEBUG // No non-dst proxies. - void visitProxies_debugOnly(const VisitSurfaceProxyFunc& fn) const override {} + void visitProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const override {} #endif - std::unique_ptr[]> fSemaphores; + std::unique_ptr[]> fSemaphores; int fNumSemaphores; }; diff --git a/third_party/skia/src/gpu/GrWindowRectangles.h b/third_party/skia/src/gpu/GrWindowRectangles.h index 1b6bc4dfeed5..40f7582fb586 100644 --- a/third_party/skia/src/gpu/GrWindowRectangles.h +++ b/third_party/skia/src/gpu/GrWindowRectangles.h @@ -35,15 +35,14 @@ class GrWindowRectangles { bool operator==(const GrWindowRectangles&) const; private: - constexpr static int kNumLocalWindows = 1; struct Rec; - const Rec* rec() const { return fCount <= kNumLocalWindows ? nullptr : fRec; } + const Rec* rec() const { return fCount <= 1 ? nullptr : fRec; } int fCount; union { - SkIRect fLocalWindows[kNumLocalWindows]; // If fCount <= kNumLocalWindows. - Rec* fRec; // If fCount > kNumLocalWindows. + SkIRect fLocalWindow; // If fCount <= 1 + Rec* fRec; // If fCount > 1. }; }; @@ -58,7 +57,7 @@ struct GrWindowRectangles::Rec : public GrNonAtomicRef { }; inline const SkIRect* GrWindowRectangles::data() const { - return fCount <= kNumLocalWindows ? fLocalWindows : fRec->fData; + return fCount <= 1 ? &fLocalWindow : fRec->fData; } inline void GrWindowRectangles::reset() { @@ -69,8 +68,8 @@ inline void GrWindowRectangles::reset() { inline GrWindowRectangles& GrWindowRectangles::operator=(const GrWindowRectangles& that) { SkSafeUnref(this->rec()); fCount = that.fCount; - if (fCount <= kNumLocalWindows) { - memcpy(fLocalWindows, that.fLocalWindows, fCount * sizeof(SkIRect)); + if (fCount <= 1) { + fLocalWindow = that.fLocalWindow; } else { fRec = SkRef(that.fRec); } @@ -84,11 +83,11 @@ inline GrWindowRectangles GrWindowRectangles::makeOffset(int dx, int dy) const { GrWindowRectangles result; result.fCount = fCount; SkIRect* windows; - if (result.fCount > kNumLocalWindows) { + if (result.fCount > 1) { result.fRec = new Rec(); windows = result.fRec->fData; } else { - windows = result.fLocalWindows; + windows = &result.fLocalWindow; } for (int i = 0; i < fCount; ++i) { windows[i] = this->data()[i].makeOffset(dx, dy); @@ -98,11 +97,12 @@ inline GrWindowRectangles GrWindowRectangles::makeOffset(int dx, int dy) const { inline SkIRect& GrWindowRectangles::addWindow() { SkASSERT(fCount < kMaxWindows); - if (fCount < kNumLocalWindows) { - return fLocalWindows[fCount++]; + if (fCount == 0) { + fCount = 1; + return fLocalWindow; } - if (fCount == kNumLocalWindows) { - fRec = new Rec(fLocalWindows, kNumLocalWindows); + if (fCount == 1) { + fRec = new Rec(&fLocalWindow, 1); } else if (!fRec->unique()) { // Simple copy-on-write. fRec->unref(); fRec = new Rec(fRec->fData, fCount); @@ -114,7 +114,7 @@ inline bool GrWindowRectangles::operator==(const GrWindowRectangles& that) const if (fCount != that.fCount) { return false; } - if (fCount > kNumLocalWindows && fRec == that.fRec) { + if (fCount > 1 && fRec == that.fRec) { return true; } return !fCount || !memcmp(this->data(), that.data(), sizeof(SkIRect) * fCount); diff --git a/third_party/skia/src/gpu/GrXferProcessor.h b/third_party/skia/src/gpu/GrXferProcessor.h index 18525e7c050a..983d27224de2 100644 --- a/third_party/skia/src/gpu/GrXferProcessor.h +++ b/third_party/skia/src/gpu/GrXferProcessor.h @@ -13,6 +13,7 @@ #include "src/gpu/GrNonAtomicRef.h" #include "src/gpu/GrProcessor.h" #include "src/gpu/GrProcessorAnalysis.h" +#include "src/gpu/GrSurfaceProxyView.h" class GrGLSLXferProcessor; class GrProcessorSet; @@ -53,52 +54,52 @@ class GrXferProcessor : public GrProcessor, public GrNonAtomicRef proxy, const SkIPoint& offset) - : fProxy(std::move(proxy)) { - if (fProxy) { + DstProxyView(GrSurfaceProxyView view, const SkIPoint& offset) + : fProxyView(std::move(view)) { + if (fProxyView.proxy()) { fOffset = offset; } else { fOffset.set(0, 0); } } - DstProxy& operator=(const DstProxy& other) { - fProxy = other.fProxy; + DstProxyView& operator=(const DstProxyView& other) { + fProxyView = other.fProxyView; fOffset = other.fOffset; return *this; } - bool operator==(const DstProxy& that) const { - return fProxy == that.fProxy && fOffset == that.fOffset; + bool operator==(const DstProxyView& that) const { + return fProxyView == that.fProxyView && fOffset == that.fOffset; } - bool operator!=(const DstProxy& that) const { return !(*this == that); } + bool operator!=(const DstProxyView& that) const { return !(*this == that); } const SkIPoint& offset() const { return fOffset; } void setOffset(const SkIPoint& offset) { fOffset = offset; } void setOffset(int ox, int oy) { fOffset.set(ox, oy); } - GrTextureProxy* proxy() const { return fProxy.get(); } - sk_sp refProxy() const { return fProxy; } + GrTextureProxy* proxy() const { return fProxyView.asTextureProxy(); } + const GrSurfaceProxyView& proxyView() const { return fProxyView; } - void setProxy(sk_sp proxy) { - fProxy = std::move(proxy); - if (!fProxy) { + void setProxyView(GrSurfaceProxyView view) { + fProxyView = std::move(view); + if (!fProxyView.proxy()) { fOffset = {0, 0}; } } private: - sk_sp fProxy; - SkIPoint fOffset; + GrSurfaceProxyView fProxyView; + SkIPoint fOffset; }; /** @@ -250,7 +251,7 @@ class GrXferProcessor : public GrProcessor, public GrNonAtomicRef GrYUVProvider::refAsTextureProxy(GrRecordingContext* ctx, yuvTextureProxies[i] = proxyProvider->createTextureProxy(yuvImage, 1, SkBudgeted::kYes, fit); - SkASSERT(yuvTextureProxies[i]->width() == yuvSizeInfo.fSizes[i].fWidth); - SkASSERT(yuvTextureProxies[i]->height() == yuvSizeInfo.fSizes[i].fHeight); + SkASSERT(yuvTextureProxies[i]->dimensions() == yuvSizeInfo.fSizes[i]); } // TODO: investigate preallocating mip maps here diff --git a/third_party/skia/src/gpu/SkGpuDevice.cpp b/third_party/skia/src/gpu/SkGpuDevice.cpp index 77b9963ba5cb..6d6f1bbf13ee 100644 --- a/third_party/skia/src/gpu/SkGpuDevice.cpp +++ b/third_party/skia/src/gpu/SkGpuDevice.cpp @@ -162,7 +162,7 @@ sk_sp SkGpuDevice::filterTexture(SkSpecialImage* srcImg, SkASSERT(srcImg->isTextureBacked()); SkASSERT(filter); - SkMatrix matrix = this->ctm(); + SkMatrix matrix = this->localToDevice(); matrix.postTranslate(SkIntToScalar(-left), SkIntToScalar(-top)); const SkIRect clipBounds = this->devClipBounds().makeOffset(-left, -top); sk_sp cache(this->getImageFilterCache()); @@ -230,7 +230,6 @@ void SkGpuDevice::replaceRenderTargetContext(std::unique_ptrasTextureProxy()); SkAssertResult(rtc->blitTexture(fRenderTargetContext->asTextureProxy(), - fRenderTargetContext->colorInfo().colorType(), SkIRect::MakeWH(this->width(), this->height()), SkIPoint::Make(0,0))); } @@ -265,12 +264,12 @@ void SkGpuDevice::drawPaint(const SkPaint& paint) { GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPaint", fContext.get()); GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, this->ctm(), - &grPaint)) { + if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + this->localToDevice(), &grPaint)) { return; } - fRenderTargetContext->drawPaint(this->clip(), std::move(grPaint), this->ctm()); + fRenderTargetContext->drawPaint(this->clip(), std::move(grPaint), this->localToDevice()); } static inline GrPrimitiveType point_mode_to_primitive_type(SkCanvas::PointMode mode) { @@ -298,7 +297,7 @@ void SkGpuDevice::drawPoints(SkCanvas::PointMode mode, GrStyle style(paint, SkPaint::kStroke_Style); GrPaint grPaint; if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, - this->ctm(), &grPaint)) { + this->localToDevice(), &grPaint)) { return; } SkPath path; @@ -306,21 +305,21 @@ void SkGpuDevice::drawPoints(SkCanvas::PointMode mode, path.moveTo(pts[0]); path.lineTo(pts[1]); fRenderTargetContext->drawPath(this->clip(), std::move(grPaint), GrAA(paint.isAntiAlias()), - this->ctm(), path, style); + this->localToDevice(), path, style); return; } SkScalar scales[2]; - bool isHairline = (0 == width) || (1 == width && this->ctm().getMinMaxScales(scales) && - SkScalarNearlyEqual(scales[0], 1.f) && - SkScalarNearlyEqual(scales[1], 1.f)); + bool isHairline = (0 == width) || + (1 == width && this->localToDevice().getMinMaxScales(scales) && + SkScalarNearlyEqual(scales[0], 1.f) && SkScalarNearlyEqual(scales[1], 1.f)); // we only handle non-antialiased hairlines and paints without path effects or mask filters, // else we let the SkDraw call our drawPath() if (!isHairline || paint.getPathEffect() || paint.getMaskFilter() || paint.isAntiAlias()) { SkRasterClip rc(this->devClipBounds()); SkDraw draw; draw.fDst = SkPixmap(SkImageInfo::MakeUnknown(this->width(), this->height()), nullptr, 0); - draw.fMatrix = &this->ctm(); + draw.fMatrix = &this->localToDevice(); draw.fRC = &rc; draw.drawPoints(mode, count, pts, paint, this); return; @@ -328,7 +327,7 @@ void SkGpuDevice::drawPoints(SkCanvas::PointMode mode, GrPrimitiveType primitiveType = point_mode_to_primitive_type(mode); - const SkMatrix* viewMatrix = &this->ctm(); + const SkMatrix* viewMatrix = &this->localToDevice(); #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK // This offsetting in device space matches the expectations of the Android framework for non-AA // points and lines. @@ -368,18 +367,18 @@ void SkGpuDevice::drawRect(const SkRect& rect, const SkPaint& paint) { GrShape shape(rect, style); GrBlurUtils::drawShapeWithMaskFilter(fContext.get(), fRenderTargetContext.get(), - this->clip(), paint, this->ctm(), shape); + this->clip(), paint, this->localToDevice(), shape); return; } GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, this->ctm(), - &grPaint)) { + if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + this->localToDevice(), &grPaint)) { return; } fRenderTargetContext->drawRect(this->clip(), std::move(grPaint), GrAA(paint.isAntiAlias()), - this->ctm(), rect, &style); + this->localToDevice(), rect, &style); } void SkGpuDevice::drawEdgeAAQuad(const SkRect& rect, const SkPoint clip[4], @@ -401,11 +400,11 @@ void SkGpuDevice::drawEdgeAAQuad(const SkRect& rect, const SkPoint clip[4], if (clip) { // Use fillQuadWithEdgeAA fRenderTargetContext->fillQuadWithEdgeAA(this->clip(), std::move(grPaint), GrAA::kYes, grAA, - this->ctm(), clip, nullptr); + this->localToDevice(), clip, nullptr); } else { // Use fillRectWithEdgeAA to preserve mathematical properties of dst being rectangular fRenderTargetContext->fillRectWithEdgeAA(this->clip(), std::move(grPaint), GrAA::kYes, grAA, - this->ctm(), rect); + this->localToDevice(), rect); } } @@ -429,20 +428,20 @@ void SkGpuDevice::drawRRect(const SkRRect& rrect, const SkPaint& paint) { GrShape shape(rrect, style); GrBlurUtils::drawShapeWithMaskFilter(fContext.get(), fRenderTargetContext.get(), - this->clip(), paint, this->ctm(), shape); + this->clip(), paint, this->localToDevice(), shape); return; } SkASSERT(!style.pathEffect()); GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, this->ctm(), - &grPaint)) { + if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + this->localToDevice(), &grPaint)) { return; } fRenderTargetContext->drawRRect(this->clip(), std::move(grPaint), GrAA(paint.isAntiAlias()), - this->ctm(), rrect, style); + this->localToDevice(), rrect, style); } @@ -462,12 +461,13 @@ 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, - this->ctm(), &grPaint)) { + this->localToDevice(), &grPaint)) { return; } fRenderTargetContext->drawDRRect(this->clip(), std::move(grPaint), - GrAA(paint.isAntiAlias()), this->ctm(), outer, inner); + GrAA(paint.isAntiAlias()), this->localToDevice(), + outer, inner); return; } @@ -475,14 +475,14 @@ void SkGpuDevice::drawDRRect(const SkRRect& outer, const SkRRect& inner, const S path.setIsVolatile(true); path.addRRect(outer); path.addRRect(inner); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); // TODO: We are losing the possible mutability of the path here but this should probably be // fixed by upgrading GrShape to handle DRRects. GrShape shape(path, paint); GrBlurUtils::drawShapeWithMaskFilter(fContext.get(), fRenderTargetContext.get(), this->clip(), - paint, this->ctm(), shape); + paint, this->localToDevice(), shape); } @@ -497,13 +497,13 @@ void SkGpuDevice::drawRegion(const SkRegion& region, const SkPaint& paint) { } GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, this->ctm(), - &grPaint)) { + if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + this->localToDevice(), &grPaint)) { return; } fRenderTargetContext->drawRegion(this->clip(), std::move(grPaint), GrAA(paint.isAntiAlias()), - this->ctm(), region, GrStyle(paint)); + this->localToDevice(), region, GrStyle(paint)); } void SkGpuDevice::drawOval(const SkRect& oval, const SkPaint& paint) { @@ -517,13 +517,13 @@ void SkGpuDevice::drawOval(const SkRect& oval, const SkPaint& paint) { } GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, this->ctm(), - &grPaint)) { + if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + this->localToDevice(), &grPaint)) { return; } fRenderTargetContext->drawOval(this->clip(), std::move(grPaint), GrAA(paint.isAntiAlias()), - this->ctm(), oval, GrStyle(paint)); + this->localToDevice(), oval, GrStyle(paint)); } void SkGpuDevice::drawArc(const SkRect& oval, SkScalar startAngle, @@ -535,13 +535,13 @@ void SkGpuDevice::drawArc(const SkRect& oval, SkScalar startAngle, return; } GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, this->ctm(), - &grPaint)) { + if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + this->localToDevice(), &grPaint)) { return; } fRenderTargetContext->drawArc(this->clip(), std::move(grPaint), GrAA(paint.isAntiAlias()), - this->ctm(), oval, startAngle, sweepAngle, useCenter, + this->localToDevice(), oval, startAngle, sweepAngle, useCenter, GrStyle(paint)); } @@ -588,7 +588,7 @@ void SkGpuDevice::drawStrokedLine(const SkPoint points[2], SkMatrix local = m; - m.postConcat(this->ctm()); + m.postConcat(this->localToDevice()); GrPaint grPaint; if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), newPaint, m, @@ -606,9 +606,9 @@ void SkGpuDevice::drawPath(const SkPath& origSrcPath, const SkPaint& paint, bool SkPoint points[2]; if (SkPaint::kStroke_Style == paint.getStyle() && paint.getStrokeWidth() > 0 && !paint.getMaskFilter() && SkPaint::kRound_Cap != paint.getStrokeCap() && - this->ctm().preservesRightAngles() && origSrcPath.isLine(points)) { + this->localToDevice().preservesRightAngles() && origSrcPath.isLine(points)) { // Path-based stroking looks better for thin rects - SkScalar strokeWidth = this->ctm().getMaxScale() * paint.getStrokeWidth(); + SkScalar strokeWidth = this->localToDevice().getMaxScale() * paint.getStrokeWidth(); if (strokeWidth >= 1.0f) { // Round capping support is currently disabled b.c. it would require a RRect // GrDrawOp that takes a localMatrix. @@ -622,11 +622,11 @@ void SkGpuDevice::drawPath(const SkPath& origSrcPath, const SkPaint& paint, bool if (!paint.getMaskFilter()) { GrPaint grPaint; if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, - this->ctm(), &grPaint)) { + this->localToDevice(), &grPaint)) { return; } fRenderTargetContext->drawPath(this->clip(), std::move(grPaint), GrAA(paint.isAntiAlias()), - this->ctm(), origSrcPath, GrStyle(paint)); + this->localToDevice(), origSrcPath, GrStyle(paint)); return; } @@ -634,7 +634,7 @@ void SkGpuDevice::drawPath(const SkPath& origSrcPath, const SkPaint& paint, bool GrShape shape(origSrcPath, paint); GrBlurUtils::drawShapeWithMaskFilter(fContext.get(), fRenderTargetContext.get(), this->clip(), - paint, this->ctm(), shape); + paint, this->localToDevice(), shape); } static const int kBmpSmallTileSize = 1 << 10; @@ -669,7 +669,7 @@ static void determine_clipped_src_rect(int width, int height, const GrClip& clip, const SkMatrix& viewMatrix, const SkMatrix& srcToDstRect, - const SkISize& imageSize, + const SkISize& imageDimensions, const SkRect* srcRectPtr, SkIRect* clippedSrcIRect) { clip.getConservativeBounds(width, height, clippedSrcIRect, nullptr); @@ -687,7 +687,7 @@ static void determine_clipped_src_rect(int width, int height, } } clippedSrcRect.roundOut(clippedSrcIRect); - SkIRect bmpBounds = SkIRect::MakeSize(imageSize); + SkIRect bmpBounds = SkIRect::MakeSize(imageDimensions); if (!clippedSrcIRect->intersect(bmpBounds)) { clippedSrcIRect->setEmpty(); } @@ -931,7 +931,7 @@ void SkGpuDevice::drawBitmapTile(const SkBitmap& bitmap, SkMatrix texMatrix = SkMatrix::MakeRectToRect(dstRect, srcRect, SkMatrix::kFill_ScaleToFit); texMatrix.postScale(scales[0], scales[1]); - GrColorType srcColorType = SkColorTypeToGrColorType(bitmap.colorType()); + SkAlphaType srcAlphaType = bitmap.alphaType(); // Construct a GrPaint by setting the bitmap texture as the first effect and then configuring // the rest from the SkPaint. @@ -954,20 +954,20 @@ void SkGpuDevice::drawBitmapTile(const SkBitmap& bitmap, } if (bicubic) { static constexpr auto kDir = GrBicubicEffect::Direction::kXY; - fp = GrBicubicEffect::Make(std::move(proxy), srcColorType, texMatrix, domain, kDir, - bitmap.alphaType()); + fp = GrBicubicEffect::Make(std::move(proxy), texMatrix, domain, kDir, srcAlphaType); } else { - fp = GrTextureDomainEffect::Make(std::move(proxy), srcColorType, texMatrix, domain, - GrTextureDomain::kClamp_Mode, samplerState.filter()); + fp = GrSimpleTextureEffect::Make(std::move(proxy), srcAlphaType, texMatrix, + samplerState); + fp = GrDomainEffect::Make(std::move(fp), domain, GrTextureDomain::kClamp_Mode, + samplerState.filter()); } } else if (bicubic) { SkASSERT(GrSamplerState::Filter::kNearest == samplerState.filter()); GrSamplerState::WrapMode wrapMode[2] = {samplerState.wrapModeX(), samplerState.wrapModeY()}; static constexpr auto kDir = GrBicubicEffect::Direction::kXY; - fp = GrBicubicEffect::Make(std::move(proxy), srcColorType, texMatrix, wrapMode, kDir, - bitmap.alphaType()); + fp = GrBicubicEffect::Make(std::move(proxy), texMatrix, wrapMode, kDir, srcAlphaType); } else { - fp = GrSimpleTextureEffect::Make(std::move(proxy), srcColorType, texMatrix, samplerState); + fp = GrSimpleTextureEffect::Make(std::move(proxy), srcAlphaType, texMatrix, samplerState); } fp = GrColorSpaceXformEffect::Make(std::move(fp), bitmap.colorSpace(), bitmap.alphaType(), @@ -1028,7 +1028,7 @@ void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const return; } - SkMatrix ctm = this->ctm(); + SkMatrix ctm = this->localToDevice(); ctm.postTranslate(-SkIntToScalar(left), -SkIntToScalar(top)); SkPaint tmpUnfiltered(paint); @@ -1038,8 +1038,7 @@ void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const tmpUnfiltered.setImageFilter(nullptr); - GrColorType srcColorType = SkColorTypeToGrColorType(result->colorType()); - auto fp = GrSimpleTextureEffect::Make(std::move(proxy), srcColorType, SkMatrix::I()); + auto fp = GrSimpleTextureEffect::Make(std::move(proxy), special->alphaType(), SkMatrix::I()); fp = GrColorSpaceXformEffect::Make(std::move(fp), result->getColorSpace(), result->alphaType(), fRenderTargetContext->colorInfo().colorSpace()); if (GrColorTypeIsAlphaOnly(SkColorTypeToGrColorType(result->colorType()))) { @@ -1077,8 +1076,8 @@ void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const std::unique_ptr cfp; if (clipProxy && ctm.invert(&inverseClipMatrix)) { GrColorType srcColorType = SkColorTypeToGrColorType(clipImage->colorType()); - cfp = GrSimpleTextureEffect::Make(std::move(clipProxy), srcColorType, inverseClipMatrix, - sampler); + cfp = GrSimpleTextureEffect::Make(std::move(clipProxy), clipImage->alphaType(), + inverseClipMatrix, sampler); if (srcColorType != GrColorType::kAlpha_8) { cfp = GrFragmentProcessor::SwizzleOutput(std::move(cfp), GrSwizzle::AAAA()); } @@ -1163,7 +1162,7 @@ void SkGpuDevice::drawBitmapRect(const SkBitmap& bitmap, GrSamplerState sampleState; bool doBicubic; GrSamplerState::Filter textureFilterMode = GrSkFilterQualityToGrFilterMode( - bitmap.width(), bitmap.height(), paint.getFilterQuality(), this->ctm(), + bitmap.width(), bitmap.height(), paint.getFilterQuality(), this->localToDevice(), srcToDstMatrix, fContext->priv().options().fSharpenMipmappedTextures, &doBicubic); int tileFilterPad; @@ -1178,16 +1177,16 @@ void SkGpuDevice::drawBitmapRect(const SkBitmap& bitmap, sampleState.setFilterMode(textureFilterMode); int maxTileSizeForFilter = this->caps()->maxTileSize() - 2 * tileFilterPad; - if (this->shouldTileImageID(bitmap.getGenerationID(), bitmap.getSubset(), this->ctm(), - srcToDstMatrix, sampleState, src, maxTileSizeForFilter, - &tileSize, &clippedSrcRect)) { - this->drawTiledBitmap(bitmap, this->ctm(), srcToDstMatrix, *src, clippedSrcRect, + if (this->shouldTileImageID(bitmap.getGenerationID(), bitmap.getSubset(), + this->localToDevice(), srcToDstMatrix, sampleState, src, + maxTileSizeForFilter, &tileSize, &clippedSrcRect)) { + this->drawTiledBitmap(bitmap, this->localToDevice(), srcToDstMatrix, *src, clippedSrcRect, sampleState, paint, constraint, tileSize, doBicubic); return; } } GrBitmapTextureMaker maker(fContext.get(), bitmap); - this->drawTextureProducer(&maker, src, dst, constraint, this->ctm(), paint, true); + this->drawTextureProducer(&maker, src, dst, constraint, this->localToDevice(), paint, true); } sk_sp SkGpuDevice::makeSpecial(const SkBitmap& bitmap) { @@ -1199,7 +1198,7 @@ sk_sp SkGpuDevice::makeSpecial(const SkBitmap& bitmap) { return nullptr; } - const SkIRect rect = SkIRect::MakeWH(proxy->width(), proxy->height()); + const SkIRect rect = SkIRect::MakeSize(proxy->dimensions()); // GrMakeCachedBitmapProxy creates a tight copy of 'bitmap' so we don't have to subset // the special image @@ -1254,7 +1253,6 @@ sk_sp SkGpuDevice::snapSpecial(const SkIRect& subset, bool force // texture that matches the device contents proxy = GrSurfaceProxy::Copy(fContext.get(), rtc->asSurfaceProxy(), - rtc->colorInfo().colorType(), GrMipMapped::kNo, // Don't auto generate mips subset, SkBackingFit::kApprox, @@ -1265,7 +1263,7 @@ sk_sp SkGpuDevice::snapSpecial(const SkIRect& subset, bool force // Since this copied only the requested subset, the special image wrapping the proxy no // longer needs the original subset. - finalSubset = SkIRect::MakeSize(proxy->isize()); + finalSubset = SkIRect::MakeSize(proxy->dimensions()); } GrColorType ct = SkColorTypeToGrColorType(this->imageInfo().colorType()); @@ -1322,8 +1320,7 @@ void SkGpuDevice::drawImageNine(const SkImage* image, if (sk_sp proxy = as_IB(image)->refPinnedTextureProxy(this->context(), &pinnedUniqueID)) { GrTextureAdjuster adjuster(this->context(), std::move(proxy), - SkColorTypeToGrColorType(image->colorType()), image->alphaType(), - pinnedUniqueID, image->colorSpace()); + image->imageInfo().colorInfo(), pinnedUniqueID); this->drawProducerLattice(&adjuster, std::move(iter), dst, paint); } else { SkBitmap bm; @@ -1369,7 +1366,7 @@ void SkGpuDevice::drawProducerLattice(GrTextureProducer* producer, auto csxf = GrColorSpaceXform::Make(producer->colorSpace(), producer->alphaType(), dstColorSpace, kPremul_SkAlphaType); - fRenderTargetContext->drawImageLattice(this->clip(), std::move(grPaint), this->ctm(), + fRenderTargetContext->drawImageLattice(this->clip(), std::move(grPaint), this->localToDevice(), std::move(proxy), producer->colorType(), std::move(csxf), filter, std::move(iter), dst); } @@ -1383,8 +1380,7 @@ void SkGpuDevice::drawImageLattice(const SkImage* image, if (sk_sp proxy = as_IB(image)->refPinnedTextureProxy(this->context(), &pinnedUniqueID)) { GrTextureAdjuster adjuster(this->context(), std::move(proxy), - SkColorTypeToGrColorType(image->colorType()), image->alphaType(), - pinnedUniqueID, image->colorSpace()); + image->imageInfo().colorInfo(), pinnedUniqueID); this->drawProducerLattice(&adjuster, std::move(iter), dst, paint); } else { SkBitmap bm; @@ -1490,7 +1486,7 @@ void SkGpuDevice::wireframeVertices(SkVertices::VertexMode vmode, int vertexCoun GrPrimitiveType primitiveType = GrPrimitiveType::kLines; fRenderTargetContext->drawVertices(this->clip(), std::move(grPaint), - this->ctm(), + this->localToDevice(), builder.detach(), bones, boneCount, @@ -1513,11 +1509,11 @@ void SkGpuDevice::drawVertices(const SkVertices* vertices, const SkVertices::Bon paint); return; } - if (!init_vertices_paint(fContext.get(), fRenderTargetContext->colorInfo(), paint, this->ctm(), - mode, hasTexs, hasColors, &grPaint)) { + if (!init_vertices_paint(fContext.get(), fRenderTargetContext->colorInfo(), paint, + this->localToDevice(), mode, hasTexs, hasColors, &grPaint)) { return; } - fRenderTargetContext->drawVertices(this->clip(), std::move(grPaint), this->ctm(), + fRenderTargetContext->drawVertices(this->clip(), std::move(grPaint), this->localToDevice(), sk_ref_sp(const_cast(vertices)), bones, boneCount); } @@ -1529,7 +1525,7 @@ void SkGpuDevice::drawShadow(const SkPath& path, const SkDrawShadowRec& rec) { ASSERT_SINGLE_OWNER GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawShadow", fContext.get()); - if (!fRenderTargetContext->drawFastShadow(this->clip(), this->ctm(), path, rec)) { + if (!fRenderTargetContext->drawFastShadow(this->clip(), this->localToDevice(), path, rec)) { // failed to find an accelerated case this->INHERITED::drawShadow(path, rec); } @@ -1549,18 +1545,18 @@ void SkGpuDevice::drawAtlas(const SkImage* atlas, const SkRSXform xform[], GrPaint grPaint; if (colors) { if (!SkPaintToGrPaintWithXfermode(this->context(), fRenderTargetContext->colorInfo(), p, - this->ctm(), (SkBlendMode)mode, &grPaint)) { + this->localToDevice(), (SkBlendMode)mode, &grPaint)) { return; } } else { - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), p, this->ctm(), - &grPaint)) { + if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), p, + this->localToDevice(), &grPaint)) { return; } } fRenderTargetContext->drawAtlas( - this->clip(), std::move(grPaint), this->ctm(), count, xform, texRect, colors); + this->clip(), std::move(grPaint), this->localToDevice(), count, xform, texRect, colors); } /////////////////////////////////////////////////////////////////////////////// @@ -1570,12 +1566,11 @@ void SkGpuDevice::drawGlyphRunList(const SkGlyphRunList& glyphRunList) { GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawGlyphRunList", fContext.get()); // Check for valid input - const SkMatrix& ctm = this->ctm(); - if (!ctm.isFinite() || !glyphRunList.allFontsFinite()) { + if (!this->localToDevice().isFinite() || !glyphRunList.allFontsFinite()) { return; } - fRenderTargetContext->drawGlyphRunList(this->clip(), ctm, glyphRunList); + fRenderTargetContext->drawGlyphRunList(this->clip(), this->localToDevice(), glyphRunList); } /////////////////////////////////////////////////////////////////////////////// diff --git a/third_party/skia/src/gpu/SkGpuDevice_drawTexture.cpp b/third_party/skia/src/gpu/SkGpuDevice_drawTexture.cpp index 20c4976fd4c5..72fbbfe88b6f 100644 --- a/third_party/skia/src/gpu/SkGpuDevice_drawTexture.cpp +++ b/third_party/skia/src/gpu/SkGpuDevice_drawTexture.cpp @@ -201,7 +201,7 @@ static void draw_texture(GrRenderTargetContext* rtc, const GrClip& clip, const S // 1/2 pixel for AA and 1/2 pixel for bilerp float buffer = 0.5f * (aa == GrAA::kYes) + 0.5f * (filter == GrSamplerState::Filter::kBilerp); - SkRect safeBounds = SkRect::MakeWH(proxy->width(), proxy->height()); + SkRect safeBounds = proxy->getBoundsRect(); safeBounds.inset(buffer, buffer); if (!safeBounds.contains(srcRect)) { constraint = SkCanvas::kStrict_SrcRectConstraint; @@ -220,14 +220,15 @@ static void draw_texture(GrRenderTargetContext* rtc, const GrClip& clip, const S SkPoint srcQuad[4]; GrMapRectPoints(dstRect, srcRect, dstClip, srcQuad, 4); - rtc->drawTextureQuad(clip, std::move(proxy), srcColorInfo.colorType(), filter, - paint.getBlendMode(), color, srcQuad, dstClip, aa, aaFlags, + rtc->drawTextureQuad(clip, std::move(proxy), srcColorInfo.colorType(), + srcColorInfo.alphaType(), filter, paint.getBlendMode(), color, srcQuad, + dstClip, aa, aaFlags, constraint == SkCanvas::kStrict_SrcRectConstraint ? &srcRect : nullptr, ctm, std::move(textureXform)); } else { - rtc->drawTexture(clip, std::move(proxy), srcColorInfo.colorType(), filter, - paint.getBlendMode(), color, srcRect, dstRect, aa, aaFlags, constraint, - ctm, std::move(textureXform)); + rtc->drawTexture(clip, std::move(proxy), srcColorInfo.colorType(), srcColorInfo.alphaType(), + filter, paint.getBlendMode(), color, srcRect, dstRect, aa, aaFlags, + constraint, ctm, std::move(textureXform)); } } @@ -376,7 +377,7 @@ void SkGpuDevice::drawImageQuad(const SkImage* image, const SkRect* srcRect, con bool attemptDrawTexture = !useDecal; // rtc->drawTexture() only clamps // Get final CTM matrix - SkMatrix ctm = this->ctm(); + SkMatrix ctm = this->localToDevice(); if (preViewMatrix) { ctm.preConcat(*preViewMatrix); } @@ -424,11 +425,10 @@ void SkGpuDevice::drawImageQuad(const SkImage* image, const SkRect* srcRect, con SkBitmap bm; if (this->shouldTileImage(image, &src, constraint, paint.getFilterQuality(), ctm, srcToDst)) { // only support tiling as bitmap at the moment, so force raster-version - if (!as_IB(image)->getROPixels(&bm)) { + if (as_IB(image)->getROPixels(&bm)) { + this->drawBitmapRect(bm, &src, dst, paint, constraint); return; } - this->drawBitmapRect(bm, &src, dst, paint, constraint); - return; } // This is the funnel for all non-tiled bitmap/image draw calls. Log a histogram entry. @@ -497,8 +497,8 @@ void SkGpuDevice::drawEdgeAAImageSet(const SkCanvas::ImageSetEntry set[], int co set[base].fImage->colorSpace(), set[base].fImage->alphaType(), fRenderTargetContext->colorInfo().colorSpace(), kPremul_SkAlphaType); fRenderTargetContext->drawTextureSet(this->clip(), textures.get() + base, n, - filter, mode, GrAA::kYes, constraint, this->ctm(), - std::move(textureXform)); + filter, mode, GrAA::kYes, constraint, + this->localToDevice(), std::move(textureXform)); } }; int dstClipIndex = 0; @@ -552,8 +552,11 @@ void SkGpuDevice::drawEdgeAAImageSet(const SkCanvas::ImageSetEntry set[], int co continue; } - textures[i].fProxy = std::move(proxy); - textures[i].fSrcColorType = SkColorTypeToGrColorType(image->colorType()); + // TODO: have refPinnedTextureProxy and asTextureProxyRef return GrSurfaceProxyViews. + GrSurfaceOrigin origin = proxy->origin(); + const GrSwizzle& swizzle = proxy->textureSwizzle(); + textures[i].fProxyView = {std::move(proxy), origin, swizzle}; + textures[i].fSrcAlphaType = image->alphaType(); textures[i].fSrcRect = set[i].fSrcRect; textures[i].fDstRect = set[i].fDstRect; textures[i].fDstClipQuad = clip; @@ -563,8 +566,9 @@ void SkGpuDevice::drawEdgeAAImageSet(const SkCanvas::ImageSetEntry set[], int co textures[i].fAAFlags = SkToGrQuadAAFlags(set[i].fAAFlags); if (n > 0 && - (!GrTextureProxy::ProxiesAreCompatibleAsDynamicState(textures[i].fProxy.get(), - textures[base].fProxy.get()) || + (!GrTextureProxy::ProxiesAreCompatibleAsDynamicState( + textures[i].fProxyView.proxy(), + textures[base].fProxyView.proxy()) || set[i].fImage->alphaType() != set[base].fImage->alphaType() || !SkColorSpace::Equals(set[i].fImage->colorSpace(), set[base].fImage->colorSpace()))) { draw(); @@ -591,8 +595,8 @@ void SkGpuDevice::drawTextureProducer(GrTextureProducer* producer, SkRect src; SkRect dst; SkMatrix srcToDst; - ImageDrawMode mode = optimize_sample_area(SkISize::Make(producer->width(), producer->height()), - srcRect, dstRect, nullptr, &src, &dst, &srcToDst); + ImageDrawMode mode = optimize_sample_area(producer->dimensions(), srcRect, dstRect, nullptr, + &src, &dst, &srcToDst); if (mode == ImageDrawMode::kSkip) { return; } diff --git a/third_party/skia/src/gpu/SkGr.cpp b/third_party/skia/src/gpu/SkGr.cpp index bdb3c3c95d7b..0472ee2e88be 100644 --- a/third_party/skia/src/gpu/SkGr.cpp +++ b/third_party/skia/src/gpu/SkGr.cpp @@ -132,8 +132,8 @@ sk_sp GrCopyBaseMipMapToTextureProxy(GrRecordingContext* ctx, if (!ctx->priv().caps()->isFormatCopyable(baseProxy->backendFormat())) { return nullptr; } - return GrSurfaceProxy::Copy(ctx, baseProxy, srcColorType, GrMipMapped::kYes, - SkBackingFit::kExact, SkBudgeted::kYes); + return GrSurfaceProxy::Copy(ctx, baseProxy, GrMipMapped::kYes, SkBackingFit::kExact, + SkBudgeted::kYes); } sk_sp GrRefCachedBitmapTextureProxy(GrRecordingContext* ctx, @@ -299,6 +299,7 @@ static inline bool blend_requires_shader(const SkBlendMode mode) { #ifndef SK_IGNORE_GPU_DITHER static inline int32_t dither_range_type_for_config(GrColorType dstColorType) { switch (dstColorType) { + case GrColorType::kUnknown: case GrColorType::kGray_8: case GrColorType::kRGBA_8888: case GrColorType::kRGB_888x: @@ -307,12 +308,6 @@ static inline int32_t dither_range_type_for_config(GrColorType dstColorType) { case GrColorType::kRG_1616: case GrColorType::kRGBA_16161616: case GrColorType::kRG_F16: - return 0; - case GrColorType::kBGR_565: - return 1; - case GrColorType::kABGR_4444: - return 2; - case GrColorType::kUnknown: case GrColorType::kRGBA_8888_SRGB: case GrColorType::kRGBA_1010102: case GrColorType::kAlpha_F16: @@ -324,7 +319,16 @@ static inline int32_t dither_range_type_for_config(GrColorType dstColorType) { case GrColorType::kAlpha_16: case GrColorType::kAlpha_F32xxx: case GrColorType::kGray_8xxx: - return -1; + case GrColorType::kRGB_888: + case GrColorType::kR_8: + case GrColorType::kR_16: + case GrColorType::kR_F16: + case GrColorType::kGray_F16: + return 0; + case GrColorType::kBGR_565: + return 1; + case GrColorType::kABGR_4444: + return 2; } SkUNREACHABLE; } diff --git a/third_party/skia/src/gpu/SkGr.h b/third_party/skia/src/gpu/SkGr.h index 79a68822b91b..05044af9a7b0 100644 --- a/third_party/skia/src/gpu/SkGr.h +++ b/third_party/skia/src/gpu/SkGr.h @@ -65,15 +65,6 @@ SkPMColor4f SkColorToPMColor4f(SkColor, const GrColorInfo&); /** Converts an SkColor4f to the destination color space. */ SkColor4f SkColor4fPrepForDst(SkColor4f, const GrColorInfo&); -/** Returns true if half-floats are required to store the color in a vertex (and half-floats - are supported). */ -static inline bool SkPMColor4fNeedsWideColor(SkPMColor4f color, GrClampType clampType, - const GrCaps& caps) { - return GrClampType::kNone == clampType && - caps.halfFloatVertexAttributeSupport() && - !color.fitsInBytes(); -} - //////////////////////////////////////////////////////////////////////////////// // Paint conversion diff --git a/third_party/skia/src/gpu/ccpr/GrCCAtlas.cpp b/third_party/skia/src/gpu/ccpr/GrCCAtlas.cpp index e5e13ae4118d..d1e3d14ff0aa 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCAtlas.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCAtlas.cpp @@ -126,7 +126,7 @@ GrCCAtlas::GrCCAtlas(CoverageType coverageType, const Specs& specs, const GrCaps desc, format, GrRenderable::kYes, sampleCount, GrMipMapped::kNo, SkBudgeted::kYes, GrProtected::kNo); } - return fBackingTexture; + return GrSurfaceProxy::LazyCallbackResult(fBackingTexture); }, fCoverageType, caps, GrSurfaceProxy::UseAllocator::kNo); } @@ -227,7 +227,7 @@ std::unique_ptr GrCCAtlas::makeRenderTargetContext( // Finalize the content size of our proxy. The GPU can potentially make optimizations if it // knows we only intend to write out a smaller sub-rectangle of the backing texture. - fTextureProxy->priv().setLazySize(fDrawBounds.width(), fDrawBounds.height()); + fTextureProxy->priv().setLazyDimensions(fDrawBounds); if (backingTexture) { #ifdef SK_DEBUG diff --git a/third_party/skia/src/gpu/ccpr/GrCCAtlas.h b/third_party/skia/src/gpu/ccpr/GrCCAtlas.h index ac7faaa41da1..49a26f630eb2 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCAtlas.h +++ b/third_party/skia/src/gpu/ccpr/GrCCAtlas.h @@ -65,7 +65,7 @@ class GrCCAtlas { SkUNREACHABLE; } - using LazyInstantiateAtlasCallback = std::function( + using LazyInstantiateAtlasCallback = std::function; static sk_sp MakeLazyAtlasProxy(const LazyInstantiateAtlasCallback&, diff --git a/third_party/skia/src/gpu/ccpr/GrCCClipPath.cpp b/third_party/skia/src/gpu/ccpr/GrCCClipPath.cpp index 9e86d2e2d24e..fc0bd9b2b021 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCClipPath.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCClipPath.cpp @@ -29,7 +29,7 @@ void GrCCClipPath::init( if (!textureProxy || !textureProxy->instantiate(resourceProvider)) { fAtlasScale = fAtlasTranslate = {0, 0}; SkDEBUGCODE(fHasAtlasTransform = true); - return sk_sp(); + return GrSurfaceProxy::LazyCallbackResult(); } sk_sp texture = sk_ref_sp(textureProxy->peekTexture()); @@ -43,7 +43,12 @@ void GrCCClipPath::init( fDevToAtlasOffset.fY * fAtlasScale.y()); SkDEBUGCODE(fHasAtlasTransform = true); - return texture; + // 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 + // textures use for path mask caching. + return GrSurfaceProxy::LazyCallbackResult( + std::move(texture), true, + GrSurfaceProxy::LazyInstantiationKeyMode::kUnsynced); }, atlasCoverageType, caps, GrSurfaceProxy::UseAllocator::kYes); diff --git a/third_party/skia/src/gpu/ccpr/GrCCClipProcessor.cpp b/third_party/skia/src/gpu/ccpr/GrCCClipProcessor.cpp index 75535dd58aba..a4656fa6dedf 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCClipProcessor.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCClipProcessor.cpp @@ -20,7 +20,7 @@ GrCCClipProcessor::GrCCClipProcessor(const GrCCClipPath* clipPath, IsCoverageCou , fClipPath(clipPath) , fIsCoverageCount(IsCoverageCount::kYes == isCoverageCount) , fMustCheckBounds(MustCheckBounds::kYes == mustCheckBounds) - , fAtlasAccess(sk_ref_sp(fClipPath->atlasLazyProxy()), GrSamplerState::ClampNearest()) { + , fAtlasAccess(sk_ref_sp(fClipPath->atlasLazyProxy())) { SkASSERT(fAtlasAccess.proxy()); this->setTextureSamplerCnt(1); } diff --git a/third_party/skia/src/gpu/ccpr/GrCCCoverageProcessor.cpp b/third_party/skia/src/gpu/ccpr/GrCCCoverageProcessor.cpp index 6abb04e859ac..be904973c173 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCCoverageProcessor.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCCoverageProcessor.cpp @@ -203,12 +203,16 @@ void GrCCCoverageProcessor::draw( dynamicStateArrays.fScissorRects = scissorRects; GrOpsRenderPass* renderPass = flushState->opsRenderPass(); - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - pipeline, - *this, + GrPrimitiveType primitiveType = this->primType(); + + GrProgramInfo programInfo(flushState->proxy()->numSamples(), + flushState->proxy()->numStencilSamples(), + flushState->proxy()->backendFormat(), + flushState->view()->origin(), + &pipeline, + this, nullptr, - &dynamicStateArrays, 0); + &dynamicStateArrays, 0, primitiveType); renderPass->draw(programInfo, meshes, meshCount, drawBounds); diff --git a/third_party/skia/src/gpu/ccpr/GrCCCoverageProcessor.h b/third_party/skia/src/gpu/ccpr/GrCCCoverageProcessor.h index 5fdb488ea5a2..e16227b055b7 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCCoverageProcessor.h +++ b/third_party/skia/src/gpu/ccpr/GrCCCoverageProcessor.h @@ -14,6 +14,7 @@ #include "src/gpu/GrPipeline.h" #include "src/gpu/GrShaderCaps.h" #include "src/gpu/glsl/GrGLSLGeometryProcessor.h" +#include "src/gpu/glsl/GrGLSLShaderBuilder.h" #include "src/gpu/glsl/GrGLSLVarying.h" class GrGLSLFPFragmentBuilder; @@ -123,6 +124,8 @@ class GrCCCoverageProcessor : public GrGeometryProcessor { virtual void draw(GrOpFlushState*, const GrPipeline&, const SkIRect scissorRects[], const GrMesh[], int meshCount, const SkRect& drawBounds) const; + virtual GrPrimitiveType primType() const = 0; + // The Shader provides code to calculate each pixel's coverage in a RenderPass. It also // provides details about shape-specific geometry. class Shader { diff --git a/third_party/skia/src/gpu/ccpr/GrCCDrawPathsOp.cpp b/third_party/skia/src/gpu/ccpr/GrCCDrawPathsOp.cpp index 06556c493dfb..2aa6b59dfd97 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCDrawPathsOp.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCDrawPathsOp.cpp @@ -17,9 +17,8 @@ #include "src/gpu/ccpr/GrOctoBounds.h" static bool has_coord_transforms(const GrPaint& paint) { - GrFragmentProcessor::Iter iter(paint); - while (const GrFragmentProcessor* fp = iter.next()) { - if (!fp->coordTransforms().empty()) { + for (const auto& fp : GrFragmentProcessor::PaintCRange(paint)) { + if (!fp.coordTransforms().empty()) { return true; } } @@ -433,10 +432,13 @@ void GrCCDrawPathsOp::onExecute(GrOpFlushState* flushState, const SkRect& chainB GrPipeline::InitArgs initArgs; initArgs.fCaps = &flushState->caps(); - initArgs.fDstProxy = flushState->drawOpArgs().dstProxy(); + initArgs.fDstProxyView = flushState->drawOpArgs().dstProxyView(); initArgs.fOutputSwizzle = flushState->drawOpArgs().outputSwizzle(); auto clip = flushState->detachAppliedClip(); - GrPipeline::FixedDynamicState fixedDynamicState(clip.scissorState().rect()); + GrPipeline::FixedDynamicState fixedDynamicState; + if (clip.scissorState().enabled()) { + fixedDynamicState.fScissorRect = clip.scissorState().rect(); + } GrPipeline pipeline(initArgs, std::move(fProcessors), std::move(clip)); int baseInstance = fBaseInstance; @@ -445,16 +447,15 @@ void GrCCDrawPathsOp::onExecute(GrOpFlushState* flushState, const SkRect& chainB for (const InstanceRange& range : fInstanceRanges) { SkASSERT(range.fEndInstanceIdx > baseInstance); - const GrTextureProxy* atlas = range.fAtlasProxy; - SkASSERT(atlas->isInstantiated()); - - GrCCPathProcessor pathProc( - range.fCoverageMode, atlas->peekTexture(), atlas->textureSwizzle(), atlas->origin(), - fViewMatrixIfUsingLocalCoords); - GrTextureProxy* atlasProxy = range.fAtlasProxy; - fixedDynamicState.fPrimitiveProcessorTextures = &atlasProxy; - pathProc.drawPaths(flushState, pipeline, &fixedDynamicState, *resources, baseInstance, - range.fEndInstanceIdx, this->bounds()); + GrSurfaceProxy* atlas = range.fAtlasProxy; + if (atlas->isInstantiated()) { // Instantiation can fail in exceptional circumstances. + GrCCPathProcessor pathProc(range.fCoverageMode, atlas->peekTexture(), + atlas->textureSwizzle(), atlas->origin(), + fViewMatrixIfUsingLocalCoords); + fixedDynamicState.fPrimitiveProcessorTextures = &atlas; + pathProc.drawPaths(flushState, pipeline, &fixedDynamicState, *resources, baseInstance, + range.fEndInstanceIdx, this->bounds()); + } baseInstance = range.fEndInstanceIdx; } diff --git a/third_party/skia/src/gpu/ccpr/GrCCFiller.cpp b/third_party/skia/src/gpu/ccpr/GrCCFiller.cpp index 43b6c6845266..683b31a9d302 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCFiller.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCFiller.cpp @@ -134,12 +134,12 @@ void GrCCFiller::PathInfo::tessellateFan( // We use "winding" fill type right now because we are producing a coverage count, and must // fill in every region that has non-zero wind. The path processor will convert coverage // count to the appropriate fill type later. - fan.setFillType(SkPath::kWinding_FillType); + fan.setFillType(SkPathFillType::kWinding); } else { // When counting winding numbers in the stencil buffer, it works to use even/odd for the fan // tessellation (where applicable). But we need to strip out inverse fill info because // inverse-ness gets accounted for later on. - fan.setFillType(SkPath::ConvertToNonInverseFillType(originalPath.getFillType())); + fan.setFillType(SkPathFillType_ConvertToNonInverse(originalPath.getNewFillType())); } SkASSERT(Verb::kBeginPath == verbs[verbsIdx]); for (int i = verbsIdx + 1; i < verbs.count(); ++i) { @@ -204,12 +204,20 @@ void GrCCFiller::PathInfo::tessellateFan( } int weight = abs(tessWinding); - SkASSERT(SkPath::kEvenOdd_FillType != fan.getFillType() || weight == 1); + if (SkPathFillType::kEvenOdd == fan.getNewFillType()) { + SkASSERT(Algorithm::kCoverageCount != algorithm); // Covg. count always uses winding. + if (weight != 1) { + // The tessellator doesn't wrap weights modulo 2 when we request even/odd fill type. + SkASSERT(weight & 1); // Even wind regions are empty and should have been omitted. + weight = 1; + } + } if (weight > 1 && Algorithm::kCoverageCount == algorithm) { ++newTriangleCounts->fWeightedTriangles; } else { newTriangleCounts->fTriangles += weight; } + vertices[i].fWinding = weight; } fFanTessellation.reset(static_cast(vertices)); @@ -286,7 +294,7 @@ void GrCCFiller::emitTessellatedFan( TriPointInstance::Ordering ordering, TriPointInstance* triPointInstanceData, QuadPointInstance* quadPointInstanceData, GrCCFillGeometry::PrimitiveTallies* indices) { for (int i = 0; i < numVertices; i += 3) { - int weight = abs(vertices[i].fWinding); + int weight = vertices[i].fWinding; SkASSERT(weight >= 1); if (weight > 1 && Algorithm::kStencilWindingCount != fAlgorithm) { quadPointInstanceData[indices->fWeightedTriangles++].setW( diff --git a/third_party/skia/src/gpu/ccpr/GrCCPRCoverageOpsBuilder.cpp b/third_party/skia/src/gpu/ccpr/GrCCPRCoverageOpsBuilder.cpp deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/gpu/ccpr/GrCCPathProcessor.cpp b/third_party/skia/src/gpu/ccpr/GrCCPathProcessor.cpp index 9fba60df0531..4c4b30042bcb 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCPathProcessor.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCPathProcessor.cpp @@ -84,9 +84,8 @@ GrCCPathProcessor::GrCCPathProcessor(CoverageMode coverageMode, const GrTexture* const SkMatrix& viewMatrixIfUsingLocalCoords) : INHERITED(kGrCCPathProcessor_ClassID) , fCoverageMode(coverageMode) - , fAtlasAccess(atlasTexture->texturePriv().textureType(), GrSamplerState::ClampNearest(), - swizzle) - , fAtlasSize(SkISize::Make(atlasTexture->width(), atlasTexture->height())) + , fAtlasAccess(GrSamplerState::ClampNearest(), atlasTexture->backendFormat(), swizzle) + , fAtlasDimensions(atlasTexture->dimensions()) , fAtlasOrigin(atlasOrigin) { // TODO: Can we just assert that atlas has GrCCAtlas::kTextureOrigin and remove fAtlasOrigin? this->setInstanceAttributes(kInstanceAttribs, SK_ARRAY_COUNT(kInstanceAttribs)); @@ -106,11 +105,12 @@ class GrCCPathProcessor::Impl : public GrGLSLGeometryProcessor { private: void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const auto& proc = primProc.cast(); - pdman.set2f( - fAtlasAdjustUniform, 1.0f / proc.fAtlasSize.fWidth, 1.0f / proc.fAtlasSize.fHeight); - this->setTransformDataHelper(proc.fLocalMatrix, pdman, &transformIter); + pdman.set2f(fAtlasAdjustUniform, + 1.0f / proc.fAtlasDimensions.fWidth, + 1.0f / proc.fAtlasDimensions.fHeight); + this->setTransformDataHelper(proc.fLocalMatrix, pdman, transformRange); } GrGLSLUniformHandler::UniformHandle fAtlasAdjustUniform; @@ -141,12 +141,14 @@ void GrCCPathProcessor::drawPaths(GrOpFlushState* flushState, const GrPipeline& baseInstance, enablePrimitiveRestart); mesh.setVertexData(resources.refVertexBuffer()); - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - pipeline, - *this, + GrProgramInfo programInfo(flushState->proxy()->numSamples(), + flushState->proxy()->numStencilSamples(), + flushState->proxy()->backendFormat(), + flushState->view()->origin(), + &pipeline, + this, fixedDynamicState, - nullptr, 0); + nullptr, 0, primitiveType); flushState->opsRenderPass()->draw(programInfo, &mesh, 1, bounds); } diff --git a/third_party/skia/src/gpu/ccpr/GrCCPathProcessor.h b/third_party/skia/src/gpu/ccpr/GrCCPathProcessor.h index 6ad872043e89..7fcb256660ea 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCPathProcessor.h +++ b/third_party/skia/src/gpu/ccpr/GrCCPathProcessor.h @@ -80,7 +80,7 @@ class GrCCPathProcessor : public GrGeometryProcessor { const CoverageMode fCoverageMode; const TextureSampler fAtlasAccess; - SkISize fAtlasSize; + SkISize fAtlasDimensions; GrSurfaceOrigin fAtlasOrigin; SkMatrix fLocalMatrix; diff --git a/third_party/skia/src/gpu/ccpr/GrCCPerFlushResources.cpp b/third_party/skia/src/gpu/ccpr/GrCCPerFlushResources.cpp index 4174dba318c9..ae9e6d4a4121 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCPerFlushResources.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCPerFlushResources.cpp @@ -81,7 +81,7 @@ class CopyAtlasOp : public AtlasOp { void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { SkASSERT(fSrcProxy); - auto srcProxy = fSrcProxy.get(); + GrSurfaceProxy* srcProxy = fSrcProxy.get(); SkASSERT(srcProxy->isInstantiated()); auto coverageMode = GrCCPathProcessor::GetCoverageMode( diff --git a/third_party/skia/src/gpu/ccpr/GrCCStroker.cpp b/third_party/skia/src/gpu/ccpr/GrCCStroker.cpp index cbfa5ae7f285..000e530b11d3 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCStroker.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCCStroker.cpp @@ -70,7 +70,7 @@ inline void CubicStrokeInstance::set(const Sk4f& X, const Sk4f& Y, float dx, flo // for seamless integration with the connecting geometry. class LinearStrokeProcessor : public GrGeometryProcessor { public: - LinearStrokeProcessor() : GrGeometryProcessor(kLinearStrokeProcessor_ClassID) { + LinearStrokeProcessor() : INHERITED(kLinearStrokeProcessor_ClassID) { this->setInstanceAttributes(kInstanceAttribs, 2); #ifdef SK_DEBUG using Instance = LinearStrokeInstance; @@ -89,13 +89,15 @@ class LinearStrokeProcessor : public GrGeometryProcessor { class Impl : public GrGLSLGeometryProcessor { void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - FPCoordTransformIter&&) override {} + const CoordTransformRange&) override {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override; }; GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override { return new Impl(); } + + typedef GrGeometryProcessor INHERITED; }; void LinearStrokeProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { @@ -180,7 +182,7 @@ class CubicStrokeProcessor : public GrGeometryProcessor { class Impl : public GrGLSLGeometryProcessor { void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - FPCoordTransformIter&&) override {} + const CoordTransformRange&) override {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override; }; @@ -777,12 +779,14 @@ void GrCCStroker::flushBufferedMeshesAsStrokes(const GrPrimitiveProcessor& proce GrPipeline::DynamicStateArrays dynamicStateArrays; dynamicStateArrays.fScissorRects = fScissorsBuffer.begin(); - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - pipeline, - processor, + GrProgramInfo programInfo(flushState->proxy()->numSamples(), + flushState->proxy()->numStencilSamples(), + flushState->proxy()->backendFormat(), + flushState->view()->origin(), + &pipeline, + &processor, nullptr, - &dynamicStateArrays, 0); + &dynamicStateArrays, 0, GrPrimitiveType::kTriangleStrip); flushState->opsRenderPass()->draw(programInfo, fMeshesBuffer.begin(), fMeshesBuffer.count(), diff --git a/third_party/skia/src/gpu/ccpr/GrCCStroker.h b/third_party/skia/src/gpu/ccpr/GrCCStroker.h index 985ac3840067..37e6840a7652 100644 --- a/third_party/skia/src/gpu/ccpr/GrCCStroker.h +++ b/third_party/skia/src/gpu/ccpr/GrCCStroker.h @@ -97,8 +97,8 @@ class GrCCStroker { void appendStrokeMeshesToBuffers(int numSegmentsLog2, const Batch&, const InstanceTallies* startIndices[2], int startScissorSubBatch, const SkIRect& drawBounds) const; - void flushBufferedMeshesAsStrokes(const GrPrimitiveProcessor&, GrOpFlushState*, const - GrPipeline&, const SkIRect& drawBounds) const; + void flushBufferedMeshesAsStrokes(const GrPrimitiveProcessor&, GrOpFlushState*, + const GrPipeline&, const SkIRect& drawBounds) const; template void drawConnectingGeometry(GrOpFlushState*, const GrPipeline&, diff --git a/third_party/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp b/third_party/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp index 4e86d7e07147..a1c044ed3e02 100644 --- a/third_party/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp +++ b/third_party/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp @@ -43,7 +43,7 @@ bool GrCoverageCountingPathRenderer::IsSupported(const GrCaps& caps, CoverageTyp if (!caps.driverBlacklistMSAACCPR() && caps.internalMultisampleCount(defaultA8Format) > 1 && caps.sampleLocationsSupport() && - shaderCaps.sampleVariablesStencilSupport()) { + shaderCaps.sampleMaskSupport()) { if (coverageType) { *coverageType = CoverageType::kA8_Multisample; } diff --git a/third_party/skia/src/gpu/ccpr/GrGSCoverageProcessor.cpp b/third_party/skia/src/gpu/ccpr/GrGSCoverageProcessor.cpp index 1398d5b5f029..09941fd3cfa8 100644 --- a/third_party/skia/src/gpu/ccpr/GrGSCoverageProcessor.cpp +++ b/third_party/skia/src/gpu/ccpr/GrGSCoverageProcessor.cpp @@ -8,6 +8,7 @@ #include "src/gpu/ccpr/GrGSCoverageProcessor.h" #include "src/gpu/GrMesh.h" +#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" using InputType = GrGLSLGeometryBuilder::InputType; @@ -23,8 +24,8 @@ class GrGSCoverageProcessor::Impl : public GrGLSLGeometryProcessor { virtual bool hasCoverage(const GrGSCoverageProcessor& proc) const { return false; } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - FPCoordTransformIter&& transformIter) final { - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + const CoordTransformRange& transformRange) final { + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) final { @@ -39,7 +40,7 @@ class GrGSCoverageProcessor::Impl : public GrGLSLGeometryProcessor { this->emitGeometryShader(proc, varyingHandler, args.fGeomBuilder, args.fRTAdjustName); varyingHandler->emitAttributes(proc); varyingHandler->setNoPerspective(); - SkASSERT(!args.fFPCoordTransformHandler->nextCoordTransform()); + SkASSERT(!*args.fFPCoordTransformHandler); // Fragment shader. GrGLSLFPFragmentBuilder* f = args.fFragBuilder; @@ -446,8 +447,7 @@ void GrGSCoverageProcessor::draw( // and does edge AA. The second pass does touch up on corner pixels. for (int i = 0; i < 2; ++i) { fSubpass = (Subpass) i; - this->GrCCCoverageProcessor::draw( - flushState, pipeline, scissorRects, meshes, meshCount, drawBounds); + INHERITED::draw(flushState, pipeline, scissorRects, meshes, meshCount, drawBounds); } } diff --git a/third_party/skia/src/gpu/ccpr/GrGSCoverageProcessor.h b/third_party/skia/src/gpu/ccpr/GrGSCoverageProcessor.h index 2e3f7dc24834..48df1b5c4991 100644 --- a/third_party/skia/src/gpu/ccpr/GrGSCoverageProcessor.h +++ b/third_party/skia/src/gpu/ccpr/GrGSCoverageProcessor.h @@ -33,6 +33,8 @@ class GrGSCoverageProcessor : public GrCCCoverageProcessor { void draw(GrOpFlushState*, const GrPipeline&, const SkIRect scissorRects[], const GrMesh[], int meshCount, const SkRect& drawBounds) const override; + GrPrimitiveType primType() const final { return GrPrimitiveType::kLines; } + GrGLSLPrimitiveProcessor* onCreateGLSLInstance(std::unique_ptr) const override; // The geometry shader impl draws primitives in two subpasses. The first pass fills the interior @@ -49,6 +51,8 @@ class GrGSCoverageProcessor : public GrCCCoverageProcessor { class TriangleHullImpl; class CurveHullImpl; class CornerImpl; + + typedef GrCCCoverageProcessor INHERITED; }; #endif diff --git a/third_party/skia/src/gpu/ccpr/GrSampleMaskProcessor.cpp b/third_party/skia/src/gpu/ccpr/GrSampleMaskProcessor.cpp index 41da1f9bf722..d40fd7783682 100644 --- a/third_party/skia/src/gpu/ccpr/GrSampleMaskProcessor.cpp +++ b/third_party/skia/src/gpu/ccpr/GrSampleMaskProcessor.cpp @@ -16,7 +16,7 @@ class GrSampleMaskProcessor::Impl : public GrGLSLGeometryProcessor { private: void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - FPCoordTransformIter&&) override {} + const CoordTransformRange&) override {} void onEmitCode(EmitArgs&, GrGPArgs*) override; @@ -31,7 +31,7 @@ void GrSampleMaskProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { int inputWidth = (4 == numInputPoints || proc.hasInputWeight()) ? 4 : 3; varyingHandler->emitAttributes(proc); - SkASSERT(!args.fFPCoordTransformHandler->nextCoordTransform()); + SkASSERT(!*args.fFPCoordTransformHandler); if (PrimitiveType::kTriangles == proc.fPrimitiveType) { SkASSERT(!proc.hasInstanceAttributes()); // Triangles are drawn with vertex arrays. @@ -112,6 +112,22 @@ void GrSampleMaskProcessor::appendMesh(sk_sp instanceBuffer, } } +GrPrimitiveType GrSampleMaskProcessor::primType() const { + SkASSERT(PrimitiveType::kWeightedTriangles != fPrimitiveType); + + switch (fPrimitiveType) { + case PrimitiveType::kTriangles: + case PrimitiveType::kWeightedTriangles: + return GrPrimitiveType::kTriangles; + case PrimitiveType::kQuadratics: + case PrimitiveType::kCubics: + case PrimitiveType::kConics: + return GrPrimitiveType::kTriangleStrip; + default: + return GrPrimitiveType::kTriangleStrip; + } +} + GrGLSLPrimitiveProcessor* GrSampleMaskProcessor::onCreateGLSLInstance( std::unique_ptr shader) const { return new Impl(std::move(shader)); diff --git a/third_party/skia/src/gpu/ccpr/GrSampleMaskProcessor.h b/third_party/skia/src/gpu/ccpr/GrSampleMaskProcessor.h index 3fdd96f5e806..daf9bed850a6 100644 --- a/third_party/skia/src/gpu/ccpr/GrSampleMaskProcessor.h +++ b/third_party/skia/src/gpu/ccpr/GrSampleMaskProcessor.h @@ -23,6 +23,8 @@ class GrSampleMaskProcessor : public GrCCCoverageProcessor { void appendMesh(sk_sp instanceBuffer, int instanceCount, int baseInstance, SkTArray* out) const override; + GrPrimitiveType primType() const final; + GrGLSLPrimitiveProcessor* onCreateGLSLInstance(std::unique_ptr) const override; SkSTArray<2, Attribute> fInputAttribs; diff --git a/third_party/skia/src/gpu/ccpr/GrStencilAtlasOp.cpp b/third_party/skia/src/gpu/ccpr/GrStencilAtlasOp.cpp index c7ec6da90cda..2fed59ea799f 100644 --- a/third_party/skia/src/gpu/ccpr/GrStencilAtlasOp.cpp +++ b/third_party/skia/src/gpu/ccpr/GrStencilAtlasOp.cpp @@ -21,7 +21,7 @@ namespace { class StencilResolveProcessor : public GrGeometryProcessor { public: - StencilResolveProcessor() : GrGeometryProcessor(kStencilResolveProcessor_ClassID) { + StencilResolveProcessor() : INHERITED(kStencilResolveProcessor_ClassID) { static constexpr Attribute kIBounds = { "ibounds", kShort4_GrVertexAttribType, kShort4_GrSLType}; this->setInstanceAttributes(&kIBounds, 1); @@ -29,10 +29,12 @@ class StencilResolveProcessor : public GrGeometryProcessor { } private: - const char* name() const override { return "GrCCPathProcessor"; } - void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} - GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; + const char* name() const final { return "StencilResolveProcessor"; } + void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const final {} + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const final; class Impl; + + typedef GrGeometryProcessor INHERITED; }; // This processor draws pixel-aligned rectangles directly on top of every path in the atlas. @@ -57,7 +59,7 @@ class StencilResolveProcessor::Impl : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - FPCoordTransformIter&&) override {} + const CoordTransformRange&) override {} }; GrGLSLPrimitiveProcessor* StencilResolveProcessor::createGLSLInstance(const GrShaderCaps&) const { @@ -90,11 +92,13 @@ static constexpr GrUserStencilSettings kIncrDecrStencil( ); // Resolves stencil winding counts to A8 coverage. Leaves stencil values untouched. +// NOTE: For the CCW face we intentionally use "1 == (stencil & 1)" because the contrapositive logic +// (i.e. 0 != ...) causes bugs on Adreno Vulkan. http://skbug.com/9643 static constexpr GrUserStencilSettings kResolveStencilCoverage( GrUserStencilSettings::StaticInitSeparate< - 0x0000, 0x0000, - GrUserStencilTest::kNotEqual, GrUserStencilTest::kNotEqual, - 0xffff, 0x1, + 0x0000, 0x0001, + GrUserStencilTest::kNotEqual, GrUserStencilTest::kEqual, + 0xffff, 0x0001, GrUserStencilOp::kKeep, GrUserStencilOp::kKeep, GrUserStencilOp::kKeep, GrUserStencilOp::kKeep, 0xffff, 0xffff>() @@ -106,7 +110,7 @@ static constexpr GrUserStencilSettings kResolveStencilCoverageAndReset( GrUserStencilSettings::StaticInitSeparate< 0x0000, 0x0000, GrUserStencilTest::kNotEqual, GrUserStencilTest::kNotEqual, - 0xffff, 0x1, + 0xffff, 0x0001, GrUserStencilOp::kZero, GrUserStencilOp::kZero, GrUserStencilOp::kKeep, GrUserStencilOp::kKeep, 0xffff, 0xffff>() @@ -151,12 +155,14 @@ void GrStencilAtlasOp::onExecute(GrOpFlushState* flushState, const SkRect& chain StencilResolveProcessor primProc; - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - resolvePipeline, - primProc, + GrProgramInfo programInfo(flushState->proxy()->numSamples(), + flushState->proxy()->numStencilSamples(), + flushState->proxy()->backendFormat(), + flushState->view()->origin(), + &resolvePipeline, + &primProc, &scissorRectState, - nullptr, 0); + nullptr, 0, GrPrimitiveType::kTriangleStrip); flushState->opsRenderPass()->draw(programInfo, &mesh, 1, SkRect::Make(drawBoundsRect)); } diff --git a/third_party/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp b/third_party/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp index ae5cfca504c2..05819f338650 100644 --- a/third_party/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp +++ b/third_party/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp @@ -8,6 +8,7 @@ #include "src/gpu/ccpr/GrVSCoverageProcessor.h" #include "src/gpu/GrMesh.h" +#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" // This class implements the coverage processor with vertex shaders. @@ -18,8 +19,8 @@ class GrVSCoverageProcessor::Impl : public GrGLSLGeometryProcessor { private: void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - FPCoordTransformIter&& transformIter) final { - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + const CoordTransformRange& transformRange) final { + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } void onEmitCode(EmitArgs&, GrGPArgs*) override; @@ -441,7 +442,7 @@ void GrVSCoverageProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { "vertexpos", "coverage", "corner_coverage", "wind"); varyingHandler->emitAttributes(proc); - SkASSERT(!args.fFPCoordTransformHandler->nextCoordTransform()); + SkASSERT(!*args.fFPCoordTransformHandler); // Fragment shader. GrGLSLFPFragmentBuilder* f = args.fFragBuilder; @@ -531,6 +532,9 @@ void GrVSCoverageProcessor::reset(PrimitiveType primitiveType, GrResourceProvide void GrVSCoverageProcessor::appendMesh(sk_sp instanceBuffer, int instanceCount, int baseInstance, SkTArray* out) const { + SkASSERT(fTriangleType == GrPrimitiveType::kTriangles || + fTriangleType == GrPrimitiveType::kTriangleStrip); + GrMesh& mesh = out->emplace_back(fTriangleType); auto primitiveRestart = GrPrimitiveRestart(GrPrimitiveType::kTriangleStrip == fTriangleType); mesh.setIndexedInstanced(fIndexBuffer, fNumIndicesPerInstance, std::move(instanceBuffer), diff --git a/third_party/skia/src/gpu/ccpr/GrVSCoverageProcessor.h b/third_party/skia/src/gpu/ccpr/GrVSCoverageProcessor.h index 6f4ce45c720b..ea2372fffa06 100644 --- a/third_party/skia/src/gpu/ccpr/GrVSCoverageProcessor.h +++ b/third_party/skia/src/gpu/ccpr/GrVSCoverageProcessor.h @@ -23,6 +23,8 @@ class GrVSCoverageProcessor : public GrCCCoverageProcessor { void appendMesh(sk_sp instanceBuffer, int instanceCount, int baseInstance, SkTArray* out) const override; + GrPrimitiveType primType() const final { return fTriangleType; } + GrGLSLPrimitiveProcessor* onCreateGLSLInstance(std::unique_ptr) const override; Attribute fPerVertexData; @@ -30,7 +32,7 @@ class GrVSCoverageProcessor : public GrCCCoverageProcessor { sk_sp fVertexBuffer; sk_sp fIndexBuffer; int fNumIndicesPerInstance; - GrPrimitiveType fTriangleType; + GrPrimitiveType fTriangleType = GrPrimitiveType::kPoints; class Impl; }; diff --git a/third_party/skia/src/gpu/dawn/GrDawnBuffer.cpp b/third_party/skia/src/gpu/dawn/GrDawnBuffer.cpp index b01cbcddffa2..6af41331db2c 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnBuffer.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnBuffer.cpp @@ -10,19 +10,19 @@ #include "src/gpu/dawn/GrDawnGpu.h" namespace { - dawn::BufferUsage GrGpuBufferTypeToDawnUsageBit(GrGpuBufferType type) { + wgpu::BufferUsage GrGpuBufferTypeToDawnUsageBit(GrGpuBufferType type) { switch (type) { case GrGpuBufferType::kVertex: - return dawn::BufferUsage::Vertex; + return wgpu::BufferUsage::Vertex; case GrGpuBufferType::kIndex: - return dawn::BufferUsage::Index; + return wgpu::BufferUsage::Index; case GrGpuBufferType::kXferCpuToGpu: - return dawn::BufferUsage::CopySrc; + return wgpu::BufferUsage::CopySrc; case GrGpuBufferType::kXferGpuToCpu: - return dawn::BufferUsage::CopyDst; + return wgpu::BufferUsage::CopyDst; default: SkASSERT(!"buffer type not supported by Dawn"); - return dawn::BufferUsage::Vertex; + return wgpu::BufferUsage::Vertex; } } } @@ -31,9 +31,9 @@ GrDawnBuffer::GrDawnBuffer(GrDawnGpu* gpu, size_t sizeInBytes, GrGpuBufferType t GrAccessPattern pattern) : INHERITED(gpu, sizeInBytes, type, pattern) , fStagingBuffer(nullptr) { - dawn::BufferDescriptor bufferDesc; + wgpu::BufferDescriptor bufferDesc; bufferDesc.size = sizeInBytes; - bufferDesc.usage = GrGpuBufferTypeToDawnUsageBit(type) | dawn::BufferUsage::CopyDst; + bufferDesc.usage = GrGpuBufferTypeToDawnUsageBit(type) | wgpu::BufferUsage::CopyDst; fBuffer = this->getDawnGpu()->device().CreateBuffer(&bufferDesc); this->registerWithCache(SkBudgeted::kYes); } diff --git a/third_party/skia/src/gpu/dawn/GrDawnBuffer.h b/third_party/skia/src/gpu/dawn/GrDawnBuffer.h index 17fa1c8d6e8b..52a03a84dbff 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnBuffer.h +++ b/third_party/skia/src/gpu/dawn/GrDawnBuffer.h @@ -9,7 +9,7 @@ #define GrDawnBuffer_DEFINED #include "src/gpu/GrGpuBuffer.h" -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" class GrDawnGpu; struct GrDawnStagingBuffer; @@ -24,10 +24,10 @@ class GrDawnBuffer : public GrGpuBuffer { bool onUpdateData(const void* src, size_t srcSizeInBytes) override; GrDawnGpu* getDawnGpu() const; - dawn::Buffer get() const { return fBuffer; } + wgpu::Buffer get() const { return fBuffer; } private: - dawn::Buffer fBuffer; + wgpu::Buffer fBuffer; GrDawnStagingBuffer* fStagingBuffer; typedef GrGpuBuffer INHERITED; }; diff --git a/third_party/skia/src/gpu/dawn/GrDawnCaps.cpp b/third_party/skia/src/gpu/dawn/GrDawnCaps.cpp index 8caa134c62b9..52ff46181264 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnCaps.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnCaps.cpp @@ -7,6 +7,12 @@ #include "src/gpu/dawn/GrDawnCaps.h" +#include "src/gpu/GrProgramDesc.h" +#include "src/gpu/GrProgramInfo.h" +#include "src/gpu/GrRenderTarget.h" +#include "src/gpu/GrRenderTargetPriv.h" +#include "src/gpu/GrStencilSettings.h" + GrDawnCaps::GrDawnCaps(const GrContextOptions& contextOptions) : INHERITED(contextOptions) { fMipMapSupport = true; fBufferMapThreshold = SK_MaxS32; // FIXME: get this from Dawn? @@ -15,6 +21,7 @@ GrDawnCaps::GrDawnCaps(const GrContextOptions& contextOptions) : INHERITED(conte fMaxVertexAttributes = 16; // FIXME fClampToBorderSupport = false; fPerformPartialClearsAsDraws = true; + fDynamicStateArrayGeometryProcessorTextureSupport = true; fShaderCaps->fFlatInterpolationSupport = true; fShaderCaps->fIntegerSupport = true; @@ -24,8 +31,7 @@ GrDawnCaps::GrDawnCaps(const GrContextOptions& contextOptions) : INHERITED(conte fShaderCaps->fMaxFragmentSamplers = 6; fShaderCaps->fShaderDerivativeSupport = true; - this->applyOptionsOverrides(contextOptions); - fShaderCaps->applyOptionsOverrides(contextOptions); + this->finishInitialization(contextOptions); } bool GrDawnCaps::isFormatSRGB(const GrBackendFormat& format) const { @@ -39,13 +45,13 @@ bool GrDawnCaps::isFormatCompressed(const GrBackendFormat& format, bool GrDawnCaps::isFormatTexturable(const GrBackendFormat& format) const { // Currently, all the formats in GrDawnFormatToPixelConfig are texturable. - dawn::TextureFormat dawnFormat; + wgpu::TextureFormat dawnFormat; return format.asDawnFormat(&dawnFormat); } GrPixelConfig GrDawnCaps::onGetConfigFromBackendFormat(const GrBackendFormat& format, GrColorType colorType) const { - dawn::TextureFormat dawnFormat; + wgpu::TextureFormat dawnFormat; if (!format.asDawnFormat(&dawnFormat)) { return kUnknown_GrPixelConfig; } @@ -53,14 +59,14 @@ GrPixelConfig GrDawnCaps::onGetConfigFromBackendFormat(const GrBackendFormat& fo case GrColorType::kUnknown: return kUnknown_GrPixelConfig; case GrColorType::kAlpha_8: - if (dawn::TextureFormat::R8Unorm == dawnFormat) { + if (wgpu::TextureFormat::R8Unorm == dawnFormat) { return kAlpha_8_as_Red_GrPixelConfig; } break; case GrColorType::kRGBA_8888: - if (dawn::TextureFormat::RGBA8Unorm == dawnFormat) { + if (wgpu::TextureFormat::RGBA8Unorm == dawnFormat) { return kRGBA_8888_GrPixelConfig; - } else if (dawn::TextureFormat::BGRA8Unorm == dawnFormat) { + } else if (wgpu::TextureFormat::BGRA8Unorm == dawnFormat) { // FIXME: This shouldn't be necessary, but on some platforms (Mac) // Skia byte order is RGBA, while preferred swap format is BGRA. return kBGRA_8888_GrPixelConfig; @@ -69,9 +75,9 @@ GrPixelConfig GrDawnCaps::onGetConfigFromBackendFormat(const GrBackendFormat& fo case GrColorType::kRGB_888x: break; case GrColorType::kBGRA_8888: - if (dawn::TextureFormat::BGRA8Unorm == dawnFormat) { + if (wgpu::TextureFormat::BGRA8Unorm == dawnFormat) { return kBGRA_8888_GrPixelConfig; - } else if (dawn::TextureFormat::RGBA8Unorm == dawnFormat) { + } else if (wgpu::TextureFormat::RGBA8Unorm == dawnFormat) { return kRGBA_8888_GrPixelConfig; } break; @@ -108,18 +114,18 @@ static GrSwizzle get_swizzle(const GrBackendFormat& format, GrColorType colorTyp bool GrDawnCaps::isFormatTexturableAndUploadable(GrColorType ct, const GrBackendFormat& format) const { - dawn::TextureFormat dawnFormat; + wgpu::TextureFormat dawnFormat; if (!format.asDawnFormat(&dawnFormat)) { return false; } switch (ct) { case GrColorType::kAlpha_8: - return dawn::TextureFormat::R8Unorm == dawnFormat; + return wgpu::TextureFormat::R8Unorm == dawnFormat; case GrColorType::kRGBA_8888: case GrColorType::kRGB_888x: case GrColorType::kBGRA_8888: - return dawn::TextureFormat::RGBA8Unorm == dawnFormat || - dawn::TextureFormat::BGRA8Unorm == dawnFormat; + return wgpu::TextureFormat::RGBA8Unorm == dawnFormat || + wgpu::TextureFormat::BGRA8Unorm == dawnFormat; default: return false; } @@ -127,7 +133,7 @@ bool GrDawnCaps::isFormatTexturableAndUploadable(GrColorType ct, bool GrDawnCaps::isFormatRenderable(const GrBackendFormat& format, int sampleCount) const { - dawn::TextureFormat dawnFormat; + wgpu::TextureFormat dawnFormat; if (!format.isValid() || sampleCount > 1 || !format.asDawnFormat(&dawnFormat)) { return false; } @@ -141,7 +147,7 @@ bool GrDawnCaps::isFormatAsColorTypeRenderable(GrColorType ct, const GrBackendFo } size_t GrDawnCaps::bytesPerPixel(const GrBackendFormat& backendFormat) const { - dawn::TextureFormat dawnFormat; + wgpu::TextureFormat dawnFormat; if (!backendFormat.asDawnFormat(&dawnFormat)) { return 0; } @@ -150,7 +156,7 @@ size_t GrDawnCaps::bytesPerPixel(const GrBackendFormat& backendFormat) const { int GrDawnCaps::getRenderTargetSampleCount(int requestedCount, const GrBackendFormat& backendFormat) const { - dawn::TextureFormat dawnFormat; + wgpu::TextureFormat dawnFormat; if (!backendFormat.asDawnFormat(&dawnFormat)) { return 0; } @@ -167,7 +173,7 @@ GrBackendFormat GrDawnCaps::onGetDefaultBackendFormat(GrColorType ct, if (config == kUnknown_GrPixelConfig) { return GrBackendFormat(); } - dawn::TextureFormat format; + wgpu::TextureFormat format; if (!GrPixelConfigToDawnFormat(config, &format)) { return GrBackendFormat(); } @@ -196,29 +202,76 @@ bool GrDawnCaps::onAreColorTypeAndFormatCompatible(GrColorType ct, GrColorType GrDawnCaps::getYUVAColorTypeFromBackendFormat(const GrBackendFormat& backendFormat, bool isAlphaChannel) const { - dawn::TextureFormat textureFormat; + wgpu::TextureFormat textureFormat; if (!backendFormat.asDawnFormat(&textureFormat)) { return GrColorType::kUnknown; } switch (textureFormat) { - case dawn::TextureFormat::R8Unorm: return isAlphaChannel ? GrColorType::kAlpha_8 + case wgpu::TextureFormat::R8Unorm: return isAlphaChannel ? GrColorType::kAlpha_8 : GrColorType::kGray_8; - case dawn::TextureFormat::RGBA8Unorm: return GrColorType::kRGBA_8888; - case dawn::TextureFormat::BGRA8Unorm: return GrColorType::kBGRA_8888; + case wgpu::TextureFormat::RGBA8Unorm: return GrColorType::kRGBA_8888; + case wgpu::TextureFormat::BGRA8Unorm: return GrColorType::kBGRA_8888; default: return GrColorType::kUnknown; } } +// FIXME: taken from GrVkPipelineState; refactor. +static uint32_t get_blend_info_key(const GrPipeline& pipeline) { + GrXferProcessor::BlendInfo blendInfo = pipeline.getXferProcessor().getBlendInfo(); + + static const uint32_t kBlendWriteShift = 1; + static const uint32_t kBlendCoeffShift = 5; + GR_STATIC_ASSERT(kLast_GrBlendCoeff < (1 << kBlendCoeffShift)); + GR_STATIC_ASSERT(kFirstAdvancedGrBlendEquation - 1 < 4); + + uint32_t key = blendInfo.fWriteColor; + key |= (blendInfo.fSrcBlend << kBlendWriteShift); + key |= (blendInfo.fDstBlend << (kBlendWriteShift + kBlendCoeffShift)); + key |= (blendInfo.fEquation << (kBlendWriteShift + 2 * kBlendCoeffShift)); + + return key; +} + +GrProgramDesc GrDawnCaps::makeDesc(const GrRenderTarget* rt, + const GrProgramInfo& programInfo) const { + GrProgramDesc desc; + if (!GrProgramDesc::Build(&desc, rt, programInfo, *this)) { + SkASSERT(!desc.isValid()); + return desc; + } + + wgpu::TextureFormat format; + if (!programInfo.backendFormat().asDawnFormat(&format)) { + desc.key().reset(); + SkASSERT(!desc.isValid()); + return desc; + } + + GrProcessorKeyBuilder b(&desc.key()); + + GrStencilSettings stencil = programInfo.nonGLStencilSettings(); + stencil.genKey(&b); + + // TODO: remove this reliance on the renderTarget + bool hasDepthStencil = rt->renderTargetPriv().getStencilAttachment() != nullptr; + + b.add32(static_cast(format)); + b.add32(static_cast(hasDepthStencil)); + b.add32(get_blend_info_key(programInfo.pipeline())); + b.add32(static_cast(programInfo.primitiveType())); + return desc; +} + #if GR_TEST_UTILS std::vector GrDawnCaps::getTestingCombinations() const { std::vector combos = { - { GrColorType::kAlpha_8, GrBackendFormat::MakeDawn(dawn::TextureFormat::R8Unorm) }, - { GrColorType::kRGBA_8888, GrBackendFormat::MakeDawn(dawn::TextureFormat::RGBA8Unorm) }, - { GrColorType::kRGBA_8888, GrBackendFormat::MakeDawn(dawn::TextureFormat::BGRA8Unorm) }, - { GrColorType::kRGB_888x, GrBackendFormat::MakeDawn(dawn::TextureFormat::RGBA8Unorm) }, - { GrColorType::kRGB_888x, GrBackendFormat::MakeDawn(dawn::TextureFormat::BGRA8Unorm) }, - { GrColorType::kBGRA_8888, GrBackendFormat::MakeDawn(dawn::TextureFormat::BGRA8Unorm) }, - { GrColorType::kBGRA_8888, GrBackendFormat::MakeDawn(dawn::TextureFormat::RGBA8Unorm) }, + { GrColorType::kAlpha_8, GrBackendFormat::MakeDawn(wgpu::TextureFormat::R8Unorm) }, + { GrColorType::kRGBA_8888, GrBackendFormat::MakeDawn(wgpu::TextureFormat::RGBA8Unorm) }, + { GrColorType::kRGBA_8888, GrBackendFormat::MakeDawn(wgpu::TextureFormat::BGRA8Unorm) }, + { GrColorType::kRGB_888x, GrBackendFormat::MakeDawn(wgpu::TextureFormat::RGBA8Unorm) }, + { GrColorType::kRGB_888x, GrBackendFormat::MakeDawn(wgpu::TextureFormat::BGRA8Unorm) }, + { GrColorType::kBGRA_8888, GrBackendFormat::MakeDawn(wgpu::TextureFormat::BGRA8Unorm) }, + { GrColorType::kBGRA_8888, GrBackendFormat::MakeDawn(wgpu::TextureFormat::RGBA8Unorm) }, }; #ifdef SK_DEBUG diff --git a/third_party/skia/src/gpu/dawn/GrDawnCaps.h b/third_party/skia/src/gpu/dawn/GrDawnCaps.h index 6af5d7d0a41f..7ae3cb1156c4 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnCaps.h +++ b/third_party/skia/src/gpu/dawn/GrDawnCaps.h @@ -58,6 +58,8 @@ class GrDawnCaps : public GrCaps { GrColorType getYUVAColorTypeFromBackendFormat(const GrBackendFormat&, bool isAlphaChannel) const override; + GrProgramDesc makeDesc(const GrRenderTarget*, const GrProgramInfo&) const override; + #if GR_TEST_UTILS std::vector getTestingCombinations() const override; #endif diff --git a/third_party/skia/src/gpu/dawn/GrDawnGpu.cpp b/third_party/skia/src/gpu/dawn/GrDawnGpu.cpp index 54c7c569f373..1fbbb9ab1386 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnGpu.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnGpu.cpp @@ -37,78 +37,36 @@ const int kMaxRenderPipelineEntries = 1024; -static dawn::FilterMode to_dawn_filter_mode(GrSamplerState::Filter filter) { +static wgpu::FilterMode to_dawn_filter_mode(GrSamplerState::Filter filter) { switch (filter) { case GrSamplerState::Filter::kNearest: - return dawn::FilterMode::Nearest; + return wgpu::FilterMode::Nearest; case GrSamplerState::Filter::kBilerp: case GrSamplerState::Filter::kMipMap: - return dawn::FilterMode::Linear; + return wgpu::FilterMode::Linear; default: SkASSERT(!"unsupported filter mode"); - return dawn::FilterMode::Nearest; + return wgpu::FilterMode::Nearest; } } -static dawn::AddressMode to_dawn_address_mode(GrSamplerState::WrapMode wrapMode) { +static wgpu::AddressMode to_dawn_address_mode(GrSamplerState::WrapMode wrapMode) { switch (wrapMode) { case GrSamplerState::WrapMode::kClamp: - return dawn::AddressMode::ClampToEdge; + return wgpu::AddressMode::ClampToEdge; case GrSamplerState::WrapMode::kRepeat: - return dawn::AddressMode::Repeat; + return wgpu::AddressMode::Repeat; case GrSamplerState::WrapMode::kMirrorRepeat: - return dawn::AddressMode::MirrorRepeat; + return wgpu::AddressMode::MirrorRepeat; case GrSamplerState::WrapMode::kClampToBorder: SkASSERT(!"unsupported address mode"); } SkASSERT(!"unsupported address mode"); - return dawn::AddressMode::ClampToEdge; + return wgpu::AddressMode::ClampToEdge; } -// FIXME: taken from GrVkPipelineState; refactor. -static uint32_t get_blend_info_key(const GrPipeline& pipeline) { - GrXferProcessor::BlendInfo blendInfo = pipeline.getXferProcessor().getBlendInfo(); - - static const uint32_t kBlendWriteShift = 1; - static const uint32_t kBlendCoeffShift = 5; - GR_STATIC_ASSERT(kLast_GrBlendCoeff < (1 << kBlendCoeffShift)); - GR_STATIC_ASSERT(kFirstAdvancedGrBlendEquation - 1 < 4); - - uint32_t key = blendInfo.fWriteColor; - key |= (blendInfo.fSrcBlend << kBlendWriteShift); - key |= (blendInfo.fDstBlend << (kBlendWriteShift + kBlendCoeffShift)); - key |= (blendInfo.fEquation << (kBlendWriteShift + 2 * kBlendCoeffShift)); - - return key; -} - -class Desc : public GrProgramDesc { -public: - static bool Build(Desc* desc, - GrRenderTarget* rt, - const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType, - bool hasDepthStencil, - GrGpu* gpu) { - if (!GrProgramDesc::Build(desc, rt, programInfo, primitiveType, gpu)) { - return false; - } - GrProcessorKeyBuilder b(&desc->key()); - - GrStencilSettings stencil; - const GrPipeline& pipeline = programInfo.pipeline(); - stencil.reset(*pipeline.getUserStencil(), pipeline.hasStencilClip(), 8); - stencil.genKey(&b); - b.add32(rt->config()); - b.add32(static_cast(hasDepthStencil)); - b.add32(get_blend_info_key(pipeline)); - b.add32(static_cast(primitiveType)); - return true; - } -}; - -sk_sp GrDawnGpu::Make(const dawn::Device& device, +sk_sp GrDawnGpu::Make(const wgpu::Device& device, const GrContextOptions& options, GrContext* context) { if (!device) { return nullptr; @@ -120,12 +78,12 @@ sk_sp GrDawnGpu::Make(const dawn::Device& device, //////////////////////////////////////////////////////////////////////////////// GrDawnGpu::GrDawnGpu(GrContext* context, const GrContextOptions& options, - const dawn::Device& device) + const wgpu::Device& device) : INHERITED(context) , fDevice(device) , fQueue(device.CreateQueue()) , fCompiler(new SkSL::Compiler()) - , fUniformRingBuffer(this, dawn::BufferUsage::Uniform) + , fUniformRingBuffer(this, wgpu::BufferUsage::Uniform) , fRenderPipelineCache(kMaxRenderPipelineEntries) , fStagingManager(fDevice) { fCaps.reset(new GrDawnCaps(options)); @@ -145,7 +103,7 @@ GrOpsRenderPass* GrDawnGpu::getOpsRenderPass( GrRenderTarget* rt, GrSurfaceOrigin origin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo, - const SkTArray& sampledProxies) { + const SkTArray& sampledProxies) { fOpsRenderPass.reset(new GrDawnOpsRenderPass(this, rt, origin, colorInfo, stencilInfo)); return fOpsRenderPass.get(); } @@ -199,7 +157,7 @@ sk_sp GrDawnGpu::onCreateTexture(const GrSurfaceDesc& desc, int mipLevelCount, uint32_t levelClearMask) { SkASSERT(!levelClearMask); - dawn::TextureFormat format; + wgpu::TextureFormat format; if (!backendFormat.asDawnFormat(&format)) { return nullptr; } @@ -230,12 +188,12 @@ sk_sp GrDawnGpu::onWrapBackendTexture(const GrBackendTexture& backend return nullptr; } - SkISize size = { backendTex.width(), backendTex.height() }; + SkISize dimensions = { backendTex.width(), backendTex.height() }; GrPixelConfig config = this->caps()->getConfigFromBackendFormat(backendTex.getBackendFormat(), colorType); GrMipMapsStatus status = GrMipMapsStatus::kNotAllocated; - return GrDawnTexture::MakeWrapped(this, size, config, GrRenderable::kNo, 1, status, cacheable, - info); + return GrDawnTexture::MakeWrapped(this, dimensions, config, GrRenderable::kNo, 1, status, + cacheable, info); } sk_sp GrDawnGpu::onWrapRenderableBackendTexture(const GrBackendTexture& tex, @@ -247,7 +205,7 @@ sk_sp GrDawnGpu::onWrapRenderableBackendTexture(const GrBackendTextur return nullptr; } - SkISize size = { tex.width(), tex.height() }; + SkISize dimensions = { tex.width(), tex.height() }; GrPixelConfig config = this->caps()->getConfigFromBackendFormat(tex.getBackendFormat(), colorType); sampleCnt = this->caps()->getRenderTargetSampleCount(sampleCnt, tex.getBackendFormat()); @@ -256,8 +214,8 @@ sk_sp GrDawnGpu::onWrapRenderableBackendTexture(const GrBackendTextur } GrMipMapsStatus status = GrMipMapsStatus::kNotAllocated; - return GrDawnTexture::MakeWrapped(this, size, config, GrRenderable::kYes, sampleCnt, status, - cacheable, info); + return GrDawnTexture::MakeWrapped(this, dimensions, config, GrRenderable::kYes, sampleCnt, + status, cacheable, info); } sk_sp GrDawnGpu::onWrapBackendRenderTarget(const GrBackendRenderTarget& rt, @@ -267,11 +225,11 @@ sk_sp GrDawnGpu::onWrapBackendRenderTarget(const GrBackendRender return nullptr; } - SkISize size = { rt.width(), rt.height() }; + SkISize dimensions = { rt.width(), rt.height() }; GrPixelConfig config = this->caps()->getConfigFromBackendFormat(rt.getBackendFormat(), colorType); int sampleCnt = 1; - return GrDawnRenderTarget::MakeWrapped(this, size, config, sampleCnt, info); + return GrDawnRenderTarget::MakeWrapped(this, dimensions, config, sampleCnt, info); } sk_sp GrDawnGpu::onWrapBackendTextureAsRenderTarget(const GrBackendTexture& tex, @@ -282,7 +240,7 @@ sk_sp GrDawnGpu::onWrapBackendTextureAsRenderTarget(const GrBack return nullptr; } - SkISize size = { tex.width(), tex.height() }; + SkISize dimensions = { tex.width(), tex.height() }; GrPixelConfig config = this->caps()->getConfigFromBackendFormat(tex.getBackendFormat(), colorType); sampleCnt = this->caps()->getRenderTargetSampleCount(sampleCnt, tex.getBackendFormat()); @@ -290,7 +248,7 @@ sk_sp GrDawnGpu::onWrapBackendTextureAsRenderTarget(const GrBack return nullptr; } - return GrDawnRenderTarget::MakeWrapped(this, size, config, sampleCnt, info); + return GrDawnRenderTarget::MakeWrapped(this, dimensions, config, sampleCnt, info); } GrStencilAttachment* GrDawnGpu::createStencilAttachmentForRenderTarget(const GrRenderTarget* rt, @@ -305,63 +263,53 @@ GrStencilAttachment* GrDawnGpu::createStencilAttachmentForRenderTarget(const GrR return stencil; } -GrBackendTexture GrDawnGpu::onCreateBackendTexture(int width, int height, +GrBackendTexture GrDawnGpu::onCreateBackendTexture(SkISize dimensions, const GrBackendFormat& backendFormat, - GrMipMapped mipMapped, GrRenderable renderable, - const SkPixmap srcData[], + const BackendTextureData* data, int numMipLevels, - const SkColor4f* color, GrProtected isProtected) { - dawn::TextureFormat format; + wgpu::TextureFormat format; if (!backendFormat.asDawnFormat(&format)) { return GrBackendTexture(); } - SkASSERT(width <= this->caps()->maxTextureSize() && height <= this->caps()->maxTextureSize()); - // FIXME: Dawn doesn't support mipmapped render targets (yet). - if (GrMipMapped::kYes == mipMapped && GrRenderable::kYes == renderable) { + if (numMipLevels > 1 && GrRenderable::kYes == renderable) { return GrBackendTexture(); } - dawn::TextureDescriptor desc; + wgpu::TextureDescriptor desc; desc.usage = - dawn::TextureUsage::Sampled | - dawn::TextureUsage::CopySrc | - dawn::TextureUsage::CopyDst; + wgpu::TextureUsage::Sampled | + wgpu::TextureUsage::CopySrc | + wgpu::TextureUsage::CopyDst; if (GrRenderable::kYes == renderable) { - desc.usage |= dawn::TextureUsage::OutputAttachment; + desc.usage |= wgpu::TextureUsage::OutputAttachment; } - desc.size.width = width; - desc.size.height = height; + desc.size.width = dimensions.width(); + desc.size.height = dimensions.height(); desc.size.depth = 1; desc.format = format; + desc.mipLevelCount = numMipLevels; - // Figure out the number of mip levels. - if (srcData) { - desc.mipLevelCount = numMipLevels; - } else if (GrMipMapped::kYes == mipMapped) { - desc.mipLevelCount = SkMipMap::ComputeLevelCount(width, height) + 1; - } - - dawn::Texture tex = this->device().CreateTexture(&desc); + wgpu::Texture tex = this->device().CreateTexture(&desc); size_t bpp = GrDawnBytesPerPixel(format); - size_t baseLayerSize = bpp * width * height; + size_t baseLayerSize = bpp * dimensions.width() * dimensions.height(); const void* pixels; SkAutoMalloc defaultStorage(baseLayerSize); - if (srcData) { - pixels = srcData->addr(); + if (data && data->type() == BackendTextureData::Type::kPixmaps) { + pixels = data->pixmap(0).addr(); } else { pixels = defaultStorage.get(); memset(defaultStorage.get(), 0, baseLayerSize); } - dawn::Device device = this->device(); - dawn::CommandEncoder copyEncoder = fDevice.CreateCommandEncoder(); - int w = width, h = height; + wgpu::Device device = this->device(); + wgpu::CommandEncoder copyEncoder = fDevice.CreateCommandEncoder(); + int w = dimensions.width(), h = dimensions.height(); for (uint32_t i = 0; i < desc.mipLevelCount; i++) { size_t origRowBytes = bpp * w; size_t rowBytes = GrDawnRoundRowBytes(origRowBytes); @@ -378,30 +326,30 @@ GrBackendTexture GrDawnGpu::onCreateBackendTexture(int width, int height, src += origRowBytes; } } - dawn::Buffer buffer = stagingBuffer->fBuffer; + wgpu::Buffer buffer = stagingBuffer->fBuffer; buffer.Unmap(); stagingBuffer->fData = nullptr; - dawn::BufferCopyView srcBuffer; + wgpu::BufferCopyView srcBuffer; srcBuffer.buffer = buffer; srcBuffer.offset = 0; srcBuffer.rowPitch = rowBytes; srcBuffer.imageHeight = h; - dawn::TextureCopyView dstTexture; + wgpu::TextureCopyView dstTexture; dstTexture.texture = tex; dstTexture.mipLevel = i; dstTexture.origin = {0, 0, 0}; - dawn::Extent3D copySize = {(uint32_t) w, (uint32_t) h, 1}; + wgpu::Extent3D copySize = {(uint32_t) w, (uint32_t) h, 1}; copyEncoder.CopyBufferToTexture(&srcBuffer, &dstTexture, ©Size); w = SkTMax(1, w / 2); h = SkTMax(1, h / 2); } - dawn::CommandBuffer cmdBuf = copyEncoder.Finish(); + wgpu::CommandBuffer cmdBuf = copyEncoder.Finish(); fQueue.Submit(1, &cmdBuf); GrDawnImageInfo info; info.fTexture = tex; info.fFormat = desc.format; info.fLevelCount = desc.mipLevelCount; - return GrBackendTexture(width, height, info); + return GrBackendTexture(dimensions.width(), dimensions.height(), info); } void GrDawnGpu::deleteBackendTexture(const GrBackendTexture& tex) { @@ -429,22 +377,22 @@ GrBackendRenderTarget GrDawnGpu::createTestingOnlyBackendRenderTarget(int width, return GrBackendRenderTarget(); } - dawn::TextureFormat format; + wgpu::TextureFormat format; if (!GrPixelConfigToDawnFormat(config, &format)) { return GrBackendRenderTarget(); } - dawn::TextureDescriptor desc; + wgpu::TextureDescriptor desc; desc.usage = - dawn::TextureUsage::CopySrc | - dawn::TextureUsage::OutputAttachment; + wgpu::TextureUsage::CopySrc | + wgpu::TextureUsage::OutputAttachment; desc.size.width = width; desc.size.height = height; desc.size.depth = 1; desc.format = format; - dawn::Texture tex = this->device().CreateTexture(&desc); + wgpu::Texture tex = this->device().CreateTexture(&desc); GrDawnImageInfo info; info.fTexture = tex; @@ -476,12 +424,13 @@ void GrDawnGpu::flush() { fDevice.Tick(); } -void GrDawnGpu::onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, +bool GrDawnGpu::onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, const GrPrepareForExternalIORequests&) { this->flush(); + return true; } -static dawn::Texture get_dawn_texture_from_surface(GrSurface* src) { +static wgpu::Texture get_dawn_texture_from_surface(GrSurface* src) { if (auto rt = static_cast(src->asRenderTarget())) { return rt->texture(); } else if (auto t = static_cast(src->asTexture())) { @@ -495,26 +444,26 @@ bool GrDawnGpu::onCopySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRect, const SkIPoint& dstPoint) { - dawn::Texture srcTexture = get_dawn_texture_from_surface(src); - dawn::Texture dstTexture = get_dawn_texture_from_surface(dst); + wgpu::Texture srcTexture = get_dawn_texture_from_surface(src); + wgpu::Texture dstTexture = get_dawn_texture_from_surface(dst); if (!srcTexture || !dstTexture) { return false; } uint32_t width = srcRect.width(), height = srcRect.height(); - dawn::TextureCopyView srcTextureView, dstTextureView; + wgpu::TextureCopyView srcTextureView, dstTextureView; srcTextureView.texture = srcTexture; srcTextureView.origin = {(uint32_t) srcRect.x(), (uint32_t) srcRect.y(), 0}; dstTextureView.texture = dstTexture; dstTextureView.origin = {(uint32_t) dstPoint.x(), (uint32_t) dstPoint.y(), 0}; - dawn::Extent3D copySize = {width, height, 1}; + wgpu::Extent3D copySize = {width, height, 1}; this->getCopyEncoder().CopyTextureToTexture(&srcTextureView, &dstTextureView, ©Size); return true; } -static void callback(DawnBufferMapAsyncStatus status, const void* data, uint64_t dataLength, +static void callback(WGPUBufferMapAsyncStatus status, const void* data, uint64_t dataLength, void* userdata) { (*reinterpret_cast(userdata)) = data; } @@ -522,7 +471,7 @@ static void callback(DawnBufferMapAsyncStatus status, const void* data, uint64_t bool GrDawnGpu::onReadPixels(GrSurface* surface, int left, int top, int width, int height, GrColorType surfaceColorType, GrColorType dstColorType, void* buffer, size_t rowBytes) { - dawn::Texture tex = get_dawn_texture_from_surface(surface); + wgpu::Texture tex = get_dawn_texture_from_surface(surface); if (0 == rowBytes) { return false; @@ -532,23 +481,23 @@ bool GrDawnGpu::onReadPixels(GrSurface* surface, int left, int top, int width, i rowBytes = GrDawnRoundRowBytes(rowBytes); int sizeInBytes = rowBytes * height; - dawn::BufferDescriptor desc; - desc.usage = dawn::BufferUsage::CopyDst | dawn::BufferUsage::MapRead; + wgpu::BufferDescriptor desc; + desc.usage = wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::MapRead; desc.size = sizeInBytes; - dawn::Buffer buf = device().CreateBuffer(&desc); + wgpu::Buffer buf = device().CreateBuffer(&desc); - dawn::TextureCopyView srcTexture; + wgpu::TextureCopyView srcTexture; srcTexture.texture = tex; srcTexture.origin = {(uint32_t) left, (uint32_t) top, 0}; - dawn::BufferCopyView dstBuffer; + wgpu::BufferCopyView dstBuffer; dstBuffer.buffer = buf; dstBuffer.offset = 0; dstBuffer.rowPitch = rowBytes; dstBuffer.imageHeight = height; - dawn::Extent3D copySize = {(uint32_t) width, (uint32_t) height, 1}; + wgpu::Extent3D copySize = {(uint32_t) width, (uint32_t) height, 1}; this->getCopyEncoder().CopyTextureToBuffer(&srcTexture, &dstBuffer, ©Size); flush(); @@ -597,23 +546,24 @@ void GrDawnGpu::deleteFence(GrFence fence) const { SkASSERT(!"unimplemented"); } -sk_sp SK_WARN_UNUSED_RESULT GrDawnGpu::makeSemaphore(bool isOwned) { +std::unique_ptr SK_WARN_UNUSED_RESULT GrDawnGpu::makeSemaphore(bool isOwned) { SkASSERT(!"unimplemented"); return nullptr; } -sk_sp GrDawnGpu::wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) { +std::unique_ptr GrDawnGpu::wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, + GrWrapOwnership ownership) { SkASSERT(!"unimplemented"); return nullptr; } -void GrDawnGpu::insertSemaphore(sk_sp semaphore) { +void GrDawnGpu::insertSemaphore(GrSemaphore* semaphore) { SkASSERT(!"unimplemented"); } -void GrDawnGpu::waitSemaphore(sk_sp semaphore) { +void GrDawnGpu::waitSemaphore(GrSemaphore* semaphore) { SkASSERT(!"unimplemented"); } @@ -621,18 +571,17 @@ void GrDawnGpu::checkFinishProcs() { SkASSERT(!"unimplemented"); } -sk_sp GrDawnGpu::prepareTextureForCrossContextUsage(GrTexture* texture) { +std::unique_ptr GrDawnGpu::prepareTextureForCrossContextUsage(GrTexture* texture) { SkASSERT(!"unimplemented"); return nullptr; } sk_sp GrDawnGpu::getOrCreateRenderPipeline( GrRenderTarget* rt, - const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType) { - bool hasDepthStencil = rt->renderTargetPriv().getStencilAttachment() != nullptr; - Desc desc; - if (!Desc::Build(&desc, rt, programInfo, primitiveType, hasDepthStencil, this)) { + const GrProgramInfo& programInfo) { + + GrProgramDesc desc = this->caps()->makeDesc(rt, programInfo); + if (!desc.isValid()) { return nullptr; } @@ -640,33 +589,35 @@ sk_sp GrDawnGpu::getOrCreateRenderPipeline( return *program; } - dawn::TextureFormat colorFormat; - SkAssertResult(GrPixelConfigToDawnFormat(rt->config(), &colorFormat)); - dawn::TextureFormat stencilFormat = dawn::TextureFormat::Depth24PlusStencil8; + wgpu::TextureFormat colorFormat; + SkAssertResult(programInfo.backendFormat().asDawnFormat(&colorFormat)); + + wgpu::TextureFormat stencilFormat = wgpu::TextureFormat::Depth24PlusStencil8; + bool hasDepthStencil = rt->renderTargetPriv().getStencilAttachment() != nullptr; sk_sp program = GrDawnProgramBuilder::Build( - this, rt, programInfo, primitiveType, colorFormat, + this, rt, programInfo, colorFormat, hasDepthStencil, stencilFormat, &desc); fRenderPipelineCache.insert(desc, program); return program; } -dawn::Sampler GrDawnGpu::getOrCreateSampler(const GrSamplerState& samplerState) { +wgpu::Sampler GrDawnGpu::getOrCreateSampler(const GrSamplerState& samplerState) { auto i = fSamplers.find(samplerState); if (i != fSamplers.end()) { return i->second; } - dawn::SamplerDescriptor desc; + wgpu::SamplerDescriptor desc; desc.addressModeU = to_dawn_address_mode(samplerState.wrapModeX()); desc.addressModeV = to_dawn_address_mode(samplerState.wrapModeY()); - desc.addressModeW = dawn::AddressMode::ClampToEdge; + desc.addressModeW = wgpu::AddressMode::ClampToEdge; desc.magFilter = desc.minFilter = to_dawn_filter_mode(samplerState.filter()); - desc.mipmapFilter = dawn::FilterMode::Linear; + desc.mipmapFilter = wgpu::FilterMode::Linear; desc.lodMinClamp = 0.0f; desc.lodMaxClamp = 1000.0f; - desc.compare = dawn::CompareFunction::Never; - dawn::Sampler sampler = device().CreateSampler(&desc); - fSamplers.insert(std::pair(samplerState, sampler)); + desc.compare = wgpu::CompareFunction::Never; + wgpu::Sampler sampler = device().CreateSampler(&desc); + fSamplers.insert(std::pair(samplerState, sampler)); return sampler; } @@ -678,13 +629,13 @@ GrDawnStagingBuffer* GrDawnGpu::getStagingBuffer(size_t size) { return fStagingManager.findOrCreateStagingBuffer(size); } -void GrDawnGpu::appendCommandBuffer(dawn::CommandBuffer commandBuffer) { +void GrDawnGpu::appendCommandBuffer(wgpu::CommandBuffer commandBuffer) { if (commandBuffer) { fCommandBuffers.push_back(commandBuffer); } } -dawn::CommandEncoder GrDawnGpu::getCopyEncoder() { +wgpu::CommandEncoder GrDawnGpu::getCopyEncoder() { if (!fCopyEncoder) { fCopyEncoder = fDevice.CreateCommandEncoder(); } diff --git a/third_party/skia/src/gpu/dawn/GrDawnGpu.h b/third_party/skia/src/gpu/dawn/GrDawnGpu.h index 96cb54b8b922..b8819a9c24e3 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnGpu.h +++ b/third_party/skia/src/gpu/dawn/GrDawnGpu.h @@ -9,7 +9,8 @@ #define GrDawnGpu_DEFINED #include "src/gpu/GrGpu.h" -#include "dawn/dawncpp.h" +#include "src/gpu/GrProgramDesc.h" +#include "dawn/webgpu_cpp.h" #include "src/core/SkLRUCache.h" #include "src/gpu/dawn/GrDawnRingBuffer.h" #include "src/gpu/dawn/GrDawnStagingManager.h" @@ -26,25 +27,23 @@ namespace SkSL { class GrDawnGpu : public GrGpu { public: - static sk_sp Make(const dawn::Device& device, const GrContextOptions&, GrContext*); - GrDawnGpu(GrContext* context, const GrContextOptions& options, const dawn::Device& device); + static sk_sp Make(const wgpu::Device& device, const GrContextOptions&, GrContext*); + GrDawnGpu(GrContext* context, const GrContextOptions& options, const wgpu::Device& device); ~GrDawnGpu() override; void disconnect(DisconnectType) override; - const dawn::Device& device() const { return fDevice; } - const dawn::Queue& queue() const { return fQueue; } + const wgpu::Device& device() const { return fDevice; } + const wgpu::Queue& queue() const { return fQueue; } void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {} - GrBackendTexture onCreateBackendTexture(int w, int h, + GrBackendTexture onCreateBackendTexture(SkISize, const GrBackendFormat&, - GrMipMapped, GrRenderable, - const SkPixmap srcData[], + const BackendTextureData* data, int numMipLevels, - const SkColor4f* color, GrProtected isProtected) override; void deleteBackendTexture(const GrBackendTexture&) override; #if GR_TEST_UTILS @@ -66,7 +65,7 @@ class GrDawnGpu : public GrGpu { GrRenderTarget*, GrSurfaceOrigin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo&, const GrOpsRenderPass::StencilLoadAndStoreInfo&, - const SkTArray& sampledProxies) override; + const SkTArray& sampledProxies) override; SkSL::Compiler* shaderCompiler() const { return fCompiler.get(); @@ -78,28 +77,27 @@ class GrDawnGpu : public GrGpu { bool waitFence(GrFence, uint64_t timeout) override; void deleteFence(GrFence) const override; - sk_sp SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned = true) override; - sk_sp wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) override; - void insertSemaphore(sk_sp semaphore) override; - void waitSemaphore(sk_sp semaphore) override; + std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned = true) override; + std::unique_ptr wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, + GrWrapOwnership ownership) override; + void insertSemaphore(GrSemaphore* semaphore) override; + void waitSemaphore(GrSemaphore* semaphore) override; void checkFinishProcs() override; - sk_sp prepareTextureForCrossContextUsage(GrTexture*) override; + std::unique_ptr prepareTextureForCrossContextUsage(GrTexture*) override; - sk_sp getOrCreateRenderPipeline(GrRenderTarget*, - const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType); + sk_sp getOrCreateRenderPipeline(GrRenderTarget*, const GrProgramInfo&); - dawn::Sampler getOrCreateSampler(const GrSamplerState& samplerState); + wgpu::Sampler getOrCreateSampler(const GrSamplerState& samplerState); GrDawnRingBuffer::Slice allocateUniformRingBufferSlice(int size); GrDawnStagingBuffer* getStagingBuffer(size_t size); GrDawnStagingManager* getStagingManager() { return &fStagingManager; } - dawn::CommandEncoder getCopyEncoder(); + wgpu::CommandEncoder getCopyEncoder(); void flushCopyEncoder(); - void appendCommandBuffer(dawn::CommandBuffer commandBuffer); + void appendCommandBuffer(wgpu::CommandBuffer commandBuffer); private: void onResetContext(uint32_t resetBits) override {} @@ -158,16 +156,16 @@ class GrDawnGpu : public GrGpu { bool onCopySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRect, const SkIPoint& dstPoint) override; - void onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, + bool onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, const GrPrepareForExternalIORequests&) override; - dawn::Device fDevice; - dawn::Queue fQueue; + wgpu::Device fDevice; + wgpu::Queue fQueue; std::unique_ptr fCompiler; std::unique_ptr fOpsRenderPass; GrDawnRingBuffer fUniformRingBuffer; - dawn::CommandEncoder fCopyEncoder; - std::vector fCommandBuffers; + wgpu::CommandEncoder fCopyEncoder; + std::vector fCommandBuffers; struct ProgramDescHash { uint32_t operator()(const GrProgramDesc& desc) const { @@ -182,7 +180,7 @@ class GrDawnGpu : public GrGpu { }; SkLRUCache, ProgramDescHash> fRenderPipelineCache; - std::unordered_map fSamplers; + std::unordered_map fSamplers; GrDawnStagingManager fStagingManager; typedef GrGpu INHERITED; diff --git a/third_party/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp b/third_party/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp index 48fc8a7f48a8..10a58c2dd71c 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp @@ -24,19 +24,19 @@ //////////////////////////////////////////////////////////////////////////////// -static dawn::LoadOp to_dawn_load_op(GrLoadOp loadOp) { +static wgpu::LoadOp to_dawn_load_op(GrLoadOp loadOp) { switch (loadOp) { case GrLoadOp::kLoad: - return dawn::LoadOp::Load; + return wgpu::LoadOp::Load; case GrLoadOp::kDiscard: // Use LoadOp::Load to emulate DontCare. // Dawn doesn't have DontCare, for security reasons. // Load should be equivalent to DontCare for desktop; Clear would // probably be better for tilers. If Dawn does add DontCare // as an extension, use it here. - return dawn::LoadOp::Load; + return wgpu::LoadOp::Load; case GrLoadOp::kClear: - return dawn::LoadOp::Clear; + return wgpu::LoadOp::Clear; default: SK_ABORT("Invalid LoadOp"); } @@ -49,38 +49,40 @@ GrDawnOpsRenderPass::GrDawnOpsRenderPass(GrDawnGpu* gpu, GrRenderTarget* rt, GrS , fGpu(gpu) , fColorInfo(colorInfo) { fEncoder = fGpu->device().CreateCommandEncoder(); - dawn::LoadOp colorOp = to_dawn_load_op(colorInfo.fLoadOp); - dawn::LoadOp stencilOp = to_dawn_load_op(stencilInfo.fLoadOp); + wgpu::LoadOp colorOp = to_dawn_load_op(colorInfo.fLoadOp); + wgpu::LoadOp stencilOp = to_dawn_load_op(stencilInfo.fLoadOp); fPassEncoder = beginRenderPass(colorOp, stencilOp); } -dawn::RenderPassEncoder GrDawnOpsRenderPass::beginRenderPass(dawn::LoadOp colorOp, - dawn::LoadOp stencilOp) { - dawn::Texture texture = static_cast(fRenderTarget)->texture(); +wgpu::RenderPassEncoder GrDawnOpsRenderPass::beginRenderPass(wgpu::LoadOp colorOp, + wgpu::LoadOp stencilOp) { + wgpu::Texture texture = static_cast(fRenderTarget)->texture(); auto stencilAttachment = static_cast( fRenderTarget->renderTargetPriv().getStencilAttachment()); - dawn::TextureView colorView = texture.CreateView(); + wgpu::TextureViewDescriptor desc; + desc.mipLevelCount = 1; + wgpu::TextureView colorView = texture.CreateView(&desc); const float *c = fColorInfo.fClearColor.vec(); - dawn::RenderPassColorAttachmentDescriptor colorAttachment; + wgpu::RenderPassColorAttachmentDescriptor colorAttachment; colorAttachment.attachment = colorView; colorAttachment.resolveTarget = nullptr; colorAttachment.clearColor = { c[0], c[1], c[2], c[3] }; colorAttachment.loadOp = colorOp; - colorAttachment.storeOp = dawn::StoreOp::Store; - dawn::RenderPassColorAttachmentDescriptor* colorAttachments = { &colorAttachment }; - dawn::RenderPassDescriptor renderPassDescriptor; + colorAttachment.storeOp = wgpu::StoreOp::Store; + wgpu::RenderPassColorAttachmentDescriptor* colorAttachments = { &colorAttachment }; + wgpu::RenderPassDescriptor renderPassDescriptor; renderPassDescriptor.colorAttachmentCount = 1; renderPassDescriptor.colorAttachments = colorAttachments; if (stencilAttachment) { - dawn::RenderPassDepthStencilAttachmentDescriptor depthStencilAttachment; + wgpu::RenderPassDepthStencilAttachmentDescriptor depthStencilAttachment; depthStencilAttachment.attachment = stencilAttachment->view(); depthStencilAttachment.depthLoadOp = stencilOp; depthStencilAttachment.stencilLoadOp = stencilOp; depthStencilAttachment.clearDepth = 1.0f; depthStencilAttachment.clearStencil = 0; - depthStencilAttachment.depthStoreOp = dawn::StoreOp::Store; - depthStencilAttachment.stencilStoreOp = dawn::StoreOp::Store; + depthStencilAttachment.depthStoreOp = wgpu::StoreOp::Store; + depthStencilAttachment.stencilStoreOp = wgpu::StoreOp::Store; renderPassDescriptor.depthStencilAttachment = &depthStencilAttachment; } else { renderPassDescriptor.depthStencilAttachment = nullptr; @@ -107,12 +109,12 @@ void GrDawnOpsRenderPass::insertEventMarker(const char* msg) { void GrDawnOpsRenderPass::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) { fPassEncoder.EndPass(); - fPassEncoder = beginRenderPass(dawn::LoadOp::Load, dawn::LoadOp::Clear); + fPassEncoder = beginRenderPass(wgpu::LoadOp::Load, wgpu::LoadOp::Clear); } void GrDawnOpsRenderPass::onClear(const GrFixedClip& clip, const SkPMColor4f& color) { fPassEncoder.EndPass(); - fPassEncoder = beginRenderPass(dawn::LoadOp::Clear, dawn::LoadOp::Load); + fPassEncoder = beginRenderPass(wgpu::LoadOp::Clear, wgpu::LoadOp::Load); } //////////////////////////////////////////////////////////////////////////////// @@ -139,21 +141,17 @@ void GrDawnOpsRenderPass::setScissorState(const GrProgramInfo& programInfo) { fPassEncoder.SetScissorRect(rect.x(), rect.y(), rect.width(), rect.height()); } -void GrDawnOpsRenderPass::applyState(const GrProgramInfo& programInfo, - const GrPrimitiveType primitiveType) { - sk_sp program = fGpu->getOrCreateRenderPipeline(fRenderTarget, - programInfo, - primitiveType); - auto bindGroup = program->setData(fGpu, fRenderTarget, programInfo); +void GrDawnOpsRenderPass::applyState(GrDawnProgram* program, const GrProgramInfo& programInfo) { + auto bindGroup = program->setUniformData(fGpu, fRenderTarget, programInfo); fPassEncoder.SetPipeline(program->fRenderPipeline); fPassEncoder.SetBindGroup(0, bindGroup, 0, nullptr); const GrPipeline& pipeline = programInfo.pipeline(); if (pipeline.isStencilEnabled()) { - fPassEncoder.SetStencilReference(pipeline.getUserStencil()->fFront.fRef); + fPassEncoder.SetStencilReference(pipeline.getUserStencil()->fCCWFace.fRef); } GrXferProcessor::BlendInfo blendInfo = pipeline.getXferProcessor().getBlendInfo(); const float* c = blendInfo.fBlendConstant.vec(); - dawn::Color color{c[0], c[1], c[2], c[3]}; + wgpu::Color color{c[0], c[1], c[2], c[3]}; fPassEncoder.SetBlendColor(&color); this->setScissorState(programInfo); } @@ -165,8 +163,21 @@ void GrDawnOpsRenderPass::onDraw(const GrProgramInfo& programInfo, if (!meshCount) { return; } + sk_sp program = fGpu->getOrCreateRenderPipeline(fRenderTarget, programInfo); + if (!programInfo.hasDynamicPrimProcTextures()) { + auto textures = programInfo.hasFixedPrimProcTextures() ? programInfo.fixedPrimProcTextures() + : nullptr; + auto bindGroup = program->setTextures(fGpu, programInfo, textures); + fPassEncoder.SetBindGroup(1, bindGroup, 0, nullptr); + } for (int i = 0; i < meshCount; ++i) { - applyState(programInfo, meshes[0].primitiveType()); + SkASSERT(meshes[i].primitiveType() == programInfo.primitiveType()); + if (programInfo.hasDynamicPrimProcTextures()) { + auto textures = programInfo.dynamicPrimProcTextures(i); + auto bindGroup = program->setTextures(fGpu, programInfo, textures); + fPassEncoder.SetBindGroup(1, bindGroup, 0, nullptr); + } + this->applyState(program.get(), programInfo); meshes[i].sendToGpu(this); } } @@ -178,7 +189,7 @@ void GrDawnOpsRenderPass::sendInstancedMeshToGpu(GrPrimitiveType, const GrBuffer* instanceBuffer, int instanceCount, int baseInstance) { - dawn::Buffer vb = static_cast(vertexBuffer)->get(); + wgpu::Buffer vb = static_cast(vertexBuffer)->get(); fPassEncoder.SetVertexBuffer(0, vb); fPassEncoder.Draw(vertexCount, 1, baseVertex, baseInstance); fGpu->stats()->incNumDraws(); @@ -194,8 +205,8 @@ void GrDawnOpsRenderPass::sendIndexedInstancedMeshToGpu(GrPrimitiveType, int instanceCount, int baseInstance, GrPrimitiveRestart restart) { - dawn::Buffer vb = static_cast(vertexBuffer)->get(); - dawn::Buffer ib = static_cast(indexBuffer)->get(); + wgpu::Buffer vb = static_cast(vertexBuffer)->get(); + wgpu::Buffer ib = static_cast(indexBuffer)->get(); fPassEncoder.SetIndexBuffer(ib); fPassEncoder.SetVertexBuffer(0, vb); fPassEncoder.DrawIndexed(indexCount, 1, baseIndex, baseVertex, baseInstance); diff --git a/third_party/skia/src/gpu/dawn/GrDawnOpsRenderPass.h b/third_party/skia/src/gpu/dawn/GrDawnOpsRenderPass.h index a1a9036236bb..5119508f12db 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnOpsRenderPass.h +++ b/third_party/skia/src/gpu/dawn/GrDawnOpsRenderPass.h @@ -13,10 +13,11 @@ #include "include/gpu/GrTypes.h" #include "src/gpu/GrColor.h" #include "src/gpu/GrMesh.h" -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" class GrDawnGpu; class GrDawnRenderTarget; +struct GrDawnProgram; class GrDawnOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl { public: @@ -28,7 +29,7 @@ class GrDawnOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImp void begin() override { } void end() override; - dawn::RenderPassEncoder beginRenderPass(dawn::LoadOp colorOp, dawn::LoadOp stencilOp); + wgpu::RenderPassEncoder beginRenderPass(wgpu::LoadOp colorOp, wgpu::LoadOp stencilOp); void insertEventMarker(const char*) override; void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override; @@ -39,8 +40,7 @@ class GrDawnOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImp GrGpu* gpu() override; void setScissorState(const GrProgramInfo&); - void applyState(const GrProgramInfo& programInfo, - const GrPrimitiveType primitiveType); + void applyState(GrDawnProgram*, const GrProgramInfo& programInfo); void onDraw(const GrProgramInfo& programInfo, const GrMesh mesh[], @@ -86,8 +86,8 @@ class GrDawnOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImp }; GrDawnGpu* fGpu; - dawn::CommandEncoder fEncoder; - dawn::RenderPassEncoder fPassEncoder; + wgpu::CommandEncoder fEncoder; + wgpu::RenderPassEncoder fPassEncoder; LoadAndStoreInfo fColorInfo; typedef GrOpsRenderPass INHERITED; diff --git a/third_party/skia/src/gpu/dawn/GrDawnProgramBuilder.cpp b/third_party/skia/src/gpu/dawn/GrDawnProgramBuilder.cpp index a33e9bbeb7ed..d63e852c9249 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnProgramBuilder.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnProgramBuilder.cpp @@ -15,11 +15,12 @@ #include "src/sksl/SkSLCompiler.h" static SkSL::String sksl_to_spirv(const GrDawnGpu* gpu, const char* shaderString, - SkSL::Program::Kind kind, bool flipY, + SkSL::Program::Kind kind, bool flipY, uint32_t rtHeightOffset, SkSL::Program::Inputs* inputs) { SkSL::Program::Settings settings; settings.fCaps = gpu->caps()->shaderCaps(); settings.fFlipY = flipY; + settings.fRTHeightOffset = rtHeightOffset; std::unique_ptr program = gpu->shaderCompiler()->convertProgram( kind, shaderString, @@ -37,32 +38,32 @@ static SkSL::String sksl_to_spirv(const GrDawnGpu* gpu, const char* shaderString return code; } -static dawn::BlendFactor to_dawn_blend_factor(GrBlendCoeff coeff) { +static wgpu::BlendFactor to_dawn_blend_factor(GrBlendCoeff coeff) { switch (coeff) { case kZero_GrBlendCoeff: - return dawn::BlendFactor::Zero; + return wgpu::BlendFactor::Zero; case kOne_GrBlendCoeff: - return dawn::BlendFactor::One; + return wgpu::BlendFactor::One; case kSC_GrBlendCoeff: - return dawn::BlendFactor::SrcColor; + return wgpu::BlendFactor::SrcColor; case kISC_GrBlendCoeff: - return dawn::BlendFactor::OneMinusSrcColor; + return wgpu::BlendFactor::OneMinusSrcColor; case kDC_GrBlendCoeff: - return dawn::BlendFactor::DstColor; + return wgpu::BlendFactor::DstColor; case kIDC_GrBlendCoeff: - return dawn::BlendFactor::OneMinusDstColor; + return wgpu::BlendFactor::OneMinusDstColor; case kSA_GrBlendCoeff: - return dawn::BlendFactor::SrcAlpha; + return wgpu::BlendFactor::SrcAlpha; case kISA_GrBlendCoeff: - return dawn::BlendFactor::OneMinusSrcAlpha; + return wgpu::BlendFactor::OneMinusSrcAlpha; case kDA_GrBlendCoeff: - return dawn::BlendFactor::DstAlpha; + return wgpu::BlendFactor::DstAlpha; case kIDA_GrBlendCoeff: - return dawn::BlendFactor::OneMinusDstAlpha; + return wgpu::BlendFactor::OneMinusDstAlpha; case kConstC_GrBlendCoeff: - return dawn::BlendFactor::BlendColor; + return wgpu::BlendFactor::BlendColor; case kIConstC_GrBlendCoeff: - return dawn::BlendFactor::OneMinusBlendColor; + return wgpu::BlendFactor::OneMinusBlendColor; case kConstA_GrBlendCoeff: case kIConstA_GrBlendCoeff: case kS2C_GrBlendCoeff: @@ -71,152 +72,152 @@ static dawn::BlendFactor to_dawn_blend_factor(GrBlendCoeff coeff) { case kIS2A_GrBlendCoeff: default: SkASSERT(!"unsupported blend coefficient"); - return dawn::BlendFactor::One; + return wgpu::BlendFactor::One; } } -static dawn::BlendFactor to_dawn_blend_factor_for_alpha(GrBlendCoeff coeff) { +static wgpu::BlendFactor to_dawn_blend_factor_for_alpha(GrBlendCoeff coeff) { switch (coeff) { // Force all srcColor used in alpha slot to alpha version. case kSC_GrBlendCoeff: - return dawn::BlendFactor::SrcAlpha; + return wgpu::BlendFactor::SrcAlpha; case kISC_GrBlendCoeff: - return dawn::BlendFactor::OneMinusSrcAlpha; + return wgpu::BlendFactor::OneMinusSrcAlpha; case kDC_GrBlendCoeff: - return dawn::BlendFactor::DstAlpha; + return wgpu::BlendFactor::DstAlpha; case kIDC_GrBlendCoeff: - return dawn::BlendFactor::OneMinusDstAlpha; + return wgpu::BlendFactor::OneMinusDstAlpha; default: return to_dawn_blend_factor(coeff); } } -static dawn::BlendOperation to_dawn_blend_operation(GrBlendEquation equation) { +static wgpu::BlendOperation to_dawn_blend_operation(GrBlendEquation equation) { switch (equation) { case kAdd_GrBlendEquation: - return dawn::BlendOperation::Add; + return wgpu::BlendOperation::Add; case kSubtract_GrBlendEquation: - return dawn::BlendOperation::Subtract; + return wgpu::BlendOperation::Subtract; case kReverseSubtract_GrBlendEquation: - return dawn::BlendOperation::ReverseSubtract; + return wgpu::BlendOperation::ReverseSubtract; default: SkASSERT(!"unsupported blend equation"); - return dawn::BlendOperation::Add; + return wgpu::BlendOperation::Add; } } -static dawn::CompareFunction to_dawn_compare_function(GrStencilTest test) { +static wgpu::CompareFunction to_dawn_compare_function(GrStencilTest test) { switch (test) { case GrStencilTest::kAlways: - return dawn::CompareFunction::Always; + return wgpu::CompareFunction::Always; case GrStencilTest::kNever: - return dawn::CompareFunction::Never; + return wgpu::CompareFunction::Never; case GrStencilTest::kGreater: - return dawn::CompareFunction::Greater; + return wgpu::CompareFunction::Greater; case GrStencilTest::kGEqual: - return dawn::CompareFunction::GreaterEqual; + return wgpu::CompareFunction::GreaterEqual; case GrStencilTest::kLess: - return dawn::CompareFunction::Less; + return wgpu::CompareFunction::Less; case GrStencilTest::kLEqual: - return dawn::CompareFunction::LessEqual; + return wgpu::CompareFunction::LessEqual; case GrStencilTest::kEqual: - return dawn::CompareFunction::Equal; + return wgpu::CompareFunction::Equal; case GrStencilTest::kNotEqual: - return dawn::CompareFunction::NotEqual; + return wgpu::CompareFunction::NotEqual; default: SkASSERT(!"unsupported stencil test"); - return dawn::CompareFunction::Always; + return wgpu::CompareFunction::Always; } } -static dawn::StencilOperation to_dawn_stencil_operation(GrStencilOp op) { +static wgpu::StencilOperation to_dawn_stencil_operation(GrStencilOp op) { switch (op) { case GrStencilOp::kKeep: - return dawn::StencilOperation::Keep; + return wgpu::StencilOperation::Keep; case GrStencilOp::kZero: - return dawn::StencilOperation::Zero; + return wgpu::StencilOperation::Zero; case GrStencilOp::kReplace: - return dawn::StencilOperation::Replace; + return wgpu::StencilOperation::Replace; case GrStencilOp::kInvert: - return dawn::StencilOperation::Invert; + return wgpu::StencilOperation::Invert; case GrStencilOp::kIncClamp: - return dawn::StencilOperation::IncrementClamp; + return wgpu::StencilOperation::IncrementClamp; case GrStencilOp::kDecClamp: - return dawn::StencilOperation::DecrementClamp; + return wgpu::StencilOperation::DecrementClamp; case GrStencilOp::kIncWrap: - return dawn::StencilOperation::IncrementWrap; + return wgpu::StencilOperation::IncrementWrap; case GrStencilOp::kDecWrap: - return dawn::StencilOperation::DecrementWrap; + return wgpu::StencilOperation::DecrementWrap; default: SkASSERT(!"unsupported stencil function"); - return dawn::StencilOperation::Keep; + return wgpu::StencilOperation::Keep; } } -static dawn::PrimitiveTopology to_dawn_primitive_topology(GrPrimitiveType primitiveType) { +static wgpu::PrimitiveTopology to_dawn_primitive_topology(GrPrimitiveType primitiveType) { switch (primitiveType) { case GrPrimitiveType::kTriangles: - return dawn::PrimitiveTopology::TriangleList; + return wgpu::PrimitiveTopology::TriangleList; case GrPrimitiveType::kTriangleStrip: - return dawn::PrimitiveTopology::TriangleStrip; + return wgpu::PrimitiveTopology::TriangleStrip; case GrPrimitiveType::kPoints: - return dawn::PrimitiveTopology::PointList; + return wgpu::PrimitiveTopology::PointList; case GrPrimitiveType::kLines: - return dawn::PrimitiveTopology::LineList; + return wgpu::PrimitiveTopology::LineList; case GrPrimitiveType::kLineStrip: - return dawn::PrimitiveTopology::LineStrip; + return wgpu::PrimitiveTopology::LineStrip; case GrPrimitiveType::kPath: default: SkASSERT(!"unsupported primitive topology"); - return dawn::PrimitiveTopology::TriangleList; + return wgpu::PrimitiveTopology::TriangleList; } } -static dawn::VertexFormat to_dawn_vertex_format(GrVertexAttribType type) { +static wgpu::VertexFormat to_dawn_vertex_format(GrVertexAttribType type) { switch (type) { case kFloat_GrVertexAttribType: case kHalf_GrVertexAttribType: - return dawn::VertexFormat::Float; + return wgpu::VertexFormat::Float; case kFloat2_GrVertexAttribType: case kHalf2_GrVertexAttribType: - return dawn::VertexFormat::Float2; + return wgpu::VertexFormat::Float2; case kFloat3_GrVertexAttribType: case kHalf3_GrVertexAttribType: - return dawn::VertexFormat::Float3; + return wgpu::VertexFormat::Float3; case kFloat4_GrVertexAttribType: case kHalf4_GrVertexAttribType: - return dawn::VertexFormat::Float4; + return wgpu::VertexFormat::Float4; case kUShort2_GrVertexAttribType: - return dawn::VertexFormat::UShort2; + return wgpu::VertexFormat::UShort2; case kInt_GrVertexAttribType: - return dawn::VertexFormat::Int; + return wgpu::VertexFormat::Int; case kUByte4_norm_GrVertexAttribType: - return dawn::VertexFormat::UChar4Norm; + return wgpu::VertexFormat::UChar4Norm; default: SkASSERT(!"unsupported vertex format"); - return dawn::VertexFormat::Float4; + return wgpu::VertexFormat::Float4; } } -static dawn::ColorStateDescriptor create_color_state(const GrDawnGpu* gpu, +static wgpu::ColorStateDescriptor create_color_state(const GrDawnGpu* gpu, const GrPipeline& pipeline, - dawn::TextureFormat colorFormat) { + wgpu::TextureFormat colorFormat) { GrXferProcessor::BlendInfo blendInfo = pipeline.getXferProcessor().getBlendInfo(); GrBlendEquation equation = blendInfo.fEquation; GrBlendCoeff srcCoeff = blendInfo.fSrcBlend; GrBlendCoeff dstCoeff = blendInfo.fDstBlend; - dawn::BlendFactor srcFactor = to_dawn_blend_factor(srcCoeff); - dawn::BlendFactor dstFactor = to_dawn_blend_factor(dstCoeff); - dawn::BlendFactor srcFactorAlpha = to_dawn_blend_factor_for_alpha(srcCoeff); - dawn::BlendFactor dstFactorAlpha = to_dawn_blend_factor_for_alpha(dstCoeff); - dawn::BlendOperation operation = to_dawn_blend_operation(equation); - auto mask = blendInfo.fWriteColor ? dawn::ColorWriteMask::All : dawn::ColorWriteMask::None; + wgpu::BlendFactor srcFactor = to_dawn_blend_factor(srcCoeff); + wgpu::BlendFactor dstFactor = to_dawn_blend_factor(dstCoeff); + wgpu::BlendFactor srcFactorAlpha = to_dawn_blend_factor_for_alpha(srcCoeff); + wgpu::BlendFactor dstFactorAlpha = to_dawn_blend_factor_for_alpha(dstCoeff); + wgpu::BlendOperation operation = to_dawn_blend_operation(equation); + auto mask = blendInfo.fWriteColor ? wgpu::ColorWriteMask::All : wgpu::ColorWriteMask::None; - dawn::BlendDescriptor colorDesc = {operation, srcFactor, dstFactor}; - dawn::BlendDescriptor alphaDesc = {operation, srcFactorAlpha, dstFactorAlpha}; + wgpu::BlendDescriptor colorDesc = {operation, srcFactor, dstFactor}; + wgpu::BlendDescriptor alphaDesc = {operation, srcFactorAlpha, dstFactorAlpha}; - dawn::ColorStateDescriptor descriptor; + wgpu::ColorStateDescriptor descriptor; descriptor.format = colorFormat; descriptor.alphaBlend = alphaDesc; descriptor.colorBlend = colorDesc; @@ -226,39 +227,45 @@ static dawn::ColorStateDescriptor create_color_state(const GrDawnGpu* gpu, return descriptor; } -static dawn::StencilStateFaceDescriptor to_stencil_state_face(const GrStencilSettings::Face& face) { - dawn::StencilStateFaceDescriptor desc; +static wgpu::StencilStateFaceDescriptor to_stencil_state_face(const GrStencilSettings::Face& face) { + wgpu::StencilStateFaceDescriptor desc; desc.compare = to_dawn_compare_function(face.fTest); desc.failOp = desc.depthFailOp = to_dawn_stencil_operation(face.fFailOp); desc.passOp = to_dawn_stencil_operation(face.fPassOp); return desc; } -static dawn::DepthStencilStateDescriptor create_depth_stencil_state( - const GrStencilSettings& stencilSettings, - dawn::TextureFormat depthStencilFormat, - GrSurfaceOrigin origin) { - dawn::DepthStencilStateDescriptor state; +static wgpu::DepthStencilStateDescriptor create_depth_stencil_state( + const GrProgramInfo& programInfo, + wgpu::TextureFormat depthStencilFormat) { + GrStencilSettings stencilSettings = programInfo.nonGLStencilSettings(); + GrSurfaceOrigin origin = programInfo.origin(); + + wgpu::DepthStencilStateDescriptor state; state.format = depthStencilFormat; if (!stencilSettings.isDisabled()) { - const GrStencilSettings::Face& front = stencilSettings.front(origin); - state.stencilReadMask = front.fTestMask; - state.stencilWriteMask = front.fWriteMask; - state.stencilFront = to_stencil_state_face(stencilSettings.front(origin)); if (stencilSettings.isTwoSided()) { - state.stencilBack = to_stencil_state_face(stencilSettings.back(origin)); + auto front = stencilSettings.postOriginCCWFace(origin); + auto back = stencilSettings.postOriginCWFace(origin); + state.stencilFront = to_stencil_state_face(front); + state.stencilBack = to_stencil_state_face(back); + state.stencilReadMask = front.fTestMask; + state.stencilWriteMask = front.fWriteMask; } else { - state.stencilBack = state.stencilFront; + auto frontAndBack = stencilSettings.singleSidedFace(); + state.stencilBack = state.stencilFront = to_stencil_state_face(frontAndBack); + state.stencilReadMask = frontAndBack.fTestMask; + state.stencilWriteMask = frontAndBack.fWriteMask; } } return state; } -static dawn::BindGroupBinding make_bind_group_binding(uint32_t binding, const dawn::Buffer& buffer, +static wgpu::BindGroupBinding make_bind_group_binding(uint32_t binding, const wgpu::Buffer& buffer, uint32_t offset, uint32_t size, const - dawn::Sampler& sampler, - const dawn::TextureView& textureView) { - dawn::BindGroupBinding result; + wgpu::Sampler& sampler, + const wgpu::TextureView& textureView) { + wgpu::BindGroupBinding result; result.binding = binding; result.buffer = buffer; result.offset = offset; @@ -268,28 +275,27 @@ static dawn::BindGroupBinding make_bind_group_binding(uint32_t binding, const da return result; } -static dawn::BindGroupBinding make_bind_group_binding(uint32_t binding, const dawn::Buffer& buffer, +static wgpu::BindGroupBinding make_bind_group_binding(uint32_t binding, const wgpu::Buffer& buffer, uint32_t offset, uint32_t size) { return make_bind_group_binding(binding, buffer, offset, size, nullptr, nullptr); } -static dawn::BindGroupBinding make_bind_group_binding(uint32_t binding, - const dawn::Sampler& sampler) { +static wgpu::BindGroupBinding make_bind_group_binding(uint32_t binding, + const wgpu::Sampler& sampler) { return make_bind_group_binding(binding, nullptr, 0, 0, sampler, nullptr); } -static dawn::BindGroupBinding make_bind_group_binding(uint32_t binding, - const dawn::TextureView& textureView) { +static wgpu::BindGroupBinding make_bind_group_binding(uint32_t binding, + const wgpu::TextureView& textureView) { return make_bind_group_binding(binding, nullptr, 0, 0, nullptr, textureView); } sk_sp GrDawnProgramBuilder::Build(GrDawnGpu* gpu, GrRenderTarget* renderTarget, const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType, - dawn::TextureFormat colorFormat, + wgpu::TextureFormat colorFormat, bool hasDepthStencil, - dawn::TextureFormat depthStencilFormat, + wgpu::TextureFormat depthStencilFormat, GrProgramDesc* desc) { GrDawnProgramBuilder builder(gpu, renderTarget, programInfo, desc); if (!builder.emitAndInstallProcs()) { @@ -304,67 +310,67 @@ sk_sp GrDawnProgramBuilder::Build(GrDawnGpu* gpu, builder.finalizeShaders(); SkSL::Program::Inputs vertInputs, fragInputs; - GrDawnUniformHandler::UniformInfoArray& uniforms = builder.fUniformHandler.fUniforms; - uint32_t geometryUniformSize = builder.fUniformHandler.fCurrentGeometryUBOOffset; - uint32_t fragmentUniformSize = builder.fUniformHandler.fCurrentFragmentUBOOffset; - sk_sp result( - new GrDawnProgram(uniforms, geometryUniformSize, fragmentUniformSize)); bool flipY = programInfo.origin() != kTopLeft_GrSurfaceOrigin; auto vsModule = builder.createShaderModule(builder.fVS, SkSL::Program::kVertex_Kind, flipY, &vertInputs); auto fsModule = builder.createShaderModule(builder.fFS, SkSL::Program::kFragment_Kind, flipY, &fragInputs); + GrDawnUniformHandler::UniformInfoArray& uniforms = builder.fUniformHandler.fUniforms; + uint32_t uniformBufferSize = builder.fUniformHandler.fCurrentUBOOffset; + sk_sp result(new GrDawnProgram(uniforms, uniformBufferSize)); result->fGeometryProcessor = std::move(builder.fGeometryProcessor); result->fXferProcessor = std::move(builder.fXferProcessor); result->fFragmentProcessors = std::move(builder.fFragmentProcessors); result->fFragmentProcessorCnt = builder.fFragmentProcessorCnt; - std::vector layoutBindings; - if (0 != geometryUniformSize) { - layoutBindings.push_back({ GrDawnUniformHandler::kGeometryBinding, - dawn::ShaderStage::Vertex, - dawn::BindingType::UniformBuffer}); + std::vector uniformLayoutBindings; + if (0 != uniformBufferSize) { + uniformLayoutBindings.push_back({ GrDawnUniformHandler::kUniformBinding, + wgpu::ShaderStage::Vertex | wgpu::ShaderStage::Fragment, + wgpu::BindingType::UniformBuffer}); } - if (0 != fragmentUniformSize) { - layoutBindings.push_back({ GrDawnUniformHandler::kFragBinding, - dawn::ShaderStage::Fragment, - dawn::BindingType::UniformBuffer}); - } - uint32_t binding = GrDawnUniformHandler::kSamplerBindingBase; + wgpu::BindGroupLayoutDescriptor uniformBindGroupLayoutDesc; + uniformBindGroupLayoutDesc.bindingCount = uniformLayoutBindings.size(); + uniformBindGroupLayoutDesc.bindings = uniformLayoutBindings.data(); + result->fBindGroupLayouts[0] = + gpu->device().CreateBindGroupLayout(&uniformBindGroupLayoutDesc); + uint32_t binding = 0; + std::vector textureLayoutBindings; for (int i = 0; i < builder.fUniformHandler.fSamplers.count(); ++i) { - layoutBindings.push_back({ binding++, dawn::ShaderStage::Fragment, - dawn::BindingType::Sampler}); - layoutBindings.push_back({ binding++, dawn::ShaderStage::Fragment, - dawn::BindingType::SampledTexture}); + textureLayoutBindings.push_back({ binding++, wgpu::ShaderStage::Fragment, + wgpu::BindingType::Sampler}); + textureLayoutBindings.push_back({ binding++, wgpu::ShaderStage::Fragment, + wgpu::BindingType::SampledTexture}); } - dawn::BindGroupLayoutDescriptor bindGroupLayoutDesc; - bindGroupLayoutDesc.bindingCount = layoutBindings.size(); - bindGroupLayoutDesc.bindings = layoutBindings.data(); - result->fBindGroupLayout = gpu->device().CreateBindGroupLayout(&bindGroupLayoutDesc); - dawn::PipelineLayoutDescriptor pipelineLayoutDesc; - pipelineLayoutDesc.bindGroupLayoutCount = 1; - pipelineLayoutDesc.bindGroupLayouts = &result->fBindGroupLayout; + wgpu::BindGroupLayoutDescriptor textureBindGroupLayoutDesc; + textureBindGroupLayoutDesc.bindingCount = textureLayoutBindings.size(); + textureBindGroupLayoutDesc.bindings = textureLayoutBindings.data(); + result->fBindGroupLayouts[1] = + gpu->device().CreateBindGroupLayout(&textureBindGroupLayoutDesc); + wgpu::PipelineLayoutDescriptor pipelineLayoutDesc; + pipelineLayoutDesc.bindGroupLayoutCount = 2; + pipelineLayoutDesc.bindGroupLayouts = &result->fBindGroupLayouts[0]; auto pipelineLayout = gpu->device().CreatePipelineLayout(&pipelineLayoutDesc); result->fBuiltinUniformHandles = builder.fUniformHandles; const GrPipeline& pipeline = programInfo.pipeline(); auto colorState = create_color_state(gpu, pipeline, colorFormat); - dawn::DepthStencilStateDescriptor depthStencilState; - GrStencilSettings stencil; + wgpu::DepthStencilStateDescriptor depthStencilState; + +#ifdef SK_DEBUG if (pipeline.isStencilEnabled()) { - int numStencilBits = renderTarget->renderTargetPriv().numStencilBits(); - stencil.reset(*pipeline.getUserStencil(), pipeline.hasStencilClip(), numStencilBits); + SkASSERT(renderTarget->renderTargetPriv().numStencilBits() == 8); } - depthStencilState = create_depth_stencil_state(stencil, depthStencilFormat, - programInfo.origin()); +#endif + depthStencilState = create_depth_stencil_state(programInfo, depthStencilFormat); - std::vector inputs; + std::vector inputs; - std::vector vertexAttributes; + std::vector vertexAttributes; const GrPrimitiveProcessor& primProc = programInfo.primProc(); if (primProc.numVertexAttributes() > 0) { size_t offset = 0; int i = 0; for (const auto& attrib : primProc.vertexAttributes()) { - dawn::VertexAttributeDescriptor attribute; + wgpu::VertexAttributeDescriptor attribute; attribute.shaderLocation = i; attribute.offset = offset; attribute.format = to_dawn_vertex_format(attrib.cpuType()); @@ -372,19 +378,19 @@ sk_sp GrDawnProgramBuilder::Build(GrDawnGpu* gpu, offset += attrib.sizeAlign4(); i++; } - dawn::VertexBufferDescriptor input; - input.stride = offset; - input.stepMode = dawn::InputStepMode::Vertex; + wgpu::VertexBufferLayoutDescriptor input; + input.arrayStride = offset; + input.stepMode = wgpu::InputStepMode::Vertex; input.attributeCount = vertexAttributes.size(); input.attributes = &vertexAttributes.front(); inputs.push_back(input); } - std::vector instanceAttributes; + std::vector instanceAttributes; if (primProc.numInstanceAttributes() > 0) { size_t offset = 0; int i = 0; for (const auto& attrib : primProc.instanceAttributes()) { - dawn::VertexAttributeDescriptor attribute; + wgpu::VertexAttributeDescriptor attribute; attribute.shaderLocation = i; attribute.offset = offset; attribute.format = to_dawn_vertex_format(attrib.cpuType()); @@ -392,32 +398,32 @@ sk_sp GrDawnProgramBuilder::Build(GrDawnGpu* gpu, offset += attrib.sizeAlign4(); i++; } - dawn::VertexBufferDescriptor input; - input.stride = offset; - input.stepMode = dawn::InputStepMode::Instance; + wgpu::VertexBufferLayoutDescriptor input; + input.arrayStride = offset; + input.stepMode = wgpu::InputStepMode::Instance; input.attributeCount = instanceAttributes.size(); input.attributes = &instanceAttributes.front(); inputs.push_back(input); } - dawn::VertexInputDescriptor vertexInput; - vertexInput.indexFormat = dawn::IndexFormat::Uint16; - vertexInput.bufferCount = inputs.size(); - vertexInput.buffers = &inputs.front(); + wgpu::VertexStateDescriptor vertexState; + vertexState.indexFormat = wgpu::IndexFormat::Uint16; + vertexState.vertexBufferCount = inputs.size(); + vertexState.vertexBuffers = &inputs.front(); - dawn::ProgrammableStageDescriptor vsDesc; + wgpu::ProgrammableStageDescriptor vsDesc; vsDesc.module = vsModule; vsDesc.entryPoint = "main"; - dawn::ProgrammableStageDescriptor fsDesc; + wgpu::ProgrammableStageDescriptor fsDesc; fsDesc.module = fsModule; fsDesc.entryPoint = "main"; - dawn::RenderPipelineDescriptor rpDesc; + wgpu::RenderPipelineDescriptor rpDesc; rpDesc.layout = pipelineLayout; rpDesc.vertexStage = vsDesc; rpDesc.fragmentStage = &fsDesc; - rpDesc.vertexInput = &vertexInput; - rpDesc.primitiveTopology = to_dawn_primitive_topology(primitiveType); + rpDesc.vertexState = &vertexState; + rpDesc.primitiveTopology = to_dawn_primitive_topology(programInfo.primitiveType()); if (hasDepthStencil) { rpDesc.depthStencilState = &depthStencilState; } @@ -437,11 +443,11 @@ GrDawnProgramBuilder::GrDawnProgramBuilder(GrDawnGpu* gpu, , fUniformHandler(this) { } -dawn::ShaderModule GrDawnProgramBuilder::createShaderModule(const GrGLSLShaderBuilder& builder, +wgpu::ShaderModule GrDawnProgramBuilder::createShaderModule(const GrGLSLShaderBuilder& builder, SkSL::Program::Kind kind, bool flipY, SkSL::Program::Inputs* inputs) { - dawn::Device device = fGpu->device(); + wgpu::Device device = fGpu->device(); SkString source(builder.fCompilerString.c_str()); #if 0 @@ -449,9 +455,13 @@ dawn::ShaderModule GrDawnProgramBuilder::createShaderModule(const GrGLSLShaderBu printf("converting program:\n%s\n", sksl.c_str()); #endif - SkSL::String spirvSource = sksl_to_spirv(fGpu, source.c_str(), kind, flipY, inputs); + SkSL::String spirvSource = sksl_to_spirv(fGpu, source.c_str(), kind, flipY, + fUniformHandler.getRTHeightOffset(), inputs); + if (inputs->fRTHeight) { + this->addRTHeightUniform(SKSL_RTHEIGHT_NAME); + } - dawn::ShaderModuleDescriptor desc; + wgpu::ShaderModuleDescriptor desc; desc.codeSize = spirvSource.size() / 4; desc.code = reinterpret_cast(spirvSource.c_str()); @@ -470,12 +480,11 @@ void GrDawnProgram::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrig } // set RT adjustment - SkISize size; - size.set(rt->width(), rt->height()); + SkISize dimensions = rt->dimensions(); SkASSERT(fBuiltinUniformHandles.fRTAdjustmentUni.isValid()); if (fRenderTargetState.fRenderTargetOrigin != origin || - fRenderTargetState.fRenderTargetSize != size) { - fRenderTargetState.fRenderTargetSize = size; + fRenderTargetState.fRenderTargetSize != dimensions) { + fRenderTargetState.fRenderTargetSize = dimensions; fRenderTargetState.fRenderTargetOrigin = origin; float rtAdjustmentVec[4]; @@ -484,71 +493,77 @@ void GrDawnProgram::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrig } } -static void setTexture(GrDawnGpu* gpu, const GrSamplerState& state, GrTexture* texture, - std::vector *bindings, int* binding) { +static void set_texture(GrDawnGpu* gpu, const GrSamplerState& state, GrTexture* texture, + std::vector *bindings, int* binding) { // FIXME: could probably cache samplers in GrDawnProgram - dawn::Sampler sampler = gpu->getOrCreateSampler(state); + wgpu::Sampler sampler = gpu->getOrCreateSampler(state); bindings->push_back(make_bind_group_binding((*binding)++, sampler)); GrDawnTexture* tex = static_cast(texture); - dawn::TextureView textureView = tex->textureView(); + wgpu::TextureView textureView = tex->textureView(); bindings->push_back(make_bind_group_binding((*binding)++, textureView)); } -dawn::BindGroup GrDawnProgram::setData(GrDawnGpu* gpu, const GrRenderTarget* renderTarget, - const GrProgramInfo& programInfo) { - std::vector bindings; - GrDawnRingBuffer::Slice geom, frag; - uint32_t geometryUniformSize = fDataManager.geometryUniformSize(); - uint32_t fragmentUniformSize = fDataManager.fragmentUniformSize(); - if (0 != geometryUniformSize) { - geom = gpu->allocateUniformRingBufferSlice(geometryUniformSize); - bindings.push_back(make_bind_group_binding(GrDawnUniformHandler::kGeometryBinding, - geom.fBuffer, geom.fOffset, - geometryUniformSize)); - } - if (0 != fragmentUniformSize) { - frag = gpu->allocateUniformRingBufferSlice(fragmentUniformSize); - bindings.push_back(make_bind_group_binding(GrDawnUniformHandler::kFragBinding, - frag.fBuffer, frag.fOffset, - fragmentUniformSize)); +wgpu::BindGroup GrDawnProgram::setUniformData(GrDawnGpu* gpu, const GrRenderTarget* renderTarget, + const GrProgramInfo& programInfo) { + std::vector bindings; + GrDawnRingBuffer::Slice slice; + uint32_t uniformBufferSize = fDataManager.uniformBufferSize(); + if (0 != uniformBufferSize) { + slice = gpu->allocateUniformRingBufferSlice(uniformBufferSize); + bindings.push_back(make_bind_group_binding(GrDawnUniformHandler::kUniformBinding, + slice.fBuffer, slice.fOffset, + uniformBufferSize)); } this->setRenderTargetState(renderTarget, programInfo.origin()); const GrPipeline& pipeline = programInfo.pipeline(); const GrPrimitiveProcessor& primProc = programInfo.primProc(); - fGeometryProcessor->setData(fDataManager, primProc, - GrFragmentProcessor::CoordTransformIter(pipeline)); - int binding = GrDawnUniformHandler::kSamplerBindingBase; - auto primProcTextures = programInfo.hasFixedPrimProcTextures() ? - programInfo.fixedPrimProcTextures() : nullptr; - - for (int i = 0; i < primProc.numTextureSamplers(); ++i) { - auto& sampler = primProc.textureSampler(i); - setTexture(gpu, sampler.samplerState(), primProcTextures[i]->peekTexture(), &bindings, - &binding); - } - GrFragmentProcessor::Iter iter(pipeline); + GrFragmentProcessor::PipelineCoordTransformRange transformRange(pipeline); + fGeometryProcessor->setData(fDataManager, primProc, transformRange); + GrFragmentProcessor::CIter fpIter(pipeline); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); - const GrFragmentProcessor* fp = iter.next(); - GrGLSLFragmentProcessor* glslFP = glslIter.next(); - while (fp && glslFP) { - glslFP->setData(fDataManager, *fp); - for (int i = 0; i < fp->numTextureSamplers(); ++i) { - auto& s = fp->textureSampler(i); - setTexture(gpu, s.samplerState(), s.peekTexture(), &bindings, &binding); - } - fp = iter.next(); - glslFP = glslIter.next(); + for (; fpIter && glslIter; ++fpIter, ++glslIter) { + glslIter->setData(fDataManager, *fpIter); } SkIPoint offset; GrTexture* dstTexture = pipeline.peekDstTexture(&offset); fXferProcessor->setData(fDataManager, pipeline.getXferProcessor(), dstTexture, offset); - if (GrTextureProxy* proxy = pipeline.dstTextureProxy()) { - GrFragmentProcessor::TextureSampler sampler(sk_ref_sp(proxy)); - setTexture(gpu, sampler.samplerState(), sampler.peekTexture(), &bindings, &binding); + fDataManager.uploadUniformBuffers(gpu, slice); + wgpu::BindGroupDescriptor descriptor; + descriptor.layout = fBindGroupLayouts[0]; + descriptor.bindingCount = bindings.size(); + descriptor.bindings = bindings.data(); + return gpu->device().CreateBindGroup(&descriptor); +} + +wgpu::BindGroup GrDawnProgram::setTextures(GrDawnGpu* gpu, + const GrProgramInfo& programInfo, + const GrSurfaceProxy* const primProcTextures[]) { + std::vector bindings; + int binding = 0; + const GrPipeline& pipeline = programInfo.pipeline(); + const GrPrimitiveProcessor& primProc = programInfo.primProc(); + if (primProcTextures) { + for (int i = 0; i < primProc.numTextureSamplers(); ++i) { + SkASSERT(primProcTextures[i]->asTextureProxy()); + auto& sampler = primProc.textureSampler(i); + set_texture(gpu, sampler.samplerState(), primProcTextures[i]->peekTexture(), &bindings, + &binding); + } + } + GrFragmentProcessor::CIter fpIter(pipeline); + GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); + for (; fpIter && glslIter; ++fpIter, ++glslIter) { + for (int i = 0; i < fpIter->numTextureSamplers(); ++i) { + auto& s = fpIter->textureSampler(i); + set_texture(gpu, s.samplerState(), s.peekTexture(), &bindings, &binding); + } + } + SkIPoint offset; + if (GrTexture* dstTexture = pipeline.peekDstTexture(&offset)) { + set_texture(gpu, GrSamplerState::ClampNearest(), dstTexture, &bindings, &binding); } - fDataManager.uploadUniformBuffers(gpu, geom, frag); - dawn::BindGroupDescriptor descriptor; - descriptor.layout = fBindGroupLayout; + wgpu::BindGroupDescriptor descriptor; + descriptor.layout = fBindGroupLayouts[1]; descriptor.bindingCount = bindings.size(); descriptor.bindings = bindings.data(); return gpu->device().CreateBindGroup(&descriptor); diff --git a/third_party/skia/src/gpu/dawn/GrDawnProgramBuilder.h b/third_party/skia/src/gpu/dawn/GrDawnProgramBuilder.h index 1cc323174118..004ab1fa7d78 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnProgramBuilder.h +++ b/third_party/skia/src/gpu/dawn/GrDawnProgramBuilder.h @@ -12,7 +12,7 @@ #include "src/gpu/dawn/GrDawnUniformHandler.h" #include "src/gpu/dawn/GrDawnVaryingHandler.h" #include "src/sksl/SkSLCompiler.h" -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" #include "src/gpu/glsl/GrGLSLProgramBuilder.h" class GrPipeline; @@ -50,34 +50,35 @@ struct GrDawnProgram : public SkRefCnt { }; typedef GrGLSLBuiltinUniformHandles BuiltinUniformHandles; GrDawnProgram(const GrDawnUniformHandler::UniformInfoArray& uniforms, - uint32_t geometryUniformSize, - uint32_t fragmentUniformSize) - : fDataManager(uniforms, geometryUniformSize, fragmentUniformSize) { + uint32_t uniformBufferSize) + : fDataManager(uniforms, uniformBufferSize) { } std::unique_ptr fGeometryProcessor; std::unique_ptr fXferProcessor; std::unique_ptr[]> fFragmentProcessors; int fFragmentProcessorCnt; - dawn::BindGroupLayout fBindGroupLayout; - dawn::RenderPipeline fRenderPipeline; + wgpu::BindGroupLayout fBindGroupLayouts[2]; + wgpu::RenderPipeline fRenderPipeline; GrDawnProgramDataManager fDataManager; RenderTargetState fRenderTargetState; BuiltinUniformHandles fBuiltinUniformHandles; void setRenderTargetState(const GrRenderTarget*, GrSurfaceOrigin); - dawn::BindGroup setData(GrDawnGpu* gpu, const GrRenderTarget*, const GrProgramInfo&); + wgpu::BindGroup setUniformData(GrDawnGpu*, const GrRenderTarget*, const GrProgramInfo&); + wgpu::BindGroup setTextures(GrDawnGpu* gpu, + const GrProgramInfo& programInfo, + const GrSurfaceProxy* const primProcTextures[]); }; class GrDawnProgramBuilder : public GrGLSLProgramBuilder { public: static sk_sp Build(GrDawnGpu*, - GrRenderTarget* rt, - const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType, - dawn::TextureFormat colorFormat, + GrRenderTarget*, + const GrProgramInfo&, + wgpu::TextureFormat colorFormat, bool hasDepthStencil, - dawn::TextureFormat depthStencilFormat, - GrProgramDesc* desc); + wgpu::TextureFormat depthStencilFormat, + GrProgramDesc*); const GrCaps* caps() const override; GrGLSLUniformHandler* uniformHandler() override { return &fUniformHandler; } const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; } @@ -90,7 +91,7 @@ class GrDawnProgramBuilder : public GrGLSLProgramBuilder { GrRenderTarget*, const GrProgramInfo&, GrProgramDesc*); - dawn::ShaderModule createShaderModule(const GrGLSLShaderBuilder&, SkSL::Program::Kind, + wgpu::ShaderModule createShaderModule(const GrGLSLShaderBuilder&, SkSL::Program::Kind, bool flipY, SkSL::Program::Inputs* inputs); GrDawnGpu* fGpu; GrDawnVaryingHandler fVaryingHandler; diff --git a/third_party/skia/src/gpu/dawn/GrDawnProgramDataManager.cpp b/third_party/skia/src/gpu/dawn/GrDawnProgramDataManager.cpp index db22f255f334..c740edc534a2 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnProgramDataManager.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnProgramDataManager.cpp @@ -10,16 +10,11 @@ #include "src/gpu/dawn/GrDawnGpu.h" GrDawnProgramDataManager::GrDawnProgramDataManager(const UniformInfoArray& uniforms, - uint32_t geometryUniformSize, - uint32_t fragmentUniformSize) - : fGeometryUniformSize(geometryUniformSize) - , fFragmentUniformSize(fragmentUniformSize) - , fGeometryUniformsDirty(false) - , fFragmentUniformsDirty(false) { - fGeometryUniformData.reset(geometryUniformSize); - fFragmentUniformData.reset(fragmentUniformSize); - memset(fGeometryUniformData.get(), 0, fGeometryUniformSize); - memset(fFragmentUniformData.get(), 0, fFragmentUniformSize); + uint32_t uniformBufferSize) + : fUniformBufferSize(uniformBufferSize) + , fUniformsDirty(false) { + fUniformData.reset(uniformBufferSize); + memset(fUniformData.get(), 0, fUniformBufferSize); int count = uniforms.count(); fUniforms.push_back_n(count); // We must add uniforms in same order is the UniformInfoArray so that UniformHandles already @@ -30,30 +25,14 @@ GrDawnProgramDataManager::GrDawnProgramDataManager(const UniformInfoArray& unifo SkDEBUGCODE( uniform.fArrayCount = uniformInfo.fVar.getArrayCount(); uniform.fType = uniformInfo.fVar.getType(); - ); - - if (!(kFragment_GrShaderFlag & uniformInfo.fVisibility)) { - uniform.fBinding = GrDawnUniformHandler::kGeometryBinding; - } else { - SkASSERT(kFragment_GrShaderFlag == uniformInfo.fVisibility); - uniform.fBinding = GrDawnUniformHandler::kFragBinding; - } + ) uniform.fOffset = uniformInfo.fUBOOffset; } } void* GrDawnProgramDataManager::getBufferPtrAndMarkDirty(const Uniform& uni) const { - void* buffer; - if (GrDawnUniformHandler::kGeometryBinding == uni.fBinding) { - buffer = fGeometryUniformData.get(); - fGeometryUniformsDirty = true; - } else { - SkASSERT(GrDawnUniformHandler::kFragBinding == uni.fBinding); - buffer = fFragmentUniformData.get(); - fFragmentUniformsDirty = true; - } - buffer = static_cast(buffer)+uni.fOffset; - return buffer; + fUniformsDirty = true; + return static_cast(fUniformData.get()) + uni.fOffset; } void GrDawnProgramDataManager::set1i(UniformHandle u, int32_t i) const { @@ -230,17 +209,8 @@ template inline void GrDawnProgramDataManager::setMatrices(UniformHandle int arrayCount, const float matrices[]) const { const Uniform& uni = fUniforms[u.toIndex()]; - void* buffer; - if (GrDawnUniformHandler::kGeometryBinding == uni.fBinding) { - buffer = fGeometryUniformData.get(); - fGeometryUniformsDirty = true; - } else { - SkASSERT(GrDawnUniformHandler::kFragBinding == uni.fBinding); - buffer = fFragmentUniformData.get(); - fFragmentUniformsDirty = true; - } - - set_uniform_matrix::set(buffer, uni.fOffset, arrayCount, matrices); + fUniformsDirty = true; + set_uniform_matrix::set(fUniformData.get(), uni.fOffset, arrayCount, matrices); } template struct set_uniform_matrix { @@ -266,25 +236,13 @@ template<> struct set_uniform_matrix<4> { }; void GrDawnProgramDataManager::uploadUniformBuffers(GrDawnGpu* gpu, - GrDawnRingBuffer::Slice geometryBuffer, - GrDawnRingBuffer::Slice fragmentBuffer) const { - dawn::Buffer geom = geometryBuffer.fBuffer; - uint32_t geomOffset = geometryBuffer.fOffset; - dawn::Buffer frag = fragmentBuffer.fBuffer; - uint32_t fragOffset = fragmentBuffer.fOffset; + GrDawnRingBuffer::Slice slice) const { auto copyEncoder = gpu->getCopyEncoder(); - if (geom && fGeometryUniformsDirty) { - GrDawnStagingBuffer* stagingBuffer = gpu->getStagingBuffer(fGeometryUniformSize); - memcpy(stagingBuffer->fData, fGeometryUniformData.get(), fGeometryUniformSize); - stagingBuffer->fBuffer.Unmap(); - copyEncoder - .CopyBufferToBuffer(stagingBuffer->fBuffer, 0, geom, geomOffset, fGeometryUniformSize); - } - if (frag && fFragmentUniformsDirty) { - GrDawnStagingBuffer* stagingBuffer = gpu->getStagingBuffer(fFragmentUniformSize); - memcpy(stagingBuffer->fData, fFragmentUniformData.get(), fFragmentUniformSize); + if (slice.fBuffer && fUniformsDirty) { + GrDawnStagingBuffer* stagingBuffer = gpu->getStagingBuffer(fUniformBufferSize); + memcpy(stagingBuffer->fData, fUniformData.get(), fUniformBufferSize); stagingBuffer->fBuffer.Unmap(); - copyEncoder - .CopyBufferToBuffer(stagingBuffer->fBuffer, 0, frag, fragOffset, fFragmentUniformSize); + copyEncoder.CopyBufferToBuffer( + stagingBuffer->fBuffer, 0, slice.fBuffer, slice.fOffset, fUniformBufferSize); } } diff --git a/third_party/skia/src/gpu/dawn/GrDawnProgramDataManager.h b/third_party/skia/src/gpu/dawn/GrDawnProgramDataManager.h index b77d5ffe3f05..cc7cb8c084eb 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnProgramDataManager.h +++ b/third_party/skia/src/gpu/dawn/GrDawnProgramDataManager.h @@ -11,7 +11,7 @@ #include "src/gpu/dawn/GrDawnRingBuffer.h" #include "src/gpu/dawn/GrDawnUniformHandler.h" #include "src/gpu/glsl/GrGLSLProgramDataManager.h" -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" #include "src/core/SkAutoMalloc.h" @@ -22,9 +22,7 @@ class GrDawnProgramDataManager : public GrGLSLProgramDataManager { public: typedef GrDawnUniformHandler::UniformInfoArray UniformInfoArray; - GrDawnProgramDataManager(const UniformInfoArray&, - uint32_t geometryUniformSize, - uint32_t fragmentUniformSize); + GrDawnProgramDataManager(const UniformInfoArray&, uint32_t uniformBufferSize); void set1i(UniformHandle, int32_t) const override; void set1iv(UniformHandle, int arrayCount, const int32_t v[]) const override; @@ -58,15 +56,11 @@ class GrDawnProgramDataManager : public GrGLSLProgramDataManager { SK_ABORT("Only supported in NVPR, which is not in Dawn"); } - void uploadUniformBuffers(GrDawnGpu* gpu, - GrDawnRingBuffer::Slice geometryBuffer, - GrDawnRingBuffer::Slice fragmentBuffer) const; + void uploadUniformBuffers(GrDawnGpu* gpu, GrDawnRingBuffer::Slice uniformBuffer) const; - uint32_t geometryUniformSize() const { return fGeometryUniformSize; } - uint32_t fragmentUniformSize() const { return fFragmentUniformSize; } + uint32_t uniformBufferSize() const { return fUniformBufferSize; } private: struct Uniform { - uint32_t fBinding; uint32_t fOffset; SkDEBUGCODE( GrSLType fType; @@ -79,15 +73,12 @@ class GrDawnProgramDataManager : public GrGLSLProgramDataManager { void* getBufferPtrAndMarkDirty(const Uniform& uni) const; - uint32_t fGeometryUniformSize; - uint32_t fFragmentUniformSize; + uint32_t fUniformBufferSize; SkTArray fUniforms; - mutable SkAutoMalloc fGeometryUniformData; - mutable SkAutoMalloc fFragmentUniformData; - mutable bool fGeometryUniformsDirty; - mutable bool fFragmentUniformsDirty; + mutable SkAutoMalloc fUniformData; + mutable bool fUniformsDirty; }; #endif diff --git a/third_party/skia/src/gpu/dawn/GrDawnRenderTarget.cpp b/third_party/skia/src/gpu/dawn/GrDawnRenderTarget.cpp index a75ab13fba06..246761b7f083 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnRenderTarget.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnRenderTarget.cpp @@ -12,22 +12,20 @@ #include "src/gpu/dawn/GrDawnUtil.h" GrDawnRenderTarget::GrDawnRenderTarget(GrDawnGpu* gpu, - const SkISize& size, + const SkISize& dimensions, GrPixelConfig config, int sampleCnt, const GrDawnImageInfo& info) - : GrSurface(gpu, size, config, GrProtected::kNo) - , GrRenderTarget(gpu, size, config, sampleCnt, GrProtected::kNo) - , fInfo(info) { -} - -sk_sp -GrDawnRenderTarget::MakeWrapped(GrDawnGpu* gpu, - const SkISize& size, - GrPixelConfig config, - int sampleCnt, - const GrDawnImageInfo& info) { - sk_sp rt(new GrDawnRenderTarget(gpu, size, config, sampleCnt, info)); + : GrSurface(gpu, dimensions, config, GrProtected::kNo) + , GrRenderTarget(gpu, dimensions, config, sampleCnt, GrProtected::kNo) + , fInfo(info) {} + +sk_sp GrDawnRenderTarget::MakeWrapped(GrDawnGpu* gpu, + const SkISize& dimensions, + GrPixelConfig config, + int sampleCnt, + const GrDawnImageInfo& info) { + sk_sp rt(new GrDawnRenderTarget(gpu, dimensions, config, sampleCnt, info)); rt->registerWithCacheWrapped(GrWrapCacheable::kNo); return rt; } @@ -36,8 +34,8 @@ size_t GrDawnRenderTarget::onGpuMemorySize() const { // The plus 1 is to account for the resolve texture or if not using msaa the RT itself int numSamples = this->numSamples() + 1; const GrCaps& caps = *getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), - numSamples, GrMipMapped::kNo); + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), numSamples, + GrMipMapped::kNo); } bool GrDawnRenderTarget::completeStencilAttachment() { diff --git a/third_party/skia/src/gpu/dawn/GrDawnRenderTarget.h b/third_party/skia/src/gpu/dawn/GrDawnRenderTarget.h index fe5c77fba1c4..f93d4985c356 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnRenderTarget.h +++ b/third_party/skia/src/gpu/dawn/GrDawnRenderTarget.h @@ -15,7 +15,7 @@ class GrDawnGpu; class GrDawnRenderTarget: public GrRenderTarget { public: - static sk_sp MakeWrapped(GrDawnGpu*, const SkISize& size, + static sk_sp MakeWrapped(GrDawnGpu*, const SkISize& dimensions, GrPixelConfig config, int sampleCnt, const GrDawnImageInfo&); @@ -27,11 +27,11 @@ class GrDawnRenderTarget: public GrRenderTarget { GrBackendRenderTarget getBackendRenderTarget() const override; GrBackendFormat backendFormat() const override; - dawn::Texture texture() const { return fInfo.fTexture; } + wgpu::Texture texture() const { return fInfo.fTexture; } protected: GrDawnRenderTarget(GrDawnGpu* gpu, - const SkISize& size, + const SkISize& dimensions, GrPixelConfig config, int sampleCnt, const GrDawnImageInfo& info); diff --git a/third_party/skia/src/gpu/dawn/GrDawnRingBuffer.cpp b/third_party/skia/src/gpu/dawn/GrDawnRingBuffer.cpp index caf0d578ee4c..74ea72f0bace 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnRingBuffer.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnRingBuffer.cpp @@ -14,7 +14,7 @@ namespace { const int kDefaultSize = 512 * 1024; } -GrDawnRingBuffer::GrDawnRingBuffer(GrDawnGpu* gpu, dawn::BufferUsage usage) +GrDawnRingBuffer::GrDawnRingBuffer(GrDawnGpu* gpu, wgpu::BufferUsage usage) : fGpu(gpu) , fUsage(usage) { } @@ -23,8 +23,8 @@ GrDawnRingBuffer::~GrDawnRingBuffer() { GrDawnRingBuffer::Slice GrDawnRingBuffer::allocate(int size) { if (!fBuffer || fOffset + size > kDefaultSize) { - dawn::BufferDescriptor desc; - desc.usage = fUsage | dawn::BufferUsage::CopyDst; + wgpu::BufferDescriptor desc; + desc.usage = fUsage | wgpu::BufferUsage::CopyDst; desc.size = kDefaultSize; fBuffer = fGpu->device().CreateBuffer(&desc); fOffset = 0; diff --git a/third_party/skia/src/gpu/dawn/GrDawnRingBuffer.h b/third_party/skia/src/gpu/dawn/GrDawnRingBuffer.h index 0dbe5059af1d..d44c25d9fe35 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnRingBuffer.h +++ b/third_party/skia/src/gpu/dawn/GrDawnRingBuffer.h @@ -10,17 +10,17 @@ #include "src/gpu/GrBuffer.h" #include "src/gpu/dawn/GrDawnBuffer.h" -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" class GrDawnGpu; class GrDawnRingBuffer : public SkRefCnt { public: - GrDawnRingBuffer(GrDawnGpu* gpu, dawn::BufferUsage usage); + GrDawnRingBuffer(GrDawnGpu* gpu, wgpu::BufferUsage usage); ~GrDawnRingBuffer() override; struct Slice { - Slice(dawn::Buffer buffer, int offset) : fBuffer(buffer), fOffset(offset) {} + Slice(wgpu::Buffer buffer, int offset) : fBuffer(buffer), fOffset(offset) {} Slice() : fBuffer(nullptr), fOffset(0) {} Slice(const Slice& other) : fBuffer(other.fBuffer), fOffset(other.fOffset) {} Slice& operator=(const Slice& other) { @@ -28,15 +28,15 @@ class GrDawnRingBuffer : public SkRefCnt { fOffset = other.fOffset; return *this; } - dawn::Buffer fBuffer; + wgpu::Buffer fBuffer; int fOffset; }; Slice allocate(int size); private: GrDawnGpu* fGpu; - dawn::BufferUsage fUsage; - dawn::Buffer fBuffer; + wgpu::BufferUsage fUsage; + wgpu::Buffer fBuffer; int fOffset = 0; }; diff --git a/third_party/skia/src/gpu/dawn/GrDawnStagingManager.cpp b/third_party/skia/src/gpu/dawn/GrDawnStagingManager.cpp index 68e0e9785f06..e655722a3ae1 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnStagingManager.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnStagingManager.cpp @@ -9,7 +9,7 @@ #include "src/core/SkMathPriv.h" -GrDawnStagingManager::GrDawnStagingManager(dawn::Device device) : fDevice(device) { +GrDawnStagingManager::GrDawnStagingManager(wgpu::Device device) : fDevice(device) { } GrDawnStagingManager::~GrDawnStagingManager() { @@ -27,10 +27,10 @@ GrDawnStagingBuffer* GrDawnStagingManager::findOrCreateStagingBuffer(size_t size stagingBuffer = i->second; fReadyPool.erase(i); } else { - dawn::BufferDescriptor desc; - desc.usage = dawn::BufferUsage::MapWrite | dawn::BufferUsage::CopySrc; + wgpu::BufferDescriptor desc; + desc.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc; desc.size = sizePow2; - dawn::CreateBufferMappedResult result = fDevice.CreateBufferMapped(&desc); + wgpu::CreateBufferMappedResult result = fDevice.CreateBufferMapped(&desc); std::unique_ptr b(new GrDawnStagingBuffer( this, result.buffer, sizePow2, result.data)); stagingBuffer = b.get(); @@ -40,7 +40,7 @@ GrDawnStagingBuffer* GrDawnStagingManager::findOrCreateStagingBuffer(size_t size return stagingBuffer; } -static void callback(DawnBufferMapAsyncStatus status, void* data, uint64_t dataLength, +static void callback(WGPUBufferMapAsyncStatus status, void* data, uint64_t dataLength, void* userData) { GrDawnStagingBuffer* buffer = static_cast(userData); buffer->fData = data; diff --git a/third_party/skia/src/gpu/dawn/GrDawnStagingManager.h b/third_party/skia/src/gpu/dawn/GrDawnStagingManager.h index b3974ada6ce3..1bcc339ec359 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnStagingManager.h +++ b/third_party/skia/src/gpu/dawn/GrDawnStagingManager.h @@ -12,13 +12,13 @@ #include #include -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" struct GrDawnStagingBuffer; class GrDawnStagingManager { public: - GrDawnStagingManager(dawn::Device device); + GrDawnStagingManager(wgpu::Device device); ~GrDawnStagingManager(); GrDawnStagingBuffer* findOrCreateStagingBuffer(size_t size); @@ -26,7 +26,7 @@ class GrDawnStagingManager { void mapBusyList(); private: - dawn::Device fDevice; + wgpu::Device fDevice; std::vector> fBuffers; std::multimap fReadyPool; std::vector fBusyList; @@ -34,14 +34,14 @@ class GrDawnStagingManager { }; struct GrDawnStagingBuffer { - GrDawnStagingBuffer(GrDawnStagingManager* manager, dawn::Buffer buffer, size_t size, + GrDawnStagingBuffer(GrDawnStagingManager* manager, wgpu::Buffer buffer, size_t size, void* data) : fManager(manager), fBuffer(buffer), fSize(size), fData(data) {} ~GrDawnStagingBuffer() { fManager = nullptr; } GrDawnStagingManager* fManager; - dawn::Buffer fBuffer; + wgpu::Buffer fBuffer; size_t fSize; void* fData; }; diff --git a/third_party/skia/src/gpu/dawn/GrDawnStencilAttachment.cpp b/third_party/skia/src/gpu/dawn/GrDawnStencilAttachment.cpp index 7e4047a14655..b96107bdfbb7 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnStencilAttachment.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnStencilAttachment.cpp @@ -17,8 +17,8 @@ GrDawnStencilAttachment::GrDawnStencilAttachment(GrDawnGpu* gpu, int height, int bits, int samples, - dawn::Texture texture, - dawn::TextureView view) + wgpu::Texture texture, + wgpu::TextureView view) : INHERITED(gpu, width, height, bits, samples) , fTexture(texture) , fView(view) { @@ -29,17 +29,17 @@ GrDawnStencilAttachment* GrDawnStencilAttachment::Create(GrDawnGpu* gpu, int width, int height, int sampleCnt) { - dawn::TextureDescriptor desc; - desc.usage = dawn::TextureUsage::OutputAttachment; + wgpu::TextureDescriptor desc; + desc.usage = wgpu::TextureUsage::OutputAttachment; desc.size.width = width; desc.size.height = height; desc.size.depth = 1; - desc.format = dawn::TextureFormat::Depth24PlusStencil8; - dawn::Texture texture = gpu->device().CreateTexture(&desc); + desc.format = wgpu::TextureFormat::Depth24PlusStencil8; + wgpu::Texture texture = gpu->device().CreateTexture(&desc); if (!texture) { return nullptr; } - dawn::TextureView view = texture.CreateView(); + wgpu::TextureView view = texture.CreateView(); if (!view) { return nullptr; } diff --git a/third_party/skia/src/gpu/dawn/GrDawnStencilAttachment.h b/third_party/skia/src/gpu/dawn/GrDawnStencilAttachment.h index b0afc2358530..110af1f08aa0 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnStencilAttachment.h +++ b/third_party/skia/src/gpu/dawn/GrDawnStencilAttachment.h @@ -10,7 +10,7 @@ #include "src/gpu/GrStencilAttachment.h" -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" class GrDawnGpu; @@ -20,7 +20,7 @@ class GrDawnStencilAttachment : public GrStencilAttachment { int sampleCnt); ~GrDawnStencilAttachment() override; - dawn::TextureView view() const { return fView; } + wgpu::TextureView view() const { return fView; } protected: void onRelease() override; @@ -30,12 +30,12 @@ class GrDawnStencilAttachment : public GrStencilAttachment { size_t onGpuMemorySize() const override; GrDawnStencilAttachment(GrDawnGpu* gpu, int width, int height, int bits, int samples, - dawn::Texture texture, dawn::TextureView view); + wgpu::Texture texture, wgpu::TextureView view); GrDawnGpu* getDawnGpu() const; - dawn::Texture fTexture; - dawn::TextureView fView; + wgpu::Texture fTexture; + wgpu::TextureView fView; typedef GrStencilAttachment INHERITED; }; diff --git a/third_party/skia/src/gpu/dawn/GrDawnTexture.cpp b/third_party/skia/src/gpu/dawn/GrDawnTexture.cpp index aa7f60755b3c..9735ffd3ce3c 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnTexture.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnTexture.cpp @@ -7,52 +7,53 @@ #include "src/gpu/dawn/GrDawnTexture.h" +#include "src/core/SkConvertPixels.h" #include "src/gpu/dawn/GrDawnGpu.h" #include "src/gpu/dawn/GrDawnTextureRenderTarget.h" #include "src/gpu/dawn/GrDawnUtil.h" GrDawnTexture::GrDawnTexture(GrDawnGpu* gpu, - const SkISize& size, + const SkISize& dimensions, GrPixelConfig config, - dawn::TextureView textureView, + wgpu::TextureView textureView, const GrDawnImageInfo& info, GrMipMapsStatus mipMapsStatus) - : GrSurface(gpu, size, config, GrProtected::kNo) - , GrTexture(gpu, size, config, GrProtected::kNo, GrTextureType::k2D, mipMapsStatus) - , fInfo(info) - , fTextureView(textureView) { -} - -sk_sp GrDawnTexture::Make(GrDawnGpu* gpu, const SkISize& size, GrPixelConfig config, - dawn::TextureFormat format, GrRenderable renderable, - int sampleCnt, SkBudgeted budgeted, int mipLevels, + : GrSurface(gpu, dimensions, config, GrProtected::kNo) + , GrTexture(gpu, dimensions, config, GrProtected::kNo, GrTextureType::k2D, mipMapsStatus) + , fInfo(info) + , fTextureView(textureView) {} + +sk_sp GrDawnTexture::Make(GrDawnGpu* gpu, const SkISize& dimensions, + GrPixelConfig config, wgpu::TextureFormat format, + GrRenderable renderable, int sampleCnt, + SkBudgeted budgeted, int mipLevels, GrMipMapsStatus status) { bool renderTarget = renderable == GrRenderable::kYes; - dawn::TextureDescriptor textureDesc; + wgpu::TextureDescriptor textureDesc; textureDesc.usage = - dawn::TextureUsage::Sampled | - dawn::TextureUsage::CopySrc | - dawn::TextureUsage::CopyDst; + wgpu::TextureUsage::Sampled | + wgpu::TextureUsage::CopySrc | + wgpu::TextureUsage::CopyDst; if (renderTarget) { - textureDesc.usage |= dawn::TextureUsage::OutputAttachment; + textureDesc.usage |= wgpu::TextureUsage::OutputAttachment; } - textureDesc.size.width = size.fWidth; - textureDesc.size.height = size.fHeight; + textureDesc.size.width = dimensions.fWidth; + textureDesc.size.height = dimensions.fHeight; textureDesc.size.depth = 1; textureDesc.format = format; textureDesc.mipLevelCount = std::max(mipLevels, 1); textureDesc.sampleCount = sampleCnt; - dawn::Texture tex = gpu->device().CreateTexture(&textureDesc); + wgpu::Texture tex = gpu->device().CreateTexture(&textureDesc); if (!tex) { return nullptr; } - dawn::TextureView textureView = tex.CreateView(); + wgpu::TextureView textureView = tex.CreateView(); if (!textureView) { return nullptr; @@ -65,15 +66,15 @@ sk_sp GrDawnTexture::Make(GrDawnGpu* gpu, const SkISize& size, Gr sk_sp result; if (renderTarget) { result = sk_sp(new GrDawnTextureRenderTarget(gpu, - size, + dimensions, config, textureView, sampleCnt, info, status)); } else { - result = sk_sp(new GrDawnTexture(gpu, size, config, textureView, info, - status)); + result = sk_sp( + new GrDawnTexture(gpu, dimensions, config, textureView, info, status)); } result->registerWithCache(budgeted); return result; @@ -83,22 +84,23 @@ GrBackendFormat GrDawnTexture::backendFormat() const { return GrBackendFormat::MakeDawn(fInfo.fFormat); } -sk_sp GrDawnTexture::MakeWrapped(GrDawnGpu* gpu, const SkISize& size, +sk_sp GrDawnTexture::MakeWrapped(GrDawnGpu* gpu, const SkISize& dimensions, GrPixelConfig config, GrRenderable renderable, int sampleCnt, GrMipMapsStatus status, GrWrapCacheable cacheable, const GrDawnImageInfo& info) { - dawn::TextureView textureView = info.fTexture.CreateView(); + wgpu::TextureView textureView = info.fTexture.CreateView(); if (!textureView) { return nullptr; } sk_sp tex; if (GrRenderable::kYes == renderable) { - tex = sk_sp(new GrDawnTextureRenderTarget(gpu, size, config, textureView, - sampleCnt, info, status)); + tex = sk_sp(new GrDawnTextureRenderTarget( + gpu, dimensions, config, textureView, sampleCnt, info, status)); } else { - tex = sk_sp(new GrDawnTexture(gpu, size, config, textureView, info, status)); + tex = sk_sp( + new GrDawnTexture(gpu, dimensions, config, textureView, info, status)); } tex->registerWithCacheWrapped(cacheable); return tex; @@ -125,13 +127,13 @@ GrBackendTexture GrDawnTexture::getBackendTexture() const { } void GrDawnTexture::upload(const GrMipLevel texels[], int mipLevels, - dawn::CommandEncoder copyEncoder) { + wgpu::CommandEncoder copyEncoder) { this->upload(texels, mipLevels, SkIRect::MakeWH(width(), height()), copyEncoder); } void GrDawnTexture::upload(const GrMipLevel texels[], int mipLevels, const SkIRect& rect, - dawn::CommandEncoder copyEncoder) { - dawn::Device device = this->getDawnGpu()->device(); + wgpu::CommandEncoder copyEncoder) { + wgpu::Device device = this->getDawnGpu()->device(); uint32_t x = rect.x(); uint32_t y = rect.y(); @@ -139,63 +141,34 @@ void GrDawnTexture::upload(const GrMipLevel texels[], int mipLevels, const SkIRe uint32_t height = rect.height(); for (int i = 0; i < mipLevels; i++) { - size_t origRowBytes = texels[i].fRowBytes; - SkBitmap bitmap; - SkPixmap pixmap; - const char* src; - if (kRGBA_4444_GrPixelConfig == this->config() || - kRGB_565_GrPixelConfig == this->config() || - kGray_8_GrPixelConfig == this->config()) { - SkImageInfo info; - info = SkImageInfo::Make(width, height, kRGBA_8888_SkColorType, kPremul_SkAlphaType); - SkImageInfo srcInfo; - SkColorType colorType = - GrColorTypeToSkColorType(GrPixelConfigToColorType(this->config())); - srcInfo = SkImageInfo::Make(width, height, colorType, kOpaque_SkAlphaType); - SkPixmap srcPixmap(srcInfo, texels[i].fPixels, origRowBytes); - origRowBytes = GrDawnRoundRowBytes(info.minRowBytes()); - bitmap.allocPixels(info, origRowBytes); - bitmap.writePixels(srcPixmap); - if (!bitmap.peekPixels(&pixmap)) { - continue; - } - src = static_cast(pixmap.addr()); - } else { - src = static_cast(texels[i].fPixels); - } - size_t rowBytes = GrDawnRoundRowBytes(origRowBytes); - size_t size = rowBytes * height; + const void* src = texels[i].fPixels; + size_t srcRowBytes = texels[i].fRowBytes; + SkColorType colorType = GrColorTypeToSkColorType(GrPixelConfigToColorType(this->config())); + size_t trimRowBytes = width * SkColorTypeBytesPerPixel(colorType); + size_t dstRowBytes = GrDawnRoundRowBytes(trimRowBytes); + size_t size = dstRowBytes * height; GrDawnStagingBuffer* stagingBuffer = getDawnGpu()->getStagingBuffer(size); - if (rowBytes == origRowBytes) { - memcpy(stagingBuffer->fData, src, size); - } else { - char* dst = static_cast(stagingBuffer->fData); - for (uint32_t row = 0; row < height; row++) { - memcpy(dst, src, origRowBytes); - dst += rowBytes; - src += texels[i].fRowBytes; - } - } - dawn::Buffer buffer = stagingBuffer->fBuffer; + SkRectMemcpy(stagingBuffer->fData, dstRowBytes, src, srcRowBytes, trimRowBytes, height); + wgpu::Buffer buffer = stagingBuffer->fBuffer; buffer.Unmap(); stagingBuffer->fData = nullptr; - dawn::BufferCopyView srcBuffer; + wgpu::BufferCopyView srcBuffer; srcBuffer.buffer = buffer; srcBuffer.offset = 0; - srcBuffer.rowPitch = rowBytes; + srcBuffer.rowPitch = dstRowBytes; srcBuffer.imageHeight = height; - dawn::TextureCopyView dstTexture; + wgpu::TextureCopyView dstTexture; dstTexture.texture = fInfo.fTexture; dstTexture.mipLevel = i; dstTexture.origin = {x, y, 0}; - dawn::Extent3D copySize = {width, height, 1}; + wgpu::Extent3D copySize = {width, height, 1}; copyEncoder.CopyBufferToTexture(&srcBuffer, &dstTexture, ©Size); x /= 2; y /= 2; - width /= 2; - height /= 2; + width = SkTMax(1u, width / 2); + height = SkTMax(1u, height / 2); } } diff --git a/third_party/skia/src/gpu/dawn/GrDawnTexture.h b/third_party/skia/src/gpu/dawn/GrDawnTexture.h index cc69fd7d9fef..0a7d64a25974 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnTexture.h +++ b/third_party/skia/src/gpu/dawn/GrDawnTexture.h @@ -9,19 +9,19 @@ #define GrDawnTexture_DEFINED #include "include/gpu/GrTexture.h" -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" class GrDawnGpu; struct GrDawnImageInfo; class GrDawnTexture : public GrTexture { public: - static sk_sp Make(GrDawnGpu*, const SkISize& size, GrPixelConfig config, - dawn::TextureFormat format, GrRenderable, int sampleCnt, + static sk_sp Make(GrDawnGpu*, const SkISize& dimensions, GrPixelConfig config, + wgpu::TextureFormat format, GrRenderable, int sampleCnt, SkBudgeted, int mipLevels, GrMipMapsStatus); - static sk_sp MakeWrapped(GrDawnGpu*, const SkISize& size, GrPixelConfig config, - GrRenderable, int sampleCnt, + static sk_sp MakeWrapped(GrDawnGpu*, const SkISize& dimensions, + GrPixelConfig config, GrRenderable, int sampleCnt, GrMipMapsStatus, GrWrapCacheable, const GrDawnImageInfo&); @@ -32,15 +32,15 @@ class GrDawnTexture : public GrTexture { void textureParamsModified() override {} - void upload(const GrMipLevel texels[], int mipLevels, dawn::CommandEncoder copyEncoder); + void upload(const GrMipLevel texels[], int mipLevels, wgpu::CommandEncoder copyEncoder); void upload(const GrMipLevel texels[], int mipLevels, const SkIRect& dstRect, - dawn::CommandEncoder copyEncoder); + wgpu::CommandEncoder copyEncoder); - dawn::Texture texture() const { return fInfo.fTexture; } - dawn::TextureView textureView() const { return fTextureView; } + wgpu::Texture texture() const { return fInfo.fTexture; } + wgpu::TextureView textureView() const { return fTextureView; } protected: - GrDawnTexture(GrDawnGpu*, const SkISize& size, GrPixelConfig config, - dawn::TextureView, const GrDawnImageInfo&, GrMipMapsStatus); + GrDawnTexture(GrDawnGpu*, const SkISize& dimensions, GrPixelConfig config, wgpu::TextureView, + const GrDawnImageInfo&, GrMipMapsStatus); GrDawnGpu* getDawnGpu() const; @@ -55,7 +55,7 @@ class GrDawnTexture : public GrTexture { GrDawnTexture(GrDawnGpu*, const GrSurfaceDesc&, const GrDawnImageInfo&, GrMipMapsStatus); GrDawnImageInfo fInfo; - dawn::TextureView fTextureView; + wgpu::TextureView fTextureView; typedef GrTexture INHERITED; }; diff --git a/third_party/skia/src/gpu/dawn/GrDawnTextureRenderTarget.cpp b/third_party/skia/src/gpu/dawn/GrDawnTextureRenderTarget.cpp index a9e70d71ba6a..d94fd24f4984 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnTextureRenderTarget.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnTextureRenderTarget.cpp @@ -13,16 +13,15 @@ #include "src/gpu/dawn/GrDawnGpu.h" GrDawnTextureRenderTarget::GrDawnTextureRenderTarget(GrDawnGpu* gpu, - const SkISize& size, + const SkISize& dimensions, GrPixelConfig config, - dawn::TextureView textureView, + wgpu::TextureView textureView, int sampleCnt, const GrDawnImageInfo& info, GrMipMapsStatus mipMapsStatus) - : GrSurface(gpu, size, config, GrProtected::kNo) - , GrDawnTexture(gpu, size, config, textureView, info, mipMapsStatus) - , GrDawnRenderTarget(gpu, size, config, sampleCnt, info) { -} + : GrSurface(gpu, dimensions, config, GrProtected::kNo) + , GrDawnTexture(gpu, dimensions, config, textureView, info, mipMapsStatus) + , GrDawnRenderTarget(gpu, dimensions, config, sampleCnt, info) {} bool GrDawnTextureRenderTarget::canAttemptStencilAttachment() const { return true; @@ -30,7 +29,7 @@ bool GrDawnTextureRenderTarget::canAttemptStencilAttachment() const { size_t GrDawnTextureRenderTarget::onGpuMemorySize() const { const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), 1, // FIXME: for MSAA this->texturePriv().mipMapped()); } diff --git a/third_party/skia/src/gpu/dawn/GrDawnTextureRenderTarget.h b/third_party/skia/src/gpu/dawn/GrDawnTextureRenderTarget.h index 69c94b034ea4..48a1bfa2a7b4 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnTextureRenderTarget.h +++ b/third_party/skia/src/gpu/dawn/GrDawnTextureRenderTarget.h @@ -22,9 +22,9 @@ class GrDawnGpu; class GrDawnTextureRenderTarget : public GrDawnTexture, public GrDawnRenderTarget { public: GrDawnTextureRenderTarget(GrDawnGpu* gpu, - const SkISize& size, + const SkISize& dimensions, GrPixelConfig config, - const dawn::TextureView textureView, + const wgpu::TextureView textureView, int sampleCnt, const GrDawnImageInfo& info, GrMipMapsStatus mipMapsStatus); diff --git a/third_party/skia/src/gpu/dawn/GrDawnUniformHandler.cpp b/third_party/skia/src/gpu/dawn/GrDawnUniformHandler.cpp index 74fd1e31a4b6..e8506aeb7fd4 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnUniformHandler.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnUniformHandler.cpp @@ -175,9 +175,7 @@ static inline uint32_t grsltype_to_size(GrSLType type) { SK_ABORT("Unexpected type"); } -uint32_t get_ubo_offset(uint32_t* currentOffset, - GrSLType type, - int arrayCount) { +uint32_t get_ubo_offset(uint32_t* currentOffset, GrSLType type, int arrayCount) { uint32_t alignmentMask = grsltype_to_alignment_mask(type); // We want to use the std140 layout here, so we must make arrays align to 16 bytes. if (arrayCount || type == kFloat2x2_GrSLType) { @@ -210,11 +208,7 @@ GrGLSLUniformHandler::UniformHandle GrDawnUniformHandler::internalAddUniformArra const char** outName) { UniformInfo& info = fUniforms.push_back(); info.fVisibility = visibility; - if (visibility == kFragment_GrShaderFlag) { - info.fUBOOffset = get_ubo_offset(&fCurrentFragmentUBOOffset, type, arrayCount); - } else { - info.fUBOOffset = get_ubo_offset(&fCurrentGeometryUBOOffset, type, arrayCount); - } + info.fUBOOffset = get_ubo_offset(&fCurrentUBOOffset, type, arrayCount); GrShaderVar& var = info.fVar; char prefix = 'u'; if ('u' == name[0] || !strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX))) { @@ -237,7 +231,7 @@ void GrDawnUniformHandler::updateUniformVisibility(UniformHandle u, uint32_t vis fUniforms[u.toIndex()].fVisibility |= visibility; } -GrGLSLUniformHandler::SamplerHandle GrDawnUniformHandler::addSampler(const GrTextureProxy*, +GrGLSLUniformHandler::SamplerHandle GrDawnUniformHandler::addSampler(const GrSurfaceProxy*, const GrSamplerState&, const GrSwizzle& swizzle, const char* name, @@ -247,13 +241,13 @@ GrGLSLUniformHandler::SamplerHandle GrDawnUniformHandler::addSampler(const GrTex fProgramBuilder->nameVariable(&mangleName, prefix, name, true); GrSLType samplerType = kSampler_GrSLType, textureType = kTexture2D_GrSLType; - int binding = kSamplerBindingBase + fSamplers.count() * 2; + int binding = fSamplers.count() * 2; UniformInfo& info = fSamplers.push_back(); info.fVar.setType(samplerType); info.fVar.setTypeModifier(GrShaderVar::kUniform_TypeModifier); info.fVar.setName(mangleName); SkString layoutQualifier; - layoutQualifier.appendf("set = 0, binding = %d", binding); + layoutQualifier.appendf("set = 1, binding = %d", binding); info.fVar.addLayoutQualifier(layoutQualifier.c_str()); info.fVisibility = kFragment_GrShaderFlag; info.fUBOOffset = 0; @@ -268,7 +262,7 @@ GrGLSLUniformHandler::SamplerHandle GrDawnUniformHandler::addSampler(const GrTex texInfo.fVar.setTypeModifier(GrShaderVar::kUniform_TypeModifier); texInfo.fVar.setName(mangleTexName); SkString texLayoutQualifier; - texLayoutQualifier.appendf("set = 0, binding = %d", binding + 1); + texLayoutQualifier.appendf("set = 1, binding = %d", binding + 1); texInfo.fVar.addLayoutQualifier(texLayoutQualifier.c_str()); texInfo.fVisibility = kFragment_GrShaderFlag; texInfo.fUBOOffset = 0; @@ -306,21 +300,12 @@ void GrDawnUniformHandler::appendUniformDecls(GrShaderFlags visibility, SkString } } if (!uniformsString.isEmpty()) { - uint32_t uniformBinding; - const char* stage; - if (kVertex_GrShaderFlag == visibility) { - uniformBinding = kGeometryBinding; - stage = "vertex"; - } else if (kGeometry_GrShaderFlag == visibility) { - uniformBinding = kGeometryBinding; - stage = "geometry"; - } else { - SkASSERT(kFragment_GrShaderFlag == visibility); - uniformBinding = kFragBinding; - stage = "fragment"; - } - out->appendf("layout (set = 0, binding = %d) uniform %sUniformBuffer\n{\n", - uniformBinding, stage); + out->appendf("layout (set = 0, binding = %d) uniform UniformBuffer\n{\n", kUniformBinding); out->appendf("%s\n};\n", uniformsString.c_str()); } } + +uint32_t GrDawnUniformHandler::getRTHeightOffset() const { + uint32_t dummy = fCurrentUBOOffset; + return get_ubo_offset(&dummy, kFloat_GrSLType, 0); +} diff --git a/third_party/skia/src/gpu/dawn/GrDawnUniformHandler.h b/third_party/skia/src/gpu/dawn/GrDawnUniformHandler.h index e5d995025386..ba653a4b6322 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnUniformHandler.h +++ b/third_party/skia/src/gpu/dawn/GrDawnUniformHandler.h @@ -27,15 +27,14 @@ class GrDawnUniformHandler : public GrGLSLUniformHandler { }; typedef GrTAllocator UniformInfoArray; enum { - kGeometryBinding = 0, - kFragBinding = 1, - kSamplerBindingBase = 2, + kUniformBinding = 0, }; + uint32_t getRTHeightOffset() const; private: explicit GrDawnUniformHandler(GrGLSLProgramBuilder* program); - SamplerHandle addSampler(const GrTextureProxy*, const GrSamplerState&, const GrSwizzle&, + SamplerHandle addSampler(const GrSurfaceProxy*, const GrSamplerState&, const GrSwizzle&, const char* name, const GrShaderCaps*) override; const char* samplerVariable(SamplerHandle handle) const override; GrSwizzle samplerSwizzle(SamplerHandle handle) const override; @@ -55,8 +54,8 @@ class GrDawnUniformHandler : public GrGLSLUniformHandler { SkTArray fSamplerSwizzles; SkTArray fSamplerReferences; - uint32_t fCurrentGeometryUBOOffset = 0; - uint32_t fCurrentFragmentUBOOffset = 0; + uint32_t fCurrentUBOOffset = 0; + uint32_t fRTHeightOffset = 0; friend class GrDawnProgramBuilder; typedef GrGLSLUniformHandler INHERITED; diff --git a/third_party/skia/src/gpu/dawn/GrDawnUtil.cpp b/third_party/skia/src/gpu/dawn/GrDawnUtil.cpp index 7404dac0081f..9ec9047fa7d1 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnUtil.cpp +++ b/third_party/skia/src/gpu/dawn/GrDawnUtil.cpp @@ -7,14 +7,14 @@ #include "src/gpu/dawn/GrDawnUtil.h" -size_t GrDawnBytesPerPixel(dawn::TextureFormat format) { +size_t GrDawnBytesPerPixel(wgpu::TextureFormat format) { switch (format) { - case dawn::TextureFormat::RGBA8Unorm: - case dawn::TextureFormat::BGRA8Unorm: + case wgpu::TextureFormat::RGBA8Unorm: + case wgpu::TextureFormat::BGRA8Unorm: return 4; - case dawn::TextureFormat::R8Unorm: + case wgpu::TextureFormat::R8Unorm: return 1; - case dawn::TextureFormat::Depth24PlusStencil8: + case wgpu::TextureFormat::Depth24PlusStencil8: return 4; default: SkASSERT(false); @@ -22,26 +22,26 @@ size_t GrDawnBytesPerPixel(dawn::TextureFormat format) { } } -bool GrDawnFormatIsRenderable(dawn::TextureFormat format) { +bool GrDawnFormatIsRenderable(wgpu::TextureFormat format) { // For now, all the formats above are renderable. If a non-renderable format is added // (see dawn/src/dawn_native/Format.cpp), an exception should be added here. return true; } -bool GrPixelConfigToDawnFormat(GrPixelConfig config, dawn::TextureFormat* format) { +bool GrPixelConfigToDawnFormat(GrPixelConfig config, wgpu::TextureFormat* format) { switch (config) { case kRGBA_8888_GrPixelConfig: case kRGBA_4444_GrPixelConfig: case kRGB_565_GrPixelConfig: case kGray_8_GrPixelConfig: - *format = dawn::TextureFormat::RGBA8Unorm; + *format = wgpu::TextureFormat::RGBA8Unorm; return true; case kBGRA_8888_GrPixelConfig: - *format = dawn::TextureFormat::BGRA8Unorm; + *format = wgpu::TextureFormat::BGRA8Unorm; return true; case kAlpha_8_GrPixelConfig: case kAlpha_8_as_Red_GrPixelConfig: - *format = dawn::TextureFormat::R8Unorm; + *format = wgpu::TextureFormat::R8Unorm; return true; default: return false; @@ -54,15 +54,15 @@ size_t GrDawnRoundRowBytes(size_t rowBytes) { } #if GR_TEST_UTILS -const char* GrDawnFormatToStr(dawn::TextureFormat format) { +const char* GrDawnFormatToStr(wgpu::TextureFormat format) { switch (format) { - case dawn::TextureFormat::RGBA8Unorm: + case wgpu::TextureFormat::RGBA8Unorm: return "RGBA8Unorm"; - case dawn::TextureFormat::BGRA8Unorm: + case wgpu::TextureFormat::BGRA8Unorm: return "BGRA8Unorm"; - case dawn::TextureFormat::R8Unorm: + case wgpu::TextureFormat::R8Unorm: return "R8Unorm"; - case dawn::TextureFormat::Depth24PlusStencil8: + case wgpu::TextureFormat::Depth24PlusStencil8: return "Depth24PlusStencil8"; default: SkASSERT(false); diff --git a/third_party/skia/src/gpu/dawn/GrDawnUtil.h b/third_party/skia/src/gpu/dawn/GrDawnUtil.h index 0e5a41bade75..7b14fff9a92f 100644 --- a/third_party/skia/src/gpu/dawn/GrDawnUtil.h +++ b/third_party/skia/src/gpu/dawn/GrDawnUtil.h @@ -9,14 +9,14 @@ #define GrDawnUtil_DEFINED #include "include/private/GrTypesPriv.h" -#include "dawn/dawncpp.h" +#include "dawn/webgpu_cpp.h" -size_t GrDawnBytesPerPixel(dawn::TextureFormat format); -bool GrDawnFormatIsRenderable(dawn::TextureFormat format); -bool GrPixelConfigToDawnFormat(GrPixelConfig config, dawn::TextureFormat* format); +size_t GrDawnBytesPerPixel(wgpu::TextureFormat format); +bool GrDawnFormatIsRenderable(wgpu::TextureFormat format); +bool GrPixelConfigToDawnFormat(GrPixelConfig config, wgpu::TextureFormat* format); size_t GrDawnRoundRowBytes(size_t rowBytes); #if GR_TEST_UTILS -const char* GrDawnFormatToStr(dawn::TextureFormat format); +const char* GrDawnFormatToStr(wgpu::TextureFormat format); #endif #endif // GrDawnUtil_DEFINED diff --git a/third_party/skia/src/gpu/effects/GrAlphaThresholdFragmentProcessor.fp b/third_party/skia/src/gpu/effects/GrAlphaThresholdFragmentProcessor.fp index cab332bd9c3d..d9d19332730c 100644 --- a/third_party/skia/src/gpu/effects/GrAlphaThresholdFragmentProcessor.fp +++ b/third_party/skia/src/gpu/effects/GrAlphaThresholdFragmentProcessor.fp @@ -18,7 +18,7 @@ in uniform half outerThreshold; } @make { - static std::unique_ptr Make(sk_sp mask, + static std::unique_ptr Make(sk_sp mask, float innerThreshold, float outerThreshold, const SkIRect& bounds) { diff --git a/third_party/skia/src/gpu/effects/GrAtlasedShaderHelpers.h b/third_party/skia/src/gpu/effects/GrAtlasedShaderHelpers.h index 94b6f98a512f..81bc5c54163d 100644 --- a/third_party/skia/src/gpu/effects/GrAtlasedShaderHelpers.h +++ b/third_party/skia/src/gpu/effects/GrAtlasedShaderHelpers.h @@ -16,10 +16,10 @@ static void append_index_uv_varyings(GrGLSLPrimitiveProcessor::EmitArgs& args, const char* inTexCoordsName, - const char* atlasSizeInvName, - GrGLSLVarying *uv, - GrGLSLVarying *texIdx, - GrGLSLVarying *st) { + const char* atlasDimensionsInvName, + GrGLSLVarying* uv, + GrGLSLVarying* texIdx, + GrGLSLVarying* st) { using Interpolation = GrGLSLVaryingHandler::Interpolation; // This extracts the texture index and texel coordinates from the same variable @@ -38,9 +38,10 @@ static void append_index_uv_varyings(GrGLSLPrimitiveProcessor::EmitArgs& args, args.fVertBuilder->codeAppend("float texIdx = 2.0*diff.x + diff.y;"); } - // Multiply by 1/atlasSize to get normalized texture coordinates + // Multiply by 1/atlasDimensions to get normalized texture coordinates args.fVaryingHandler->addVarying("TextureCoords", uv); - args.fVertBuilder->codeAppendf("%s = unormTexCoords * %s;", uv->vsOut(), atlasSizeInvName); + args.fVertBuilder->codeAppendf("%s = unormTexCoords * %s;", uv->vsOut(), + atlasDimensionsInvName); args.fVaryingHandler->addVarying("TexIndex", texIdx, args.fShaderCaps->integerSupport() ? Interpolation::kMustBeFlat @@ -58,6 +59,13 @@ static void append_multitexture_lookup(GrGLSLPrimitiveProcessor::EmitArgs& args, const GrGLSLVarying &texIdx, const char* coordName, const char* colorName) { + SkASSERT(numTextureSamplers > 0); + // This shouldn't happen, but will avoid a crash if it does + if (numTextureSamplers <= 0) { + args.fFragBuilder->codeAppendf("%s = float4(1, 1, 1, 1);", colorName); + return; + } + // conditionally load from the indexed texture sampler for (int i = 0; i < numTextureSamplers-1; ++i) { args.fFragBuilder->codeAppendf("if (%s == %d) { %s = ", texIdx.fsIn(), i, colorName); diff --git a/third_party/skia/src/gpu/effects/GrBezierEffect.cpp b/third_party/skia/src/gpu/effects/GrBezierEffect.cpp index 7c9e5f098379..9066c4054f34 100644 --- a/third_party/skia/src/gpu/effects/GrBezierEffect.cpp +++ b/third_party/skia/src/gpu/effects/GrBezierEffect.cpp @@ -26,7 +26,7 @@ class GrGLConicEffect : public GrGLSLGeometryProcessor { GrProcessorKeyBuilder*); void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const GrConicEffect& ce = primProc.cast(); if (!ce.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(ce.viewMatrix())) { @@ -45,7 +45,7 @@ class GrGLConicEffect : public GrGLSLGeometryProcessor { pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(ce.coverageScale())); fCoverageScale = ce.coverageScale(); } - this->setTransformDataHelper(ce.localMatrix(), pdman, &transformIter); + this->setTransformDataHelper(ce.localMatrix(), pdman, transformRange); } private: @@ -233,13 +233,13 @@ GrGLSLPrimitiveProcessor* GrConicEffect::createGLSLInstance(const GrShaderCaps&) GrConicEffect::GrConicEffect(const SkPMColor4f& color, const SkMatrix& viewMatrix, uint8_t coverage, GrClipEdgeType edgeType, const SkMatrix& localMatrix, bool usesLocalCoords) - : INHERITED(kGrConicEffect_ClassID) - , fColor(color) - , fViewMatrix(viewMatrix) - , fLocalMatrix(viewMatrix) - , fUsesLocalCoords(usesLocalCoords) - , fCoverageScale(coverage) - , fEdgeType(edgeType) { + : INHERITED(kGrConicEffect_ClassID) + , fColor(color) + , fViewMatrix(viewMatrix) + , fLocalMatrix(viewMatrix) + , fUsesLocalCoords(usesLocalCoords) + , fCoverageScale(coverage) + , fEdgeType(edgeType) { this->setVertexAttributes(kAttributes, SK_ARRAY_COUNT(kAttributes)); } @@ -248,13 +248,14 @@ GrConicEffect::GrConicEffect(const SkPMColor4f& color, const SkMatrix& viewMatri GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrConicEffect); #if GR_TEST_UTILS -sk_sp GrConicEffect::TestCreate(GrProcessorTestData* d) { - sk_sp gp; +GrGeometryProcessor* GrConicEffect::TestCreate(GrProcessorTestData* d) { + GrGeometryProcessor* gp; do { GrClipEdgeType edgeType = static_cast( d->fRandom->nextULessThan(kGrClipEdgeTypeCnt)); - gp = GrConicEffect::Make(SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), + 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); @@ -277,7 +278,7 @@ class GrGLQuadEffect : public GrGLSLGeometryProcessor { GrProcessorKeyBuilder*); void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const GrQuadEffect& qe = primProc.cast(); if (!qe.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(qe.viewMatrix())) { @@ -296,7 +297,7 @@ class GrGLQuadEffect : public GrGLSLGeometryProcessor { pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(qe.coverageScale())); fCoverageScale = qe.coverageScale(); } - this->setTransformDataHelper(qe.localMatrix(), pdman, &transformIter); + this->setTransformDataHelper(qe.localMatrix(), pdman, transformRange); } private: @@ -448,12 +449,13 @@ GrQuadEffect::GrQuadEffect(const SkPMColor4f& color, const SkMatrix& viewMatrix, GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrQuadEffect); #if GR_TEST_UTILS -sk_sp GrQuadEffect::TestCreate(GrProcessorTestData* d) { - sk_sp gp; +GrGeometryProcessor* GrQuadEffect::TestCreate(GrProcessorTestData* d) { + GrGeometryProcessor* gp; do { GrClipEdgeType edgeType = static_cast( d->fRandom->nextULessThan(kGrClipEdgeTypeCnt)); - gp = GrQuadEffect::Make(SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), + 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); diff --git a/third_party/skia/src/gpu/effects/GrBezierEffect.h b/third_party/skia/src/gpu/effects/GrBezierEffect.h index c63002bb5332..c59faebc5b34 100644 --- a/third_party/skia/src/gpu/effects/GrBezierEffect.h +++ b/third_party/skia/src/gpu/effects/GrBezierEffect.h @@ -9,6 +9,7 @@ #define GrBezierEffect_DEFINED #include "include/private/GrTypesPriv.h" +#include "src/core/SkArenaAlloc.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrGeometryProcessor.h" #include "src/gpu/GrProcessor.h" @@ -57,36 +58,29 @@ class GrGLConicEffect; class GrConicEffect : public GrGeometryProcessor { public: - static sk_sp Make(const SkPMColor4f& color, - const SkMatrix& viewMatrix, - const GrClipEdgeType edgeType, - const GrCaps& caps, - const SkMatrix& localMatrix, - bool usesLocalCoords, - uint8_t coverage = 0xff) { + 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: - if (!caps.shaderCaps()->shaderDerivativeSupport()) { - return nullptr; - } - return sk_sp( - new GrConicEffect(color, viewMatrix, coverage, GrClipEdgeType::kFillAA, - localMatrix, usesLocalCoords)); + case GrClipEdgeType::kFillAA: // fall through case GrClipEdgeType::kHairlineAA: if (!caps.shaderCaps()->shaderDerivativeSupport()) { return nullptr; } - return sk_sp( - new GrConicEffect(color, viewMatrix, coverage, - GrClipEdgeType::kHairlineAA, localMatrix, - usesLocalCoords)); + break; case GrClipEdgeType::kFillBW: - return sk_sp( - new GrConicEffect(color, viewMatrix, coverage, GrClipEdgeType::kFillBW, - localMatrix, usesLocalCoords)); - default: + break; + default: // kInverseFillBW or kInverseFillAA return nullptr; } + + return arena->make(color, viewMatrix, coverage, edgeType, localMatrix, + usesLocalCoords); } ~GrConicEffect() override; @@ -109,6 +103,8 @@ class GrConicEffect : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: + friend class ::SkArenaAlloc; // for access to ctor + GrConicEffect(const SkPMColor4f&, const SkMatrix& viewMatrix, uint8_t coverage, GrClipEdgeType, const SkMatrix& localMatrix, bool usesLocalCoords); @@ -141,36 +137,29 @@ class GrGLQuadEffect; class GrQuadEffect : public GrGeometryProcessor { public: - static sk_sp Make(const SkPMColor4f& color, - const SkMatrix& viewMatrix, - const GrClipEdgeType edgeType, - const GrCaps& caps, - const SkMatrix& localMatrix, - bool usesLocalCoords, - uint8_t coverage = 0xff) { + 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: - if (!caps.shaderCaps()->shaderDerivativeSupport()) { - return nullptr; - } - return sk_sp( - new GrQuadEffect(color, viewMatrix, coverage, GrClipEdgeType::kFillAA, - localMatrix, usesLocalCoords)); + case GrClipEdgeType::kFillAA: // fall through case GrClipEdgeType::kHairlineAA: if (!caps.shaderCaps()->shaderDerivativeSupport()) { return nullptr; } - return sk_sp( - new GrQuadEffect(color, viewMatrix, coverage, - GrClipEdgeType::kHairlineAA, localMatrix, - usesLocalCoords)); + break; case GrClipEdgeType::kFillBW: - return sk_sp( - new GrQuadEffect(color, viewMatrix, coverage, GrClipEdgeType::kFillBW, - localMatrix, usesLocalCoords)); - default: + break; + default: // kInverseFillBW and kInverseFillAA return nullptr; } + + return arena->make(color, viewMatrix, coverage, edgeType, + localMatrix, usesLocalCoords); } ~GrQuadEffect() override; @@ -193,6 +182,8 @@ class GrQuadEffect : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: + friend class ::SkArenaAlloc; // for access to ctor + GrQuadEffect(const SkPMColor4f&, const SkMatrix& viewMatrix, uint8_t coverage, GrClipEdgeType, const SkMatrix& localMatrix, bool usesLocalCoords); diff --git a/third_party/skia/src/gpu/effects/GrBicubicEffect.cpp b/third_party/skia/src/gpu/effects/GrBicubicEffect.cpp index 6d7b431ab3dd..973ef45decd6 100644 --- a/third_party/skia/src/gpu/effects/GrBicubicEffect.cpp +++ b/third_party/skia/src/gpu/effects/GrBicubicEffect.cpp @@ -145,32 +145,30 @@ void GrGLBicubicEffect::emitCode(EmitArgs& args) { void GrGLBicubicEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& processor) { const GrBicubicEffect& bicubicEffect = processor.cast(); - GrTextureProxy* proxy = processor.textureSampler(0).proxy(); - GrTexture* texture = proxy->peekTexture(); + GrSurfaceProxy* proxy = processor.textureSampler(0).proxy(); + SkISize textureDims = proxy->backingStoreDimensions(); float dims[4] = {0, 0, 0, 0}; if (bicubicEffect.direction() != GrBicubicEffect::Direction::kY) { - dims[0] = 1.0f / texture->width(); - dims[2] = texture->width(); + dims[0] = 1.0f / textureDims.width(); + dims[2] = textureDims.width(); } if (bicubicEffect.direction() != GrBicubicEffect::Direction::kX) { - dims[1] = 1.0f / texture->height(); - dims[3] = texture->height(); + dims[1] = 1.0f / textureDims.height(); + dims[3] = textureDims.height(); } pdman.set4fv(fDimensions, 1, dims); fDomain.setData(pdman, bicubicEffect.domain(), proxy, processor.textureSampler(0).samplerState()); } -GrBicubicEffect::GrBicubicEffect(sk_sp proxy, GrColorType srcColorType, - const SkMatrix& matrix, const SkRect& domain, - const GrSamplerState::WrapMode wrapModes[2], +GrBicubicEffect::GrBicubicEffect(sk_sp proxy, const SkMatrix& matrix, + const SkRect& domain, const GrSamplerState::WrapMode wrapModes[2], GrTextureDomain::Mode modeX, GrTextureDomain::Mode modeY, Direction direction, SkAlphaType alphaType) : INHERITED{kGrBicubicEffect_ClassID, ModulateForSamplerOptFlags( - srcColorType, - GrTextureDomain::IsDecalSampled(wrapModes, modeX, modeY))} + alphaType, GrTextureDomain::IsDecalSampled(wrapModes, modeX, modeY))} , fCoordTransform(matrix, proxy.get()) , fDomain(proxy.get(), domain, modeX, modeY) , fTextureSampler(std::move(proxy), @@ -227,8 +225,8 @@ std::unique_ptr GrBicubicEffect::TestCreate(GrProcessorTest direction = Direction::kXY; break; } - return GrBicubicEffect::Make(d->textureProxy(texIdx), d->textureProxyColorType(texIdx), - SkMatrix::I(), kClampClamp, direction, alphaType); + return GrBicubicEffect::Make(d->textureProxy(texIdx), SkMatrix::I(), kClampClamp, direction, + alphaType); } #endif diff --git a/third_party/skia/src/gpu/effects/GrBicubicEffect.h b/third_party/skia/src/gpu/effects/GrBicubicEffect.h index a2dc2490008c..319f1d9f9852 100644 --- a/third_party/skia/src/gpu/effects/GrBicubicEffect.h +++ b/third_party/skia/src/gpu/effects/GrBicubicEffect.h @@ -44,32 +44,28 @@ class GrBicubicEffect : public GrFragmentProcessor { /** * Create a Mitchell filter effect with specified texture matrix with clamp wrap mode. */ - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, const SkMatrix& matrix, Direction direction, SkAlphaType alphaType) { static constexpr GrSamplerState::WrapMode kClampClamp[] = { GrSamplerState::WrapMode::kClamp, GrSamplerState::WrapMode::kClamp}; - return Make(std::move(proxy), srcColorType, matrix, kClampClamp, - GrTextureDomain::kIgnore_Mode, GrTextureDomain::kIgnore_Mode, direction, - alphaType); + return Make(std::move(proxy), matrix, kClampClamp, GrTextureDomain::kIgnore_Mode, + GrTextureDomain::kIgnore_Mode, direction, alphaType); } /** * Create a Mitchell filter effect with specified texture matrix and x/y tile modes. */ - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, const SkMatrix& matrix, const GrSamplerState::WrapMode wrapModes[2], Direction direction, SkAlphaType alphaType) { // Ignore the domain on x and y, since this factory relies solely on the wrap mode of the // sampler to constrain texture coordinates - return Make(std::move(proxy), srcColorType, matrix, wrapModes, - GrTextureDomain::kIgnore_Mode, GrTextureDomain::kIgnore_Mode, direction, - alphaType); + return Make(std::move(proxy), matrix, wrapModes, GrTextureDomain::kIgnore_Mode, + GrTextureDomain::kIgnore_Mode, direction, alphaType); } /** @@ -77,8 +73,7 @@ class GrBicubicEffect : public GrFragmentProcessor { * supports providing modes for the texture domain explicitly, in the event that it should * override the behavior of the sampler's tile mode (e.g. clamp to border unsupported). */ - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, const SkMatrix& matrix, const GrSamplerState::WrapMode wrapModes[2], GrTextureDomain::Mode modeX, @@ -86,27 +81,30 @@ class GrBicubicEffect : public GrFragmentProcessor { Direction direction, SkAlphaType alphaType, const SkRect* domain = nullptr) { - SkRect resolvedDomain = domain ? *domain : GrTextureDomain::MakeTexelDomain( - SkIRect::MakeWH(proxy->width(), proxy->height()), modeX, modeY); + SkRect resolvedDomain; + if (domain) { + resolvedDomain = *domain; + } else { + resolvedDomain = GrTextureDomain::MakeTexelDomain( + SkIRect::MakeSize(proxy->dimensions()), modeX, modeY); + } return std::unique_ptr( - new GrBicubicEffect(std::move(proxy), srcColorType, matrix, resolvedDomain, - wrapModes, modeX, modeY, direction, alphaType)); + new GrBicubicEffect(std::move(proxy), matrix, resolvedDomain, wrapModes, modeX, + modeY, direction, alphaType)); } /** * Create a Mitchell filter effect with a texture matrix and a domain. */ - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, const SkMatrix& matrix, const SkRect& domain, Direction direction, SkAlphaType alphaType) { static const GrSamplerState::WrapMode kClampClamp[] = { GrSamplerState::WrapMode::kClamp, GrSamplerState::WrapMode::kClamp}; - return Make(std::move(proxy), srcColorType, matrix, kClampClamp, - GrTextureDomain::kClamp_Mode, GrTextureDomain::kClamp_Mode, direction, - alphaType, &domain); + return Make(std::move(proxy), matrix, kClampClamp, GrTextureDomain::kClamp_Mode, + GrTextureDomain::kClamp_Mode, direction, alphaType, &domain); } /** @@ -120,10 +118,9 @@ class GrBicubicEffect : public GrFragmentProcessor { GrSamplerState::Filter* filterMode); private: - GrBicubicEffect(sk_sp, GrColorType srcColorType, const SkMatrix& matrix, - const SkRect& domain, const GrSamplerState::WrapMode wrapModes[2], - GrTextureDomain::Mode modeX, GrTextureDomain::Mode modeY, Direction direction, - SkAlphaType alphaType); + GrBicubicEffect(sk_sp, const SkMatrix& matrix, const SkRect& domain, + const GrSamplerState::WrapMode wrapModes[2], GrTextureDomain::Mode modeX, + GrTextureDomain::Mode modeY, Direction direction, SkAlphaType); explicit GrBicubicEffect(const GrBicubicEffect&); GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; diff --git a/third_party/skia/src/gpu/effects/GrBitmapTextGeoProc.cpp b/third_party/skia/src/gpu/effects/GrBitmapTextGeoProc.cpp index 4a8c25da6c56..5c710cce4d90 100644 --- a/third_party/skia/src/gpu/effects/GrBitmapTextGeoProc.cpp +++ b/third_party/skia/src/gpu/effects/GrBitmapTextGeoProc.cpp @@ -20,7 +20,7 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { public: - GrGLBitmapTextGeoProc() : fColor(SK_PMColor4fILLEGAL), fAtlasSize({0,0}) {} + GrGLBitmapTextGeoProc() : fColor(SK_PMColor4fILLEGAL), fAtlasDimensions{0,0} {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override { const GrBitmapTextGeoProc& btgp = args.fGP.cast(); @@ -32,16 +32,14 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { // emit attributes varyingHandler->emitAttributes(btgp); - const char* atlasSizeInvName; - fAtlasSizeInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag, - kFloat2_GrSLType, - "AtlasSizeInv", - &atlasSizeInvName); + const char* atlasDimensionsInvName; + fAtlasDimensionsInvUniform = uniformHandler->addUniform( + kVertex_GrShaderFlag, kFloat2_GrSLType, "AtlasSizeInv", &atlasDimensionsInvName); GrGLSLVarying uv(kFloat2_GrSLType); GrSLType texIdxType = args.fShaderCaps->integerSupport() ? kInt_GrSLType : kFloat_GrSLType; GrGLSLVarying texIdx(texIdxType); - append_index_uv_varyings(args, btgp.inTextureCoords().name(), atlasSizeInvName, &uv, + append_index_uv_varyings(args, btgp.inTextureCoords().name(), atlasDimensionsInvName, &uv, &texIdx, nullptr); GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; @@ -78,21 +76,23 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const GrBitmapTextGeoProc& btgp = gp.cast(); if (btgp.color() != fColor && !btgp.hasVertexColor()) { pdman.set4fv(fColorUniform, 1, btgp.color().vec()); fColor = btgp.color(); } - const SkISize& atlasSize = btgp.atlasSize(); - SkASSERT(SkIsPow2(atlasSize.fWidth) && SkIsPow2(atlasSize.fHeight)); + const SkISize& atlasDimensions = btgp.atlasDimensions(); + SkASSERT(SkIsPow2(atlasDimensions.fWidth) && SkIsPow2(atlasDimensions.fHeight)); - if (fAtlasSize != atlasSize) { - pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlasSize.fWidth, 1.0f / atlasSize.fHeight); - fAtlasSize = atlasSize; + if (fAtlasDimensions != atlasDimensions) { + pdman.set2f(fAtlasDimensionsInvUniform, + 1.0f / atlasDimensions.fWidth, + 1.0f / atlasDimensions.fHeight); + fAtlasDimensions = atlasDimensions; } - this->setTransformDataHelper(btgp.localMatrix(), pdman, &transformIter); + this->setTransformDataHelper(btgp.localMatrix(), pdman, transformRange); } static inline void GenKey(const GrGeometryProcessor& proc, @@ -110,8 +110,8 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { SkPMColor4f fColor; UniformHandle fColorUniform; - SkISize fAtlasSize; - UniformHandle fAtlasSizeInvUniform; + SkISize fAtlasDimensions; + UniformHandle fAtlasDimensionsInvUniform; typedef GrGLSLGeometryProcessor INHERITED; }; @@ -149,12 +149,13 @@ GrBitmapTextGeoProc::GrBitmapTextGeoProc(const GrShaderCaps& caps, this->setVertexAttributes(&fInPosition, 3); if (numActiveProxies) { - fAtlasSize = proxies[0]->isize(); + fAtlasDimensions = proxies[0]->dimensions(); } for (int i = 0; i < numActiveProxies; ++i) { SkASSERT(proxies[i]); - SkASSERT(proxies[i]->isize() == fAtlasSize); - fTextureSamplers[i].reset(proxies[i]->textureType(), params, proxies[i]->textureSwizzle()); + SkASSERT(proxies[i]->dimensions() == fAtlasDimensions); + fTextureSamplers[i].reset(params, proxies[i]->backendFormat(), + proxies[i]->textureSwizzle()); } this->setTextureSamplerCnt(numActiveProxies); } @@ -163,17 +164,19 @@ void GrBitmapTextGeoProc::addNewProxies(const sk_sp* proxies, int numActiveProxies, const GrSamplerState& params) { SkASSERT(numActiveProxies <= kMaxTextures); + // Just to make sure we don't try to add too many proxies + numActiveProxies = SkTMin(numActiveProxies, kMaxTextures); if (!fTextureSamplers[0].isInitialized()) { - fAtlasSize = proxies[0]->isize(); + fAtlasDimensions = proxies[0]->dimensions(); } for (int i = 0; i < numActiveProxies; ++i) { SkASSERT(proxies[i]); - SkASSERT(proxies[i]->isize() == fAtlasSize); + SkASSERT(proxies[i]->dimensions() == fAtlasDimensions); if (!fTextureSamplers[i].isInitialized()) { - fTextureSamplers[i].reset(proxies[i]->textureType(), params, + fTextureSamplers[i].reset(params, proxies[i]->backendFormat(), proxies[i]->textureSwizzle()); } } @@ -195,7 +198,7 @@ GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrBitmapTextGeoProc); #if GR_TEST_UTILS -sk_sp GrBitmapTextGeoProc::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* GrBitmapTextGeoProc::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp proxies[kMaxTextures] = { @@ -224,7 +227,7 @@ sk_sp GrBitmapTextGeoProc::TestCreate(GrProcessorTestData* break; } - return GrBitmapTextGeoProc::Make(*d->caps()->shaderCaps(), + return GrBitmapTextGeoProc::Make(d->allocator(), *d->caps()->shaderCaps(), SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), d->fRandom->nextBool(), proxies, 1, samplerState, format, diff --git a/third_party/skia/src/gpu/effects/GrBitmapTextGeoProc.h b/third_party/skia/src/gpu/effects/GrBitmapTextGeoProc.h index 3c29c4a58535..c6912d37e04b 100644 --- a/third_party/skia/src/gpu/effects/GrBitmapTextGeoProc.h +++ b/third_party/skia/src/gpu/effects/GrBitmapTextGeoProc.h @@ -8,6 +8,7 @@ #ifndef GrBitmapTextGeoProc_DEFINED #define GrBitmapTextGeoProc_DEFINED +#include "src/core/SkArenaAlloc.h" #include "src/gpu/GrGeometryProcessor.h" #include "src/gpu/GrProcessor.h" @@ -23,15 +24,15 @@ class GrBitmapTextGeoProc : public GrGeometryProcessor { public: static constexpr int kMaxTextures = 4; - static sk_sp Make(const GrShaderCaps& caps, - const SkPMColor4f& color, bool wideColor, - const sk_sp* proxies, - int numActiveProxies, - const GrSamplerState& p, GrMaskFormat format, - const SkMatrix& localMatrix, bool usesW) { - return sk_sp( - new GrBitmapTextGeoProc(caps, color, wideColor, proxies, numActiveProxies, p, format, - localMatrix, usesW)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const GrShaderCaps& caps, + const SkPMColor4f& color, bool wideColor, + const sk_sp* proxies, + int numActiveProxies, + const GrSamplerState& p, GrMaskFormat format, + const SkMatrix& localMatrix, bool usesW) { + return arena->make(caps, color, wideColor, proxies, numActiveProxies, + p, format, localMatrix, usesW); } ~GrBitmapTextGeoProc() override {} @@ -46,7 +47,7 @@ class GrBitmapTextGeoProc : public GrGeometryProcessor { bool hasVertexColor() const { return fInColor.isInitialized(); } const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesW() const { return fUsesW; } - const SkISize& atlasSize() const { return fAtlasSize; } + const SkISize& atlasDimensions() const { return fAtlasDimensions; } void addNewProxies(const sk_sp*, int numActiveProxies, const GrSamplerState&); @@ -55,6 +56,8 @@ class GrBitmapTextGeoProc : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps& caps) const override; private: + friend class ::SkArenaAlloc; // for access to ctor + GrBitmapTextGeoProc(const GrShaderCaps&, const SkPMColor4f&, bool wideColor, const sk_sp* proxies, int numProxies, const GrSamplerState& params, GrMaskFormat format, @@ -65,7 +68,7 @@ class GrBitmapTextGeoProc : public GrGeometryProcessor { SkPMColor4f fColor; SkMatrix fLocalMatrix; bool fUsesW; - SkISize fAtlasSize; // size for all textures used with fTextureSamplers[]. + SkISize fAtlasDimensions; // dimensions for all textures used with fTextureSamplers[]. TextureSampler fTextureSamplers[kMaxTextures]; Attribute fInPosition; Attribute fInColor; diff --git a/third_party/skia/src/gpu/effects/GrConfigConversionEffect.fp b/third_party/skia/src/gpu/effects/GrConfigConversionEffect.fp index 0387c3b39ccd..7338b7d24221 100644 --- a/third_party/skia/src/gpu/effects/GrConfigConversionEffect.fp +++ b/third_party/skia/src/gpu/effects/GrConfigConversionEffect.fp @@ -64,7 +64,6 @@ // calling read pixels here. Thus the pixel data will be uploaded immediately and we don't // need to keep the pixel data alive in the proxy. Therefore the ReleaseProc is nullptr. sk_sp image = SkImage::MakeFromRaster(pixmap, nullptr, nullptr); - GrColorType dataColorType = SkColorTypeToGrColorType(image->colorType()); sk_sp dataProxy = proxyProvider->createTextureProxy(std::move(image), 1, SkBudgeted::kYes, @@ -87,7 +86,7 @@ std::unique_ptr upmToPM( new GrConfigConversionEffect(PMConversion::kToPremul)); - paint1.addColorTextureProcessor(dataProxy, dataColorType, SkMatrix::I()); + paint1.addColorTextureProcessor(dataProxy, kPremul_SkAlphaType, SkMatrix::I()); paint1.addColorFragmentProcessor(pmToUPM->clone()); paint1.setPorterDuffXPFactory(SkBlendMode::kSrc); @@ -101,14 +100,16 @@ // draw tempRTC->discard(); - paint2.addColorTextureProcessor(readRTC->asTextureProxyRef(), kColorType, SkMatrix::I()); + paint2.addColorTextureProcessor(readRTC->asTextureProxyRef(), kUnpremul_SkAlphaType, + SkMatrix::I()); paint2.addColorFragmentProcessor(std::move(upmToPM)); paint2.setPorterDuffXPFactory(SkBlendMode::kSrc); tempRTC->fillRectToRect(GrNoClip(), std::move(paint2), GrAA::kNo, SkMatrix::I(), kRect, kRect); - paint3.addColorTextureProcessor(tempRTC->asTextureProxyRef(), kColorType, SkMatrix::I()); + paint3.addColorTextureProcessor(tempRTC->asTextureProxyRef(), kPremul_SkAlphaType, + SkMatrix::I()); paint3.addColorFragmentProcessor(std::move(pmToUPM)); paint3.setPorterDuffXPFactory(SkBlendMode::kSrc); diff --git a/third_party/skia/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/third_party/skia/src/gpu/effects/GrDistanceFieldGeoProc.cpp index 08c36dc0150f..1122d0e6140f 100644 --- a/third_party/skia/src/gpu/effects/GrDistanceFieldGeoProc.cpp +++ b/third_party/skia/src/gpu/effects/GrDistanceFieldGeoProc.cpp @@ -38,11 +38,11 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { // emit attributes varyingHandler->emitAttributes(dfTexEffect); - const char* atlasSizeInvName; - fAtlasSizeInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag, - kFloat2_GrSLType, - "AtlasSizeInv", - &atlasSizeInvName); + const char* atlasDimensionsInvName; + fAtlasDimensionsInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag, + kFloat2_GrSLType, + "AtlasDimensionsInv", + &atlasDimensionsInvName); #ifdef SK_GAMMA_APPLY_TO_A8 // adjust based on gamma const char* distanceAdjustUniName = nullptr; @@ -70,8 +70,8 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { GrSLType texIdxType = args.fShaderCaps->integerSupport() ? kInt_GrSLType : kFloat_GrSLType; GrGLSLVarying texIdx(texIdxType); GrGLSLVarying st(kFloat2_GrSLType); - append_index_uv_varyings(args, dfTexEffect.inTextureCoords().name(), atlasSizeInvName, &uv, - &texIdx, &st); + append_index_uv_varyings(args, dfTexEffect.inTextureCoords().name(), atlasDimensionsInvName, + &uv, &texIdx, &st); bool isUniformScale = (dfTexEffect.getFlags() & kUniformScale_DistanceFieldEffectMask) == kUniformScale_DistanceFieldEffectMask; @@ -163,7 +163,7 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const GrDistanceFieldA8TextGeoProc& dfa8gp = proc.cast(); #ifdef SK_GAMMA_APPLY_TO_A8 @@ -174,14 +174,16 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { } #endif - const SkISize& atlasSize = dfa8gp.atlasSize(); - SkASSERT(SkIsPow2(atlasSize.fWidth) && SkIsPow2(atlasSize.fHeight)); + const SkISize& atlasDimensions = dfa8gp.atlasDimensions(); + SkASSERT(SkIsPow2(atlasDimensions.fWidth) && SkIsPow2(atlasDimensions.fHeight)); - if (fAtlasSize != atlasSize) { - pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlasSize.fWidth, 1.0f / atlasSize.fHeight); - fAtlasSize = atlasSize; + if (fAtlasDimensions != atlasDimensions) { + pdman.set2f(fAtlasDimensionsInvUniform, + 1.0f / atlasDimensions.fWidth, + 1.0f / atlasDimensions.fHeight); + fAtlasDimensions = atlasDimensions; } - this->setTransformDataHelper(dfa8gp.localMatrix(), pdman, &transformIter); + this->setTransformDataHelper(dfa8gp.localMatrix(), pdman, transformRange); } static inline void GenKey(const GrGeometryProcessor& gp, @@ -198,8 +200,8 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { float fDistanceAdjust = -1.f; UniformHandle fDistanceAdjustUni; #endif - SkISize fAtlasSize = {0, 0}; - UniformHandle fAtlasSizeInvUniform; + SkISize fAtlasDimensions = {0, 0}; + UniformHandle fAtlasDimensionsInvUniform; typedef GrGLSLGeometryProcessor INHERITED; }; @@ -236,12 +238,13 @@ GrDistanceFieldA8TextGeoProc::GrDistanceFieldA8TextGeoProc(const GrShaderCaps& c this->setVertexAttributes(&fInPosition, 3); if (numProxies) { - fAtlasSize = proxies[0]->isize(); + fAtlasDimensions = proxies[0]->dimensions(); } for (int i = 0; i < numProxies; ++i) { SkASSERT(proxies[i]); - SkASSERT(proxies[i]->isize() == fAtlasSize); - fTextureSamplers[i].reset(proxies[i]->textureType(), params, proxies[i]->textureSwizzle()); + SkASSERT(proxies[i]->dimensions() == fAtlasDimensions); + fTextureSamplers[i].reset(params, proxies[i]->backendFormat(), + proxies[i]->textureSwizzle()); } this->setTextureSamplerCnt(numProxies); } @@ -250,16 +253,18 @@ void GrDistanceFieldA8TextGeoProc::addNewProxies(const sk_sp* pr int numProxies, const GrSamplerState& params) { SkASSERT(numProxies <= kMaxTextures); + // Just to make sure we don't try to add too many proxies + numProxies = SkTMin(numProxies, kMaxTextures); if (!fTextureSamplers[0].isInitialized()) { - fAtlasSize = proxies[0]->isize(); + fAtlasDimensions = proxies[0]->dimensions(); } for (int i = 0; i < numProxies; ++i) { SkASSERT(proxies[i]); - SkASSERT(proxies[i]->isize() == fAtlasSize); + SkASSERT(proxies[i]->dimensions() == fAtlasDimensions); if (!fTextureSamplers[i].isInitialized()) { - fTextureSamplers[i].reset(proxies[i]->textureType(), params, + fTextureSamplers[i].reset(params, proxies[i]->backendFormat(), proxies[i]->textureSwizzle()); } } @@ -281,7 +286,7 @@ GrDistanceFieldA8TextGeoProc::createGLSLInstance(const GrShaderCaps&) const { GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldA8TextGeoProc); #if GR_TEST_UTILS -sk_sp GrDistanceFieldA8TextGeoProc::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* GrDistanceFieldA8TextGeoProc::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp proxies[kMaxTextures] = { @@ -306,7 +311,7 @@ sk_sp GrDistanceFieldA8TextGeoProc::TestCreate(GrProcessorT #ifdef SK_GAMMA_APPLY_TO_A8 float lum = d->fRandom->nextF(); #endif - return GrDistanceFieldA8TextGeoProc::Make(*d->caps()->shaderCaps(), + return GrDistanceFieldA8TextGeoProc::Make(d->allocator(), *d->caps()->shaderCaps(), proxies, 1, samplerState, #ifdef SK_GAMMA_APPLY_TO_A8 @@ -320,10 +325,7 @@ sk_sp GrDistanceFieldA8TextGeoProc::TestCreate(GrProcessorT class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { public: - GrGLDistanceFieldPathGeoProc() - : fMatrix(SkMatrix::InvalidMatrix()) - , fAtlasSize({0,0}) { - } + GrGLDistanceFieldPathGeoProc() : fMatrix(SkMatrix::InvalidMatrix()), fAtlasDimensions{0,0} {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ const GrDistanceFieldPathGeoProc& dfPathEffect = @@ -338,18 +340,18 @@ class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { // emit attributes varyingHandler->emitAttributes(dfPathEffect); - const char* atlasSizeInvName; - fAtlasSizeInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag, - kFloat2_GrSLType, - "AtlasSizeInv", - &atlasSizeInvName); + const char* atlasDimensionsInvName; + fAtlasDimensionsInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag, + kFloat2_GrSLType, + "AtlasDimensionsInv", + &atlasDimensionsInvName); GrGLSLVarying uv(kFloat2_GrSLType); GrSLType texIdxType = args.fShaderCaps->integerSupport() ? kInt_GrSLType : kFloat_GrSLType; GrGLSLVarying texIdx(texIdxType); GrGLSLVarying st(kFloat2_GrSLType); - append_index_uv_varyings(args, dfPathEffect.inTextureCoords().name(), atlasSizeInvName, &uv, - &texIdx, &st); + append_index_uv_varyings(args, dfPathEffect.inTextureCoords().name(), + atlasDimensionsInvName, &uv, &texIdx, &st); // setup pass through color varyingHandler->addPassThroughAttribute(dfPathEffect.inColor(), args.fOutputColor); @@ -461,8 +463,7 @@ class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - FPCoordTransformIter&& transformIter) override { - + const CoordTransformRange& transformRange) override { const GrDistanceFieldPathGeoProc& dfpgp = proc.cast(); if (dfpgp.matrix().hasPerspective() && !fMatrix.cheapEqualTo(dfpgp.matrix())) { @@ -472,17 +473,19 @@ class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { pdman.setMatrix3f(fMatrixUniform, matrix); } - const SkISize& atlasSize = dfpgp.atlasSize(); - SkASSERT(SkIsPow2(atlasSize.fWidth) && SkIsPow2(atlasSize.fHeight)); - if (fAtlasSize != atlasSize) { - pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlasSize.fWidth, 1.0f / atlasSize.fHeight); - fAtlasSize = atlasSize; + const SkISize& atlasDimensions = dfpgp.atlasDimensions(); + SkASSERT(SkIsPow2(atlasDimensions.fWidth) && SkIsPow2(atlasDimensions.fHeight)); + if (fAtlasDimensions != atlasDimensions) { + pdman.set2f(fAtlasDimensionsInvUniform, + 1.0f / atlasDimensions.fWidth, + 1.0f / atlasDimensions.fHeight); + fAtlasDimensions = atlasDimensions; } if (dfpgp.matrix().hasPerspective()) { - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } else { - this->setTransformDataHelper(dfpgp.matrix(), pdman, &transformIter); + this->setTransformDataHelper(dfpgp.matrix(), pdman, transformRange); } } @@ -502,8 +505,8 @@ class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { SkMatrix fMatrix; // view matrix if perspective, local matrix otherwise UniformHandle fMatrixUniform; - SkISize fAtlasSize; - UniformHandle fAtlasSizeInvUniform; + SkISize fAtlasDimensions; + UniformHandle fAtlasDimensionsInvUniform; typedef GrGLSLGeometryProcessor INHERITED; }; @@ -530,13 +533,14 @@ GrDistanceFieldPathGeoProc::GrDistanceFieldPathGeoProc(const GrShaderCaps& caps, this->setVertexAttributes(&fInPosition, 3); if (numProxies) { - fAtlasSize = proxies[0]->isize(); + fAtlasDimensions = proxies[0]->dimensions(); } for (int i = 0; i < numProxies; ++i) { SkASSERT(proxies[i]); - SkASSERT(proxies[i]->isize() == fAtlasSize); - fTextureSamplers[i].reset(proxies[i]->textureType(), params, proxies[i]->textureSwizzle()); + SkASSERT(proxies[i]->dimensions() == fAtlasDimensions); + fTextureSamplers[i].reset(params, proxies[i]->backendFormat(), + proxies[i]->textureSwizzle()); } this->setTextureSamplerCnt(numProxies); } @@ -545,17 +549,19 @@ void GrDistanceFieldPathGeoProc::addNewProxies(const sk_sp* prox int numProxies, const GrSamplerState& params) { SkASSERT(numProxies <= kMaxTextures); + // Just to make sure we don't try to add too many proxies + numProxies = SkTMin(numProxies, kMaxTextures); if (!fTextureSamplers[0].isInitialized()) { - fAtlasSize = proxies[0]->isize(); + fAtlasDimensions = proxies[0]->dimensions(); } for (int i = 0; i < numProxies; ++i) { SkASSERT(proxies[i]); - SkASSERT(proxies[i]->isize() == fAtlasSize); + SkASSERT(proxies[i]->dimensions() == fAtlasDimensions); if (!fTextureSamplers[i].isInitialized()) { - fTextureSamplers[i].reset(proxies[i]->textureType(), params, + fTextureSamplers[i].reset(params, proxies[i]->backendFormat(), proxies[i]->textureSwizzle()); } } @@ -577,7 +583,7 @@ GrDistanceFieldPathGeoProc::createGLSLInstance(const GrShaderCaps&) const { GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldPathGeoProc); #if GR_TEST_UTILS -sk_sp GrDistanceFieldPathGeoProc::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* GrDistanceFieldPathGeoProc::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp proxies[kMaxTextures] = { @@ -599,7 +605,7 @@ sk_sp GrDistanceFieldPathGeoProc::TestCreate(GrProcessorTes flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0; } - return GrDistanceFieldPathGeoProc::Make(*d->caps()->shaderCaps(), + return GrDistanceFieldPathGeoProc::Make(d->allocator(), *d->caps()->shaderCaps(), GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool(), proxies, 1, @@ -612,7 +618,7 @@ sk_sp GrDistanceFieldPathGeoProc::TestCreate(GrProcessorTes class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { public: - GrGLDistanceFieldLCDTextGeoProc() : fAtlasSize({0, 0}) { + GrGLDistanceFieldLCDTextGeoProc() : fAtlasDimensions({0, 0}) { fDistanceAdjust = GrDistanceFieldLCDTextGeoProc::DistanceAdjust::Make(1.0f, 1.0f, 1.0f); } @@ -627,11 +633,11 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { // emit attributes varyingHandler->emitAttributes(dfTexEffect); - const char* atlasSizeInvName; - fAtlasSizeInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag, - kFloat2_GrSLType, - "AtlasSizeInv", - &atlasSizeInvName); + const char* atlasDimensionsInvName; + fAtlasDimensionsInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag, + kFloat2_GrSLType, + "AtlasDimensionsInv", + &atlasDimensionsInvName); GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; @@ -654,15 +660,15 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { GrSLType texIdxType = args.fShaderCaps->integerSupport() ? kInt_GrSLType : kFloat_GrSLType; GrGLSLVarying texIdx(texIdxType); GrGLSLVarying st(kFloat2_GrSLType); - append_index_uv_varyings(args, dfTexEffect.inTextureCoords().name(), atlasSizeInvName, &uv, - &texIdx, &st); + append_index_uv_varyings(args, dfTexEffect.inTextureCoords().name(), atlasDimensionsInvName, + &uv, &texIdx, &st); GrGLSLVarying delta(kFloat_GrSLType); varyingHandler->addVarying("Delta", &delta); if (dfTexEffect.getFlags() & kBGR_DistanceFieldEffectFlag) { - vertBuilder->codeAppendf("%s = -%s.x/3.0;", delta.vsOut(), atlasSizeInvName); + vertBuilder->codeAppendf("%s = -%s.x/3.0;", delta.vsOut(), atlasDimensionsInvName); } else { - vertBuilder->codeAppendf("%s = %s.x/3.0;", delta.vsOut(), atlasSizeInvName); + vertBuilder->codeAppendf("%s = %s.x/3.0;", delta.vsOut(), atlasDimensionsInvName); } // add frag shader code @@ -784,7 +790,7 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& processor, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { SkASSERT(fDistanceAdjustUni.isValid()); const GrDistanceFieldLCDTextGeoProc& dflcd = processor.cast(); @@ -797,13 +803,15 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { fDistanceAdjust = wa; } - const SkISize& atlasSize = dflcd.atlasSize(); - SkASSERT(SkIsPow2(atlasSize.fWidth) && SkIsPow2(atlasSize.fHeight)); - if (fAtlasSize != atlasSize) { - pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlasSize.fWidth, 1.0f / atlasSize.fHeight); - fAtlasSize = atlasSize; + const SkISize& atlasDimensions = dflcd.atlasDimensions(); + SkASSERT(SkIsPow2(atlasDimensions.fWidth) && SkIsPow2(atlasDimensions.fHeight)); + if (fAtlasDimensions != atlasDimensions) { + pdman.set2f(fAtlasDimensionsInvUniform, + 1.0f / atlasDimensions.fWidth, + 1.0f / atlasDimensions.fHeight); + fAtlasDimensions = atlasDimensions; } - this->setTransformDataHelper(dflcd.localMatrix(), pdman, &transformIter); + this->setTransformDataHelper(dflcd.localMatrix(), pdman, transformRange); } static inline void GenKey(const GrGeometryProcessor& gp, @@ -820,8 +828,8 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { GrDistanceFieldLCDTextGeoProc::DistanceAdjust fDistanceAdjust; UniformHandle fDistanceAdjustUni; - SkISize fAtlasSize; - UniformHandle fAtlasSizeInvUniform; + SkISize fAtlasDimensions; + UniformHandle fAtlasDimensionsInvUniform; typedef GrGLSLGeometryProcessor INHERITED; }; @@ -853,13 +861,14 @@ GrDistanceFieldLCDTextGeoProc::GrDistanceFieldLCDTextGeoProc(const GrShaderCaps& this->setVertexAttributes(&fInPosition, 3); if (numProxies) { - fAtlasSize = proxies[0]->isize(); + fAtlasDimensions = proxies[0]->dimensions(); } for (int i = 0; i < numProxies; ++i) { SkASSERT(proxies[i]); - SkASSERT(proxies[i]->isize() == fAtlasSize); - fTextureSamplers[i].reset(proxies[i]->textureType(), params, proxies[i]->textureSwizzle()); + SkASSERT(proxies[i]->dimensions() == fAtlasDimensions); + fTextureSamplers[i].reset(params, proxies[i]->backendFormat(), + proxies[i]->textureSwizzle()); } this->setTextureSamplerCnt(numProxies); } @@ -868,17 +877,19 @@ void GrDistanceFieldLCDTextGeoProc::addNewProxies(const sk_sp* p int numProxies, const GrSamplerState& params) { SkASSERT(numProxies <= kMaxTextures); + // Just to make sure we don't try to add too many proxies + numProxies = SkTMin(numProxies, kMaxTextures); if (!fTextureSamplers[0].isInitialized()) { - fAtlasSize = proxies[0]->isize(); + fAtlasDimensions = proxies[0]->dimensions(); } for (int i = 0; i < numProxies; ++i) { SkASSERT(proxies[i]); - SkASSERT(proxies[i]->isize() == fAtlasSize); + SkASSERT(proxies[i]->dimensions() == fAtlasDimensions); if (!fTextureSamplers[i].isInitialized()) { - fTextureSamplers[i].reset(proxies[i]->textureType(), params, + fTextureSamplers[i].reset(params, proxies[i]->backendFormat(), proxies[i]->textureSwizzle()); } } @@ -899,7 +910,7 @@ GrGLSLPrimitiveProcessor* GrDistanceFieldLCDTextGeoProc::createGLSLInstance(cons GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldLCDTextGeoProc); #if GR_TEST_UTILS -sk_sp GrDistanceFieldLCDTextGeoProc::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* GrDistanceFieldLCDTextGeoProc::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp proxies[kMaxTextures] = { @@ -922,7 +933,7 @@ sk_sp GrDistanceFieldLCDTextGeoProc::TestCreate(GrProcessor } flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; SkMatrix localMatrix = GrTest::TestMatrix(d->fRandom); - return GrDistanceFieldLCDTextGeoProc::Make(*d->caps()->shaderCaps(), proxies, 1, samplerState, - wa, flags, localMatrix); + return GrDistanceFieldLCDTextGeoProc::Make(d->allocator(), *d->caps()->shaderCaps(), proxies, + 1, samplerState, wa, flags, localMatrix); } #endif diff --git a/third_party/skia/src/gpu/effects/GrDistanceFieldGeoProc.h b/third_party/skia/src/gpu/effects/GrDistanceFieldGeoProc.h index 20bb6262ae68..95e3a11956c3 100644 --- a/third_party/skia/src/gpu/effects/GrDistanceFieldGeoProc.h +++ b/third_party/skia/src/gpu/effects/GrDistanceFieldGeoProc.h @@ -8,6 +8,7 @@ #ifndef GrDistanceFieldGeoProc_DEFINED #define GrDistanceFieldGeoProc_DEFINED +#include "src/core/SkArenaAlloc.h" #include "src/gpu/GrGeometryProcessor.h" #include "src/gpu/GrProcessor.h" @@ -57,22 +58,24 @@ class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor { /** The local matrix should be identity if local coords are not required by the GrPipeline. */ #ifdef SK_GAMMA_APPLY_TO_A8 - static sk_sp Make(const GrShaderCaps& caps, - const sk_sp* proxies, - int numActiveProxies, - const GrSamplerState& params, float lum, uint32_t flags, - const SkMatrix& localMatrixIfUsesLocalCoords) { - return sk_sp(new GrDistanceFieldA8TextGeoProc( - caps, proxies, numActiveProxies, params, lum, flags, localMatrixIfUsesLocalCoords)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const GrShaderCaps& caps, + const sk_sp* proxies, + int numActiveProxies, + const GrSamplerState& params, float lum, uint32_t flags, + const SkMatrix& localMatrixIfUsesLocalCoords) { + return arena->make( + caps, proxies, numActiveProxies, params, lum, flags, localMatrixIfUsesLocalCoords); } #else - static sk_sp Make(const GrShaderCaps& caps, - const sk_sp* proxies, - int numActiveProxies, - const GrSamplerState& params, uint32_t flags, - const SkMatrix& localMatrixIfUsesLocalCoords) { - return sk_sp(new GrDistanceFieldA8TextGeoProc( - caps, proxies, numActiveProxies, params, flags, localMatrixIfUsesLocalCoords)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const GrShaderCaps& caps, + const sk_sp* proxies, + int numActiveProxies, + const GrSamplerState& params, uint32_t flags, + const SkMatrix& localMatrixIfUsesLocalCoords) { + return arena->make( + caps, proxies, numActiveProxies, params, flags, localMatrixIfUsesLocalCoords); } #endif @@ -88,7 +91,7 @@ class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor { float getDistanceAdjust() const { return fDistanceAdjust; } #endif uint32_t getFlags() const { return fFlags; } - const SkISize& atlasSize() const { return fAtlasSize; } + const SkISize& atlasDimensions() const { return fAtlasDimensions; } void addNewProxies(const sk_sp* proxies, int numProxies, const GrSamplerState&); @@ -97,6 +100,8 @@ class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: + friend class ::SkArenaAlloc; // for access to ctor + GrDistanceFieldA8TextGeoProc(const GrShaderCaps& caps, const sk_sp* proxies, int numActiveProxies, @@ -109,7 +114,7 @@ class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor { const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; } TextureSampler fTextureSamplers[kMaxTextures]; - SkISize fAtlasSize; // size for all textures used with fTextureSamplers[]. + SkISize fAtlasDimensions; // dimensions for all textures used with fTextureSamplers[]. SkMatrix fLocalMatrix; Attribute fInPosition; Attribute fInColor; @@ -135,15 +140,15 @@ class GrDistanceFieldPathGeoProc : public GrGeometryProcessor { static constexpr int kMaxTextures = 4; /** The local matrix should be identity if local coords are not required by the GrPipeline. */ - static sk_sp Make(const GrShaderCaps& caps, - const SkMatrix& matrix, - bool wideColor, - const sk_sp* proxies, - int numActiveProxies, - const GrSamplerState& params, uint32_t flags) { - return sk_sp( - new GrDistanceFieldPathGeoProc(caps, matrix, wideColor, proxies, numActiveProxies, - params, flags)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const GrShaderCaps& caps, + const SkMatrix& matrix, + bool wideColor, + const sk_sp* proxies, + int numActiveProxies, + const GrSamplerState& params, uint32_t flags) { + return arena->make(caps, matrix, wideColor, proxies, + numActiveProxies, params, flags); } ~GrDistanceFieldPathGeoProc() override {} @@ -155,7 +160,7 @@ class GrDistanceFieldPathGeoProc : public GrGeometryProcessor { const Attribute& inTextureCoords() const { return fInTextureCoords; } const SkMatrix& matrix() const { return fMatrix; } uint32_t getFlags() const { return fFlags; } - const SkISize& atlasSize() const { return fAtlasSize; } + const SkISize& atlasDimensions() const { return fAtlasDimensions; } void addNewProxies(const sk_sp*, int numActiveProxies, const GrSamplerState&); @@ -164,6 +169,8 @@ class GrDistanceFieldPathGeoProc : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: + friend class ::SkArenaAlloc; // for access to ctor + GrDistanceFieldPathGeoProc(const GrShaderCaps& caps, const SkMatrix& matrix, bool wideColor, @@ -175,7 +182,7 @@ class GrDistanceFieldPathGeoProc : public GrGeometryProcessor { SkMatrix fMatrix; // view matrix if perspective, local matrix otherwise TextureSampler fTextureSamplers[kMaxTextures]; - SkISize fAtlasSize; // size for all textures used with fTextureSamplers[]. + SkISize fAtlasDimensions; // dimensions for all textures used with fTextureSamplers[]. Attribute fInPosition; Attribute fInColor; Attribute fInTextureCoords; @@ -211,16 +218,17 @@ class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor { } }; - static sk_sp Make(const GrShaderCaps& caps, - const sk_sp* proxies, - int numActiveProxies, - const GrSamplerState& params, - DistanceAdjust distanceAdjust, - uint32_t flags, - const SkMatrix& localMatrixIfUsesLocalCoords) { - return sk_sp( - new GrDistanceFieldLCDTextGeoProc(caps, proxies, numActiveProxies, params, - distanceAdjust, flags, localMatrixIfUsesLocalCoords)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const GrShaderCaps& caps, + const sk_sp* proxies, + int numActiveProxies, + const GrSamplerState& params, + DistanceAdjust distanceAdjust, + uint32_t flags, + const SkMatrix& localMatrixIfUsesLocalCoords) { + return arena->make(caps, proxies, numActiveProxies, params, + distanceAdjust, flags, + localMatrixIfUsesLocalCoords); } ~GrDistanceFieldLCDTextGeoProc() override {} @@ -233,7 +241,7 @@ class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor { DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; } uint32_t getFlags() const { return fFlags; } const SkMatrix& localMatrix() const { return fLocalMatrix; } - const SkISize& atlasSize() const { return fAtlasSize; } + const SkISize& atlasDimensions() const { return fAtlasDimensions; } void addNewProxies(const sk_sp*, int numActiveProxies, const GrSamplerState&); @@ -242,6 +250,8 @@ class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: + friend class ::SkArenaAlloc; // for access to ctor + GrDistanceFieldLCDTextGeoProc(const GrShaderCaps& caps, const sk_sp* proxies, int numActiveProxies, const GrSamplerState& params, DistanceAdjust wa, uint32_t flags, const SkMatrix& localMatrix); @@ -249,7 +259,7 @@ class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor { const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; } TextureSampler fTextureSamplers[kMaxTextures]; - SkISize fAtlasSize; // size for all textures used with fTextureSamplers[]. + SkISize fAtlasDimensions; // dimensions for all textures used with fTextureSamplers[]. const SkMatrix fLocalMatrix; DistanceAdjust fDistanceAdjust; Attribute fInPosition; diff --git a/third_party/skia/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp b/third_party/skia/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp index c7e76ea0f56d..8d1c3f2b8fda 100644 --- a/third_party/skia/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp +++ b/third_party/skia/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp @@ -211,16 +211,15 @@ static void fill_in_1D_gaussian_kernel(float* kernel, int width, float gaussianS } GrGaussianConvolutionFragmentProcessor::GrGaussianConvolutionFragmentProcessor( - sk_sp proxy, - GrColorType srcColorType, - Direction direction, - int radius, - float gaussianSigma, - GrTextureDomain::Mode mode, - int bounds[2]) + sk_sp proxy, + SkAlphaType alphaType, + Direction direction, + int radius, + float gaussianSigma, + GrTextureDomain::Mode mode, + int bounds[2]) : INHERITED(kGrGaussianConvolutionFragmentProcessor_ClassID, - ModulateForSamplerOptFlags(srcColorType, - mode == GrTextureDomain::kDecal_Mode)) + ModulateForSamplerOptFlags(alphaType, mode == GrTextureDomain::kDecal_Mode)) , fCoordTransform(proxy.get()) , fTextureSampler(std::move(proxy)) #if defined(COBALT) @@ -304,8 +303,10 @@ std::unique_ptr GrGaussianConvolutionFragmentProcessor::Tes int radius = d->fRandom->nextRangeU(1, kMaxKernelRadius); float sigma = radius / 3.f; + auto alphaType = static_cast( + d->fRandom->nextRangeU(kUnknown_SkAlphaType + 1, kLastEnum_SkAlphaType)); return GrGaussianConvolutionFragmentProcessor::Make( - std::move(proxy), d->textureProxyColorType(texIdx), - dir, radius, sigma, static_cast(modeIdx), bounds); + std::move(proxy), alphaType, dir, radius, sigma, + static_cast(modeIdx), bounds); } #endif diff --git a/third_party/skia/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h b/third_party/skia/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h index 843ed30d6518..205b9817f8e8 100644 --- a/third_party/skia/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h +++ b/third_party/skia/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h @@ -22,15 +22,15 @@ class GrGaussianConvolutionFragmentProcessor : public GrFragmentProcessor { enum class Direction { kX, kY }; /// Convolve with a Gaussian kernel - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, + SkAlphaType alphaType, Direction dir, int halfWidth, float gaussianSigma, GrTextureDomain::Mode mode, int* bounds) { return std::unique_ptr(new GrGaussianConvolutionFragmentProcessor( - std::move(proxy), srcColorType, dir, halfWidth, gaussianSigma, mode, bounds)); + std::move(proxy), alphaType, dir, halfWidth, gaussianSigma, mode, bounds)); } const float* kernel() const { return fKernel; } @@ -72,8 +72,8 @@ class GrGaussianConvolutionFragmentProcessor : public GrFragmentProcessor { private: /// Convolve with a Gaussian kernel - GrGaussianConvolutionFragmentProcessor(sk_sp, GrColorType srcColorType, - Direction, int halfWidth, float gaussianSigma, + GrGaussianConvolutionFragmentProcessor(sk_sp, SkAlphaType alphaType, Direction, + int halfWidth, float gaussianSigma, GrTextureDomain::Mode mode, int bounds[2]); explicit GrGaussianConvolutionFragmentProcessor(const GrGaussianConvolutionFragmentProcessor&); diff --git a/third_party/skia/src/gpu/effects/GrHSLToRGBFilterEffect.fp b/third_party/skia/src/gpu/effects/GrHSLToRGBFilterEffect.fp new file mode 100644 index 000000000000..02125f8e7091 --- /dev/null +++ b/third_party/skia/src/gpu/effects/GrHSLToRGBFilterEffect.fp @@ -0,0 +1,49 @@ +/* + * Copyright 2019 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +// Convert HSLA -> RGBA (including clamp and premul). +// +// Based on work by Sam Hocevar, Emil Persson, and Ian Taylor [1][2][3]. +// +// [1] http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv +// [2] http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl +// [3] http://www.chilliant.com/rgb2hsv.html + +void main() { + half3 hsl = sk_InColor.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.rgb *= sk_OutColor.a; +} + +@optimizationFlags { + (kConstantOutputForConstantInput_OptimizationFlag | kPreservesOpaqueInput_OptimizationFlag) +} + +@class { + #include "include/private/SkColorData.h" + #include "include/private/SkNx.h" + + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& c) const override { + 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), + q = Sk4f::Min(Sk4f::Max(((p - p.floor()) * 6 - 3).abs() - 1, 0), 1), + rgb = (q - 0.5f) * C + L, + rgba = Sk4f::Min(Sk4f::Max(Sk4f(rgb[0], rgb[1], rgb[2], c.fA), 0), 1); + + return SkColor4f{rgba[0], rgba[1], rgba[2], rgba[3]}.premul(); + } +} diff --git a/third_party/skia/src/gpu/effects/GrMatrixConvolutionEffect.cpp b/third_party/skia/src/gpu/effects/GrMatrixConvolutionEffect.cpp index 86df7a02ec99..1f70a5354240 100644 --- a/third_party/skia/src/gpu/effects/GrMatrixConvolutionEffect.cpp +++ b/third_party/skia/src/gpu/effects/GrMatrixConvolutionEffect.cpp @@ -125,13 +125,13 @@ void GrGLMatrixConvolutionEffect::GenKey(const GrProcessor& processor, void GrGLMatrixConvolutionEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& processor) { const GrMatrixConvolutionEffect& conv = processor.cast(); - GrTextureProxy* proxy = conv.textureSampler(0).proxy(); - GrTexture* texture = proxy->peekTexture(); + GrSurfaceProxy* proxy = conv.textureSampler(0).proxy(); + SkISize textureDims = proxy->backingStoreDimensions(); float imageIncrement[2]; float ySign = proxy->origin() == kTopLeft_GrSurfaceOrigin ? 1.0f : -1.0f; - imageIncrement[0] = 1.0f / texture->width(); - imageIncrement[1] = ySign / texture->height(); + imageIncrement[0] = 1.0f / textureDims.width(); + imageIncrement[1] = ySign / textureDims.height(); pdman.set2fv(fImageIncrementUni, 1, imageIncrement); pdman.set2fv(fKernelOffsetUni, 1, conv.kernelOffset()); int kernelCount = conv.kernelSize().width() * conv.kernelSize().height(); @@ -143,7 +143,7 @@ void GrGLMatrixConvolutionEffect::onSetData(const GrGLSLProgramDataManager& pdma fDomain.setData(pdman, conv.domain(), proxy, conv.textureSampler(0).samplerState()); } -GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(sk_sp srcProxy, +GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(sk_sp srcProxy, const SkIRect& srcBounds, const SkISize& kernelSize, const SkScalar* kernel, diff --git a/third_party/skia/src/gpu/effects/GrMatrixConvolutionEffect.h b/third_party/skia/src/gpu/effects/GrMatrixConvolutionEffect.h index 212d5c09737b..ac36de250ae5 100644 --- a/third_party/skia/src/gpu/effects/GrMatrixConvolutionEffect.h +++ b/third_party/skia/src/gpu/effects/GrMatrixConvolutionEffect.h @@ -16,7 +16,7 @@ class GrMatrixConvolutionEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(sk_sp srcProxy, + static std::unique_ptr Make(sk_sp srcProxy, const SkIRect& srcBounds, const SkISize& kernelSize, const SkScalar* kernel, @@ -57,7 +57,7 @@ class GrMatrixConvolutionEffect : public GrFragmentProcessor { private: // srcProxy is the texture that is going to be convolved // srcBounds is the subset of 'srcProxy' that will be used (e.g., for clamp mode) - GrMatrixConvolutionEffect(sk_sp srcProxy, + GrMatrixConvolutionEffect(sk_sp srcProxy, const SkIRect& srcBounds, const SkISize& kernelSize, const SkScalar* kernel, diff --git a/third_party/skia/src/gpu/effects/GrRGBToHSLFilterEffect.fp b/third_party/skia/src/gpu/effects/GrRGBToHSLFilterEffect.fp new file mode 100644 index 000000000000..443fd1ae395f --- /dev/null +++ b/third_party/skia/src/gpu/effects/GrRGBToHSLFilterEffect.fp @@ -0,0 +1,73 @@ +/* + * Copyright 2019 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +// Convert RGBA -> HSLA (including unpremul). +// +// Based on work by Sam Hocevar, Emil Persson, and Ian Taylor [1][2][3]. High-level ideas: +// +// - minimize the number of branches by sorting and computing the hue phase in parallel (vec4s) +// +// - trade the third sorting branch for a potentially faster std::min and leaving 2nd/3rd +// channels unsorted (based on the observation that swapping both the channels and the bias sign +// has no effect under abs) +// +// - use epsilon offsets for denominators, to avoid explicit zero-checks +// +// An additional trick we employ is deferring premul->unpremul conversion until the very end: the +// alpha factor gets naturally simplified for H and S, and only L requires a dedicated unpremul +// division (so we trade three divs for one). +// +// [1] http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv +// [2] http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl +// [3] http://www.chilliant.com/rgb2hsv.html + +void main() { + half4 c = 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) + : half4(c.r, p.x, p.yz); + + // q.x -> max channel value + // q.yz -> 2nd/3rd channel values (unsorted) + // q.w -> bias value dependent on max channel selection + + half eps = 0.0001; + 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 + eps)); + half S = pmC / (c.a + eps - abs(pmL * 2 - c.a)); + half L = pmL / (c.a + eps); + + sk_OutColor = half4(H, S, L, c.a); +} + +@optimizationFlags { + (kConstantOutputForConstantInput_OptimizationFlag | kPreservesOpaqueInput_OptimizationFlag) +} + +@class { + #include "include/private/SkColorData.h" + + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& c) const override { + 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] } + : SkPMColor4f{ c.fR, p[0], p[1], p[2] }; + + const auto eps = 0.0001f, // matching SkSL/ColorMatrix half4 epsilon + pmV = q[0], + pmC = pmV - std::min(q[1], q[2]), + pmL = pmV - pmC * 0.5f, + H = std::abs(q[3] + (q[1] - q[2]) / (pmC * 6 + eps)), + S = pmC / (c.fA + eps - std::abs(pmL * 2 - c.fA)), + L = pmL / (c.fA + eps); + + return { H, S, L, c.fA }; + } +} diff --git a/third_party/skia/src/gpu/effects/GrRRectBlurEffect.fp b/third_party/skia/src/gpu/effects/GrRRectBlurEffect.fp index b0b770e3c21f..3ee1eeadd711 100644 --- a/third_party/skia/src/gpu/effects/GrRRectBlurEffect.fp +++ b/third_party/skia/src/gpu/effects/GrRRectBlurEffect.fp @@ -31,7 +31,7 @@ uniform half blurRadius; @class { static sk_sp find_or_create_rrect_blur_mask(GrRecordingContext* context, const SkRRect& rrectToDraw, - const SkISize& size, + const SkISize& dimensions, float xformedSigma) { static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); GrUniqueKey key; @@ -57,8 +57,8 @@ uniform half blurRadius; // 1) The texture coords would need to be updated. // 2) We would have to use GrTextureDomain::kClamp_Mode for the GaussianBlur. auto rtc = context->priv().makeDeferredRenderTargetContextWithFallback( - SkBackingFit::kExact, size.fWidth, size.fHeight, GrColorType::kAlpha_8, - nullptr); + SkBackingFit::kExact, dimensions.fWidth, dimensions.fHeight, + GrColorType::kAlpha_8, nullptr); if (!rtc) { return nullptr; } @@ -81,7 +81,7 @@ uniform half blurRadius; rtc->colorInfo().alphaType(), SkIPoint::Make(0, 0), nullptr, - SkIRect::MakeWH(size.fWidth, size.fHeight), + SkIRect::MakeSize(dimensions), SkIRect::EmptyIRect(), xformedSigma, xformedSigma, @@ -132,7 +132,7 @@ uniform half blurRadius; // sufficiently small relative to both the size of the corner radius and the // width (and height) of the rrect. SkRRect rrectToDraw; - SkISize size; + SkISize dimensions; SkScalar ignored[kSkBlurRRectMaxDivisions]; int ignoredSize; uint32_t ignored32; @@ -140,7 +140,7 @@ uniform half blurRadius; bool ninePatchable = SkComputeBlurredRRectParams(srcRRect, devRRect, SkRect::MakeEmpty(), sigma, xformedSigma, - &rrectToDraw, &size, + &rrectToDraw, &dimensions, ignored, ignored, ignored, ignored, &ignoredSize, &ignoredSize, @@ -150,7 +150,7 @@ uniform half blurRadius; } sk_sp mask(find_or_create_rrect_blur_mask(context, rrectToDraw, - size, xformedSigma)); + dimensions, xformedSigma)); if (!mask) { return nullptr; } diff --git a/third_party/skia/src/gpu/effects/GrShadowGeoProc.cpp b/third_party/skia/src/gpu/effects/GrShadowGeoProc.cpp index 5af096c63d06..a1c4c5439b56 100644 --- a/third_party/skia/src/gpu/effects/GrShadowGeoProc.cpp +++ b/third_party/skia/src/gpu/effects/GrShadowGeoProc.cpp @@ -43,17 +43,16 @@ class GrGLSLRRectShadowGeoProc : public GrGLSLGeometryProcessor { args.fFPCoordTransformHandler); fragBuilder->codeAppend("half d = length(shadowParams.xy);"); - fragBuilder->codeAppend("half distance = shadowParams.z * (1.0 - d);"); - - fragBuilder->codeAppend("half factor = 1.0 - clamp(distance, 0.0, 1.0);"); - fragBuilder->codeAppend("factor = exp(-factor * factor * 4.0) - 0.018;"); - fragBuilder->codeAppendf("%s = half4(factor);", - args.fOutputCoverage); + fragBuilder->codeAppend("float2 uv = float2(shadowParams.z * (1.0 - d), 0.5);"); + fragBuilder->codeAppend("half factor = "); + fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv", kFloat2_GrSLType); + fragBuilder->codeAppend(".a;"); + fragBuilder->codeAppendf("%s = half4(factor);", args.fOutputCoverage); } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - FPCoordTransformIter&& transformIter) override { - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + const CoordTransformRange& transformRange) override { + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } private: @@ -62,11 +61,17 @@ class GrGLSLRRectShadowGeoProc : public GrGLSLGeometryProcessor { /////////////////////////////////////////////////////////////////////////////// -GrRRectShadowGeoProc::GrRRectShadowGeoProc() : INHERITED(kGrRRectShadowGeoProc_ClassID) { +GrRRectShadowGeoProc::GrRRectShadowGeoProc(const GrTextureProxy* lut) + : INHERITED(kGrRRectShadowGeoProc_ClassID) { fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; fInColor = {"inColor", kUByte4_norm_GrVertexAttribType, kHalf4_GrSLType}; fInShadowParams = {"inShadowParams", kFloat3_GrVertexAttribType, kHalf3_GrSLType}; this->setVertexAttributes(&fInPosition, 3); + + SkASSERT(lut); + fLUTTextureSampler.reset(GrSamplerState::ClampBilerp(), lut->backendFormat(), + lut->textureSwizzle()); + this->setTextureSamplerCnt(1); } GrGLSLPrimitiveProcessor* GrRRectShadowGeoProc::createGLSLInstance(const GrShaderCaps&) const { @@ -78,7 +83,8 @@ GrGLSLPrimitiveProcessor* GrRRectShadowGeoProc::createGLSLInstance(const GrShade GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrRRectShadowGeoProc); #if GR_TEST_UTILS -sk_sp GrRRectShadowGeoProc::TestCreate(GrProcessorTestData* d) { - return GrRRectShadowGeoProc::Make(); +GrGeometryProcessor* GrRRectShadowGeoProc::TestCreate(GrProcessorTestData* d) { + return GrRRectShadowGeoProc::Make(d->allocator(), + d->textureProxy(GrProcessorUnitTest::kAlphaTextureIdx).get()); } #endif diff --git a/third_party/skia/src/gpu/effects/GrShadowGeoProc.h b/third_party/skia/src/gpu/effects/GrShadowGeoProc.h index b821a6a5055f..1b9b49b7a5bc 100644 --- a/third_party/skia/src/gpu/effects/GrShadowGeoProc.h +++ b/third_party/skia/src/gpu/effects/GrShadowGeoProc.h @@ -8,6 +8,7 @@ #ifndef GrShadowGeoProc_DEFINED #define GrShadowGeoProc_DEFINED +#include "src/core/SkArenaAlloc.h" #include "src/gpu/GrGeometryProcessor.h" #include "src/gpu/GrProcessor.h" @@ -19,8 +20,8 @@ class GrGLRRectShadowGeoProc; */ class GrRRectShadowGeoProc : public GrGeometryProcessor { public: - static sk_sp Make() { - return sk_sp(new GrRRectShadowGeoProc()); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, const GrTextureProxy* lut) { + return arena->make(lut); } const char* name() const override { return "RRectShadow"; } @@ -35,9 +36,14 @@ class GrRRectShadowGeoProc : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: - GrRRectShadowGeoProc(); + friend class ::SkArenaAlloc; // for access to ctor + + GrRRectShadowGeoProc(const GrTextureProxy* lut); + + const TextureSampler& onTextureSampler(int i) const override { return fLUTTextureSampler; } GrColor fColor; + TextureSampler fLUTTextureSampler; Attribute fInPosition; Attribute fInColor; diff --git a/third_party/skia/src/gpu/effects/GrSimpleTextureEffect.fp b/third_party/skia/src/gpu/effects/GrSimpleTextureEffect.fp index 5c30cc070f1d..cf4dd312b181 100644 --- a/third_party/skia/src/gpu/effects/GrSimpleTextureEffect.fp +++ b/third_party/skia/src/gpu/effects/GrSimpleTextureEffect.fp @@ -9,7 +9,7 @@ in uniform sampler2D image; in half4x4 matrix; @constructorParams { - GrColorType srcColorType, + SkAlphaType alphaType, GrSamplerState samplerParams } @@ -22,35 +22,35 @@ in half4x4 matrix; } @make { - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, + SkAlphaType alphaType, const SkMatrix& matrix) { return std::unique_ptr( - new GrSimpleTextureEffect(std::move(proxy), matrix, srcColorType, + new GrSimpleTextureEffect(std::move(proxy), matrix, alphaType, GrSamplerState(GrSamplerState::WrapMode::kClamp, GrSamplerState::Filter::kNearest))); } /* clamp mode */ - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, + SkAlphaType alphaType, const SkMatrix& matrix, GrSamplerState::Filter filter) { return std::unique_ptr( - new GrSimpleTextureEffect(std::move(proxy), matrix, srcColorType, + new GrSimpleTextureEffect(std::move(proxy), matrix, alphaType, GrSamplerState(GrSamplerState::WrapMode::kClamp, filter))); } - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, + SkAlphaType alphaType, const SkMatrix& matrix, const GrSamplerState& p) { return std::unique_ptr( - new GrSimpleTextureEffect(std::move(proxy), matrix, srcColorType, p)); + new GrSimpleTextureEffect(std::move(proxy), matrix, alphaType, p)); } } @optimizationFlags { - ModulateForSamplerOptFlags(srcColorType, + ModulateForSamplerOptFlags(alphaType, samplerParams.wrapModeX() == GrSamplerState::WrapMode::kClampToBorder || samplerParams.wrapModeY() == GrSamplerState::WrapMode::kClampToBorder) } @@ -76,6 +76,7 @@ void main() { : GrSamplerState::Filter::kNearest); const SkMatrix& matrix = GrTest::TestMatrix(testData->fRandom); + auto alphaType = static_cast( + testData->fRandom->nextRangeU(kUnknown_SkAlphaType + 1, kLastEnum_SkAlphaType)); return GrSimpleTextureEffect::Make(testData->textureProxy(texIdx), - testData->textureProxyColorType(texIdx), matrix, params); -} + alphaType, matrix, params);} diff --git a/third_party/skia/src/gpu/effects/GrSkSLFP.cpp b/third_party/skia/src/gpu/effects/GrSkSLFP.cpp index cfa780d93a3a..6435d2efe7a6 100644 --- a/third_party/skia/src/gpu/effects/GrSkSLFP.cpp +++ b/third_party/skia/src/gpu/effects/GrSkSLFP.cpp @@ -81,6 +81,12 @@ const SkSL::Program* GrSkSLFPFactory::getSpecialization(const SkSL::String& key, bool v = *(((bool*) inputs) + offset); inputMap.insert(std::make_pair(name, SkSL::Program::Settings::Value(v))); offset += sizeof(bool); + } else if (&v->fType == fCompiler.context().fFloat2_Type.get() || + &v->fType == fCompiler.context().fHalf2_Type.get()) { + offset = SkAlign4(offset) + sizeof(float) * 2; + } else if (&v->fType == fCompiler.context().fFloat3_Type.get() || + &v->fType == fCompiler.context().fHalf3_Type.get()) { + offset = SkAlign4(offset) + sizeof(float) * 3; } else if (&v->fType == fCompiler.context().fFloat4_Type.get() || &v->fType == fCompiler.context().fHalf4_Type.get()) { offset = SkAlign4(offset) + sizeof(float) * 4; @@ -108,6 +114,10 @@ static SkSL::Layout::CType get_ctype(const SkSL::Context& context, const SkSL::V if (result == SkSL::Layout::CType::kDefault) { if (&v.fType == context.fFloat_Type.get()) { result = SkSL::Layout::CType::kFloat; + } else if (&v.fType == context.fFloat2_Type.get()) { + result = SkSL::Layout::CType::kFloat2; + } else if (&v.fType == context.fFloat3_Type.get()) { + result = SkSL::Layout::CType::kFloat3; } else if (&v.fType == context.fFloat4_Type.get()) { result = SkSL::Layout::CType::kSkRect; } else if (&v.fType == context.fHalf4_Type.get()) { @@ -144,10 +154,22 @@ class GrGLSLSkSLFP : public GrGLSLFragmentProcessor { return kFloat2_GrSLType; } else if (type == *fContext.fHalf2_Type) { return kHalf2_GrSLType; + } else if (type == *fContext.fFloat3_Type) { + return kFloat3_GrSLType; + } else if (type == *fContext.fHalf3_Type) { + return kHalf3_GrSLType; } else if (type == *fContext.fFloat4_Type) { return kFloat4_GrSLType; } else if (type == *fContext.fHalf4_Type) { return kHalf4_GrSLType; + } else if (type == *fContext.fFloat2x2_Type) { + return kFloat2x2_GrSLType; + } else if (type == *fContext.fHalf2x2_Type) { + return kHalf2x2_GrSLType; + } else if (type == *fContext.fFloat3x3_Type) { + return kFloat3x3_GrSLType; + } else if (type == *fContext.fHalf3x3_Type) { + return kHalf3x3_GrSLType; } else if (type == *fContext.fFloat4x4_Type) { return kFloat4x4_GrSLType; } else if (type == *fContext.fHalf4x4_Type) { @@ -161,80 +183,96 @@ class GrGLSLSkSLFP : public GrGLSLFragmentProcessor { SK_ABORT("unsupported uniform type"); } - void emitCode(EmitArgs& args) override { - for (const auto& v : fInAndUniformVars) { - if (v->fModifiers.fFlags & SkSL::Modifiers::kUniform_Flag && v->fType != - *fContext.fFragmentProcessor_Type) { - fUniformHandles.push_back(args.fUniformHandler->addUniform( - kFragment_GrShaderFlag, - this->uniformType(v->fType), - SkSL::String(v->fName).c_str())); - } - } - GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - for (const auto& f : fFunctions) { - fFunctionNames.emplace_back(); - fragBuilder->emitFunction(f.fReturnType, - f.fName.c_str(), - f.fParameters.size(), - f.fParameters.data(), - f.fBody.c_str(), - &fFunctionNames.back()); - } - std::vector childNames; - for (int i = 0; i < this->numChildProcessors(); ++i) { - childNames.push_back(SkStringPrintf("_child%d", i)); - this->invokeChild(i, &childNames[i], args); - } + SkSL::String expandFormatArgs(const SkSL::String& raw, + const EmitArgs& args, + const std::vector formatArgs, + const char* coordsName, + const std::vector& childNames) { + SkSL::String result; int substringStartIndex = 0; int formatArgIndex = 0; - SkString coords = args.fTransformedCoords.count() - ? fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint) - : SkString("sk_FragCoord"); - for (size_t i = 0; i < fGLSL.length(); ++i) { - char c = fGLSL[i]; + for (size_t i = 0; i < raw.length(); ++i) { + char c = raw[i]; if (c == '%') { - fragBuilder->codeAppend(fGLSL.c_str() + substringStartIndex, - i - substringStartIndex); + result += SkSL::StringFragment(raw.c_str() + substringStartIndex, + i - substringStartIndex); ++i; - c = fGLSL[i]; + c = raw[i]; switch (c) { case 's': { - SkSL::Compiler::FormatArg& arg = fFormatArgs[formatArgIndex++]; + const SkSL::Compiler::FormatArg& arg = formatArgs[formatArgIndex++]; switch (arg.fKind) { case SkSL::Compiler::FormatArg::Kind::kInput: - fragBuilder->codeAppend(args.fInputColor); + result += args.fInputColor; break; case SkSL::Compiler::FormatArg::Kind::kOutput: - fragBuilder->codeAppend(args.fOutputColor); + result += args.fOutputColor; break; case SkSL::Compiler::FormatArg::Kind::kCoordX: - fragBuilder->codeAppendf("%s.x", coords.c_str()); + result += coordsName; + result += ".x"; break; case SkSL::Compiler::FormatArg::Kind::kCoordY: - fragBuilder->codeAppendf("%s.y", coords.c_str()); + result += coordsName; + result += ".y"; break; case SkSL::Compiler::FormatArg::Kind::kUniform: - fragBuilder->codeAppend(args.fUniformHandler->getUniformCStr( - fUniformHandles[arg.fIndex])); + result += args.fUniformHandler->getUniformCStr( + fUniformHandles[arg.fIndex]); break; case SkSL::Compiler::FormatArg::Kind::kChildProcessor: - fragBuilder->codeAppend(childNames[arg.fIndex].c_str()); + result += childNames[arg.fIndex].c_str(); break; case SkSL::Compiler::FormatArg::Kind::kFunctionName: - fragBuilder->codeAppend(fFunctionNames[arg.fIndex].c_str()); + SkASSERT((int) fFunctionNames.size() > arg.fIndex); + result += fFunctionNames[arg.fIndex].c_str(); break; } break; } default: - fragBuilder->codeAppendf("%c", c); + result += c; } substringStartIndex = i + 1; } } - fragBuilder->codeAppend(fGLSL.c_str() + substringStartIndex, - fGLSL.length() - substringStartIndex); + result += SkSL::StringFragment(raw.c_str() + substringStartIndex, + raw.length() - substringStartIndex); + return result; + } + + void emitCode(EmitArgs& args) override { + for (const auto& v : fInAndUniformVars) { + if (v->fModifiers.fFlags & SkSL::Modifiers::kUniform_Flag && v->fType != + *fContext.fFragmentProcessor_Type) { + fUniformHandles.push_back(args.fUniformHandler->addUniform( + kFragment_GrShaderFlag, + this->uniformType(v->fType), + SkSL::String(v->fName).c_str())); + } + } + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; + SkString coords = args.fTransformedCoords.count() + ? fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint) + : SkString("sk_FragCoord"); + std::vector childNames; + for (int i = 0; i < this->numChildProcessors(); ++i) { + childNames.push_back(SkStringPrintf("_child%d", i)); + this->invokeChild(i, &childNames[i], args); + } + for (const auto& f : fFunctions) { + fFunctionNames.emplace_back(); + SkSL::String body = this->expandFormatArgs(f.fBody.c_str(), args, f.fFormatArgs, + coords.c_str(), childNames); + fragBuilder->emitFunction(f.fReturnType, + f.fName.c_str(), + f.fParameters.size(), + f.fParameters.data(), + body.c_str(), + &fFunctionNames.back()); + } + fragBuilder->codeAppend(this->expandFormatArgs(fGLSL.c_str(), args, fFormatArgs, + coords.c_str(), childNames).c_str()); } void onSetData(const GrGLSLProgramDataManager& pdman, @@ -255,6 +293,30 @@ class GrGLSLSkSLFP : public GrGLSLFragmentProcessor { } break; } + case SkSL::Layout::CType::kFloat2: { + offset = SkAlign4(offset); + float f1 = *(float*) (inputs + offset); + offset += sizeof(float); + float f2 = *(float*) (inputs + offset); + offset += sizeof(float); + if (v->fModifiers.fFlags & SkSL::Modifiers::kUniform_Flag) { + pdman.set2f(fUniformHandles[uniformIndex++], f1, f2); + } + break; + } + case SkSL::Layout::CType::kFloat3: { + offset = SkAlign4(offset); + float f1 = *(float*) (inputs + offset); + offset += sizeof(float); + float f2 = *(float*) (inputs + offset); + offset += sizeof(float); + float f3 = *(float*) (inputs + offset); + offset += sizeof(float); + if (v->fModifiers.fFlags & SkSL::Modifiers::kUniform_Flag) { + pdman.set3f(fUniformHandles[uniformIndex++], f1, f2, f3); + } + break; + } case SkSL::Layout::CType::kSkPMColor4f: case SkSL::Layout::CType::kSkRect: { offset = SkAlign4(offset); @@ -403,6 +465,19 @@ GrGLSLFragmentProcessor* GrSkSLFP::onCreateGLSLInstance() const { formatArgs, functions); } +static void copy_floats_key(char* inputs, GrProcessorKeyBuilder* b, bool isIn, int count, + size_t* offset, SkSL::String* key) { + if (isIn) { + for (size_t i = 0; i < sizeof(float) * count; ++i) { + (*key) += inputs[*offset + i]; + b->add32(*(int32_t*) (inputs + *offset)); + (*offset) += sizeof(float); + } + } else { + (*offset) += sizeof(float) * count; + } +} + void GrSkSLFP::onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const { this->createFactory(); @@ -446,24 +521,19 @@ void GrSkSLFP::onGetGLSLProcessorKey(const GrShaderCaps& caps, offset += sizeof(float); break; } + case SkSL::Layout::CType::kFloat2: + copy_floats_key(inputs, b, v->fModifiers.fFlags & SkSL::Modifiers::kIn_Flag, 2, + &offset, &fKey); + break; + case SkSL::Layout::CType::kFloat3: + copy_floats_key(inputs, b, v->fModifiers.fFlags & SkSL::Modifiers::kIn_Flag, 3, + &offset, &fKey); + break; case SkSL::Layout::CType::kSkPMColor: case SkSL::Layout::CType::kSkPMColor4f: case SkSL::Layout::CType::kSkRect: - if (v->fModifiers.fFlags & SkSL::Modifiers::kIn_Flag) { - for (size_t i = 0; i < sizeof(float) * 4; ++i) { - fKey += inputs[offset + i]; - } - b->add32(*(int32_t*) (inputs + offset)); - offset += sizeof(float); - b->add32(*(int32_t*) (inputs + offset)); - offset += sizeof(float); - b->add32(*(int32_t*) (inputs + offset)); - offset += sizeof(float); - b->add32(*(int32_t*) (inputs + offset)); - offset += sizeof(float); - } else { - offset += sizeof(float) * 4; - } + copy_floats_key(inputs, b, v->fModifiers.fFlags & SkSL::Modifiers::kIn_Flag, 4, + &offset, &fKey); break; default: // unsupported input var type diff --git a/third_party/skia/src/gpu/effects/GrTextureDomain.cpp b/third_party/skia/src/gpu/effects/GrTextureDomain.cpp index 25b5bb3d6b7b..8a0014a096ef 100644 --- a/third_party/skia/src/gpu/effects/GrTextureDomain.cpp +++ b/third_party/skia/src/gpu/effects/GrTextureDomain.cpp @@ -21,7 +21,7 @@ #include -GrTextureDomain::GrTextureDomain(GrTextureProxy* proxy, const SkRect& domain, Mode modeX, +GrTextureDomain::GrTextureDomain(GrSurfaceProxy* proxy, const SkRect& domain, Mode modeX, Mode modeY, int index) : fModeX(modeX) , fModeY(modeY) @@ -32,13 +32,12 @@ GrTextureDomain::GrTextureDomain(GrTextureProxy* proxy, const SkRect& domain, Mo return; } - const SkRect kFullRect = SkRect::MakeIWH(proxy->width(), proxy->height()); + const SkRect kFullRect = proxy->getBoundsRect(); // We don't currently handle domains that are empty or don't intersect the texture. // It is OK if the domain rect is a line or point, but it should not be inverted. We do not // handle rects that do not intersect the [0..1]x[0..1] rect. - SkASSERT(domain.fLeft <= domain.fRight); - SkASSERT(domain.fTop <= domain.fBottom); + SkASSERT(domain.isSorted()); fDomain.fLeft = SkScalarPin(domain.fLeft, 0.0f, kFullRect.fRight); fDomain.fRight = SkScalarPin(domain.fRight, fDomain.fLeft, kFullRect.fRight); fDomain.fTop = SkScalarPin(domain.fTop, 0.0f, kFullRect.fBottom); @@ -47,6 +46,13 @@ GrTextureDomain::GrTextureDomain(GrTextureProxy* proxy, const SkRect& domain, Mo SkASSERT(fDomain.fTop <= fDomain.fBottom); } +GrTextureDomain::GrTextureDomain(const SkRect& domain, Mode modeX, Mode modeY, int index) + : fDomain(domain), fModeX(modeX), fModeY(modeY), fIndex(index) { + // We don't currently handle domains that are empty or don't intersect the texture. + // It is OK if the domain rect is a line or point, but it should not be inverted. + SkASSERT(domain.isSorted()); +} + ////////////////////////////////////////////////////////////////////////////// static SkString clamp_expression(GrTextureDomain::Mode mode, const char* inCoord, @@ -76,6 +82,22 @@ static SkString clamp_expression(GrTextureDomain::Mode mode, const char* inCoord return clampedExpr; } +void GrTextureDomain::GLDomain::sampleProcessor(const GrTextureDomain& textureDomain, + const char* inColor, + const char* outColor, + const SkString& inCoords, + GrGLSLFragmentProcessor* parent, + GrGLSLFragmentProcessor::EmitArgs& args, + int childIndex) { + auto appendProcessorSample = [parent, &args, childIndex, inColor](const char* coord) { + SkString outColor("childColor"); + parent->invokeChild(childIndex, inColor, &outColor, args, coord); + return outColor; + }; + this->sample(args.fFragBuilder, args.fUniformHandler, textureDomain, outColor, inCoords, + appendProcessorSample); +} + void GrTextureDomain::GLDomain::sampleTexture(GrGLSLShaderBuilder* builder, GrGLSLUniformHandler* uniformHandler, const GrShaderCaps* shaderCaps, @@ -84,6 +106,21 @@ void GrTextureDomain::GLDomain::sampleTexture(GrGLSLShaderBuilder* builder, const SkString& inCoords, GrGLSLFragmentProcessor::SamplerHandle sampler, const char* inModulateColor) { + auto appendTextureSample = [&sampler, inModulateColor, builder](const char* coord) { + builder->codeAppend("half4 textureColor = "); + builder->appendTextureLookupAndModulate(inModulateColor, sampler, coord); + builder->codeAppend(";"); + return SkString("textureColor"); + }; + this->sample(builder, uniformHandler, textureDomain, outColor, inCoords, appendTextureSample); +} + +void GrTextureDomain::GLDomain::sample(GrGLSLShaderBuilder* builder, + GrGLSLUniformHandler* uniformHandler, + const GrTextureDomain& textureDomain, + const char* outColor, + const SkString& inCoords, + const std::function& appendSample) { SkASSERT(!fHasMode || (textureDomain.modeX() == fModeX && textureDomain.modeY() == fModeY)); SkDEBUGCODE(fModeX = textureDomain.modeX();) SkDEBUGCODE(fModeY = textureDomain.modeY();) @@ -139,11 +176,8 @@ void GrTextureDomain::GLDomain::sampleTexture(GrGLSLShaderBuilder* builder, } builder->codeAppend(";"); - // Look up the texture sample at the clamped coordinate location - builder->codeAppend("half4 inside = "); - builder->appendTextureLookupAndModulate(inModulateColor, sampler, "clampedCoord", - kFloat2_GrSLType); - builder->codeAppend(";"); + // Sample 'appendSample' at the clamped coordinate location. + SkString color = appendSample("clampedCoord"); // Apply decal mode's transparency interpolation if needed if (decalX || decalY) { @@ -170,175 +204,232 @@ void GrTextureDomain::GLDomain::sampleTexture(GrGLSLShaderBuilder* builder, // is set to 1 and it becomes a simple linear blend between texture and transparent. builder->codeAppendf("if (err > %s.z) { err = 1.0; } else if (%s.z < 1) { err = 0.0; }", fDecalName.c_str(), fDecalName.c_str()); - builder->codeAppendf("%s = mix(inside, half4(0, 0, 0, 0), err);", outColor); + builder->codeAppendf("%s = mix(%s, half4(0, 0, 0, 0), err);", outColor, color.c_str()); } else { // A simple look up - builder->codeAppendf("%s = inside;", outColor); + builder->codeAppendf("%s = %s;", outColor, color.c_str()); } } void GrTextureDomain::GLDomain::setData(const GrGLSLProgramDataManager& pdman, const GrTextureDomain& textureDomain, - GrTextureProxy* proxy, - const GrSamplerState& sampler) { - GrTexture* tex = proxy->peekTexture(); + const GrSurfaceProxy* proxy, + const GrSamplerState& state) { + // We want a hard transition from texture content to trans-black in nearest mode. + bool filterDecal = state.filter() != GrSamplerState::Filter::kNearest; + this->setData(pdman, textureDomain, proxy, filterDecal); +} + +void GrTextureDomain::GLDomain::setData(const GrGLSLProgramDataManager& pdman, + const GrTextureDomain& textureDomain, + bool filterIfDecal) { + this->setData(pdman, textureDomain, nullptr, filterIfDecal); +} + +void GrTextureDomain::GLDomain::setData(const GrGLSLProgramDataManager& pdman, + const GrTextureDomain& textureDomain, + const GrSurfaceProxy* proxy, + bool filterIfDecal) { SkASSERT(fHasMode && textureDomain.modeX() == fModeX && textureDomain.modeY() == fModeY); - if (kIgnore_Mode != textureDomain.modeX() || kIgnore_Mode != textureDomain.modeY()) { - bool sendDecalData = textureDomain.modeX() == kDecal_Mode || - textureDomain.modeY() == kDecal_Mode; - - // If the texture is using nearest filtering, then the decal filter weight should step from - // 0 (texture) to 1 (transparent) one half pixel away from the domain. When doing any other - // form of filtering, the weight should be 1.0 so that it smoothly interpolates between the - // texture and transparent. - SkScalar decalFilterWeight = sampler.filter() == GrSamplerState::Filter::kNearest ? - SK_ScalarHalf : 1.0f; + if (kIgnore_Mode == textureDomain.modeX() && kIgnore_Mode == textureDomain.modeY()) { + return; + } + // If the texture is using nearest filtering, then the decal filter weight should step from + // 0 (texture) to 1 (transparent) one half pixel away from the domain. When doing any other + // form of filtering, the weight should be 1.0 so that it smoothly interpolates between the + // texture and transparent. + // Start off assuming we're in pixel units and later adjust if we have to deal with normalized + // texture coords. + float decalFilterWeights[3] = {1.f, 1.f, filterIfDecal ? 1.f : 0.5f}; + bool sendDecalData = textureDomain.modeX() == kDecal_Mode || + textureDomain.modeY() == kDecal_Mode; + float tempDomainValues[4]; + const float* values; + if (proxy) { SkScalar wInv, hInv, h; - if (proxy->textureType() == GrTextureType::kRectangle) { + GrTexture* tex = proxy->peekTexture(); + if (proxy->backendFormat().textureType() == GrTextureType::kRectangle) { wInv = hInv = 1.f; h = tex->height(); - - // Don't do any scaling by texture size for decal filter rate, it's already in pixels - if (sendDecalData) { - pdman.set3f(fDecalUni, 1.f, 1.f, decalFilterWeight); - } + // Don't do any scaling by texture size for decal filter rate, it's already in + // pixels } else { wInv = SK_Scalar1 / tex->width(); hInv = SK_Scalar1 / tex->height(); h = 1.f; - if (sendDecalData) { - pdman.set3f(fDecalUni, tex->width(), tex->height(), decalFilterWeight); - } + // Account for texture coord normalization in decal filter weights. + decalFilterWeights[0] = tex->width(); + decalFilterWeights[1] = tex->height(); } - float values[kPrevDomainCount] = { - SkScalarToFloat(textureDomain.domain().fLeft * wInv), - SkScalarToFloat(textureDomain.domain().fTop * hInv), - SkScalarToFloat(textureDomain.domain().fRight * wInv), - SkScalarToFloat(textureDomain.domain().fBottom * hInv) - }; - - if (proxy->textureType() == GrTextureType::kRectangle) { - SkASSERT(values[0] >= 0.0f && values[0] <= proxy->width()); - SkASSERT(values[1] >= 0.0f && values[1] <= proxy->height()); - SkASSERT(values[2] >= 0.0f && values[2] <= proxy->width()); - SkASSERT(values[3] >= 0.0f && values[3] <= proxy->height()); + tempDomainValues[0] = SkScalarToFloat(textureDomain.domain().fLeft * wInv); + tempDomainValues[1] = SkScalarToFloat(textureDomain.domain().fTop * hInv); + tempDomainValues[2] = SkScalarToFloat(textureDomain.domain().fRight * wInv); + tempDomainValues[3] = SkScalarToFloat(textureDomain.domain().fBottom * hInv); + + if (proxy->backendFormat().textureType() == GrTextureType::kRectangle) { + SkASSERT(tempDomainValues[0] >= 0.0f && tempDomainValues[0] <= proxy->width()); + SkASSERT(tempDomainValues[1] >= 0.0f && tempDomainValues[1] <= proxy->height()); + SkASSERT(tempDomainValues[2] >= 0.0f && tempDomainValues[2] <= proxy->width()); + SkASSERT(tempDomainValues[3] >= 0.0f && tempDomainValues[3] <= proxy->height()); } else { - SkASSERT(values[0] >= 0.0f && values[0] <= 1.0f); - SkASSERT(values[1] >= 0.0f && values[1] <= 1.0f); - SkASSERT(values[2] >= 0.0f && values[2] <= 1.0f); - SkASSERT(values[3] >= 0.0f && values[3] <= 1.0f); + SkASSERT(tempDomainValues[0] >= 0.0f && tempDomainValues[0] <= 1.0f); + SkASSERT(tempDomainValues[1] >= 0.0f && tempDomainValues[1] <= 1.0f); + SkASSERT(tempDomainValues[2] >= 0.0f && tempDomainValues[2] <= 1.0f); + SkASSERT(tempDomainValues[3] >= 0.0f && tempDomainValues[3] <= 1.0f); } // vertical flip if necessary if (kBottomLeft_GrSurfaceOrigin == proxy->origin()) { - values[1] = h - values[1]; - values[3] = h - values[3]; + tempDomainValues[1] = h - tempDomainValues[1]; + tempDomainValues[3] = h - tempDomainValues[3]; // The top and bottom were just flipped, so correct the ordering // of elements so that values = (l, t, r, b). using std::swap; - swap(values[1], values[3]); - } - if (0 != memcmp(values, fPrevDomain, kPrevDomainCount * sizeof(float))) { - pdman.set4fv(fDomainUni, 1, values); - memcpy(fPrevDomain, values, kPrevDomainCount * sizeof(float)); + swap(tempDomainValues[1], tempDomainValues[3]); } + values = tempDomainValues; + } else { + values = textureDomain.domain().asScalars(); + } + if (!std::equal(values, values + 4, fPrevDomain)) { + pdman.set4fv(fDomainUni, 1, values); + std::copy_n(values, 4, fPrevDomain); + } + if (sendDecalData && + !std::equal(decalFilterWeights, decalFilterWeights + 3, fPrevDeclFilterWeights)) { + pdman.set3fv(fDecalUni, 1, decalFilterWeights); + std::copy_n(decalFilterWeights, 3, fPrevDeclFilterWeights); } } /////////////////////////////////////////////////////////////////////////////// -std::unique_ptr GrTextureDomainEffect::Make( - sk_sp proxy, - GrColorType srcColorType, - const SkMatrix& matrix, - const SkRect& domain, - GrTextureDomain::Mode mode, - GrSamplerState::Filter filterMode) { - return Make(std::move(proxy), srcColorType, matrix, domain, mode, mode, - GrSamplerState(GrSamplerState::WrapMode::kClamp, filterMode)); +std::unique_ptr GrDomainEffect::Make(std::unique_ptr fp, + const SkRect& domain, + GrTextureDomain::Mode mode, + bool decalIsFiltered) { + return Make(std::move(fp), domain, mode, mode, decalIsFiltered); } -std::unique_ptr GrTextureDomainEffect::Make( - sk_sp proxy, - GrColorType srcColorType, - const SkMatrix& matrix, - const SkRect& domain, - GrTextureDomain::Mode modeX, - GrTextureDomain::Mode modeY, - const GrSamplerState& sampler) { +std::unique_ptr GrDomainEffect::Make(std::unique_ptr fp, + const SkRect& domain, + GrTextureDomain::Mode modeX, + GrTextureDomain::Mode modeY, + bool decalIsFiltered) { + if (modeX == GrTextureDomain::kIgnore_Mode && modeY == GrTextureDomain::kIgnore_Mode) { + return fp; + } + int count = 0; + GrCoordTransform* coordTransform = nullptr; + for (auto [transform, ignored] : GrFragmentProcessor::FPCoordTransformRange(*fp)) { + ++count; + coordTransform = &transform; + } + // If there are no coord transforms on the passed FP or it's children then there's no need to + // enforce a domain. + // We have a limitation that only one coord transform is support when overriding local coords. + // If that limit were relaxed we would need to add a coord transform for each descendent FP + // transform and possibly have multiple domain rects to account for different proxy + // normalization and y-reversals. + if (count != 1) { + return fp; + } + GrCoordTransform transformCopy = *coordTransform; + // Reset the child FP's coord transform. + *coordTransform = {}; // If both domain modes happen to be ignore, it would be faster to just drop the domain logic - // entirely Technically, we could also use the simple texture effect if the domain modes agree - // with the sampler modes and the proxy is the same size as the domain. It's a lot easier for - // calling code to detect these cases and handle it themselves. - return std::unique_ptr(new GrTextureDomainEffect( - std::move(proxy), srcColorType, matrix, domain, modeX, modeY, sampler)); + // entirely and return the original FP. We'd need a GrMatrixProcessor if the matrix is not + // identity, though. + return std::unique_ptr(new GrDomainEffect( + std::move(fp), transformCopy, domain, modeX, modeY, decalIsFiltered)); +} + +std::unique_ptr GrDomainEffect::Make(std::unique_ptr fp, + const SkRect& domain, + GrTextureDomain::Mode mode, + GrSamplerState::Filter filter) { + bool filterIfDecal = filter != GrSamplerState::Filter::kNearest; + return Make(std::move(fp), domain, mode, filterIfDecal); +} + +std::unique_ptr GrDomainEffect::Make(std::unique_ptr fp, + const SkRect& domain, + GrTextureDomain::Mode modeX, + GrTextureDomain::Mode modeY, + GrSamplerState::Filter filter) { + bool filterIfDecal = filter != GrSamplerState::Filter::kNearest; + return Make(std::move(fp), domain, modeX, modeY, filterIfDecal); +} +GrFragmentProcessor::OptimizationFlags GrDomainEffect::Flags(GrFragmentProcessor* fp, + GrTextureDomain::Mode modeX, + GrTextureDomain::Mode modeY) { + auto fpFlags = GrFragmentProcessor::ProcessorOptimizationFlags(fp); + if (modeX == GrTextureDomain::kDecal_Mode || modeY == GrTextureDomain::kDecal_Mode) { + return fpFlags & ~kPreservesOpaqueInput_OptimizationFlag; + } + return fpFlags; } -GrTextureDomainEffect::GrTextureDomainEffect(sk_sp proxy, - GrColorType srcColorType, - const SkMatrix& matrix, - const SkRect& domain, - GrTextureDomain::Mode modeX, - GrTextureDomain::Mode modeY, - const GrSamplerState& sampler) - : INHERITED(kGrTextureDomainEffect_ClassID, - ModulateForSamplerOptFlags(srcColorType, - GrTextureDomain::IsDecalSampled(sampler, modeX, modeY))) - , fCoordTransform(matrix, proxy.get()) - , fTextureDomain(proxy.get(), domain, modeX, modeY) - , fTextureSampler(std::move(proxy), sampler) { - SkASSERT((modeX != GrTextureDomain::kRepeat_Mode && modeY != GrTextureDomain::kRepeat_Mode) || - sampler.filter() == GrSamplerState::Filter::kNearest); +GrDomainEffect::GrDomainEffect(std::unique_ptr fp, + const GrCoordTransform& coordTransform, + const SkRect& domain, + GrTextureDomain::Mode modeX, + GrTextureDomain::Mode modeY, + bool decalIsFiltered) + : INHERITED(kGrDomainEffect_ClassID, Flags(fp.get(), modeX, modeY)) + , fCoordTransform(coordTransform) + , fDomain(domain, modeX, modeY) + , fDecalIsFiltered(decalIsFiltered) { + SkASSERT(fp); + fp->setSampledWithExplicitCoords(true); + this->registerChildProcessor(std::move(fp)); this->addCoordTransform(&fCoordTransform); - this->setTextureSamplerCnt(1); + if (fDomain.modeX() != GrTextureDomain::kDecal_Mode && + fDomain.modeY() != GrTextureDomain::kDecal_Mode) { + // Canonicalize this don't care value so we don't have to worry about it elsewhere. + fDecalIsFiltered = false; + } } -GrTextureDomainEffect::GrTextureDomainEffect(const GrTextureDomainEffect& that) - : INHERITED(kGrTextureDomainEffect_ClassID, that.optimizationFlags()) +GrDomainEffect::GrDomainEffect(const GrDomainEffect& that) + : INHERITED(kGrDomainEffect_ClassID, that.optimizationFlags()) , fCoordTransform(that.fCoordTransform) - , fTextureDomain(that.fTextureDomain) - , fTextureSampler(that.fTextureSampler) { + , fDomain(that.fDomain) + , fDecalIsFiltered(that.fDecalIsFiltered) { + auto child = that.childProcessor(0).clone(); + child->setSampledWithExplicitCoords(true); + this->registerChildProcessor(std::move(child)); this->addCoordTransform(&fCoordTransform); - this->setTextureSamplerCnt(1); } -void GrTextureDomainEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, - GrProcessorKeyBuilder* b) const { - b->add32(GrTextureDomain::GLDomain::DomainKey(fTextureDomain)); +void GrDomainEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, + GrProcessorKeyBuilder* b) const { + b->add32(GrTextureDomain::GLDomain::DomainKey(fDomain)); } -GrGLSLFragmentProcessor* GrTextureDomainEffect::onCreateGLSLInstance() const { +GrGLSLFragmentProcessor* GrDomainEffect::onCreateGLSLInstance() const { class GLSLProcessor : public GrGLSLFragmentProcessor { public: void emitCode(EmitArgs& args) override { - const GrTextureDomainEffect& tde = args.fFp.cast(); - const GrTextureDomain& domain = tde.fTextureDomain; + const GrDomainEffect& de = args.fFp.cast(); + const GrTextureDomain& domain = de.fDomain; - GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; SkString coords2D = - fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint); + args.fFragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint); - fGLDomain.sampleTexture(fragBuilder, - args.fUniformHandler, - args.fShaderCaps, - domain, - args.fOutputColor, - coords2D, - args.fTexSamplers[0], - args.fInputColor); + fGLDomain.sampleProcessor(domain, args.fInputColor, args.fOutputColor, coords2D, this, + args, 0); } protected: void onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& fp) override { - const GrTextureDomainEffect& tde = fp.cast(); - const GrTextureDomain& domain = tde.fTextureDomain; - GrTextureProxy* proxy = tde.textureSampler(0).proxy(); - - fGLDomain.setData(pdman, domain, proxy, tde.textureSampler(0).samplerState()); + const GrDomainEffect& de = fp.cast(); + const GrTextureDomain& domain = de.fDomain; + fGLDomain.setData(pdman, domain, de.fCoordTransform.proxy(), de.fDecalIsFiltered); } private: @@ -348,53 +439,63 @@ GrGLSLFragmentProcessor* GrTextureDomainEffect::onCreateGLSLInstance() const { return new GLSLProcessor; } -bool GrTextureDomainEffect::onIsEqual(const GrFragmentProcessor& sBase) const { - const GrTextureDomainEffect& s = sBase.cast(); - return this->fTextureDomain == s.fTextureDomain; +bool GrDomainEffect::onIsEqual(const GrFragmentProcessor& sBase) const { + auto& td = sBase.cast(); + return fDomain == td.fDomain && fDecalIsFiltered == td.fDecalIsFiltered; } /////////////////////////////////////////////////////////////////////////////// -GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrTextureDomainEffect); +GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDomainEffect); #if GR_TEST_UTILS -std::unique_ptr GrTextureDomainEffect::TestCreate(GrProcessorTestData* d) { - int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx - : GrProcessorUnitTest::kAlphaTextureIdx; - sk_sp proxy = d->textureProxy(texIdx); - SkRect domain; - domain.fLeft = d->fRandom->nextRangeScalar(0, proxy->width()); - domain.fRight = d->fRandom->nextRangeScalar(domain.fLeft, proxy->width()); - domain.fTop = d->fRandom->nextRangeScalar(0, proxy->height()); - domain.fBottom = d->fRandom->nextRangeScalar(domain.fTop, proxy->height()); - GrTextureDomain::Mode modeX = - (GrTextureDomain::Mode) d->fRandom->nextULessThan(GrTextureDomain::kModeCount); - GrTextureDomain::Mode modeY = - (GrTextureDomain::Mode) d->fRandom->nextULessThan(GrTextureDomain::kModeCount); - const SkMatrix& matrix = GrTest::TestMatrix(d->fRandom); - bool bilerp = modeX != GrTextureDomain::kRepeat_Mode && modeY != GrTextureDomain::kRepeat_Mode ? - d->fRandom->nextBool() : false; - return GrTextureDomainEffect::Make( - std::move(proxy), - d->textureProxyColorType(texIdx), - matrix, - domain, - modeX, - modeY, - GrSamplerState(GrSamplerState::WrapMode::kClamp, bilerp ? - GrSamplerState::Filter::kBilerp : GrSamplerState::Filter::kNearest)); +std::unique_ptr GrDomainEffect::TestCreate(GrProcessorTestData* d) { + do { + GrTextureDomain::Mode modeX = + (GrTextureDomain::Mode)d->fRandom->nextULessThan(GrTextureDomain::kModeCount); + GrTextureDomain::Mode modeY = + (GrTextureDomain::Mode)d->fRandom->nextULessThan(GrTextureDomain::kModeCount); + auto child = GrProcessorUnitTest::MakeChildFP(d); + const auto* childPtr = child.get(); + SkRect domain; + // We assert if the child's coord transform has a proxy and the domain rect is outside its + // bounds. + GrFragmentProcessor::CoordTransformIter ctIter(*child); + if (!ctIter) { + continue; + } + auto [transform, fp] = *ctIter; + if (auto proxy = transform.proxy()) { + auto [w, h] = proxy->backingStoreDimensions(); + domain.fLeft = d->fRandom->nextRangeScalar(0, w); + domain.fRight = d->fRandom->nextRangeScalar(0, w); + domain.fTop = d->fRandom->nextRangeScalar(0, h); + domain.fBottom = d->fRandom->nextRangeScalar(0, h); + } else { + domain.fLeft = d->fRandom->nextRangeScalar(-100.f, 100.f); + domain.fRight = d->fRandom->nextRangeScalar(-100.f, 100.f); + domain.fTop = d->fRandom->nextRangeScalar(-100.f, 100.f); + domain.fBottom = d->fRandom->nextRangeScalar(-100.f, 100.f); + } + domain.sort(); + bool filterIfDecal = d->fRandom->nextBool(); + auto result = GrDomainEffect::Make(std::move(child), domain, modeX, modeY, filterIfDecal); + if (result && result.get() != childPtr) { + return result; + } + } while (true); } #endif /////////////////////////////////////////////////////////////////////////////// std::unique_ptr GrDeviceSpaceTextureDecalFragmentProcessor::Make( - sk_sp proxy, const SkIRect& subset, const SkIPoint& deviceSpaceOffset) { + sk_sp proxy, const SkIRect& subset, const SkIPoint& deviceSpaceOffset) { return std::unique_ptr(new GrDeviceSpaceTextureDecalFragmentProcessor( std::move(proxy), subset, deviceSpaceOffset)); } GrDeviceSpaceTextureDecalFragmentProcessor::GrDeviceSpaceTextureDecalFragmentProcessor( - sk_sp proxy, const SkIRect& subset, const SkIPoint& deviceSpaceOffset) + sk_sp proxy, const SkIRect& subset, const SkIPoint& deviceSpaceOffset) : INHERITED(kGrDeviceSpaceTextureDecalFragmentProcessor_ClassID, kCompatibleWithCoverageAsAlpha_OptimizationFlag) , fTextureSampler(proxy, GrSamplerState::ClampNearest()) @@ -449,13 +550,13 @@ GrGLSLFragmentProcessor* GrDeviceSpaceTextureDecalFragmentProcessor::onCreateGLS const GrFragmentProcessor& fp) override { const GrDeviceSpaceTextureDecalFragmentProcessor& dstdfp = fp.cast(); - GrTextureProxy* proxy = dstdfp.textureSampler(0).proxy(); - GrTexture* texture = proxy->peekTexture(); + GrSurfaceProxy* proxy = dstdfp.textureSampler(0).proxy(); + SkISize textureDims = proxy->backingStoreDimensions(); fGLDomain.setData(pdman, dstdfp.fTextureDomain, proxy, dstdfp.textureSampler(0).samplerState()); - float iw = 1.f / texture->width(); - float ih = 1.f / texture->height(); + float iw = 1.f / textureDims.width(); + float ih = 1.f / textureDims.height(); float scaleAndTransData[4] = { iw, ih, -dstdfp.fDeviceSpaceOffset.fX * iw, -dstdfp.fDeviceSpaceOffset.fY * ih diff --git a/third_party/skia/src/gpu/effects/GrTextureDomain.h b/third_party/skia/src/gpu/effects/GrTextureDomain.h index 96c2d2019b20..073a15be35d4 100644 --- a/third_party/skia/src/gpu/effects/GrTextureDomain.h +++ b/third_party/skia/src/gpu/effects/GrTextureDomain.h @@ -5,8 +5,8 @@ * found in the LICENSE file. */ -#ifndef GrTextureDomainEffect_DEFINED -#define GrTextureDomainEffect_DEFINED +#ifndef GrTextureDomain_DEFINED +#define GrTextureDomain_DEFINED #include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" @@ -50,10 +50,20 @@ class GrTextureDomain { } /** + * Construct a domain used to sample a GrFragmentProcessor. + * * @param index Pass a value >= 0 if using multiple texture domains in the same effect. * It is used to keep inserted variables from causing name collisions. */ - GrTextureDomain(GrTextureProxy*, const SkRect& domain, Mode modeX, Mode modeY, int index = -1); + GrTextureDomain(const SkRect& domain, Mode modeX, Mode modeY, int index = -1); + + /** + * Construct a domain used to directly sampler a texture. + * + * @param index Pass a value >= 0 if using multiple texture domains in the same effect. + * It is used to keep inserted variables from causing name collisions. + */ + GrTextureDomain(GrSurfaceProxy*, const SkRect& domain, Mode modeX, Mode modeY, int index = -1); GrTextureDomain(const GrTextureDomain&) = default; @@ -104,6 +114,7 @@ class GrTextureDomain { (kIgnore_Mode == fModeY || (fDomain.fTop == that.fDomain.fTop && fDomain.fBottom == that.fDomain.fBottom)); } + bool operator!=(const GrTextureDomain& that) const { return !(*this == that); } /** * A GrGLSLFragmentProcessor subclass that corresponds to a GrProcessor subclass that uses @@ -113,19 +124,32 @@ class GrTextureDomain { */ class GLDomain { public: - GLDomain() { - for (int i = 0; i < kPrevDomainCount; i++) { - fPrevDomain[i] = SK_FloatNaN; - } - } + GLDomain() = default; /** - * Call this from GrGLSLFragmentProcessor::emitCode() to sample the texture W.R.T. the + * Call this from GrGLSLFragmentProcessor::emitCode() to sample a child processor WRT the * domain and mode. * * @param outcolor name of half4 variable to hold the sampled color. - * @param inCoords name of float2 variable containing the coords to be used with the domain. - * It is assumed that this is a variable and not an expression. + * @param inCoords name of float2 variable containing the coords to be used with the + * domain. + * @param inColor color passed to the child processor. + */ + void sampleProcessor(const GrTextureDomain& textureDomain, + const char* inColor, + const char* outColor, + const SkString& inCoords, + GrGLSLFragmentProcessor* parent, + GrGLSLFragmentProcessor::EmitArgs& args, + int childIndex); + + /** + * Call this from GrGLSLFragmentProcessor::emitCode() to sample the texture WRT the domain + * and mode. + * + * @param outcolor name of half4 variable to hold the sampled color. + * @param inCoords name of float2 variable containing the coords to be used with the + * domain. * @param inModulateColor if non-nullptr the sampled color will be modulated with this * expression before being written to outColor. */ @@ -140,11 +164,23 @@ class GrTextureDomain { /** * Call this from GrGLSLFragmentProcessor::setData() to upload uniforms necessary for the - * texture domain. The rectangle is automatically adjusted to account for the texture's - * origin. + * domain. 'filterIfDecal' determines whether the transition to transparent black at the + * edge of domain is linearly interpolated over a unit interval or is "hard" when + * kDecal_Mode is used. + */ + void setData(const GrGLSLProgramDataManager&, const GrTextureDomain&, bool filterIfDecal); + + /** + * Call this from GrGLSLFragmentProcessor::setData() to upload uniforms necessary for the + * texture domain used with a texture proxy. The rectangle is automatically adjusted to + * account for the texture's origin. Filtering at the edge of the domain is inferred from + * the GrSamplerState's filter mode. */ - void setData(const GrGLSLProgramDataManager&, const GrTextureDomain&, GrTextureProxy*, - const GrSamplerState& sampler); + void setData(const GrGLSLProgramDataManager&, const GrTextureDomain&, const GrSurfaceProxy*, + const GrSamplerState& state); + /** Same as above but with direct control over decal filtering. */ + void setData(const GrGLSLProgramDataManager&, const GrTextureDomain&, const GrSurfaceProxy*, + bool filterIfDecal); enum { kModeBits = 2, // See DomainKey(). @@ -161,7 +197,17 @@ class GrTextureDomain { } private: - static const int kPrevDomainCount = 4; + // Takes a builder and a coord and appends to the builder a string that is an expression + // the evaluates to a half4 color. + using AppendSample = SkString(const char* coord); + + void sample(GrGLSLShaderBuilder* builder, + GrGLSLUniformHandler* uniformHandler, + const GrTextureDomain& textureDomain, + const char* outColor, + const SkString& inCoords, + const std::function& color); + SkDEBUGCODE(Mode fModeX;) SkDEBUGCODE(Mode fModeY;) SkDEBUGCODE(bool fHasMode = false;) @@ -172,67 +218,84 @@ class GrTextureDomain { GrGLSLProgramDataManager::UniformHandle fDecalUni; SkString fDecalName; - float fPrevDomain[kPrevDomainCount]; + float fPrevDomain[4] = {SK_FloatNaN}; + float fPrevDeclFilterWeights[3] = {SK_FloatNaN}; }; protected: + SkRect fDomain; Mode fModeX; Mode fModeY; - SkRect fDomain; int fIndex; }; /** - * A basic texture effect that uses GrTextureDomain. + * This effect applies a domain rectangle with an edge "mode" to the result of the child FP's coord + * transform. Currently the passed FP (including its descendants) must have exactly 1 coord + * transform (due to internal program builder restrictions). Also, it's important to note that the + * domain rectangle is applied AFTER the corod transform. This allows us to continue to lift the + * coord transform to the vertex shader. It might make this nicer for some use cases to add a + * pre-coord transform option and try to adjust the domain rect internally to convert to + * post-coord transform and keep everything in the vertex shader for simple use cases. */ -class GrTextureDomainEffect : public GrFragmentProcessor { +class GrDomainEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(sk_sp, - GrColorType srcColorType, - const SkMatrix&, + static std::unique_ptr Make(std::unique_ptr, const SkRect& domain, - GrTextureDomain::Mode mode, - GrSamplerState::Filter filterMode); + GrTextureDomain::Mode, + bool decalIsFiltered); - static std::unique_ptr Make(sk_sp, - GrColorType srcColorType, - const SkMatrix&, + static std::unique_ptr Make(std::unique_ptr, const SkRect& domain, GrTextureDomain::Mode modeX, GrTextureDomain::Mode modeY, - const GrSamplerState& sampler); + bool decalIsFiltered); + + // These variants infer decalIsFiltered from the Filter mode (true if not kNearest). + static std::unique_ptr Make(std::unique_ptr, + const SkRect& domain, + GrTextureDomain::Mode, + GrSamplerState::Filter); - const char* name() const override { return "TextureDomain"; } + static std::unique_ptr Make(std::unique_ptr, + const SkRect& domain, + GrTextureDomain::Mode modeX, + GrTextureDomain::Mode modeY, + GrSamplerState::Filter); + + const char* name() const override { return "Domain"; } std::unique_ptr clone() const override { - return std::unique_ptr(new GrTextureDomainEffect(*this)); + return std::unique_ptr(new GrDomainEffect(*this)); } #ifdef SK_DEBUG SkString dumpInfo() const override { SkString str; - str.appendf("Domain: [L: %.2f, T: %.2f, R: %.2f, B: %.2f]", - fTextureDomain.domain().fLeft, fTextureDomain.domain().fTop, - fTextureDomain.domain().fRight, fTextureDomain.domain().fBottom); + str.appendf("Domain: [L: %.2f, T: %.2f, R: %.2f, B: %.2f], filterDecal: %d", + fDomain.domain().fLeft, fDomain.domain().fTop, fDomain.domain().fRight, + fDomain.domain().fBottom, fDecalIsFiltered); str.append(INHERITED::dumpInfo()); return str; } #endif private: + GrFragmentProcessor::OptimizationFlags Flags(GrFragmentProcessor*, GrTextureDomain::Mode, + GrTextureDomain::Mode); + GrCoordTransform fCoordTransform; - GrTextureDomain fTextureDomain; - TextureSampler fTextureSampler; + GrTextureDomain fDomain; + bool fDecalIsFiltered; - GrTextureDomainEffect(sk_sp, - GrColorType srcColorType, - const SkMatrix&, - const SkRect& domain, - GrTextureDomain::Mode modeX, - GrTextureDomain::Mode modeY, - const GrSamplerState&); + GrDomainEffect(std::unique_ptr, + const GrCoordTransform& transform, + const SkRect& domain, + GrTextureDomain::Mode modeX, + GrTextureDomain::Mode modeY, + bool decalIsFiltered); - explicit GrTextureDomainEffect(const GrTextureDomainEffect&); + explicit GrDomainEffect(const GrDomainEffect&); GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; @@ -240,8 +303,6 @@ class GrTextureDomainEffect : public GrFragmentProcessor { bool onIsEqual(const GrFragmentProcessor&) const override; - const TextureSampler& onTextureSampler(int) const override { return fTextureSampler; } - GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; @@ -249,7 +310,7 @@ class GrTextureDomainEffect : public GrFragmentProcessor { class GrDeviceSpaceTextureDecalFragmentProcessor : public GrFragmentProcessor { public: - static std::unique_ptr Make(sk_sp, + static std::unique_ptr Make(sk_sp, const SkIRect& subset, const SkIPoint& deviceSpaceOffset); @@ -274,7 +335,7 @@ class GrDeviceSpaceTextureDecalFragmentProcessor : public GrFragmentProcessor { GrTextureDomain fTextureDomain; SkIPoint fDeviceSpaceOffset; - GrDeviceSpaceTextureDecalFragmentProcessor(sk_sp, + GrDeviceSpaceTextureDecalFragmentProcessor(sk_sp, const SkIRect&, const SkIPoint&); GrDeviceSpaceTextureDecalFragmentProcessor(const GrDeviceSpaceTextureDecalFragmentProcessor&); diff --git a/third_party/skia/src/gpu/effects/GrYUVtoRGBEffect.cpp b/third_party/skia/src/gpu/effects/GrYUVtoRGBEffect.cpp index a82aec707607..f33c39782b63 100644 --- a/third_party/skia/src/gpu/effects/GrYUVtoRGBEffect.cpp +++ b/third_party/skia/src/gpu/effects/GrYUVtoRGBEffect.cpp @@ -8,33 +8,13 @@ #include "src/gpu/effects/GrYUVtoRGBEffect.h" #include "include/gpu/GrTexture.h" +#include "src/core/SkYUVMath.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" -static const float kJPEGConversionMatrix[16] = { - 1.0f, 0.0f, 1.402f, -0.703749f, - 1.0f, -0.344136f, -0.714136f, 0.531211f, - 1.0f, 1.772f, 0.0f, -0.889475f, - 0.0f, 0.0f, 0.0f, 1.0 -}; - -static const float kRec601ConversionMatrix[16] = { - 1.164f, 0.0f, 1.596f, -0.87075f, - 1.164f, -0.391f, -0.813f, 0.52925f, - 1.164f, 2.018f, 0.0f, -1.08175f, - 0.0f, 0.0f, 0.0f, 1.0 -}; - -static const float kRec709ConversionMatrix[16] = { - 1.164f, 0.0f, 1.793f, -0.96925f, - 1.164f, -0.213f, -0.533f, 0.30025f, - 1.164f, 2.112f, 0.0f, -1.12875f, - 0.0f, 0.0f, 0.0f, 1.0f -}; - std::unique_ptr GrYUVtoRGBEffect::Make(const sk_sp proxies[], const SkYUVAIndex yuvaIndices[4], SkYUVColorSpace yuvColorSpace, @@ -44,19 +24,32 @@ std::unique_ptr GrYUVtoRGBEffect::Make(const sk_spisize(); + const SkISize YDimensions = proxies[yuvaIndices[SkYUVAIndex::kY_Index].fIndex]->dimensions(); - GrSamplerState::Filter minimizeFilterMode = GrSamplerState::Filter::kMipMap == filterMode ? - GrSamplerState::Filter::kMipMap : - GrSamplerState::Filter::kBilerp; + // 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 = GrSamplerState::Filter::kMipMap == filterMode + ? GrSamplerState::Filter::kMipMap + : GrSamplerState::Filter::kBilerp; GrSamplerState::Filter filterModes[4]; SkSize scales[4]; for (int i = 0; i < numPlanes; ++i) { - SkISize size = proxies[i]->isize(); - scales[i] = SkSize::Make(SkIntToScalar(size.width()) / SkIntToScalar(YSize.width()), - SkIntToScalar(size.height()) / SkIntToScalar(YSize.height())); - filterModes[i] = (size == YSize) ? filterMode : minimizeFilterMode; + SkISize dimensions = proxies[i]->dimensions(); + // 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). + scales[i] = {dimensions.width() / SkIntToScalar(YDimensions.width()), + dimensions.height() / SkIntToScalar(YDimensions.height())}; + if ((YDimensions.width() & 0b1) && dimensions.width() == YDimensions.width() / 2 + 1) { + scales[i].fWidth = 0.5f; + } + if ((YDimensions.height() & 0b1) && dimensions.height() == YDimensions.height() / 2 + 1) { + scales[i].fHeight = 0.5f; + } + // It seems the assumption here is the plane dimensions are smaller than the Y plane. + filterModes[i] = (dimensions == YDimensions) ? filterMode : subsampledPlaneFilterMode; } return std::unique_ptr(new GrYUVtoRGBEffect( @@ -121,6 +114,7 @@ GrGLSLFragmentProcessor* GrYUVtoRGBEffect::onCreateGLSLInstance() const { SkASSERT(fColorSpaceMatrixVar.isValid()); fragBuilder->codeAppendf( "yuvOne *= %s;", args.fUniformHandler->getUniformCStr(fColorSpaceMatrixVar)); + fragBuilder->codeAppend("yuvOne.xyz = clamp(yuvOne.xyz, 0, 1);"); } if (_outer.yuvaIndex(3).fIndex >= 0) { @@ -141,21 +135,18 @@ GrGLSLFragmentProcessor* GrYUVtoRGBEffect::onCreateGLSLInstance() const { const GrFragmentProcessor& _proc) override { const GrYUVtoRGBEffect& _outer = _proc.cast(); - switch (_outer.yuvColorSpace()) { - case kJPEG_SkYUVColorSpace: - SkASSERT(fColorSpaceMatrixVar.isValid()); - pdman.setMatrix4f(fColorSpaceMatrixVar, kJPEGConversionMatrix); - break; - case kRec601_SkYUVColorSpace: - SkASSERT(fColorSpaceMatrixVar.isValid()); - pdman.setMatrix4f(fColorSpaceMatrixVar, kRec601ConversionMatrix); - break; - case kRec709_SkYUVColorSpace: - SkASSERT(fColorSpaceMatrixVar.isValid()); - pdman.setMatrix4f(fColorSpaceMatrixVar, kRec709ConversionMatrix); - break; - case kIdentity_SkYUVColorSpace: - break; + if (_outer.yuvColorSpace() != kIdentity_SkYUVColorSpace) { + SkASSERT(fColorSpaceMatrixVar.isValid()); + float yuvM[20]; + SkColorMatrix_YUV2RGB(_outer.yuvColorSpace(), yuvM); + // Need to drop the fourth column to go to 4x4 + float mtx[16] = { + yuvM[ 0], yuvM[ 1], yuvM[ 2], yuvM[ 4], + yuvM[ 5], yuvM[ 6], yuvM[ 7], yuvM[ 9], + yuvM[10], yuvM[11], yuvM[12], yuvM[14], + yuvM[15], yuvM[16], yuvM[17], yuvM[19], + }; + pdman.setMatrix4f(fColorSpaceMatrixVar, mtx); } int numSamplers = _outer.numTextureSamplers(); diff --git a/third_party/skia/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp b/third_party/skia/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp index 506cedba5baf..ffcaca101999 100644 --- a/third_party/skia/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp +++ b/third_party/skia/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp @@ -51,9 +51,11 @@ class GrGLSLAlphaThresholdFragmentProcessor : public GrGLSLFragmentProcessor { "color.w = %s;\n}\n%s = color;\n", args.fInputColor, fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(), + sk_TransformedCoords2D_0.c_str(), + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str(), args.fUniformHandler->getUniformCStr(outerThresholdVar), args.fUniformHandler->getUniformCStr(outerThresholdVar), args.fUniformHandler->getUniformCStr(outerThresholdVar), diff --git a/third_party/skia/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h b/third_party/skia/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h index 730054b56778..112e72a16a7d 100644 --- a/third_party/skia/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h +++ b/third_party/skia/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h @@ -18,7 +18,7 @@ class GrAlphaThresholdFragmentProcessor : public GrFragmentProcessor { public: inline OptimizationFlags optFlags(float outerThreshold); - static std::unique_ptr Make(sk_sp mask, + static std::unique_ptr Make(sk_sp mask, float innerThreshold, float outerThreshold, const SkIRect& bounds) { @@ -34,7 +34,7 @@ class GrAlphaThresholdFragmentProcessor : public GrFragmentProcessor { float outerThreshold; private: - GrAlphaThresholdFragmentProcessor(sk_sp mask, float innerThreshold, + GrAlphaThresholdFragmentProcessor(sk_sp mask, float innerThreshold, float outerThreshold, const SkIRect& bounds) : INHERITED(kGrAlphaThresholdFragmentProcessor_ClassID, kNone_OptimizationFlags) , maskCoordTransform( diff --git a/third_party/skia/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp b/third_party/skia/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp index ccef347e1b17..3d5a925b3364 100644 --- a/third_party/skia/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp +++ b/third_party/skia/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp @@ -284,7 +284,10 @@ class GrGLSLCircleBlurFragmentProcessor : public GrGLSLFragmentProcessor { args.fUniformHandler->getUniformCStr(circleDataVar), args.fOutputColor, args.fInputColor, fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str()); + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str()); } private: diff --git a/third_party/skia/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.h b/third_party/skia/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.h index 93d24038a46a..a3221ec9a703 100644 --- a/third_party/skia/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.h +++ b/third_party/skia/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.h @@ -28,7 +28,7 @@ class GrCircleBlurFragmentProcessor : public GrFragmentProcessor { private: GrCircleBlurFragmentProcessor(SkRect circleRect, float textureRadius, float solidRadius, - sk_sp blurProfileSampler) + sk_sp blurProfileSampler) : INHERITED(kGrCircleBlurFragmentProcessor_ClassID, (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) , circleRect(circleRect) diff --git a/third_party/skia/src/gpu/effects/generated/GrConfigConversionEffect.h b/third_party/skia/src/gpu/effects/generated/GrConfigConversionEffect.h index acbc4cc30f2a..a7825c3841fd 100644 --- a/third_party/skia/src/gpu/effects/generated/GrConfigConversionEffect.h +++ b/third_party/skia/src/gpu/effects/generated/GrConfigConversionEffect.h @@ -68,7 +68,6 @@ class GrConfigConversionEffect : public GrFragmentProcessor { // calling read pixels here. Thus the pixel data will be uploaded immediately and we don't // need to keep the pixel data alive in the proxy. Therefore the ReleaseProc is nullptr. sk_sp image = SkImage::MakeFromRaster(pixmap, nullptr, nullptr); - GrColorType dataColorType = SkColorTypeToGrColorType(image->colorType()); sk_sp dataProxy = proxyProvider->createTextureProxy( std::move(image), 1, SkBudgeted::kYes, SkBackingFit::kExact); if (!dataProxy) { @@ -89,7 +88,7 @@ class GrConfigConversionEffect : public GrFragmentProcessor { std::unique_ptr upmToPM( new GrConfigConversionEffect(PMConversion::kToPremul)); - paint1.addColorTextureProcessor(dataProxy, dataColorType, SkMatrix::I()); + paint1.addColorTextureProcessor(dataProxy, kPremul_SkAlphaType, SkMatrix::I()); paint1.addColorFragmentProcessor(pmToUPM->clone()); paint1.setPorterDuffXPFactory(SkBlendMode::kSrc); @@ -103,14 +102,16 @@ class GrConfigConversionEffect : public GrFragmentProcessor { // draw tempRTC->discard(); - paint2.addColorTextureProcessor(readRTC->asTextureProxyRef(), kColorType, SkMatrix::I()); + paint2.addColorTextureProcessor(readRTC->asTextureProxyRef(), kUnpremul_SkAlphaType, + SkMatrix::I()); paint2.addColorFragmentProcessor(std::move(upmToPM)); paint2.setPorterDuffXPFactory(SkBlendMode::kSrc); tempRTC->fillRectToRect(GrNoClip(), std::move(paint2), GrAA::kNo, SkMatrix::I(), kRect, kRect); - paint3.addColorTextureProcessor(tempRTC->asTextureProxyRef(), kColorType, SkMatrix::I()); + paint3.addColorTextureProcessor(tempRTC->asTextureProxyRef(), kPremul_SkAlphaType, + SkMatrix::I()); paint3.addColorFragmentProcessor(std::move(pmToUPM)); paint3.setPorterDuffXPFactory(SkBlendMode::kSrc); diff --git a/third_party/skia/src/gpu/effects/generated/GrHSLToRGBFilterEffect.cpp b/third_party/skia/src/gpu/effects/generated/GrHSLToRGBFilterEffect.cpp new file mode 100644 index 000000000000..c06b3648e09b --- /dev/null +++ b/third_party/skia/src/gpu/effects/generated/GrHSLToRGBFilterEffect.cpp @@ -0,0 +1,53 @@ +/* + * Copyright 2019 Google LLC + * + * 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 GrHSLToRGBFilterEffect.fp; do not modify. + **************************************************************************************************/ +#include "GrHSLToRGBFilterEffect.h" + +#include "include/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 GrGLSLHSLToRGBFilterEffect : public GrGLSLFragmentProcessor { +public: + GrGLSLHSLToRGBFilterEffect() {} + void emitCode(EmitArgs& args) override { + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; + const GrHSLToRGBFilterEffect& _outer = args.fFp.cast(); + (void)_outer; + 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); + } + +private: + void onSetData(const GrGLSLProgramDataManager& pdman, + const GrFragmentProcessor& _proc) override {} +}; +GrGLSLFragmentProcessor* GrHSLToRGBFilterEffect::onCreateGLSLInstance() const { + return new GrGLSLHSLToRGBFilterEffect(); +} +void GrHSLToRGBFilterEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, + GrProcessorKeyBuilder* b) const {} +bool GrHSLToRGBFilterEffect::onIsEqual(const GrFragmentProcessor& other) const { + const GrHSLToRGBFilterEffect& that = other.cast(); + (void)that; + return true; +} +GrHSLToRGBFilterEffect::GrHSLToRGBFilterEffect(const GrHSLToRGBFilterEffect& src) + : INHERITED(kGrHSLToRGBFilterEffect_ClassID, src.optimizationFlags()) {} +std::unique_ptr GrHSLToRGBFilterEffect::clone() const { + return std::unique_ptr(new GrHSLToRGBFilterEffect(*this)); +} diff --git a/third_party/skia/src/gpu/effects/generated/GrHSLToRGBFilterEffect.h b/third_party/skia/src/gpu/effects/generated/GrHSLToRGBFilterEffect.h new file mode 100644 index 000000000000..161e5dde08fb --- /dev/null +++ b/third_party/skia/src/gpu/effects/generated/GrHSLToRGBFilterEffect.h @@ -0,0 +1,50 @@ +/* + * Copyright 2019 Google LLC + * + * 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 GrHSLToRGBFilterEffect.fp; do not modify. + **************************************************************************************************/ +#ifndef GrHSLToRGBFilterEffect_DEFINED +#define GrHSLToRGBFilterEffect_DEFINED +#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 { + 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), + q = Sk4f::Min(Sk4f::Max(((p - p.floor()) * 6 - 3).abs() - 1, 0), 1), + rgb = (q - 0.5f) * C + L, + rgba = Sk4f::Min(Sk4f::Max(Sk4f(rgb[0], rgb[1], rgb[2], c.fA), 0), 1); + + return SkColor4f{rgba[0], rgba[1], rgba[2], rgba[3]}.premul(); + } + static std::unique_ptr Make() { + return std::unique_ptr(new GrHSLToRGBFilterEffect()); + } + GrHSLToRGBFilterEffect(const GrHSLToRGBFilterEffect& src); + std::unique_ptr clone() const override; + const char* name() const override { return "HSLToRGBFilterEffect"; } + +private: + GrHSLToRGBFilterEffect() + : INHERITED(kGrHSLToRGBFilterEffect_ClassID, + (OptimizationFlags)(kConstantOutputForConstantInput_OptimizationFlag | + kPreservesOpaqueInput_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/third_party/skia/src/gpu/effects/generated/GrMagnifierEffect.cpp b/third_party/skia/src/gpu/effects/generated/GrMagnifierEffect.cpp index 4f7a2eaefbe4..5a29834fad98 100644 --- a/third_party/skia/src/gpu/effects/generated/GrMagnifierEffect.cpp +++ b/third_party/skia/src/gpu/effects/generated/GrMagnifierEffect.cpp @@ -57,8 +57,7 @@ class GrGLSLMagnifierEffect : public GrGLSLFragmentProcessor { "- 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", - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", + sk_TransformedCoords2D_0.c_str(), args.fUniformHandler->getUniformCStr(offsetVar), args.fUniformHandler->getUniformCStr(xInvZoomVar), args.fUniformHandler->getUniformCStr(yInvZoomVar), @@ -70,7 +69,10 @@ class GrGLSLMagnifierEffect : public GrGLSLFragmentProcessor { "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]).c_str()); + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str()); } private: diff --git a/third_party/skia/src/gpu/effects/generated/GrMagnifierEffect.h b/third_party/skia/src/gpu/effects/generated/GrMagnifierEffect.h index cb0d00524b55..c7e3013174cf 100644 --- a/third_party/skia/src/gpu/effects/generated/GrMagnifierEffect.h +++ b/third_party/skia/src/gpu/effects/generated/GrMagnifierEffect.h @@ -16,7 +16,7 @@ #include "src/gpu/GrFragmentProcessor.h" class GrMagnifierEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(sk_sp src, SkIRect bounds, + static std::unique_ptr Make(sk_sp src, SkIRect bounds, SkRect srcRect, float xInvZoom, float yInvZoom, float xInvInset, float yInvInset) { return std::unique_ptr(new GrMagnifierEffect( @@ -35,7 +35,7 @@ class GrMagnifierEffect : public GrFragmentProcessor { float yInvInset; private: - GrMagnifierEffect(sk_sp src, SkIRect bounds, SkRect srcRect, float xInvZoom, + GrMagnifierEffect(sk_sp src, SkIRect bounds, SkRect srcRect, float xInvZoom, float yInvZoom, float xInvInset, float yInvInset) : INHERITED(kGrMagnifierEffect_ClassID, kNone_OptimizationFlags) , srcCoordTransform(SkMatrix::I(), src.get()) diff --git a/third_party/skia/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp b/third_party/skia/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp new file mode 100644 index 000000000000..166026abb0d7 --- /dev/null +++ b/third_party/skia/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp @@ -0,0 +1,55 @@ +/* + * Copyright 2019 Google LLC + * + * 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 GrRGBToHSLFilterEffect.fp; do not modify. + **************************************************************************************************/ +#include "GrRGBToHSLFilterEffect.h" + +#include "include/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 GrGLSLRGBToHSLFilterEffect : public GrGLSLFragmentProcessor { +public: + GrGLSLRGBToHSLFilterEffect() {} + void emitCode(EmitArgs& args) override { + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; + const GrRGBToHSLFilterEffect& _outer = args.fFp.cast(); + (void)_outer; + 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); + } + +private: + void onSetData(const GrGLSLProgramDataManager& pdman, + const GrFragmentProcessor& _proc) override {} +}; +GrGLSLFragmentProcessor* GrRGBToHSLFilterEffect::onCreateGLSLInstance() const { + return new GrGLSLRGBToHSLFilterEffect(); +} +void GrRGBToHSLFilterEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, + GrProcessorKeyBuilder* b) const {} +bool GrRGBToHSLFilterEffect::onIsEqual(const GrFragmentProcessor& other) const { + const GrRGBToHSLFilterEffect& that = other.cast(); + (void)that; + return true; +} +GrRGBToHSLFilterEffect::GrRGBToHSLFilterEffect(const GrRGBToHSLFilterEffect& src) + : INHERITED(kGrRGBToHSLFilterEffect_ClassID, src.optimizationFlags()) {} +std::unique_ptr GrRGBToHSLFilterEffect::clone() const { + return std::unique_ptr(new GrRGBToHSLFilterEffect(*this)); +} diff --git a/third_party/skia/src/gpu/effects/generated/GrRGBToHSLFilterEffect.h b/third_party/skia/src/gpu/effects/generated/GrRGBToHSLFilterEffect.h new file mode 100644 index 000000000000..978bbf07ca2e --- /dev/null +++ b/third_party/skia/src/gpu/effects/generated/GrRGBToHSLFilterEffect.h @@ -0,0 +1,52 @@ +/* + * Copyright 2019 Google LLC + * + * 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 GrRGBToHSLFilterEffect.fp; do not modify. + **************************************************************************************************/ +#ifndef GrRGBToHSLFilterEffect_DEFINED +#define GrRGBToHSLFilterEffect_DEFINED +#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 { + 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]} + : SkPMColor4f{c.fR, p[0], p[1], p[2]}; + + const auto eps = 0.0001f, // matching SkSL/ColorMatrix half4 epsilon + pmV = q[0], pmC = pmV - std::min(q[1], q[2]), pmL = pmV - pmC * 0.5f, + H = std::abs(q[3] + (q[1] - q[2]) / (pmC * 6 + eps)), + S = pmC / (c.fA + eps - std::abs(pmL * 2 - c.fA)), L = pmL / (c.fA + eps); + + return {H, S, L, c.fA}; + } + static std::unique_ptr Make() { + return std::unique_ptr(new GrRGBToHSLFilterEffect()); + } + GrRGBToHSLFilterEffect(const GrRGBToHSLFilterEffect& src); + std::unique_ptr clone() const override; + const char* name() const override { return "RGBToHSLFilterEffect"; } + +private: + GrRGBToHSLFilterEffect() + : INHERITED(kGrRGBToHSLFilterEffect_ClassID, + (OptimizationFlags)(kConstantOutputForConstantInput_OptimizationFlag | + kPreservesOpaqueInput_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/third_party/skia/src/gpu/effects/generated/GrRRectBlurEffect.cpp b/third_party/skia/src/gpu/effects/generated/GrRRectBlurEffect.cpp index 88ab11a8f22d..35cf1fec1e52 100644 --- a/third_party/skia/src/gpu/effects/generated/GrRRectBlurEffect.cpp +++ b/third_party/skia/src/gpu/effects/generated/GrRRectBlurEffect.cpp @@ -27,20 +27,20 @@ std::unique_ptr GrRRectBlurEffect::Make(GrRecordingContext* // sufficiently small relative to both the size of the corner radius and the // width (and height) of the rrect. SkRRect rrectToDraw; - SkISize size; + SkISize dimensions; SkScalar ignored[kSkBlurRRectMaxDivisions]; int ignoredSize; uint32_t ignored32; bool ninePatchable = SkComputeBlurredRRectParams( - srcRRect, devRRect, SkRect::MakeEmpty(), sigma, xformedSigma, &rrectToDraw, &size, + srcRRect, devRRect, SkRect::MakeEmpty(), sigma, xformedSigma, &rrectToDraw, &dimensions, ignored, ignored, ignored, ignored, &ignoredSize, &ignoredSize, &ignored32); if (!ninePatchable) { return nullptr; } sk_sp mask( - find_or_create_rrect_blur_mask(context, rrectToDraw, size, xformedSigma)); + find_or_create_rrect_blur_mask(context, rrectToDraw, dimensions, xformedSigma)); if (!mask) { return nullptr; } @@ -94,7 +94,10 @@ class GrGLSLRRectBlurEffect : public GrGLSLFragmentProcessor { "sample(%s, float2(texCoord)).%s;\n", args.fOutputColor, args.fInputColor, fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str()); + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str()); } private: diff --git a/third_party/skia/src/gpu/effects/generated/GrRRectBlurEffect.h b/third_party/skia/src/gpu/effects/generated/GrRRectBlurEffect.h index 436f604800e0..9aad2815242f 100644 --- a/third_party/skia/src/gpu/effects/generated/GrRRectBlurEffect.h +++ b/third_party/skia/src/gpu/effects/generated/GrRRectBlurEffect.h @@ -32,7 +32,7 @@ class GrRRectBlurEffect : public GrFragmentProcessor { public: static sk_sp find_or_create_rrect_blur_mask(GrRecordingContext* context, const SkRRect& rrectToDraw, - const SkISize& size, + const SkISize& dimensions, float xformedSigma) { static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); GrUniqueKey key; @@ -58,8 +58,8 @@ class GrRRectBlurEffect : public GrFragmentProcessor { // 1) The texture coords would need to be updated. // 2) We would have to use GrTextureDomain::kClamp_Mode for the GaussianBlur. auto rtc = context->priv().makeDeferredRenderTargetContextWithFallback( - SkBackingFit::kExact, size.fWidth, size.fHeight, GrColorType::kAlpha_8, - nullptr); + SkBackingFit::kExact, dimensions.fWidth, dimensions.fHeight, + GrColorType::kAlpha_8, nullptr); if (!rtc) { return nullptr; } @@ -81,7 +81,7 @@ class GrRRectBlurEffect : public GrFragmentProcessor { rtc->colorInfo().alphaType(), SkIPoint::Make(0, 0), nullptr, - SkIRect::MakeWH(size.fWidth, size.fHeight), + SkIRect::MakeSize(dimensions), SkIRect::EmptyIRect(), xformedSigma, xformedSigma, @@ -117,7 +117,7 @@ class GrRRectBlurEffect : public GrFragmentProcessor { private: GrRRectBlurEffect(float sigma, SkRect rect, float cornerRadius, - sk_sp ninePatchSampler) + sk_sp ninePatchSampler) : INHERITED(kGrRRectBlurEffect_ClassID, (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) , sigma(sigma) diff --git a/third_party/skia/src/gpu/effects/generated/GrRectBlurEffect.cpp b/third_party/skia/src/gpu/effects/generated/GrRectBlurEffect.cpp index 186dcfe36522..7643406100fb 100644 --- a/third_party/skia/src/gpu/effects/generated/GrRectBlurEffect.cpp +++ b/third_party/skia/src/gpu/effects/generated/GrRectBlurEffect.cpp @@ -69,10 +69,16 @@ class GrGLSLRectBlurEffect : public GrGLSLFragmentProcessor { "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]).c_str(), + 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]).c_str(), + 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)", @@ -93,13 +99,25 @@ class GrGLSLRectBlurEffect : public GrGLSLFragmentProcessor { args.fUniformHandler->getUniformCStr(invSixSigmaVar), args.fUniformHandler->getUniformCStr(invSixSigmaVar), fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(), + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str(), fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(), + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str(), fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(), + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str(), fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(), + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str(), args.fOutputColor, args.fInputColor); } diff --git a/third_party/skia/src/gpu/effects/generated/GrRectBlurEffect.h b/third_party/skia/src/gpu/effects/generated/GrRectBlurEffect.h index b0c86bda1c93..9b81d5f07a92 100644 --- a/third_party/skia/src/gpu/effects/generated/GrRectBlurEffect.h +++ b/third_party/skia/src/gpu/effects/generated/GrRectBlurEffect.h @@ -116,7 +116,7 @@ class GrRectBlurEffect : public GrFragmentProcessor { bool isFast; private: - GrRectBlurEffect(SkRect rect, sk_sp integral, float invSixSigma, bool isFast, + GrRectBlurEffect(SkRect rect, sk_sp integral, float invSixSigma, bool isFast, GrSamplerState samplerParams) : INHERITED(kGrRectBlurEffect_ClassID, (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) diff --git a/third_party/skia/src/gpu/effects/generated/GrSimpleTextureEffect.cpp b/third_party/skia/src/gpu/effects/generated/GrSimpleTextureEffect.cpp index dd843b9bad61..9c1ad1458afb 100644 --- a/third_party/skia/src/gpu/effects/generated/GrSimpleTextureEffect.cpp +++ b/third_party/skia/src/gpu/effects/generated/GrSimpleTextureEffect.cpp @@ -30,9 +30,11 @@ class GrGLSLSimpleTextureEffect : public GrGLSLFragmentProcessor { fragBuilder->codeAppendf( "%s = %s * sample(%s, %s).%s;\n", args.fOutputColor, args.fInputColor, fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str()); + sk_TransformedCoords2D_0.c_str(), + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str()); } private: @@ -86,7 +88,8 @@ std::unique_ptr GrSimpleTextureEffect::TestCreate( : GrSamplerState::Filter::kNearest); const SkMatrix& matrix = GrTest::TestMatrix(testData->fRandom); - return GrSimpleTextureEffect::Make(testData->textureProxy(texIdx), - testData->textureProxyColorType(texIdx), matrix, params); + auto alphaType = static_cast( + testData->fRandom->nextRangeU(kUnknown_SkAlphaType + 1, kLastEnum_SkAlphaType)); + return GrSimpleTextureEffect::Make(testData->textureProxy(texIdx), alphaType, matrix, params); } #endif diff --git a/third_party/skia/src/gpu/effects/generated/GrSimpleTextureEffect.h b/third_party/skia/src/gpu/effects/generated/GrSimpleTextureEffect.h index d70dd5677372..bdc11da87bab 100644 --- a/third_party/skia/src/gpu/effects/generated/GrSimpleTextureEffect.h +++ b/third_party/skia/src/gpu/effects/generated/GrSimpleTextureEffect.h @@ -16,31 +16,31 @@ #include "src/gpu/GrFragmentProcessor.h" class GrSimpleTextureEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, + SkAlphaType alphaType, const SkMatrix& matrix) { return std::unique_ptr( - new GrSimpleTextureEffect(std::move(proxy), matrix, srcColorType, + new GrSimpleTextureEffect(std::move(proxy), matrix, alphaType, GrSamplerState(GrSamplerState::WrapMode::kClamp, GrSamplerState::Filter::kNearest))); } /* clamp mode */ - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, + SkAlphaType alphaType, const SkMatrix& matrix, GrSamplerState::Filter filter) { return std::unique_ptr(new GrSimpleTextureEffect( - std::move(proxy), matrix, srcColorType, + std::move(proxy), matrix, alphaType, GrSamplerState(GrSamplerState::WrapMode::kClamp, filter))); } - static std::unique_ptr Make(sk_sp proxy, - GrColorType srcColorType, + static std::unique_ptr Make(sk_sp proxy, + SkAlphaType alphaType, const SkMatrix& matrix, const GrSamplerState& p) { return std::unique_ptr( - new GrSimpleTextureEffect(std::move(proxy), matrix, srcColorType, p)); + new GrSimpleTextureEffect(std::move(proxy), matrix, alphaType, p)); } GrSimpleTextureEffect(const GrSimpleTextureEffect& src); std::unique_ptr clone() const override; @@ -50,11 +50,11 @@ class GrSimpleTextureEffect : public GrFragmentProcessor { SkMatrix44 matrix; private: - GrSimpleTextureEffect(sk_sp image, SkMatrix44 matrix, GrColorType srcColorType, + GrSimpleTextureEffect(sk_sp image, SkMatrix44 matrix, SkAlphaType alphaType, GrSamplerState samplerParams) : INHERITED(kGrSimpleTextureEffect_ClassID, (OptimizationFlags)ModulateForSamplerOptFlags( - srcColorType, + alphaType, samplerParams.wrapModeX() == GrSamplerState::WrapMode::kClampToBorder || samplerParams.wrapModeY() == diff --git a/third_party/skia/src/gpu/geometry/GrQuad.h b/third_party/skia/src/gpu/geometry/GrQuad.h index 9131ff64665d..8a41235f0a1d 100644 --- a/third_party/skia/src/gpu/geometry/GrQuad.h +++ b/third_party/skia/src/gpu/geometry/GrQuad.h @@ -24,7 +24,7 @@ class GrQuad { // certain types of matrices: enum class Type { // The 4 points remain an axis-aligned rectangle; their logical indices may not respect - // TL, BL, TR, BR ordering if the transform was a 90 degre rotation or mirror. + // TL, BL, TR, BR ordering if the transform was a 90 degree rotation or mirror. kAxisAligned, // The 4 points represent a rectangle subjected to a rotation, its corners are right angles. kRectilinear, @@ -37,37 +37,12 @@ class GrQuad { }; static const int kTypeCount = static_cast(Type::kLast) + 1; + // This enforces W == 1 for non-perspective quads, but does not initialize X or Y. GrQuad() = default; explicit GrQuad(const SkRect& rect) : fX{rect.fLeft, rect.fLeft, rect.fRight, rect.fRight} - , fY{rect.fTop, rect.fBottom, rect.fTop, rect.fBottom} - , fW{1.f, 1.f, 1.f, 1.f} - , fType(Type::kAxisAligned) {} - - GrQuad(const skvx::Vec<4, float>& xs, const skvx::Vec<4, float>& ys, Type type) - : fType(type) { - SkASSERT(type != Type::kPerspective); - xs.store(fX); - ys.store(fY); - fW[0] = fW[1] = fW[2] = fW[3] = 1.f; - } - - GrQuad(const skvx::Vec<4, float>& xs, const skvx::Vec<4, float>& ys, - const skvx::Vec<4, float>& ws, Type type) - : fType(type) { - xs.store(fX); - ys.store(fY); - ws.store(fW); - } - - // Copy 4 values from each of the arrays into the quad's components - GrQuad(const float xs[4], const float ys[4], const float ws[4], Type type) - : fType(type) { - memcpy(fX, xs, 4 * sizeof(float)); - memcpy(fY, ys, 4 * sizeof(float)); - memcpy(fW, ws, 4 * sizeof(float)); - } + , fY{rect.fTop, rect.fBottom, rect.fTop, rect.fBottom} {} static GrQuad MakeFromRect(const SkRect&, const SkMatrix&); @@ -135,8 +110,7 @@ class GrQuad { bool asRect(SkRect* rect) const; // The non-const pointers are provided to support modifying a GrQuad in-place, but care must be - // taken to keep its quad type aligned with the geometric nature of the new coordinates. This is - // no different than using the constructors that accept a quad type. + // taken to keep its quad type aligned with the geometric nature of the new coordinates. const float* xs() const { return fX; } float* xs() { return fX; } const float* ys() const { return fY; } @@ -144,16 +118,42 @@ class GrQuad { const float* ws() const { return fW; } float* ws() { return fW; } - void setQuadType(Type newType) { fType = newType; } + // Automatically ensures ws are 1 if new type is not perspective. + void setQuadType(Type newType) { + if (newType != Type::kPerspective && fType == Type::kPerspective) { + fW[0] = fW[1] = fW[2] = fW[3] = 1.f; + } + SkASSERT(newType == Type::kPerspective || + (SkScalarNearlyEqual(fW[0], 1.f) && SkScalarNearlyEqual(fW[1], 1.f) && + SkScalarNearlyEqual(fW[2], 1.f) && SkScalarNearlyEqual(fW[3], 1.f))); + + fType = newType; + } private: template friend class GrQuadListBase; // for access to fX, fY, fW + GrQuad(const skvx::Vec<4, float>& xs, const skvx::Vec<4, float>& ys, Type type) + : fType(type) { + SkASSERT(type != Type::kPerspective); + xs.store(fX); + ys.store(fY); + } + + GrQuad(const skvx::Vec<4, float>& xs, const skvx::Vec<4, float>& ys, + const skvx::Vec<4, float>& ws, Type type) + : fW{} // Include fW in member initializer to avoid redundant default initializer + , fType(type) { + xs.store(fX); + ys.store(fY); + ws.store(fW); + } + float fX[4]; float fY[4]; - float fW[4]; + float fW[4] = {1.f, 1.f, 1.f, 1.f}; - Type fType; + Type fType = Type::kAxisAligned; }; #endif diff --git a/third_party/skia/src/gpu/geometry/GrQuadBuffer.h b/third_party/skia/src/gpu/geometry/GrQuadBuffer.h index dbdc92ccc77b..c7309d4249b9 100644 --- a/third_party/skia/src/gpu/geometry/GrQuadBuffer.h +++ b/third_party/skia/src/gpu/geometry/GrQuadBuffer.h @@ -71,14 +71,16 @@ class GrQuadBuffer { const T& metadata() const { this->validate(); return *(fBuffer->metadata(fCurrentEntry)); } - const GrQuad& deviceQuad() const { this->validate(); return fDeviceQuad; } - - // If isLocalValid() returns false, this returns an empty quad (all 0s) so that localQuad() - // can be called without triggering any sanitizers, for convenience when some other state - // ensures that the quad will eventually not be used. - const GrQuad& localQuad() const { + // The returned pointer is mutable so that the object can be used for scratch calculations + // during op preparation. However, any changes are not persisted in the GrQuadBuffer and + // subsequent calls to next() will overwrite the state of the GrQuad. + GrQuad* deviceQuad() { this->validate(); return &fDeviceQuad; } + + // If isLocalValid() returns false, this returns nullptr. Otherwise, the returned pointer + // is mutable in the same manner as deviceQuad(). + GrQuad* localQuad() { this->validate(); - return fLocalQuad; + return this->isLocalValid() ? &fLocalQuad : nullptr; } bool isLocalValid() const { @@ -250,18 +252,9 @@ const float* GrQuadBuffer::unpackQuad(GrQuad::Type type, const float* coords, memcpy(quad->xs(), coords, k3DQuadFloats * sizeof(float)); coords = coords + k3DQuadFloats; } else { - // Fill in X and Y of the quad, and set W to 1s if needed + // Fill in X and Y of the quad, the setQuadType() below will set Ws to 1 if needed memcpy(quad->xs(), coords, k2DQuadFloats * sizeof(float)); coords = coords + k2DQuadFloats; - - if (quad->quadType() == GrQuad::Type::kPerspective) { - // The output quad was previously perspective, so its ws are not 1s - static constexpr float kNoPerspectiveWs[4] = {1.f, 1.f, 1.f, 1.f}; - memcpy(quad->ws(), kNoPerspectiveWs, 4 * sizeof(float)); - } - // Else the quad should already have 1s in w - SkASSERT(quad->w(0) == 1.f && quad->w(1) == 1.f && - quad->w(2) == 1.f && quad->w(3) == 1.f); } quad->setQuadType(type); @@ -350,10 +343,8 @@ bool GrQuadBuffer::Iter::next() { coords = fBuffer->unpackQuad(static_cast(h->fDeviceType), coords, &fDeviceQuad); if (h->fHasLocals) { coords = fBuffer->unpackQuad(static_cast(h->fLocalType), coords, &fLocalQuad); - } else { - static const GrQuad kEmptyLocal(SkRect::MakeEmpty()); - fLocalQuad = kEmptyLocal; - } + } // else localQuad() will return a nullptr so no need to reset fLocalQuad + // At this point, coords points to the start of the next entry fNextEntry = static_cast(static_cast(coords)); SkASSERT((fNextEntry - fCurrentEntry) == fBuffer->entrySize(h)); diff --git a/third_party/skia/src/gpu/geometry/GrQuadUtils.cpp b/third_party/skia/src/gpu/geometry/GrQuadUtils.cpp index 78edc3ccbb59..e7c74dccbed1 100644 --- a/third_party/skia/src/gpu/geometry/GrQuadUtils.cpp +++ b/third_party/skia/src/gpu/geometry/GrQuadUtils.cpp @@ -15,6 +15,44 @@ using V4f = skvx::Vec<4, float>; using M4f = skvx::Vec<4, int32_t>; +#define AI SK_ALWAYS_INLINE + +static constexpr float kTolerance = 1e-2f; + +// These rotate the points/edge values either clockwise or counterclockwise assuming tri strip +// order. +static AI V4f next_cw(const V4f& v) { + return skvx::shuffle<2, 0, 3, 1>(v); +} + +static AI V4f next_ccw(const V4f& v) { + return skvx::shuffle<1, 3, 0, 2>(v); +} + +// Replaces zero-length 'bad' edge vectors with the reversed opposite edge vector. +// e3 may be null if only 2D edges need to be corrected for. +static AI void correct_bad_edges(const M4f& bad, V4f* e1, V4f* e2, V4f* e3) { + if (any(bad)) { + // Want opposite edges, L B T R -> R T B L but with flipped sign to preserve winding + *e1 = if_then_else(bad, -skvx::shuffle<3, 2, 1, 0>(*e1), *e1); + *e2 = if_then_else(bad, -skvx::shuffle<3, 2, 1, 0>(*e2), *e2); + if (e3) { + *e3 = if_then_else(bad, -skvx::shuffle<3, 2, 1, 0>(*e3), *e3); + } + } +} + +// Replace 'bad' coordinates by rotating CCW to get the next point. c3 may be null for 2D points. +static AI void correct_bad_coords(const M4f& bad, V4f* c1, V4f* c2, V4f* c3) { + if (any(bad)) { + *c1 = if_then_else(bad, next_ccw(*c1), *c1); + *c2 = if_then_else(bad, next_ccw(*c2), *c2); + if (c3) { + *c3 = if_then_else(bad, next_ccw(*c3), *c3); + } + } +} + // Since the local quad may not be type kRect, this uses the opposites for each vertex when // interpolating, and calculates new ws in addition to new xs, ys. static void interpolate_local(float alpha, int v0, int v1, int v2, int v3, @@ -186,7 +224,7 @@ static bool is_simple_rect(const GrQuad& quad) { // Calculates barycentric coordinates for each point in (testX, testY) in the triangle formed by // (x0,y0) - (x1,y1) - (x2, y2) and stores them in u, v, w. -static void barycentric_coords(float x0, float y0, float x1, float y1, float x2, float y2, +static bool barycentric_coords(float x0, float y0, float x1, float y1, float x2, float y2, const V4f& testX, const V4f& testY, V4f* u, V4f* v, V4f* w) { // Modeled after SkPathOpsQuad::pointInTriangle() but uses float instead of double, is @@ -195,18 +233,41 @@ static void barycentric_coords(float x0, float y0, float x1, float y1, float x2, float v0y = y2 - y0; float v1x = x1 - x0; float v1y = y1 - y0; - V4f v2x = testX - x0; - V4f v2y = testY - y0; float dot00 = v0x * v0x + v0y * v0y; float dot01 = v0x * v1x + v0y * v1y; - V4f dot02 = v0x * v2x + v0y * v2y; float dot11 = v1x * v1x + v1y * v1y; - V4f dot12 = v1x * v2x + v1y * v2y; - float invDenom = sk_ieee_float_divide(1.f, dot00 * dot11 - dot01 * dot01); + + // Not yet 1/d, first check d != 0 with a healthy tolerance (worst case is we end up not + // cropping something we could have, which is better than cropping something we shouldn't have). + // The tolerance is partly so large because these comparisons operate in device px^4 units, + // with plenty of subtractions thrown in. The SkPathOpsQuad code's use of doubles helped, and + // because it only needed to return "inside triangle", it could compare against [0, denom] and + // skip the normalization entirely. + float invDenom = dot00 * dot11 - dot01 * dot01; + static constexpr SkScalar kEmptyTriTolerance = SK_Scalar1 / (1 << 5); + if (SkScalarNearlyZero(invDenom, kEmptyTriTolerance)) { + // The triangle was degenerate/empty, which can cause the following UVW calculations to + // return (0,0,1) for every test point. This in turn makes the cropping code think that the + // empty triangle contains the crop rect and we turn the draw into a fullscreen clear, which + // is definitely the utter opposite of what we'd expect for an empty shape. + return false; + } else { + // Safe to divide + invDenom = sk_ieee_float_divide(1.f, invDenom); + } + + V4f v2x = testX - x0; + V4f v2y = testY - y0; + + V4f dot02 = v0x * v2x + v0y * v2y; + V4f dot12 = v1x * v2x + v1y * v2y; + *u = (dot11 * dot02 - dot01 * dot12) * invDenom; *v = (dot00 * dot12 - dot01 * dot02) * invDenom; *w = 1.f - *u - *v; + + return true; } static M4f inside_triangle(const V4f& u, const V4f& v, const V4f& w) { @@ -304,11 +365,14 @@ bool CropToRect(const SkRect& cropRect, GrAA cropAA, GrQuadAAFlags* edgeFlags, G // Calculate barycentric coordinates for the 4 rect corners in the 2 triangles that the quad // is tessellated into when drawn. V4f u1, v1, w1; - barycentric_coords(devX[0], devY[0], devX[1], devY[1], devX[2], devY[2], clipX, clipY, - &u1, &v1, &w1); V4f u2, v2, w2; - barycentric_coords(devX[1], devY[1], devX[3], devY[3], devX[2], devY[2], clipX, clipY, - &u2, &v2, &w2); + if (!barycentric_coords(devX[0], devY[0], devX[1], devY[1], devX[2], devY[2], clipX, clipY, + &u1, &v1, &w1) || + !barycentric_coords(devX[1], devY[1], devX[3], devY[3], devX[2], devY[2], clipX, clipY, + &u2, &v2, &w2)) { + // Bad triangles, skip cropping + return false; + } // clipDevRect is completely inside this quad if each corner is in at least one of two triangles M4f inTri1 = inside_triangle(u1, v1, w1); @@ -343,4 +407,527 @@ bool CropToRect(const SkRect& cropRect, GrAA cropAA, GrQuadAAFlags* edgeFlags, G return false; } +/////////////////////////////////////////////////////////////////////////////////////////////////// +// TessellationHelper implementation and helper struct implementations +/////////////////////////////////////////////////////////////////////////////////////////////////// + +//** EdgeVectors implementation + +void TessellationHelper::EdgeVectors::reset(const skvx::Vec<4, float>& xs, + const skvx::Vec<4, float>& ys, + const skvx::Vec<4, float>& ws, + GrQuad::Type quadType) { + // Calculate all projected edge vector values for this quad. + if (quadType == GrQuad::Type::kPerspective) { + V4f iw = 1.0 / ws; + fX2D = xs * iw; + fY2D = ys * iw; + } else { + fX2D = xs; + fY2D = ys; + } + + fDX = next_ccw(fX2D) - fX2D; + fDY = next_ccw(fY2D) - fY2D; + fInvLengths = rsqrt(mad(fDX, fDX, fDY * fDY)); + + // Normalize edge vectors + fDX *= fInvLengths; + fDY *= fInvLengths; + + // Calculate angles between vectors + if (quadType <= GrQuad::Type::kRectilinear) { + fCosTheta = 0.f; + fInvSinTheta = 1.f; + } else { + fCosTheta = mad(fDX, next_cw(fDX), fDY * next_cw(fDY)); + // NOTE: if cosTheta is close to 1, inset/outset math will avoid the fast paths that rely + // on thefInvSinTheta since it will approach infinity. + fInvSinTheta = rsqrt(1.f - fCosTheta * fCosTheta); + } +} + +//** EdgeEquations implementation + +void TessellationHelper::EdgeEquations::reset(const EdgeVectors& edgeVectors) { + V4f dx = edgeVectors.fDX; + V4f dy = edgeVectors.fDY; + // Correct for bad edges by copying adjacent edge information into the bad component + correct_bad_edges(edgeVectors.fInvLengths >= 1.f / kTolerance, &dx, &dy, nullptr); + + V4f c = mad(dx, edgeVectors.fY2D, -dy * edgeVectors.fX2D); + // Make sure normals point into the shape + V4f test = mad(dy, next_cw(edgeVectors.fX2D), mad(-dx, next_cw(edgeVectors.fY2D), c)); + if (any(test < -kTolerance)) { + fA = -dy; + fB = dx; + fC = -c; + } else { + fA = dy; + fB = -dx; + fC = c; + } +} + +V4f TessellationHelper::EdgeEquations::estimateCoverage(const V4f& x2d, const V4f& y2d) const { + // Calculate distance of the 4 inset points (px, py) to the 4 edges + V4f d0 = mad(fA[0], x2d, mad(fB[0], y2d, fC[0])); + V4f d1 = mad(fA[1], x2d, mad(fB[1], y2d, fC[1])); + V4f d2 = mad(fA[2], x2d, mad(fB[2], y2d, fC[2])); + V4f d3 = mad(fA[3], x2d, mad(fB[3], y2d, fC[3])); + + // For each point, pretend that there's a rectangle that touches e0 and e3 on the horizontal + // axis, so its width is "approximately" d0 + d3, and it touches e1 and e2 on the vertical axis + // so its height is d1 + d2. Pin each of these dimensions to [0, 1] and approximate the coverage + // at each point as clamp(d0+d3, 0, 1) x clamp(d1+d2, 0, 1). For rectilinear quads this is an + // accurate calculation of its area clipped to an aligned pixel. For arbitrary quads it is not + // mathematically accurate but qualitatively provides a stable value proportional to the size of + // the shape. + V4f w = max(0.f, min(1.f, d0 + d3)); + V4f h = max(0.f, min(1.f, d1 + d2)); + return w * h; +} + +int TessellationHelper::EdgeEquations::computeDegenerateQuad(const V4f& signedEdgeDistances, + V4f* x2d, V4f* y2d) const { + // Move the edge by the signed edge adjustment. + V4f oc = fC + signedEdgeDistances; + + // There are 6 points that we care about to determine the final shape of the polygon, which + // are the intersections between (e0,e2), (e1,e0), (e2,e3), (e3,e1) (corresponding to the + // 4 corners), and (e1, e2), (e0, e3) (representing the intersections of opposite edges). + V4f denom = fA * next_cw(fB) - fB * next_cw(fA); + V4f px = (fB * next_cw(oc) - oc * next_cw(fB)) / denom; + V4f py = (oc * next_cw(fA) - fA * next_cw(oc)) / denom; + correct_bad_coords(abs(denom) < kTolerance, &px, &py, nullptr); + + // Calculate the signed distances from these 4 corners to the other two edges that did not + // define the intersection. So p(0) is compared to e3,e1, p(1) to e3,e2 , p(2) to e0,e1, and + // p(3) to e0,e2 + V4f dists1 = px * skvx::shuffle<3, 3, 0, 0>(fA) + + py * skvx::shuffle<3, 3, 0, 0>(fB) + + skvx::shuffle<3, 3, 0, 0>(oc); + V4f dists2 = px * skvx::shuffle<1, 2, 1, 2>(fA) + + py * skvx::shuffle<1, 2, 1, 2>(fB) + + skvx::shuffle<1, 2, 1, 2>(oc); + + // If all the distances are >= 0, the 4 corners form a valid quadrilateral, so use them as + // the 4 points. If any point is on the wrong side of both edges, the interior has collapsed + // and we need to use a central point to represent it. If all four points are only on the + // wrong side of 1 edge, one edge has crossed over another and we use a line to represent it. + // Otherwise, use a triangle that replaces the bad points with the intersections of + // (e1, e2) or (e0, e3) as needed. + M4f d1v0 = dists1 < kTolerance; + M4f d2v0 = dists2 < kTolerance; + M4f d1And2 = d1v0 & d2v0; + M4f d1Or2 = d1v0 | d2v0; + + if (!any(d1Or2)) { + // Every dists1 and dists2 >= kTolerance so it's not degenerate, use all 4 corners as-is + // and use full coverage + *x2d = px; + *y2d = py; + return 4; + } else if (any(d1And2)) { + // A point failed against two edges, so reduce the shape to a single point, which we take as + // the center of the original quad to ensure it is contained in the intended geometry. Since + // it has collapsed, we know the shape cannot cover a pixel so update the coverage. + SkPoint center = {0.25f * ((*x2d)[0] + (*x2d)[1] + (*x2d)[2] + (*x2d)[3]), + 0.25f * ((*y2d)[0] + (*y2d)[1] + (*y2d)[2] + (*y2d)[3])}; + *x2d = center.fX; + *y2d = center.fY; + return 1; + } else if (all(d1Or2)) { + // Degenerates to a line. Compare p[2] and p[3] to edge 0. If they are on the wrong side, + // that means edge 0 and 3 crossed, and otherwise edge 1 and 2 crossed. + if (dists1[2] < kTolerance && dists1[3] < kTolerance) { + // Edges 0 and 3 have crossed over, so make the line from average of (p0,p2) and (p1,p3) + *x2d = 0.5f * (skvx::shuffle<0, 1, 0, 1>(px) + skvx::shuffle<2, 3, 2, 3>(px)); + *y2d = 0.5f * (skvx::shuffle<0, 1, 0, 1>(py) + skvx::shuffle<2, 3, 2, 3>(py)); + } else { + // Edges 1 and 2 have crossed over, so make the line from average of (p0,p1) and (p2,p3) + *x2d = 0.5f * (skvx::shuffle<0, 0, 2, 2>(px) + skvx::shuffle<1, 1, 3, 3>(px)); + *y2d = 0.5f * (skvx::shuffle<0, 0, 2, 2>(py) + skvx::shuffle<1, 1, 3, 3>(py)); + } + return 2; + } else { + // This turns into a triangle. Replace corners as needed with the intersections between + // (e0,e3) and (e1,e2), which must now be calculated + using V2f = skvx::Vec<2, float>; + V2f eDenom = skvx::shuffle<0, 1>(fA) * skvx::shuffle<3, 2>(fB) - + skvx::shuffle<0, 1>(fB) * skvx::shuffle<3, 2>(fA); + V2f ex = (skvx::shuffle<0, 1>(fB) * skvx::shuffle<3, 2>(oc) - + skvx::shuffle<0, 1>(oc) * skvx::shuffle<3, 2>(fB)) / eDenom; + V2f ey = (skvx::shuffle<0, 1>(oc) * skvx::shuffle<3, 2>(fA) - + skvx::shuffle<0, 1>(fA) * skvx::shuffle<3, 2>(oc)) / eDenom; + + if (SkScalarAbs(eDenom[0]) > kTolerance) { + px = if_then_else(d1v0, V4f(ex[0]), px); + py = if_then_else(d1v0, V4f(ey[0]), py); + } + if (SkScalarAbs(eDenom[1]) > kTolerance) { + px = if_then_else(d2v0, V4f(ex[1]), px); + py = if_then_else(d2v0, V4f(ey[1]), py); + } + + *x2d = px; + *y2d = py; + return 3; + } +} + +//** OutsetRequest implementation + +void TessellationHelper::OutsetRequest::reset(const EdgeVectors& edgeVectors, GrQuad::Type quadType, + const skvx::Vec<4, float>& edgeDistances) { + fEdgeDistances = edgeDistances; + + // Based on the edge distances, determine if it's acceptable to use fInvSinTheta to + // calculate the inset or outset geometry. + if (quadType <= GrQuad::Type::kRectilinear) { + // Since it's rectangular, the width (edge[1] or edge[2]) collapses if subtracting + // (dist[0] + dist[3]) makes the new width negative (minus for inset, outsetting will + // never be degenerate in this case). The same applies for height (edge[0] or edge[3]) + // and (dist[1] + dist[2]). + fOutsetDegenerate = false; + float widthChange = edgeDistances[0] + edgeDistances[3]; + float heightChange = edgeDistances[1] + edgeDistances[2]; + // (1/len > 1/(edge sum) implies len - edge sum < 0. + fInsetDegenerate = + (widthChange > 0.f && edgeVectors.fInvLengths[1] > 1.f / widthChange) || + (heightChange > 0.f && edgeVectors.fInvLengths[0] > 1.f / heightChange); + } else if (any(edgeVectors.fInvLengths >= 1.f / kTolerance)) { + // Have an edge that is effectively length 0, so we're dealing with a triangle, which + // must always go through the degenerate code path. + fOutsetDegenerate = true; + fInsetDegenerate = true; + } else { + // If possible, the corners will move +/-edgeDistances * 1/sin(theta). The entire + // request is degenerate if 1/sin(theta) -> infinity (or cos(theta) -> 1). + if (any(abs(edgeVectors.fCosTheta) >= 0.9f)) { + fOutsetDegenerate = true; + fInsetDegenerate = true; + } else { + // With an edge-centric view, an edge's length changes by + // edgeDistance * cos(pi - theta) / sin(theta) for each of its corners (the second + // corner uses ccw theta value). An edge's length also changes when its adjacent + // edges move, in which case it's updated by edgeDistance / sin(theta) + // (or cos(theta) for the other edge). + + // cos(pi - theta) = -cos(theta) + V4f halfTanTheta = -edgeVectors.fCosTheta * edgeVectors.fInvSinTheta; + V4f edgeAdjust = edgeDistances * (halfTanTheta + next_ccw(halfTanTheta)) + + next_ccw(edgeDistances) * next_ccw(edgeVectors.fInvSinTheta) + + next_cw(edgeDistances) * edgeVectors.fInvSinTheta; + + // If either outsetting (plus edgeAdjust) or insetting (minus edgeAdjust) make + // the edge lengths negative, then it's degenerate. + V4f threshold = 0.1f - (1.f / edgeVectors.fInvLengths); + fOutsetDegenerate = any(edgeAdjust < threshold); + fInsetDegenerate = any(edgeAdjust > -threshold); + } + } +} + +//** Vertices implementation + +void TessellationHelper::Vertices::reset(const GrQuad& deviceQuad, const GrQuad* localQuad) { + // Set vertices to match the device and local quad + fX = deviceQuad.x4f(); + fY = deviceQuad.y4f(); + fW = deviceQuad.w4f(); + + if (localQuad) { + fU = localQuad->x4f(); + fV = localQuad->y4f(); + fR = localQuad->w4f(); + fUVRCount = localQuad->hasPerspective() ? 3 : 2; + } else { + fUVRCount = 0; + } +} + +void TessellationHelper::Vertices::asGrQuads(GrQuad* deviceOut, GrQuad::Type deviceType, + GrQuad* localOut, GrQuad::Type localType) const { + SkASSERT(deviceOut); + SkASSERT(fUVRCount == 0 || localOut); + + fX.store(deviceOut->xs()); + fY.store(deviceOut->ys()); + if (deviceType == GrQuad::Type::kPerspective) { + fW.store(deviceOut->ws()); + } + deviceOut->setQuadType(deviceType); // This sets ws == 1 when device type != perspective + + if (fUVRCount > 0) { + fU.store(localOut->xs()); + fV.store(localOut->ys()); + if (fUVRCount == 3) { + fR.store(localOut->ws()); + } + localOut->setQuadType(localType); + } +} + +void TessellationHelper::Vertices::moveAlong(const EdgeVectors& edgeVectors, + const V4f& signedEdgeDistances) { + // This shouldn't be called if fInvSinTheta is close to infinity (cosTheta close to 1). + SkASSERT(all(abs(edgeVectors.fCosTheta) < 0.9f)); + + // When the projected device quad is not degenerate, the vertex corners can move + // cornerOutsetLen along their edge and their cw-rotated edge. The vertex's edge points + // inwards and the cw-rotated edge points outwards, hence the minus-sign. + // The edge distances are rotated compared to the corner outsets and (dx, dy), since if + // the edge is "on" both its corners need to be moved along their other edge vectors. + V4f signedOutsets = -edgeVectors.fInvSinTheta * next_cw(signedEdgeDistances); + V4f signedOutsetsCW = edgeVectors.fInvSinTheta * signedEdgeDistances; + + // x = x + outset * mask * next_cw(xdiff) - outset * next_cw(mask) * xdiff + fX += mad(signedOutsetsCW, next_cw(edgeVectors.fDX), signedOutsets * edgeVectors.fDX); + fY += mad(signedOutsetsCW, next_cw(edgeVectors.fDY), signedOutsets * edgeVectors.fDY); + if (fUVRCount > 0) { + // We want to extend the texture coords by the same proportion as the positions. + signedOutsets *= edgeVectors.fInvLengths; + signedOutsetsCW *= next_cw(edgeVectors.fInvLengths); + V4f du = next_ccw(fU) - fU; + V4f dv = next_ccw(fV) - fV; + fU += mad(signedOutsetsCW, next_cw(du), signedOutsets * du); + fV += mad(signedOutsetsCW, next_cw(dv), signedOutsets * dv); + if (fUVRCount == 3) { + V4f dr = next_ccw(fR) - fR; + fR += mad(signedOutsetsCW, next_cw(dr), signedOutsets * dr); + } + } +} + +void TessellationHelper::Vertices::moveTo(const V4f& x2d, const V4f& y2d, const M4f& mask) { + // Left to right, in device space, for each point + V4f e1x = skvx::shuffle<2, 3, 2, 3>(fX) - skvx::shuffle<0, 1, 0, 1>(fX); + V4f e1y = skvx::shuffle<2, 3, 2, 3>(fY) - skvx::shuffle<0, 1, 0, 1>(fY); + V4f e1w = skvx::shuffle<2, 3, 2, 3>(fW) - skvx::shuffle<0, 1, 0, 1>(fW); + correct_bad_edges(mad(e1x, e1x, e1y * e1y) < kTolerance * kTolerance, &e1x, &e1y, &e1w); + + // // Top to bottom, in device space, for each point + V4f e2x = skvx::shuffle<1, 1, 3, 3>(fX) - skvx::shuffle<0, 0, 2, 2>(fX); + V4f e2y = skvx::shuffle<1, 1, 3, 3>(fY) - skvx::shuffle<0, 0, 2, 2>(fY); + V4f e2w = skvx::shuffle<1, 1, 3, 3>(fW) - skvx::shuffle<0, 0, 2, 2>(fW); + correct_bad_edges(mad(e2x, e2x, e2y * e2y) < kTolerance * kTolerance, &e2x, &e2y, &e2w); + + // Can only move along e1 and e2 to reach the new 2D point, so we have + // x2d = (x + a*e1x + b*e2x) / (w + a*e1w + b*e2w) and + // y2d = (y + a*e1y + b*e2y) / (w + a*e1w + b*e2w) for some a, b + // This can be rewritten to a*c1x + b*c2x + c3x = 0; a * c1y + b*c2y + c3y = 0, where + // the cNx and cNy coefficients are: + V4f c1x = e1w * x2d - e1x; + V4f c1y = e1w * y2d - e1y; + V4f c2x = e2w * x2d - e2x; + V4f c2y = e2w * y2d - e2y; + V4f c3x = fW * x2d - fX; + V4f c3y = fW * y2d - fY; + + // Solve for a and b + V4f a, b, denom; + if (all(mask)) { + // When every edge is outset/inset, each corner can use both edge vectors + denom = c1x * c2y - c2x * c1y; + a = (c2x * c3y - c3x * c2y) / denom; + b = (c3x * c1y - c1x * c3y) / denom; + } else { + // Force a or b to be 0 if that edge cannot be used due to non-AA + M4f aMask = skvx::shuffle<0, 0, 3, 3>(mask); + M4f bMask = skvx::shuffle<2, 1, 2, 1>(mask); + + // When aMask[i]&bMask[i], then a[i], b[i], denom[i] match the kAll case. + // When aMask[i]&!bMask[i], then b[i] = 0, a[i] = -c3x/c1x or -c3y/c1y, using better denom + // When !aMask[i]&bMask[i], then a[i] = 0, b[i] = -c3x/c2x or -c3y/c2y, "" + // When !aMask[i]&!bMask[i], then both a[i] = 0 and b[i] = 0 + M4f useC1x = abs(c1x) > abs(c1y); + M4f useC2x = abs(c2x) > abs(c2y); + + denom = if_then_else(aMask, + if_then_else(bMask, + c1x * c2y - c2x * c1y, /* A & B */ + if_then_else(useC1x, c1x, c1y)), /* A & !B */ + if_then_else(bMask, + if_then_else(useC2x, c2x, c2y), /* !A & B */ + V4f(1.f))); /* !A & !B */ + + a = if_then_else(aMask, + if_then_else(bMask, + c2x * c3y - c3x * c2y, /* A & B */ + if_then_else(useC1x, -c3x, -c3y)), /* A & !B */ + V4f(0.f)) / denom; /* !A */ + b = if_then_else(bMask, + if_then_else(aMask, + c3x * c1y - c1x * c3y, /* A & B */ + if_then_else(useC2x, -c3x, -c3y)), /* !A & B */ + V4f(0.f)) / denom; /* !B */ + } + + V4f newW = fW + a * e1w + b * e2w; + // If newW < 0, scale a and b such that the point reaches the infinity plane instead of crossing + // This breaks orthogonality of inset/outsets, but GPUs don't handle negative Ws well so this + // is far less visually disturbing (likely not noticeable since it's at extreme perspective). + // The alternative correction (multiply xyw by -1) has the disadvantage of changing how local + // coordinates would be interpolated. + static const float kMinW = 1e-6f; + if (any(newW < 0.f)) { + V4f scale = if_then_else(newW < kMinW, (kMinW - fW) / (newW - fW), V4f(1.f)); + a *= scale; + b *= scale; + } + + fX += a * e1x + b * e2x; + fY += a * e1y + b * e2y; + fW += a * e1w + b * e2w; + correct_bad_coords(abs(denom) < kTolerance, &fX, &fY, &fW); + + if (fUVRCount > 0) { + // Calculate R here so it can be corrected with U and V in case it's needed later + V4f e1u = skvx::shuffle<2, 3, 2, 3>(fU) - skvx::shuffle<0, 1, 0, 1>(fU); + V4f e1v = skvx::shuffle<2, 3, 2, 3>(fV) - skvx::shuffle<0, 1, 0, 1>(fV); + V4f e1r = skvx::shuffle<2, 3, 2, 3>(fR) - skvx::shuffle<0, 1, 0, 1>(fR); + correct_bad_edges(mad(e1u, e1u, e1v * e1v) < kTolerance * kTolerance, &e1u, &e1v, &e1r); + + V4f e2u = skvx::shuffle<1, 1, 3, 3>(fU) - skvx::shuffle<0, 0, 2, 2>(fU); + V4f e2v = skvx::shuffle<1, 1, 3, 3>(fV) - skvx::shuffle<0, 0, 2, 2>(fV); + V4f e2r = skvx::shuffle<1, 1, 3, 3>(fR) - skvx::shuffle<0, 0, 2, 2>(fR); + correct_bad_edges(mad(e2u, e2u, e2v * e2v) < kTolerance * kTolerance, &e2u, &e2v, &e2r); + + fU += a * e1u + b * e2u; + fV += a * e1v + b * e2v; + if (fUVRCount == 3) { + fR += a * e1r + b * e2r; + correct_bad_coords(abs(denom) < kTolerance, &fU, &fV, &fR); + } else { + correct_bad_coords(abs(denom) < kTolerance, &fU, &fV, nullptr); + } + } +} + +//** TessellationHelper implementation + +void TessellationHelper::reset(const GrQuad& deviceQuad, const GrQuad* localQuad) { + // Record basic state that isn't recorded on the Vertices struct itself + fDeviceType = deviceQuad.quadType(); + fLocalType = localQuad ? localQuad->quadType() : GrQuad::Type::kAxisAligned; + + // Reset metadata validity + fOutsetRequestValid = false; + fEdgeEquationsValid = false; + + // Compute vertex properties that are always needed for a quad, so no point in doing it lazily. + fOriginal.reset(deviceQuad, localQuad); + fEdgeVectors.reset(fOriginal.fX, fOriginal.fY, fOriginal.fW, fDeviceType); + + fVerticesValid = true; +} + +V4f TessellationHelper::inset(const skvx::Vec<4, float>& edgeDistances, + GrQuad* deviceInset, GrQuad* localInset) { + SkASSERT(fVerticesValid); + + Vertices inset = fOriginal; + const OutsetRequest& request = this->getOutsetRequest(edgeDistances); + int vertexCount; + if (request.fInsetDegenerate) { + vertexCount = this->adjustDegenerateVertices(-request.fEdgeDistances, &inset); + } else { + this->adjustVertices(-request.fEdgeDistances, &inset); + vertexCount = 4; + } + + inset.asGrQuads(deviceInset, fDeviceType, localInset, fLocalType); + if (vertexCount < 3) { + // The interior has less than a full pixel's area so estimate reduced coverage using + // the distance of the inset's projected corners to the original edges. + return this->getEdgeEquations().estimateCoverage(inset.fX / inset.fW, + inset.fY / inset.fW); + } else { + return 1.f; + } +} + +void TessellationHelper::outset(const skvx::Vec<4, float>& edgeDistances, + GrQuad* deviceOutset, GrQuad* localOutset) { + SkASSERT(fVerticesValid); + + Vertices outset = fOriginal; + const OutsetRequest& request = this->getOutsetRequest(edgeDistances); + if (request.fOutsetDegenerate) { + this->adjustDegenerateVertices(request.fEdgeDistances, &outset); + } else { + this->adjustVertices(request.fEdgeDistances, &outset); + } + + outset.asGrQuads(deviceOutset, fDeviceType, localOutset, fLocalType); +} + +const TessellationHelper::OutsetRequest& TessellationHelper::getOutsetRequest( + const skvx::Vec<4, float>& edgeDistances) { + // Much of the code assumes that we start from positive distances and apply it unmodified to + // create an outset; knowing that it's outset simplifies degeneracy checking. + SkASSERT(all(edgeDistances >= 0.f)); + + // Rebuild outset request if invalid or if the edge distances have changed. + if (!fOutsetRequestValid || any(edgeDistances != fOutsetRequest.fEdgeDistances)) { + fOutsetRequest.reset(fEdgeVectors, fDeviceType, edgeDistances); + fOutsetRequestValid = true; + } + return fOutsetRequest; +} + +const TessellationHelper::EdgeEquations& TessellationHelper::getEdgeEquations() { + if (!fEdgeEquationsValid) { + fEdgeEquations.reset(fEdgeVectors); + fEdgeEquationsValid = true; + } + return fEdgeEquations; +} + +void TessellationHelper::adjustVertices(const skvx::Vec<4, float>& signedEdgeDistances, + Vertices* vertices) { + SkASSERT(vertices); + SkASSERT(vertices->fUVRCount == 0 || vertices->fUVRCount == 2 || vertices->fUVRCount == 3); + + if (fDeviceType < GrQuad::Type::kPerspective) { + // For non-perspective, non-degenerate quads, moveAlong is correct and most efficient + vertices->moveAlong(fEdgeVectors, signedEdgeDistances); + } else { + // For perspective, non-degenerate quads, use moveAlong for the projected points and then + // reconstruct Ws with moveTo. + Vertices projected = { fEdgeVectors.fX2D, fEdgeVectors.fY2D, /*w*/ 1.f, 0.f, 0.f, 0.f, 0 }; + projected.moveAlong(fEdgeVectors, signedEdgeDistances); + vertices->moveTo(projected.fX, projected.fY, signedEdgeDistances != 0.f); + } +} + +int TessellationHelper::adjustDegenerateVertices(const skvx::Vec<4, float>& signedEdgeDistances, + Vertices* vertices) { + SkASSERT(vertices); + SkASSERT(vertices->fUVRCount == 0 || vertices->fUVRCount == 2 || vertices->fUVRCount == 3); + + if (fDeviceType <= GrQuad::Type::kRectilinear) { + // For rectilinear, degenerate quads, can use moveAlong if the edge distances are adjusted + // to not cross over each other. + SkASSERT(all(signedEdgeDistances <= 0.f)); // Only way rectilinear can degenerate is insets + V4f halfLengths = -0.5f / next_cw(fEdgeVectors.fInvLengths); // Negate to inset + M4f crossedEdges = halfLengths > signedEdgeDistances; + V4f safeInsets = if_then_else(crossedEdges, halfLengths, signedEdgeDistances); + vertices->moveAlong(fEdgeVectors, safeInsets); + + // A degenerate rectilinear quad is either a point (both w and h crossed), or a line + return all(crossedEdges) ? 1 : 2; + } else { + // Degenerate non-rectangular shape, must go through slowest path (which automatically + // handles perspective). + V4f x2d = fEdgeVectors.fX2D; + V4f y2d = fEdgeVectors.fY2D; + int vertexCount = this->getEdgeEquations().computeDegenerateQuad(signedEdgeDistances, + &x2d, &y2d); + vertices->moveTo(x2d, y2d, signedEdgeDistances != 0.f); + return vertexCount; + } +} + }; // namespace GrQuadUtils diff --git a/third_party/skia/src/gpu/geometry/GrQuadUtils.h b/third_party/skia/src/gpu/geometry/GrQuadUtils.h index 53b53d252254..63d3415f02b0 100644 --- a/third_party/skia/src/gpu/geometry/GrQuadUtils.h +++ b/third_party/skia/src/gpu/geometry/GrQuadUtils.h @@ -8,10 +8,12 @@ #ifndef GrQuadUtils_DEFINED #define GrQuadUtils_DEFINED +#include "include/private/SkVx.h" +#include "src/gpu/geometry/GrQuad.h" + enum class GrQuadAAFlags; enum class GrAA : bool; enum class GrAAType : unsigned; -class GrQuad; struct SkRect; namespace GrQuadUtils { @@ -38,6 +40,148 @@ namespace GrQuadUtils { bool CropToRect(const SkRect& cropRect, GrAA cropAA, GrQuadAAFlags* edgeFlags, GrQuad* quad, GrQuad* local=nullptr); + class TessellationHelper { + public: + // Set the original device and (optional) local coordinates that are inset or outset + // by the requested edge distances. Use nullptr if there are no local coordinates to update. + void reset(const GrQuad& deviceQuad, const GrQuad* localQuad); + + // Calculates a new quadrilateral with edges parallel to the original except that they + // have been moved inwards by edgeDistances (which should be positive). Distances are + // ordered L, B, T, R to match CCW tristrip ordering of GrQuad vertices. Edges that are + // not moved (i.e. distance == 0) will not be used in calculations and the corners will + // remain on that edge. + // + // The per-vertex coverage will be returned. When the inset geometry does not collapse to + // a point or line, this will be 1.0 for every vertex. When it does collapse, the per-vertex + // coverages represent estimated pixel coverage to simulate drawing the subpixel-sized + // original quad. + // + // Note: the edge distances are in device pixel units, so after rendering the new quad + // edge's shortest distance to the original quad's edge would be equal to provided edge dist + skvx::Vec<4, float> inset(const skvx::Vec<4, float>& edgeDistances, + GrQuad* deviceInset, GrQuad* localInset); + + // Calculates a new quadrilateral that outsets the original edges by the given distances. + // Other than moving edges outwards, this function is equivalent to inset(). If the exact + // same edge distances are provided, certain internal computations can be reused across + // consecutive calls to inset() and outset() (in any order). + void outset(const skvx::Vec<4, float>& edgeDistances, + GrQuad* deviceOutset, GrQuad* localOutset); + + private: + // NOTE: This struct is named 'EdgeVectors' because it holds a lot of cached calculations + // pertaining to the edge vectors of the input quad, projected into 2D device coordinates. + // While they are not direction vectors, this struct represents a convenient storage space + // for the projected corners of the quad. + struct EdgeVectors { + // Projected corners (x/w and y/w); these are the 2D coordinates that determine the + // actual edge direction vectors, dx, dy, and invLengths + skvx::Vec<4, float> fX2D, fY2D; + // Normalized edge vectors of the device space quad, ordered L, B, T, R + // (i.e. next_ccw(x) - x). + skvx::Vec<4, float> fDX, fDY; + // Reciprocal of edge length of the device space quad, i.e. 1 / sqrt(dx*dx + dy*dy) + skvx::Vec<4, float> fInvLengths; + // Theta represents the angle formed by the two edges connected at each corner. + skvx::Vec<4, float> fCosTheta; + skvx::Vec<4, float> fInvSinTheta; // 1 / sin(theta) + + void reset(const skvx::Vec<4, float>& xs, const skvx::Vec<4, float>& ys, + const skvx::Vec<4, float>& ws, GrQuad::Type quadType); + }; + + struct EdgeEquations { + // a * x + b * y + c = 0; positive distance is inside the quad; ordered LBTR. + skvx::Vec<4, float> fA, fB, fC; + + void reset(const EdgeVectors& edgeVectors); + + skvx::Vec<4, float> estimateCoverage(const skvx::Vec<4, float>& x2d, + const skvx::Vec<4, float>& y2d) const; + + // Outsets or insets 'x2d' and 'y2d' in place. To be used when the interior is very + // small, edges are near parallel, or edges are very short/zero-length. Returns number + // of effective vertices in the degenerate quad. + int computeDegenerateQuad(const skvx::Vec<4, float>& signedEdgeDistances, + skvx::Vec<4, float>* x2d, skvx::Vec<4, float>* y2d) const; + }; + + struct OutsetRequest { + // Positive edge distances to move each edge of the quad. These distances represent the + // shortest (perpendicular) distance between the original edge and the inset or outset + // edge. If the distance is 0, then the edge will not move. + skvx::Vec<4, float> fEdgeDistances; + // True if the new corners cannot be calculated by simply adding scaled edge vectors. + // The quad may be degenerate because of the original geometry (near colinear edges), or + // be because of the requested edge distances (collapse of inset, etc.) + bool fInsetDegenerate; + bool fOutsetDegenerate; + + void reset(const EdgeVectors& edgeVectors, GrQuad::Type quadType, + const skvx::Vec<4, float>& edgeDistances); + }; + + struct Vertices { + // X, Y, and W coordinates in device space. If not perspective, w should be set to 1.f + skvx::Vec<4, float> fX, fY, fW; + // U, V, and R coordinates representing local quad. + // Ignored depending on uvrCount (0, 1, 2). + skvx::Vec<4, float> fU, fV, fR; + int fUVRCount; + + void reset(const GrQuad& deviceQuad, const GrQuad* localQuad); + + void asGrQuads(GrQuad* deviceOut, GrQuad::Type deviceType, + GrQuad* localOut, GrQuad::Type localType) const; + + // Update the device and optional local coordinates by moving the corners along their + // edge vectors such that the new edges have moved 'signedEdgeDistances' from their + // original lines. This should only be called if the 'edgeVectors' fInvSinTheta data is + // numerically sound. + void moveAlong(const EdgeVectors& edgeVectors, + const skvx::Vec<4, float>& signedEdgeDistances); + + // Update the device coordinates by deriving (x,y,w) that project to (x2d, y2d), with + // optional local coordinates updated to match the new vertices. It is assumed that + // 'mask' was respected when determining (x2d, y2d), but it is used to ensure that only + // unmasked unprojected edge vectors are used when computing device and local coords. + void moveTo(const skvx::Vec<4, float>& x2d, + const skvx::Vec<4, float>& y2d, + const skvx::Vec<4, int32_t>& mask); + }; + + Vertices fOriginal; + EdgeVectors fEdgeVectors; + GrQuad::Type fDeviceType; + GrQuad::Type fLocalType; + + // Lazily computed as needed; use accessor functions instead of direct access. + OutsetRequest fOutsetRequest; + EdgeEquations fEdgeEquations; + + // Validity of Vertices/EdgeVectors (always true after first call to set()). + bool fVerticesValid = false; + // Validity of outset request (true after calling getOutsetRequest() until next set() call + // or next inset/outset() with different edge distances). + bool fOutsetRequestValid = false; + // Validity of edge equations (true after calling getEdgeEquations() until next set() call). + bool fEdgeEquationsValid = false; + + // The requested edge distances must be positive so that they can be reused between inset + // and outset calls. + const OutsetRequest& getOutsetRequest(const skvx::Vec<4, float>& edgeDistances); + const EdgeEquations& getEdgeEquations(); + + // Outsets or insets 'vertices' by the given perpendicular 'signedEdgeDistances' (inset or + // outset is determined implicitly by the sign of the distances). + void adjustVertices(const skvx::Vec<4, float>& signedEdgeDistances, Vertices* vertices); + // Like adjustVertices() but handles empty edges, collapsed quads, numerical issues, and + // returns the number of effective vertices in the adjusted shape. + int adjustDegenerateVertices(const skvx::Vec<4, float>& signedEdgeDistances, + Vertices* vertices); + }; + }; // namespace GrQuadUtils #endif diff --git a/third_party/skia/src/gpu/geometry/GrShape.cpp b/third_party/skia/src/gpu/geometry/GrShape.cpp index 4fc3472ffb31..a510a1982a3c 100644 --- a/third_party/skia/src/gpu/geometry/GrShape.cpp +++ b/third_party/skia/src/gpu/geometry/GrShape.cpp @@ -201,7 +201,7 @@ static void write_path_key_from_data(const SkPath& path, uint32_t* origKey) { const int conicWeightCnt = SkPathPriv::ConicWeightCnt(path); SkASSERT(verbCnt <= GrShape::kMaxKeyFromDataVerbCnt); SkASSERT(pointCnt && verbCnt); - *key++ = path.getFillType(); + *key++ = (uint32_t)path.getFillType(); *key++ = verbCnt; memcpy(key, SkPathPriv::VerbData(path), verbCnt * sizeof(uint8_t)); int verbKeySize = SkAlign4(verbCnt); @@ -273,7 +273,7 @@ void GrShape::writeUnstyledKey(uint32_t* key) const { case Type::kRRect: fRRectData.fRRect.writeToMemory(key); key += SkRRect::kSizeInMemory / sizeof(uint32_t); - *key = (fRRectData.fDir == SkPath::kCCW_Direction) ? (1 << 31) : 0; + *key = (fRRectData.fDir == SkPathDirection::kCCW) ? (1 << 31) : 0; *key |= fRRectData.fInverted ? (1 << 30) : 0; *key++ |= fRRectData.fStart; SkASSERT(fRRectData.fStart < 8); @@ -297,7 +297,7 @@ void GrShape::writeUnstyledKey(uint32_t* key) const { *key++ = fPathData.fGenID; // We could canonicalize the fill rule for paths that don't differentiate between // even/odd or winding fill (e.g. convex). - *key++ = this->path().getFillType(); + *key++ = (uint32_t)this->path().getFillType(); break; } } @@ -507,7 +507,7 @@ GrShape::GrShape(const GrShape& parent, GrStyle::Apply apply, SkScalar scale) { void GrShape::attemptToSimplifyPath() { SkRect rect; SkRRect rrect; - SkPath::Direction rrectDir; + SkPathDirection rrectDir; unsigned rrectStart; bool inverted = this->path().isInverseFillType(); SkPoint pts[2]; diff --git a/third_party/skia/src/gpu/geometry/GrShape.h b/third_party/skia/src/gpu/geometry/GrShape.h index 37f38f8844c6..ea87986fdd6b 100644 --- a/third_party/skia/src/gpu/geometry/GrShape.h +++ b/third_party/skia/src/gpu/geometry/GrShape.h @@ -61,7 +61,7 @@ class GrShape { this->attemptToSimplifyRRect(); } - GrShape(const SkRRect& rrect, SkPath::Direction dir, unsigned start, bool inverted, + GrShape(const SkRRect& rrect, SkPathDirection dir, unsigned start, bool inverted, const GrStyle& style) : fStyle(style) { this->initType(Type::kRRect); @@ -160,7 +160,7 @@ class GrShape { } /** Returns the unstyled geometry as a rrect if possible. */ - bool asRRect(SkRRect* rrect, SkPath::Direction* dir, unsigned* start, bool* inverted) const { + bool asRRect(SkRRect* rrect, SkPathDirection* dir, unsigned* start, bool* inverted) const { if (Type::kRRect != fType) { return false; } @@ -255,12 +255,12 @@ class GrShape { return false; } - SkPath::Direction dirs[2]; + SkPathDirection dirs[2]; if (!SkPathPriv::IsNestedFillRects(this->path(), rects, dirs)) { return false; } - if (SkPath::kWinding_FillType == this->path().getFillType() && dirs[0] == dirs[1]) { + if (SkPathFillType::kWinding == this->path().getNewFillType() && dirs[0] == dirs[1]) { // The two rects need to be wound opposite to each other return false; } @@ -550,15 +550,14 @@ class GrShape { const SkPath* originalPathForListeners() const; // Defaults to use when there is no distinction between even/odd and winding fills. - static constexpr SkPath::FillType kDefaultPathFillType = SkPath::kEvenOdd_FillType; - static constexpr SkPath::FillType kDefaultPathInverseFillType = - SkPath::kInverseEvenOdd_FillType; + static constexpr SkPathFillType kDefaultPathFillType = SkPathFillType::kEvenOdd; + static constexpr SkPathFillType kDefaultPathInverseFillType = SkPathFillType::kInverseEvenOdd; - static constexpr SkPath::Direction kDefaultRRectDir = SkPath::kCW_Direction; + static constexpr SkPathDirection kDefaultRRectDir = SkPathDirection::kCW; static constexpr unsigned kDefaultRRectStart = 0; static unsigned DefaultRectDirAndStartIndex(const SkRect& rect, bool hasPathEffect, - SkPath::Direction* dir) { + SkPathDirection* dir) { *dir = kDefaultRRectDir; // This comes from SkPath's interface. The default for adding a SkRect is counter clockwise // beginning at index 0 (which happens to correspond to rrect index 0 or 7). @@ -575,11 +574,11 @@ class GrShape { // 0 becomes start index 2 and times 2 to convert from rect the rrect indices. return 2 * 2; } else if (swapX) { - *dir = SkPath::kCCW_Direction; + *dir = SkPathDirection::kCCW; // 0 becomes start index 1 and times 2 to convert from rect the rrect indices. return 2 * 1; } else if (swapY) { - *dir = SkPath::kCCW_Direction; + *dir = SkPathDirection::kCCW; // 0 becomes start index 3 and times 2 to convert from rect the rrect indices. return 2 * 3; } @@ -587,7 +586,7 @@ class GrShape { } static unsigned DefaultRRectDirAndStartIndex(const SkRRect& rrect, bool hasPathEffect, - SkPath::Direction* dir) { + SkPathDirection* dir) { // This comes from SkPath's interface. The default for adding a SkRRect to a path is // clockwise beginning at starting index 6. static constexpr unsigned kPathRRectStartIdx = 6; @@ -602,7 +601,7 @@ class GrShape { union { struct { SkRRect fRRect; - SkPath::Direction fDir; + SkPathDirection fDir; unsigned fStart; bool fInverted; } fRRectData; diff --git a/third_party/skia/src/gpu/gl/GrGLAssembleWebGLInterfaceAutogen.cpp b/third_party/skia/src/gpu/gl/GrGLAssembleWebGLInterfaceAutogen.cpp index 9202de8c643e..e48e5258f21d 100644 --- a/third_party/skia/src/gpu/gl/GrGLAssembleWebGLInterfaceAutogen.cpp +++ b/third_party/skia/src/gpu/gl/GrGLAssembleWebGLInterfaceAutogen.cpp @@ -202,6 +202,10 @@ sk_sp GrGLMakeAssembledWebGLInterface(void *ctx, GrGLGetPro GET_PROC(GetRenderbufferParameteriv); GET_PROC(RenderbufferStorage); + if (glVer >= GR_GL_VER(2,0)) { + GET_PROC(BlitFramebuffer); + } + if (glVer >= GR_GL_VER(2,0)) { GET_PROC(RenderbufferStorageMultisample); } diff --git a/third_party/skia/src/gpu/gl/GrGLCaps.cpp b/third_party/skia/src/gpu/gl/GrGLCaps.cpp index 7d3d88b885a2..37ebe9d7c606 100644 --- a/third_party/skia/src/gpu/gl/GrGLCaps.cpp +++ b/third_party/skia/src/gpu/gl/GrGLCaps.cpp @@ -8,6 +8,7 @@ #include "include/gpu/GrContextOptions.h" #include "src/core/SkTSearch.h" #include "src/core/SkTSort.h" +#include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrRenderTargetProxyPriv.h" #include "src/gpu/GrShaderCaps.h" #include "src/gpu/GrSurfaceProxyPriv.h" @@ -36,14 +37,18 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions, fVertexArrayObjectSupport = false; fDebugSupport = false; fES2CompatibilitySupport = false; + fDrawInstancedSupport = false; fDrawIndirectSupport = false; + fDrawRangeElementsSupport = false; fMultiDrawIndirectSupport = false; fBaseInstanceSupport = false; + fUseNonVBOVertexAndIndexDynamicData = false; fIsCoreProfile = false; fBindFragDataLocationSupport = false; fRectangleTextureSupport = false; fRGBA8888PixelsOpsAreSlow = false; fPartialFBOReadIsSlow = false; + fBindUniformLocationSupport = false; fMipMapLevelAndLodControlSupport = false; fRGBAToBGRAReadbackConversionsAreSlow = false; fUseBufferDataNullHint = false; @@ -381,9 +386,10 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, // Enable supported shader-related caps if (GR_IS_GR_GL(standard)) { - shaderCaps->fDualSourceBlendingSupport = (version >= GR_GL_VER(3, 3) || - ctxInfo.hasExtension("GL_ARB_blend_func_extended")) && - ctxInfo.glslGeneration() >= k130_GrGLSLGeneration; + shaderCaps->fDualSourceBlendingSupport = + (version >= GR_GL_VER(3, 3) || + ctxInfo.hasExtension("GL_ARB_blend_func_extended")) && + ctxInfo.glslGeneration() >= k130_GrGLSLGeneration; shaderCaps->fShaderDerivativeSupport = true; @@ -426,7 +432,8 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, shaderCaps->fIntegerSupport = version >= GR_GL_VER(3, 0) && ctxInfo.glslGeneration() >= k330_GrGLSLGeneration; // We use this value for GLSL ES 3.0. } else if (GR_IS_GR_WEBGL(standard)) { - shaderCaps->fShaderDerivativeSupport = ctxInfo.hasExtension("GL_OES_standard_derivatives") || + shaderCaps->fShaderDerivativeSupport = version >= GR_GL_VER(2, 0) || + ctxInfo.hasExtension("GL_OES_standard_derivatives") || ctxInfo.hasExtension("OES_standard_derivatives"); } @@ -682,14 +689,17 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, } // TODO: support CHROMIUM_sync_point and maybe KHR_fence_sync - if (GR_IS_GR_GL(standard)) { - fFenceSyncSupport = (version >= GR_GL_VER(3, 2) || ctxInfo.hasExtension("GL_ARB_sync")); + if (ctxInfo.hasExtension("GL_ARB_sync") || ctxInfo.hasExtension("GL_APPLE_sync")) { + fFenceSyncSupport = true; + } else if (GR_IS_GR_GL(standard)) { + fFenceSyncSupport = (version >= GR_GL_VER(3, 2)); } else if (GR_IS_GR_GL_ES(standard)) { - fFenceSyncSupport = (version >= GR_GL_VER(3, 0) || ctxInfo.hasExtension("GL_APPLE_sync")); + fFenceSyncSupport = (version >= GR_GL_VER(3, 0)); } else if (GR_IS_GR_WEBGL(standard)) { // Only in WebGL 2.0 fFenceSyncSupport = version >= GR_GL_VER(2, 0); } + // The same objects (GL sync objects) are used to implement GPU/CPU fence syncs and GPU/GPU // semaphores. fSemaphoreSupport = fFenceSyncSupport; @@ -748,8 +758,7 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, // already been detected. this->initFormatTable(ctxInfo, gli, formatWorkarounds); - this->applyOptionsOverrides(contextOptions); - shaderCaps->applyOptionsOverrides(contextOptions); + this->finishInitialization(contextOptions); // For now these two are equivalent but we could have dst read in shader via some other method. shaderCaps->fDstReadInShaderSupport = shaderCaps->fFBFetchSupport; @@ -895,24 +904,15 @@ void GrGLCaps::initGLSL(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli } // Not sure for WebGL if (GR_IS_GR_GL(standard)) { - shaderCaps->fSampleVariablesSupport = ctxInfo.glslGeneration() >= k400_GrGLSLGeneration; + shaderCaps->fSampleMaskSupport = ctxInfo.glslGeneration() >= k400_GrGLSLGeneration; } else if (GR_IS_GR_GL_ES(standard)) { if (ctxInfo.glslGeneration() >= k320es_GrGLSLGeneration) { - shaderCaps->fSampleVariablesSupport = true; + shaderCaps->fSampleMaskSupport = true; } else if (ctxInfo.hasExtension("GL_OES_sample_variables")) { - shaderCaps->fSampleVariablesSupport = true; + shaderCaps->fSampleMaskSupport = true; shaderCaps->fSampleVariablesExtensionString = "GL_OES_sample_variables"; } } - shaderCaps->fSampleVariablesStencilSupport = shaderCaps->fSampleVariablesSupport; - - if (kQualcomm_GrGLVendor == ctxInfo.vendor() || kATI_GrGLVendor == ctxInfo.vendor()) { - // FIXME: The sample mask round rect op draws nothing on several Adreno and Radeon bots. - // Other ops that use sample mask while rendering to stencil seem to work fine. Temporarily - // disable sample mask on color buffers while we investigate. - // http://skbug.com/8921 - shaderCaps->fSampleVariablesSupport = false; - } shaderCaps->fVersionDeclString = get_glsl_version_decl_string(standard, shaderCaps->fGLSLGeneration, @@ -1007,13 +1007,11 @@ bool GrGLCaps::hasPathRenderingSupport(const GrGLContextInfo& ctxInfo, const GrG return true; } -void GrGLCaps::initFSAASupport(const GrContextOptions& contextOptions, const GrGLContextInfo& ctxInfo, - const GrGLInterface* gli) { - // We need dual source blending and the ability to disable multisample in order to support mixed - // samples in every corner case. - if (fMultisampleDisableSupport && this->shaderCaps()->dualSourceBlendingSupport()) { - fMixedSamplesSupport = ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples") || - ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_mixed_samples"); +void GrGLCaps::initFSAASupport(const GrContextOptions& contextOptions, + const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { + if (ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples") || + ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_mixed_samples")) { + fMixedSamplesSupport = true; } if (GR_IS_GR_GL(ctxInfo.standard())) { @@ -1105,8 +1103,6 @@ void GrGLCaps::initStencilSupport(const GrGLContextInfo& ctxInfo) { gS8 = {GR_GL_STENCIL_INDEX8, 8, 8, false}, gS16 = {GR_GL_STENCIL_INDEX16, 16, 16, false}, gD24S8 = {GR_GL_DEPTH24_STENCIL8, 8, 32, true }, - gS4 = {GR_GL_STENCIL_INDEX4, 4, 4, false}, - // gS = {GR_GL_STENCIL_INDEX, kUnknownBitCount, kUnknownBitCount, false}, gDS = {GR_GL_DEPTH_STENCIL, kUnknownBitCount, kUnknownBitCount, true }; if (GR_IS_GR_GL(ctxInfo.standard())) { @@ -1122,9 +1118,6 @@ void GrGLCaps::initStencilSupport(const GrGLContextInfo& ctxInfo) { fStencilFormats.push_back() = gS16; if (supportsPackedDS) { fStencilFormats.push_back() = gD24S8; - } - fStencilFormats.push_back() = gS4; - if (supportsPackedDS) { fStencilFormats.push_back() = gDS; } } else if (GR_IS_GR_GL_ES(ctxInfo.standard())) { @@ -1133,14 +1126,10 @@ void GrGLCaps::initStencilSupport(const GrGLContextInfo& ctxInfo) { // ES doesn't support using the unsized format. fStencilFormats.push_back() = gS8; - //fStencilFormats.push_back() = gS16; if (ctxInfo.version() >= GR_GL_VER(3,0) || ctxInfo.hasExtension("GL_OES_packed_depth_stencil")) { fStencilFormats.push_back() = gD24S8; } - if (ctxInfo.hasExtension("GL_OES_stencil4")) { - fStencilFormats.push_back() = gS4; - } } else if (GR_IS_GR_WEBGL(ctxInfo.standard())) { fStencilFormats.push_back() = gS8; if (ctxInfo.version() >= GR_GL_VER(2,0)) { @@ -1250,7 +1239,7 @@ void GrGLCaps::onDumpJSON(SkJSONWriter* writer) const { writer->appendHexU32("i_for_renderbuffer", fFormatTable[i].fInternalFormatForRenderbuffer); writer->appendHexU32("default_ex_format", fFormatTable[i].fDefaultExternalFormat); writer->appendHexU32("default_ex_type", fFormatTable[i].fDefaultExternalType); - writer->appendHexU64("bpp", fFormatTable[i].fBytesPerPixel); + writer->appendHexU32("default_color_type", (uint32_t)fFormatTable[i].fDefaultColorType); writer->beginArray("surface color types"); for (int j = 0; j < fFormatTable[i].fColorTypeInfoCount; ++j) { @@ -1290,12 +1279,14 @@ void GrGLCaps::getTexImageExternalFormatAndType(GrGLFormat surfaceFormat, GrGLen *externalFormat = info.fDefaultExternalFormat; } -void GrGLCaps::getTexSubImageZeroFormatTypeAndBpp(GrGLFormat format, GrGLenum* externalFormat, - GrGLenum* externalType, size_t* bpp) const { +void GrGLCaps::getTexSubImageDefaultFormatTypeAndColorType(GrGLFormat format, + GrGLenum* externalFormat, + GrGLenum* externalType, + GrColorType* colorType) const { const auto& info = this->getFormatInfo(format); *externalType = info.fDefaultExternalType; *externalFormat = info.fDefaultExternalFormat; - *bpp = info.fBytesPerPixel; + *colorType = info.fDefaultColorType; } void GrGLCaps::getTexSubImageExternalFormatAndType(GrGLFormat surfaceFormat, @@ -1392,6 +1383,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RGBA8; info.fDefaultExternalFormat = GR_GL_RGBA; info.fDefaultExternalType = GR_GL_UNSIGNED_BYTE; + info.fDefaultColorType = GrColorType::kRGBA_8888; info.fBytesPerPixel = 4; info.fFlags = FormatInfo::kTexturable_Flag; if (GR_IS_GR_GL(standard)) { @@ -1435,7 +1427,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa this->setColorTypeFormat(GrColorType::kRGBA_8888, GrGLFormat::kRGBA8); // External IO ColorTypes: - ctInfo.fExternalIOFormatCount = 1; + ctInfo.fExternalIOFormatCount = 2; ctInfo.fExternalIOFormats.reset( new ColorTypeInfo::ExternalIOFormats[ctInfo.fExternalIOFormatCount]()); int ioIdx = 0; @@ -1447,6 +1439,14 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fExternalTexImageFormat = GR_GL_RGBA; ioFormat.fExternalReadFormat = GR_GL_RGBA; } + // Format: RGBA8, Surface: kRGBA_8888, Data: kBGRA_8888 + { + auto& ioFormat = ctInfo.fExternalIOFormats[ioIdx++]; + ioFormat.fColorType = GrColorType::kBGRA_8888; + ioFormat.fExternalType = GR_GL_UNSIGNED_BYTE; + ioFormat.fExternalTexImageFormat = 0; // TODO: Enable this on non-ES GL + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_BGRA : 0; + } } // Format: RGBA8, Surface: kBGRA_8888 @@ -1467,7 +1467,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kBGRA_8888; ioFormat.fExternalType = GR_GL_UNSIGNED_BYTE; ioFormat.fExternalTexImageFormat = GR_GL_BGRA; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_BGRA : 0; } // Format: RGBA8, Surface: kBGRA_8888, Data: kRGBA_8888 @@ -1510,6 +1510,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_R8; info.fDefaultExternalFormat = GR_GL_RED; info.fDefaultExternalType = GR_GL_UNSIGNED_BYTE; + info.fDefaultColorType = GrColorType::kR_8; info.fBytesPerPixel = 1; bool r8Support = false; if (GR_IS_GR_GL(standard)) { @@ -1561,7 +1562,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kAlpha_8; ioFormat.fExternalType = GR_GL_UNSIGNED_BYTE; ioFormat.fExternalTexImageFormat = GR_GL_RED; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RED : 0; } // Format: R8, Surface: kAlpha_8, Data: kAlpha_8xxx @@ -1593,7 +1594,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kGray_8; ioFormat.fExternalType = GR_GL_UNSIGNED_BYTE; ioFormat.fExternalTexImageFormat = GR_GL_RED; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RED : 0; } // Format: R8, Surface: kGray_8, Data: kGray_8xxx @@ -1635,6 +1636,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_ALPHA8; info.fDefaultExternalFormat = GR_GL_ALPHA; info.fDefaultExternalType = GR_GL_UNSIGNED_BYTE; + info.fDefaultColorType = GrColorType::kAlpha_8; info.fBytesPerPixel = 1; if (alpha8IsValidForGL || alpha8IsValidForGLES || alpha8IsValidForWebGL) { info.fFlags = FormatInfo::kTexturable_Flag; @@ -1686,7 +1688,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kAlpha_8; ioFormat.fExternalType = GR_GL_UNSIGNED_BYTE; ioFormat.fExternalTexImageFormat = GR_GL_ALPHA; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_ALPHA : 0; } // Format: ALPHA8, Surface: kAlpha_8, Data: kRGBA_8888 @@ -1709,6 +1711,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_LUMINANCE8; info.fDefaultExternalFormat = GR_GL_LUMINANCE; info.fDefaultExternalType = GR_GL_UNSIGNED_BYTE; + info.fDefaultColorType = GrColorType::kGray_8; info.fBytesPerPixel = 1; bool lum8Supported = false; bool lum8SizedFormatSupported = false; @@ -1810,6 +1813,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fDefaultExternalFormat = GR_GL_BGRA; info.fDefaultExternalType = GR_GL_UNSIGNED_BYTE; + info.fDefaultColorType = GrColorType::kBGRA_8888; info.fBytesPerPixel = 4; GrGLenum bgraTexImageFormat; @@ -1892,6 +1896,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fExternalType = GR_GL_UNSIGNED_BYTE; ioFormat.fExternalTexImageFormat = GR_GL_BGRA; ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_BGRA : 0; } // Format: BGRA8, Surface: kBGRA_8888, Data: kRGBA_8888 @@ -1913,6 +1918,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RGB565; info.fDefaultExternalFormat = GR_GL_RGB; info.fDefaultExternalType = GR_GL_UNSIGNED_SHORT_5_6_5; + info.fDefaultColorType = GrColorType::kBGR_565; info.fBytesPerPixel = 2; if (GR_IS_GR_GL(standard)) { if (version >= GR_GL_VER(4, 2) || ctxInfo.hasExtension("GL_ARB_ES2_compatibility")) { @@ -1960,7 +1966,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kBGR_565; ioFormat.fExternalType = GR_GL_UNSIGNED_SHORT_5_6_5; ioFormat.fExternalTexImageFormat = GR_GL_RGB; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RGB : 0; } // Format: RGB565, Surface: kBGR_565, Data: kRGBA_8888 @@ -1982,6 +1988,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RGBA16F; info.fDefaultExternalFormat = GR_GL_RGBA; info.fDefaultExternalType = halfFloatType; + info.fDefaultColorType = GrColorType::kRGBA_F16; info.fBytesPerPixel = 8; bool rgba16FTextureSupport = false; bool rgba16FRenderTargetSupport = false; @@ -2063,7 +2070,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kRGBA_F16; ioFormat.fExternalType = halfFloatType; ioFormat.fExternalTexImageFormat = GR_GL_RGBA; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RGBA : 0; } // Format: RGBA16F, Surface: kRGBA_F16, Data: kRGBA_F32 @@ -2094,7 +2101,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kRGBA_F16_Clamped; ioFormat.fExternalType = halfFloatType; ioFormat.fExternalTexImageFormat = GR_GL_RGBA; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RGBA : 0; } // Format: RGBA16F, Surface: kRGBA_F16_Clamped, Data: kRGBA_F32 @@ -2116,6 +2123,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_R16F; info.fDefaultExternalFormat = GR_GL_RED; info.fDefaultExternalType = halfFloatType; + info.fDefaultColorType = GrColorType::kR_F16; info.fBytesPerPixel = 2; bool r16FTextureSupport = false; bool r16FRenderTargetSupport = false; @@ -2183,7 +2191,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kAlpha_F16; ioFormat.fExternalType = halfFloatType; ioFormat.fExternalTexImageFormat = GR_GL_RED; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RED : 0; } // Format: R16F, Surface: kAlpha_F16, Data: kAlpha_F32xxx @@ -2227,6 +2235,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_LUMINANCE16F; info.fDefaultExternalFormat = GR_GL_LUMINANCE; info.fDefaultExternalType = halfFloatType; + info.fDefaultColorType = GrColorType::kGray_F16; info.fBytesPerPixel = 2; if (lum16FSupported) { @@ -2290,6 +2299,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RGB8; info.fDefaultExternalFormat = GR_GL_RGB; info.fDefaultExternalType = GR_GL_UNSIGNED_BYTE; + info.fDefaultColorType = GrColorType::kRGB_888; info.fBytesPerPixel = 4; // We assume the GPU stores this format 4 byte aligned info.fFlags = FormatInfo::kTexturable_Flag; if (GR_IS_GR_GL(standard)) { @@ -2369,6 +2379,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RG8; info.fDefaultExternalFormat = GR_GL_RG; info.fDefaultExternalType = GR_GL_UNSIGNED_BYTE; + info.fDefaultColorType = GrColorType::kRG_88; info.fBytesPerPixel = 2; bool rg8Support = false; if (GR_IS_GR_GL(standard)) { @@ -2412,6 +2423,9 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fExternalType = GR_GL_UNSIGNED_BYTE; ioFormat.fExternalTexImageFormat = GR_GL_RG; ioFormat.fExternalReadFormat = 0; + if (GR_IS_GR_GL(standard) && !formatWorkarounds.fDisallowDirectRG8ReadPixels) { + ioFormat.fExternalReadFormat = GR_GL_RG; + } } // Format: RG8, Surface: kRG_88, Data: kRGBA_8888 @@ -2433,6 +2447,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RGB10_A2; info.fDefaultExternalFormat = GR_GL_RGBA; info.fDefaultExternalType = GR_GL_UNSIGNED_INT_2_10_10_10_REV; + info.fDefaultColorType = GrColorType::kRGBA_1010102; info.fBytesPerPixel = 4; if (GR_IS_GR_GL(standard) || (GR_IS_GR_GL_ES(standard) && version >= GR_GL_VER(3, 0))) { @@ -2471,7 +2486,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kRGBA_1010102; ioFormat.fExternalType = GR_GL_UNSIGNED_INT_2_10_10_10_REV; ioFormat.fExternalTexImageFormat = GR_GL_RGBA; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RGBA : 0; } // Format: RGB10_A2, Surface: kRGBA_1010102, Data: kRGBA_8888 @@ -2493,6 +2508,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RGBA4; info.fDefaultExternalFormat = GR_GL_RGBA; info.fDefaultExternalType = GR_GL_UNSIGNED_SHORT_4_4_4_4; + info.fDefaultColorType = GrColorType::kABGR_4444; info.fBytesPerPixel = 2; info.fFlags = FormatInfo::kTexturable_Flag; if (GR_IS_GR_GL(standard)) { @@ -2533,7 +2549,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kABGR_4444; ioFormat.fExternalType = GR_GL_UNSIGNED_SHORT_4_4_4_4; ioFormat.fExternalTexImageFormat = GR_GL_RGBA; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RGBA : 0; } // Format: RGBA4, Surface: kABGR_4444, Data: kRGBA_8888 @@ -2553,6 +2569,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fFormatType = FormatType::kNormalizedFixedPoint; info.fInternalFormatForRenderbuffer = GR_GL_SRGB8_ALPHA8; info.fDefaultExternalType = GR_GL_UNSIGNED_BYTE; + info.fDefaultColorType = GrColorType::kRGBA_8888_SRGB; info.fBytesPerPixel = 4; // We may modify the default external format below. @@ -2696,6 +2713,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_R16; info.fDefaultExternalFormat = GR_GL_RED; info.fDefaultExternalType = GR_GL_UNSIGNED_SHORT; + info.fDefaultColorType = GrColorType::kR_16; info.fBytesPerPixel = 2; bool r16Supported = false; if (GR_IS_GR_GL(standard)) { @@ -2740,7 +2758,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kAlpha_16; ioFormat.fExternalType = GR_GL_UNSIGNED_SHORT; ioFormat.fExternalTexImageFormat = GR_GL_RED; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RED : 0; } // Format: R16, Surface: kAlpha_16, Data: kAlpha_8xxx @@ -2764,6 +2782,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RG16; info.fDefaultExternalFormat = GR_GL_RG; info.fDefaultExternalType = GR_GL_UNSIGNED_SHORT; + info.fDefaultColorType = GrColorType::kRG_1616; info.fBytesPerPixel = 4; bool rg16Supported = false; if (GR_IS_GR_GL(standard)) { @@ -2806,7 +2825,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kRG_1616; ioFormat.fExternalType = GR_GL_UNSIGNED_SHORT; ioFormat.fExternalTexImageFormat = GR_GL_RG; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RG : 0; } // Format: GR_GL_RG16, Surface: kRG_1616, Data: kRGBA_8888 @@ -2836,6 +2855,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RGBA16; info.fDefaultExternalFormat = GR_GL_RGBA; info.fDefaultExternalType = GR_GL_UNSIGNED_SHORT; + info.fDefaultColorType = GrColorType::kRGBA_16161616; info.fBytesPerPixel = 8; if (rgba16Support) { info.fFlags = FormatInfo::kTexturable_Flag | msaaRenderFlags; @@ -2871,7 +2891,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kRGBA_16161616; ioFormat.fExternalType = GR_GL_UNSIGNED_SHORT; ioFormat.fExternalTexImageFormat = GR_GL_RGBA; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RGBA : 0; } // Format: GR_GL_RGBA16, Surface: kRGBA_16161616, Data: kRGBA_8888 @@ -2922,6 +2942,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa info.fInternalFormatForRenderbuffer = GR_GL_RG16F; info.fDefaultExternalFormat = GR_GL_RG; info.fDefaultExternalType = halfFloatType; + info.fDefaultColorType = GrColorType::kRG_F16; info.fBytesPerPixel = 4; if (rg16FTextureSupport) { info.fFlags |= FormatInfo::kTexturable_Flag; @@ -2960,7 +2981,7 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa ioFormat.fColorType = GrColorType::kRG_F16; ioFormat.fExternalType = halfFloatType; ioFormat.fExternalTexImageFormat = GR_GL_RG; - ioFormat.fExternalReadFormat = 0; + ioFormat.fExternalReadFormat = GR_IS_GR_GL(standard) ? GR_GL_RG : 0; } // Format: GR_GL_RG16F, Surface: kRG_F16, Data: kRGBA_F32 @@ -3000,8 +3021,6 @@ void GrGLCaps::initFormatTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa for (int k = 0; k < ctInfo.fExternalIOFormatCount; ++k) { const auto& ioInfo = ctInfo.fExternalIOFormats[k]; SkASSERT(ioInfo.fColorType != GrColorType::kUnknown); - // Make sure we at least support either reading or tex image. - SkASSERT(ioInfo.fExternalReadFormat || ioInfo.fExternalTexImageFormat); } } } @@ -3353,6 +3372,12 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, fMipMapSupport = false; } + // https://b.corp.google.com/issues/143074513 + if (kAdreno615_GrGLRenderer == ctxInfo.renderer()) { + fMSFBOType = kNone_MSFBOType; + fMSAAResolvesAutomatically = false; + } + #ifndef SK_BUILD_FOR_IOS if (kPowerVR54x_GrGLRenderer == ctxInfo.renderer() || kPowerVRRogue_GrGLRenderer == ctxInfo.renderer() || @@ -3409,6 +3434,12 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, fPerformStencilClearsAsDraws = true; } + if (ctxInfo.vendor() == kQualcomm_GrGLVendor) { + // It appears that all the Adreno GPUs have less than optimal performance when + // drawing w/ large index buffers. + fAvoidLargeIndexBufferDraws = true; + } + // This was reproduced on the following configurations: // - A Galaxy J5 (Adreno 306) running Android 6 with driver 140.0 // - A Nexus 7 2013 (Adreno 320) running Android 5 with driver 104.0 @@ -3589,6 +3620,10 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, shaderCaps->fRemovePowWithConstantExponent = true; } + if (fDriverBugWorkarounds.disable_dual_source_blending_support) { + shaderCaps->fDualSourceBlendingSupport = false; + } + if (kAdreno3xx_GrGLRenderer == ctxInfo.renderer() || kAdreno4xx_other_GrGLRenderer == ctxInfo.renderer()) { shaderCaps->fMustWriteToFragColor = true; @@ -3677,8 +3712,7 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, // Temporarily disable the MSAA implementation of CCPR on various platforms while we work out // specific issues. if (kATI_GrGLVendor == ctxInfo.vendor() || // Radeon drops stencil draws that use sample mask. - kImagination_GrGLVendor == ctxInfo.vendor() || // PowerVR produces flaky results on Gold. - kQualcomm_GrGLVendor == ctxInfo.vendor() /* Pixel2 crashes in nanobench. */) { + kImagination_GrGLVendor == ctxInfo.vendor() /* PowerVR produces flaky results on Gold. */) { fDriverBlacklistMSAACCPR = true; } @@ -3739,6 +3773,14 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, formatWorkarounds->fDisableLuminance16F = kIntelBroadwell_GrGLRenderer == ctxInfo.renderer() || ctxInfo.vendor() == kQualcomm_GrGLVendor; +#ifdef SK_BUILD_FOR_MAC + // On a MacBookPro 11.5 running MacOS 10.13 with a Radeon M370X the TransferPixelsFrom test + // fails when transferring out from a GL_RG8 texture using GL_RG/GL_UNSIGNED_BYTE. + formatWorkarounds->fDisallowDirectRG8ReadPixels = + ctxInfo.renderer() == kAMDRadeonR9M3xx_GrGLRenderer || + ctxInfo.renderer() == kAMDRadeonProVegaxx_GrGLRenderer; +#endif + #ifdef SK_BUILD_FOR_ANDROID // We don't usually use glTexStorage() on Android for performance reasons. (crbug.com/945506). // On a NVIDIA Shield TV running Android 7.0 creating a texture with glTexImage2D() with @@ -3762,6 +3804,13 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, if (kAdreno3xx_GrGLRenderer == ctxInfo.renderer()) { fTiledRenderingSupport = false; } + + if (kQualcomm_GrGLVendor == ctxInfo.vendor() || kATI_GrGLVendor == ctxInfo.vendor()) { + // The sample mask round rect op draws nothing on several Adreno and Radeon bots. Other ops + // that use sample mask while rendering to stencil seem to work fine. + // http://skbug.com/8921 + shaderCaps->fCanOnlyUseSampleMaskWithStencil = true; + } } void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) { @@ -3776,6 +3825,7 @@ void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) { SkASSERT(!fDetachStencilFromMSAABuffersBeforeReadPixels); SkASSERT(!fDontSetBaseOrMaxLevelForExternalTextures); SkASSERT(!fNeverDisableColorWrites); + SkASSERT(!fShaderCaps->fCanOnlyUseSampleMaskWithStencil); } if (options.fDoManualMipmapping) { fDoManualMipmapping = true; @@ -4153,6 +4203,11 @@ static GrPixelConfig validate_sized_format(GrGLFormat format, case GrColorType::kAlpha_8xxx: case GrColorType::kAlpha_F32xxx: case GrColorType::kGray_8xxx: + case GrColorType::kRGB_888: + case GrColorType::kR_8: + case GrColorType::kR_16: + case GrColorType::kR_F16: + case GrColorType::kGray_F16: break; } @@ -4246,6 +4301,13 @@ GrSwizzle GrGLCaps::getOutputSwizzle(const GrBackendFormat& format, GrColorType return GrSwizzle::RGBA(); } +GrProgramDesc GrGLCaps::makeDesc(const GrRenderTarget* rt, const GrProgramInfo& programInfo) const { + GrProgramDesc desc; + SkDEBUGCODE(bool result =) GrProgramDesc::Build(&desc, rt, programInfo, *this); + SkASSERT(result == desc.isValid()); + return desc; +} + #if GR_TEST_UTILS std::vector GrGLCaps::getTestingCombinations() const { std::vector combos = { diff --git a/third_party/skia/src/gpu/gl/GrGLCaps.h b/third_party/skia/src/gpu/gl/GrGLCaps.h index ef10d7681588..5c30c0a261ef 100644 --- a/third_party/skia/src/gpu/gl/GrGLCaps.h +++ b/third_party/skia/src/gpu/gl/GrGLCaps.h @@ -171,11 +171,13 @@ class GrGLCaps : public GrCaps { GrGLenum* externalType) const; /** - * Gets the external format, type, and bytes per pixel to use when uploading zeros via - * glTexSubImage...() to clear the texture at creation. + * Gets the external format, type, and bytes per pixel to use when uploading solid color data + * via glTexSubImage...() to clear the texture at creation. */ - void getTexSubImageZeroFormatTypeAndBpp(GrGLFormat format, GrGLenum* externalFormat, - GrGLenum* externalType, size_t* bpp) const; + void getTexSubImageDefaultFormatTypeAndColorType(GrGLFormat format, + GrGLenum* externalFormat, + GrGLenum* externalType, + GrColorType* colorType) const; void getReadPixelsFormat(GrGLFormat surfaceFormat, GrColorType surfaceColorType, GrColorType memoryColorType, GrGLenum* externalFormat, @@ -423,6 +425,8 @@ class GrGLCaps : public GrCaps { GrSwizzle getTextureSwizzle(const GrBackendFormat&, GrColorType) const override; GrSwizzle getOutputSwizzle(const GrBackendFormat&, GrColorType) const override; + GrProgramDesc makeDesc(const GrRenderTarget*, const GrProgramInfo&) const override; + #if GR_TEST_UTILS GrGLStandard standard() const { return fStandard; } @@ -449,6 +453,7 @@ class GrGLCaps : public GrCaps { bool fDisableRGB8ForMali400 = false; bool fDisableLuminance16F = false; bool fDontDisableTexStorageOnAndroid = false; + bool fDisallowDirectRG8ReadPixels = false; }; void applyDriverCorrectnessWorkarounds(const GrGLContextInfo&, const GrContextOptions&, @@ -651,11 +656,13 @@ class GrGLCaps : public GrCaps { GrGLenum fInternalFormatForRenderbuffer = 0; // Default values to use along with fInternalFormatForTexImageOrStorage for function - // glTexImage2D when not input providing data (passing nullptr). Not defined for compressed - // formats. Also used to upload zeros to initially clear a texture. + // glTexImage2D when not input providing data (passing nullptr) or when clearing it by + // uploading a block of solid color data. Not defined for compressed formats. GrGLenum fDefaultExternalFormat = 0; GrGLenum fDefaultExternalType = 0; - + // When the above two values are used to initialize a texture by uploading cleared data to + // it the data should be of this color type. + GrColorType fDefaultColorType = GrColorType::kUnknown; // This value is only valid for regular formats. Compressed formats will be 0. GrGLenum fBytesPerPixel = 0; diff --git a/third_party/skia/src/gpu/gl/GrGLGpu.cpp b/third_party/skia/src/gpu/gl/GrGLGpu.cpp index 937e168db5c9..d3fa6e1a2d6d 100644 --- a/third_party/skia/src/gpu/gl/GrGLGpu.cpp +++ b/third_party/skia/src/gpu/gl/GrGLGpu.cpp @@ -1020,7 +1020,7 @@ bool GrGLGpu::uploadTexData(GrGLFormat textureFormat, GrColorType textureColorTy bool GrGLGpu::uploadCompressedTexData(GrGLFormat format, SkImage::CompressionType compressionType, - const SkISize& size, + const SkISize& dimensions, GrGLenum target, const void* data) { SkASSERT(format != GrGLFormat::kUnknown); @@ -1038,13 +1038,14 @@ bool GrGLGpu::uploadCompressedTexData(GrGLFormat format, // Make sure that the width and height that we pass to OpenGL // is a multiple of the block size. - size_t dataSize = GrCompressedDataSize(compressionType, size.width(), size.height()); + size_t dataSize = + GrCompressedDataSize(compressionType, dimensions.width(), dimensions.height()); if (useTexStorage) { // We never resize or change formats of textures. - GL_ALLOC_CALL( - this->glInterface(), - TexStorage2D(target, kMipLevelCount, internalFormat, size.width(), size.height())); + GL_ALLOC_CALL(this->glInterface(), + TexStorage2D(target, kMipLevelCount, internalFormat, dimensions.width(), + dimensions.height())); GrGLenum error = CHECK_ALLOC_ERROR(this->glInterface()); if (error != GR_GL_NO_ERROR) { return false; @@ -1053,8 +1054,8 @@ bool GrGLGpu::uploadCompressedTexData(GrGLFormat format, 0, // level 0, // left 0, // top - size.width(), - size.height(), + dimensions.width(), + dimensions.height(), internalFormat, SkToInt(dataSize), data)); @@ -1062,8 +1063,8 @@ bool GrGLGpu::uploadCompressedTexData(GrGLFormat format, GL_ALLOC_CALL(this->glInterface(), CompressedTexImage2D(target, 0, // level internalFormat, - size.width(), - size.height(), + dimensions.width(), + dimensions.height(), 0, // border SkToInt(dataSize), data)); @@ -1275,9 +1276,9 @@ sk_sp GrGLGpu::onCreateTexture(const GrSurfaceDesc& desc, fResetTimestampForTextureParameters); if (levelClearMask) { GrGLenum externalFormat, externalType; - size_t bpp; - this->glCaps().getTexSubImageZeroFormatTypeAndBpp(texDesc.fFormat, &externalFormat, - &externalType, &bpp); + GrColorType colorType; + this->glCaps().getTexSubImageDefaultFormatTypeAndColorType(texDesc.fFormat, &externalFormat, + &externalType, &colorType); if (this->glCaps().clearTextureSupport()) { for (int i = 0; i < mipLevelCount; ++i) { if (levelClearMask & (1U << i)) { @@ -1310,6 +1311,7 @@ sk_sp GrGLGpu::onCreateTexture(const GrSurfaceDesc& desc, // Levels only get smaller as we proceed. Once we create a zeros use it for all // smaller levels that need clearing. if (!zeros) { + size_t bpp = GrColorTypeBytesPerPixel(colorType); size_t size = levelWidth * levelHeight * bpp; zeros.reset(new char[size]()); } @@ -1451,7 +1453,7 @@ int GrGLGpu::getCompatibleStencilIndex(GrGLFormat format) { } GrGLuint GrGLGpu::createCompressedTexture2D( - const SkISize& size, + const SkISize& dimensions, GrGLFormat format, SkImage::CompressionType compression, GrGLTextureParameters::SamplerOverriddenState* initialState, @@ -1469,14 +1471,14 @@ GrGLuint GrGLGpu::createCompressedTexture2D( *initialState = set_initial_texture_params(this->glInterface(), GR_GL_TEXTURE_2D); - if (!this->uploadCompressedTexData(format, compression, size, GR_GL_TEXTURE_2D, data)) { + if (!this->uploadCompressedTexData(format, compression, dimensions, GR_GL_TEXTURE_2D, data)) { GL_CALL(DeleteTextures(1, &id)); return 0; } return id; } -GrGLuint GrGLGpu::createTexture2D(const SkISize& size, +GrGLuint GrGLGpu::createTexture2D(const SkISize& dimensions, GrGLFormat format, GrRenderable renderable, GrGLTextureParameters::SamplerOverriddenState* initialState, @@ -1512,7 +1514,7 @@ GrGLuint GrGLGpu::createTexture2D(const SkISize& size, if (this->glCaps().formatSupportsTexStorage(format)) { GL_ALLOC_CALL(this->glInterface(), TexStorage2D(GR_GL_TEXTURE_2D, SkTMax(mipLevelCount, 1), internalFormat, - size.width(), size.height())); + dimensions.width(), dimensions.height())); success = (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(this->glInterface())); } else { GrGLenum externalFormat, externalType; @@ -1521,8 +1523,8 @@ GrGLuint GrGLGpu::createTexture2D(const SkISize& size, if (externalFormat && externalType) { for (int level = 0; level < mipLevelCount && error == GR_GL_NO_ERROR; level++) { const int twoToTheMipLevel = 1 << level; - const int currentWidth = SkTMax(1, size.width() / twoToTheMipLevel); - const int currentHeight = SkTMax(1, size.height() / twoToTheMipLevel); + const int currentWidth = SkTMax(1, dimensions.width() / twoToTheMipLevel); + const int currentHeight = SkTMax(1, dimensions.height() / twoToTheMipLevel); GL_ALLOC_CALL( this->glInterface(), TexImage2D(GR_GL_TEXTURE_2D, level, internalFormat, currentWidth, @@ -1658,12 +1660,9 @@ void GrGLGpu::disableWindowRectangles() { #endif } -bool GrGLGpu::flushGLState(GrRenderTarget* renderTarget, - const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType) { +bool GrGLGpu::flushGLState(GrRenderTarget* renderTarget, const GrProgramInfo& programInfo) { - sk_sp program(fProgramCache->refProgram(this, renderTarget, programInfo, - primitiveType)); + sk_sp program(fProgramCache->refProgram(this, renderTarget, programInfo)); if (!program) { GrCapsDebugf(this->caps(), "Failed to create program!\n"); return false; @@ -1680,7 +1679,6 @@ bool GrGLGpu::flushGLState(GrRenderTarget* renderTarget, GrGLRenderTarget* glRT = static_cast(renderTarget); GrStencilSettings stencil; if (programInfo.pipeline().isStencilEnabled()) { - // TODO: attach stencil and create settings during render target flush. SkASSERT(glRT->renderTargetPriv().getStencilAttachment()); stencil.reset(*programInfo.pipeline().getUserStencil(), programInfo.pipeline().hasStencilClip(), @@ -2104,7 +2102,7 @@ GrOpsRenderPass* GrGLGpu::getOpsRenderPass( GrRenderTarget* rt, GrSurfaceOrigin origin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo, - const SkTArray& sampledProxies) { + const SkTArray& sampledProxies) { if (!fCachedOpsRenderPass) { fCachedOpsRenderPass.reset(new GrGLOpsRenderPass(this)); } @@ -2199,22 +2197,7 @@ void GrGLGpu::draw(GrRenderTarget* renderTarget, SkASSERT(meshCount); // guaranteed by GrOpsRenderPass::draw - GrPrimitiveType primitiveType = meshes[0].primitiveType(); - -#ifdef SK_DEBUG - // kPoints should never be intermingled in with the other primitive types - for (int i = 1; i < meshCount; ++i) { - if (primitiveType == GrPrimitiveType::kPoints) { - SkASSERT(meshes[i].primitiveType() == GrPrimitiveType::kPoints); - } else { - SkASSERT(meshes[i].primitiveType() != GrPrimitiveType::kPoints); - } - } -#endif - - // Passing 'primitiveType' here is a bit misleading. In GL's case it works out, since - // GL only cares if it is kPoints or not. - if (!this->flushGLState(renderTarget, programInfo, primitiveType)) { + if (!this->flushGLState(renderTarget, programInfo)) { return; } @@ -2222,6 +2205,8 @@ void GrGLGpu::draw(GrRenderTarget* renderTarget, bool hasDynamicPrimProcTextures = programInfo.hasDynamicPrimProcTextures(); for (int m = 0; m < meshCount; ++m) { + SkASSERT(meshes[m].primitiveType() == programInfo.primitiveType()); + if (auto barrierType = programInfo.pipeline().xferBarrierType(renderTarget->asTexture(), *this->caps())) { this->xferBarrier(renderTarget, barrierType); @@ -2459,12 +2444,14 @@ void GrGLGpu::flushStencil(const GrStencilSettings& stencilSettings, GrSurfaceOr fHWStencilTestEnabled = kYes_TriState; } - if (stencilSettings.isTwoSided()) { - set_gl_stencil(this->glInterface(), stencilSettings.front(origin), GR_GL_FRONT); - set_gl_stencil(this->glInterface(), stencilSettings.back(origin), GR_GL_BACK); + if (!stencilSettings.isTwoSided()) { + set_gl_stencil(this->glInterface(), stencilSettings.singleSidedFace(), + GR_GL_FRONT_AND_BACK); } else { - set_gl_stencil( - this->glInterface(), stencilSettings.frontAndBack(), GR_GL_FRONT_AND_BACK); + set_gl_stencil(this->glInterface(), stencilSettings.postOriginCWFace(origin), + GR_GL_FRONT); + set_gl_stencil(this->glInterface(), stencilSettings.postOriginCCWFace(origin), + GR_GL_BACK); } fHWStencilSettings = stencilSettings; fHWStencilOrigin = origin; @@ -3595,22 +3582,14 @@ static GrPixelConfig gl_format_to_pixel_config(GrGLFormat format) { SkUNREACHABLE; } -GrBackendTexture GrGLGpu::onCreateBackendTexture(int w, int h, +GrBackendTexture GrGLGpu::onCreateBackendTexture(SkISize dimensions, const GrBackendFormat& format, - GrMipMapped mipMapped, GrRenderable renderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, + const BackendTextureData* data, + int numMipLevels, GrProtected isProtected) { this->handleDirtyContext(); - SkDEBUGCODE(const GrCaps* caps = this->caps();) - - // GrGpu::createBackendTexture should've ensured these conditions - SkASSERT(w >= 1 && w <= caps->maxTextureSize() && h >= 1 && h <= caps->maxTextureSize()); - SkASSERT(GrGpu::MipMapsAreCorrect(w, h, mipMapped, srcData, numMipLevels)); - SkASSERT(mipMapped == GrMipMapped::kNo || caps->mipMapSupport()); - GrGLFormat glFormat = format.asGLFormat(); if (glFormat == GrGLFormat::kUnknown) { return GrBackendTexture(); // invalid @@ -3619,87 +3598,80 @@ GrBackendTexture GrGLGpu::onCreateBackendTexture(int w, int h, // Compressed formats go through onCreateCompressedBackendTexture SkASSERT(!GrGLFormatIsCompressed(glFormat)); - GrPixelConfig config = gl_format_to_pixel_config(glFormat); + GrGLTextureInfo info; + GrGLTextureParameters::SamplerOverriddenState initialState; - if (config == kUnknown_GrPixelConfig) { + GrSurfaceDesc desc; + desc.fWidth = dimensions.width(); + desc.fHeight = dimensions.height(); + desc.fConfig = gl_format_to_pixel_config(glFormat); + if (desc.fConfig == kUnknown_GrPixelConfig) { return GrBackendTexture(); // invalid } - auto textureColorType = GrPixelConfigToColorType(config); - - // TODO: move the texturability check up to GrGpu::createBackendTexture and just assert here - if (!this->caps()->isFormatTexturableAndUploadable(textureColorType, format)) { - return GrBackendTexture(); // invalid + info.fTarget = GR_GL_TEXTURE_2D; + info.fFormat = GrGLFormatToEnum(glFormat); + info.fID = this->createTexture2D(dimensions, glFormat, renderable, &initialState, numMipLevels); + if (!info.fID) { + return {}; } - GrGLTextureInfo info; - GrGLTextureParameters::SamplerOverriddenState initialState; - - SkTDArray texels; - SkAutoMalloc pixelStorage; - - int mipLevelCount = 1; - if (srcData) { - mipLevelCount = numMipLevels; - texels.append(mipLevelCount); - for (int i = 0; i < mipLevelCount; ++i) { - texels[i] = { srcData[i].addr(), srcData[i].rowBytes() }; + if (data && data->type() == BackendTextureData::Type::kPixmaps) { + SkTDArray texels; + GrColorType colorType = SkColorTypeToGrColorType(data->pixmap(0).colorType()); + // Incorporate the color type into the config to make it "specific" if applicable. + desc.fConfig = this->caps()->getConfigFromBackendFormat(format, colorType); + SkASSERT(desc.fConfig != kUnknown_GrPixelConfig); + texels.append(numMipLevels); + for (int i = 0; i < numMipLevels; ++i) { + texels[i] = {data->pixmap(i).addr(), data->pixmap(i).rowBytes()}; + } + if (!this->uploadTexData(glFormat, colorType, desc.fWidth, desc.fHeight, GR_GL_TEXTURE_2D, + 0, 0, desc.fWidth, desc.fHeight, colorType, texels.begin(), + texels.count())) { + GL_CALL(DeleteTextures(1, &info.fID)); + return {}; } - } else if (color) { - if (GrMipMapped::kYes == mipMapped) { - mipLevelCount = SkMipMap::ComputeLevelCount(w, h) + 1; + } else if (data && data->type() == BackendTextureData::Type::kColor) { + // TODO: Unify this with the clear texture code in onCreateTexture(). + GrColorType colorType; + GrGLenum externalFormat, externalType; + this->glCaps().getTexSubImageDefaultFormatTypeAndColorType(glFormat, &externalFormat, + &externalType, &colorType); + if (colorType == GrColorType::kUnknown) { + GL_CALL(DeleteTextures(1, &info.fID)); + return {}; } - texels.append(mipLevelCount); - SkTArray individualMipOffsets(mipLevelCount); - - size_t bytesPerPixel = this->glCaps().bytesPerPixel(glFormat); - - size_t totalSize = GrComputeTightCombinedBufferSize( - bytesPerPixel, w, h, &individualMipOffsets, mipLevelCount); - - char* tmpPixels = (char*)pixelStorage.reset(totalSize); - - GrFillInData(textureColorType, w, h, individualMipOffsets, tmpPixels, *color); - for (int i = 0; i < mipLevelCount; ++i) { - size_t offset = individualMipOffsets[i]; - - int twoToTheMipLevel = 1 << i; - int currentWidth = SkTMax(1, w / twoToTheMipLevel); - - texels[i] = {&(tmpPixels[offset]), currentWidth * bytesPerPixel}; + // Make one tight image at the base size and reuse it for smaller levels. + GrImageInfo ii(colorType, kUnpremul_SkAlphaType, nullptr, dimensions); + auto rb = ii.minRowBytes(); + std::unique_ptr pixelStorage(new char[rb * dimensions.height()]); + if (!GrClearImage(ii, pixelStorage.get(), rb, data->color())) { + GL_CALL(DeleteTextures(1, &info.fID)); + return {}; } - } - GrSurfaceDesc desc; - desc.fWidth = w; - desc.fHeight = h; - desc.fConfig = config; - - info.fTarget = GR_GL_TEXTURE_2D; - info.fFormat = GrGLFormatToEnum(glFormat); - info.fID = this->createTexture2D({desc.fWidth, desc.fHeight}, glFormat, renderable, - &initialState, SkTMax(1, texels.count())); - if (!info.fID) { - return GrBackendTexture(); // invalid - } - auto srcColorType = GrPixelConfigToColorType(desc.fConfig); - if (!texels.empty() && - !this->uploadTexData(glFormat, textureColorType, desc.fWidth, desc.fHeight, - GR_GL_TEXTURE_2D, 0, 0, desc.fWidth, desc.fHeight, srcColorType, - texels.begin(), texels.count())) { - GL_CALL(DeleteTextures(1, &info.fID)); - return GrBackendTexture(); + GL_CALL(PixelStorei(GR_GL_UNPACK_ALIGNMENT, 1)); + SkISize levelDimensions = dimensions; + for (int i = 0; i < numMipLevels; ++i) { + GL_CALL(TexSubImage2D(GR_GL_TEXTURE_2D, i, 0, 0, levelDimensions.width(), + levelDimensions.height(), externalFormat, externalType, + pixelStorage.get())); + levelDimensions = {SkTMax(1, levelDimensions.width() /2), + SkTMax(1, levelDimensions.height()/2)}; + } } - - // unbind the texture from the texture unit to avoid asserts - GL_CALL(BindTexture(info.fTarget, 0)); + // Unbind this texture from the scratch texture unit. + this->bindTextureToScratchUnit(GR_GL_TEXTURE_2D, 0); auto parameters = sk_make_sp(); parameters->set(&initialState, GrGLTextureParameters::NonsamplerState(), fResetTimestampForTextureParameters); - return GrBackendTexture(w, h, mipMapped, info, std::move(parameters)); + auto mipMapped = numMipLevels > 1 ? GrMipMapped::kYes : GrMipMapped::kNo; + return GrBackendTexture(dimensions.width(), dimensions.height(), mipMapped, info, + std::move(parameters)); } void GrGLGpu::deleteBackendTexture(const GrBackendTexture& tex) { @@ -3878,7 +3850,7 @@ GrGLAttribArrayState* GrGLGpu::HWVertexArrayState::bindInternalVertexArray(GrGLG return attribState; } -void GrGLGpu::onFinishFlush(GrSurfaceProxy*[], int, SkSurface::BackendSurfaceAccess access, +bool GrGLGpu::onFinishFlush(GrSurfaceProxy*[], int, SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, const GrPrepareForExternalIORequests&) { // If we inserted semaphores during the flush, we need to call GLFlush. bool insertedSemaphore = info.fNumSemaphores > 0 && this->caps()->semaphoreSupport(); @@ -3912,6 +3884,7 @@ void GrGLGpu::onFinishFlush(GrSurfaceProxy*[], int, SkSurface::BackendSurfaceAcc // See if any previously inserted finish procs are good to go. this->checkFinishProcs(); } + return true; } void GrGLGpu::submit(GrOpsRenderPass* renderPass) { @@ -3943,28 +3916,29 @@ void GrGLGpu::deleteFence(GrFence fence) const { this->deleteSync((GrGLsync)fence); } -sk_sp SK_WARN_UNUSED_RESULT GrGLGpu::makeSemaphore(bool isOwned) { +std::unique_ptr SK_WARN_UNUSED_RESULT GrGLGpu::makeSemaphore(bool isOwned) { SkASSERT(this->caps()->semaphoreSupport()); return GrGLSemaphore::Make(this, isOwned); } -sk_sp GrGLGpu::wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) { +std::unique_ptr GrGLGpu::wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, + GrWrapOwnership ownership) { SkASSERT(this->caps()->semaphoreSupport()); return GrGLSemaphore::MakeWrapped(this, semaphore.glSync(), ownership); } -void GrGLGpu::insertSemaphore(sk_sp semaphore) { - GrGLSemaphore* glSem = static_cast(semaphore.get()); +void GrGLGpu::insertSemaphore(GrSemaphore* semaphore) { + GrGLSemaphore* glSem = static_cast(semaphore); GrGLsync sync; GL_CALL_RET(sync, FenceSync(GR_GL_SYNC_GPU_COMMANDS_COMPLETE, 0)); glSem->setSync(sync); } -void GrGLGpu::waitSemaphore(sk_sp semaphore) { - GrGLSemaphore* glSem = static_cast(semaphore.get()); +void GrGLGpu::waitSemaphore(GrSemaphore* semaphore) { + GrGLSemaphore* glSem = static_cast(semaphore); GL_CALL(WaitSync(glSem->sync(), 0, GR_GL_TIMEOUT_IGNORED)); } @@ -3987,10 +3961,11 @@ void GrGLGpu::insertEventMarker(const char* msg) { GL_CALL(InsertEventMarker(strlen(msg), msg)); } -sk_sp GrGLGpu::prepareTextureForCrossContextUsage(GrTexture* texture) { +std::unique_ptr GrGLGpu::prepareTextureForCrossContextUsage(GrTexture* texture) { // Set up a semaphore to be signaled once the data is ready, and flush GL - sk_sp semaphore = this->makeSemaphore(true); - this->insertSemaphore(semaphore); + std::unique_ptr semaphore = this->makeSemaphore(true); + SkASSERT(semaphore); + this->insertSemaphore(semaphore.get()); // We must call flush here to make sure the GrGLSync object gets created and sent to the gpu. GL_CALL(Flush()); diff --git a/third_party/skia/src/gpu/gl/GrGLGpu.h b/third_party/skia/src/gpu/gl/GrGLGpu.h index e49f45915e48..da5e57535d4a 100644 --- a/third_party/skia/src/gpu/gl/GrGLGpu.h +++ b/third_party/skia/src/gpu/gl/GrGLGpu.h @@ -15,6 +15,7 @@ #include "src/gpu/GrGpu.h" #include "src/gpu/GrMesh.h" #include "src/gpu/GrNativeRect.h" +#include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrWindowRectsState.h" #include "src/gpu/GrXferProcessor.h" #include "src/gpu/gl/GrGLContext.h" @@ -122,7 +123,7 @@ class GrGLGpu final : public GrGpu, private GrMesh::SendToGpuImpl { GrRenderTarget*, GrSurfaceOrigin, const SkIRect&, const GrOpsRenderPass::LoadAndStoreInfo&, const GrOpsRenderPass::StencilLoadAndStoreInfo&, - const SkTArray& sampledProxies) override; + const SkTArray& sampledProxies) override; void invalidateBoundRenderTarget() { fHWBoundRenderTargetUniqueID.makeInvalid(); @@ -155,16 +156,17 @@ class GrGLGpu final : public GrGpu, private GrMesh::SendToGpuImpl { bool waitFence(GrFence, uint64_t timeout) override; void deleteFence(GrFence) const override; - sk_sp SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override; - sk_sp wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) override; - void insertSemaphore(sk_sp semaphore) override; - void waitSemaphore(sk_sp semaphore) override; + std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override; + std::unique_ptr wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, + GrWrapOwnership ownership) override; + void insertSemaphore(GrSemaphore* semaphore) override; + void waitSemaphore(GrSemaphore* semaphore) override; void checkFinishProcs() override; - sk_sp prepareTextureForCrossContextUsage(GrTexture*) override; + std::unique_ptr prepareTextureForCrossContextUsage(GrTexture*) override; void deleteSync(GrGLsync) const; @@ -177,10 +179,12 @@ class GrGLGpu final : public GrGpu, private GrMesh::SendToGpuImpl { GrGLGpu(std::unique_ptr, GrContext*); // GrGpu overrides - GrBackendTexture onCreateBackendTexture(int w, int h, const GrBackendFormat&, - GrMipMapped, GrRenderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrProtected) override; + GrBackendTexture onCreateBackendTexture(SkISize, + const GrBackendFormat&, + GrRenderable, + const BackendTextureData*, + int numMipLevels, + GrProtected) override; void onResetContext(uint32_t resetBits) override; @@ -225,13 +229,13 @@ class GrGLGpu final : public GrGpu, private GrMesh::SendToGpuImpl { // 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(const SkISize& size, + GrGLuint createTexture2D(const SkISize& dimensions, GrGLFormat format, GrRenderable, GrGLTextureParameters::SamplerOverriddenState* initialState, int mipLevelCount); - GrGLuint createCompressedTexture2D(const SkISize& size, GrGLFormat format, + GrGLuint createCompressedTexture2D(const SkISize& dimensions, GrGLFormat format, SkImage::CompressionType compression, GrGLTextureParameters::SamplerOverriddenState* initialState, const void* data); @@ -271,10 +275,7 @@ class GrGLGpu final : public GrGpu, private GrMesh::SendToGpuImpl { void setTextureUnit(int unitIdx); // Flushes state from GrPipeline to GL. Returns false if the state couldn't be set. - // willDrawPoints must be true if point primitives will be rendered after setting the GL state. - // If DynamicStateArrays is not null then dynamicStateArraysLength is the number of dynamic - // state entries in each array. - bool flushGLState(GrRenderTarget*, const GrProgramInfo&, GrPrimitiveType); + bool flushGLState(GrRenderTarget*, const GrProgramInfo&); void flushProgram(sk_sp); @@ -291,7 +292,7 @@ class GrGLGpu final : public GrGpu, private GrMesh::SendToGpuImpl { void flushBlendAndColorWrite(const GrXferProcessor::BlendInfo& blendInfo, const GrSwizzle&); - void onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, + bool onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, const GrFlushInfo&, const GrPrepareForExternalIORequests&) override; bool waitSync(GrGLsync, uint64_t timeout, bool flush); @@ -312,7 +313,7 @@ class GrGLGpu final : public GrGpu, private GrMesh::SendToGpuImpl { void abandon(); void reset(); - GrGLProgram* refProgram(GrGLGpu*, GrRenderTarget*, const GrProgramInfo&, GrPrimitiveType); + GrGLProgram* refProgram(GrGLGpu*, GrRenderTarget*, const GrProgramInfo&); bool precompileShader(const SkData& key, const SkData& data); private: @@ -378,7 +379,7 @@ class GrGLGpu final : public GrGpu, private GrMesh::SendToGpuImpl { // to populate a new texture. Returns false if we failed to create and upload the texture. bool uploadCompressedTexData(GrGLFormat, SkImage::CompressionType, - const SkISize& size, + const SkISize& dimensions, GrGLenum target, const void* data); diff --git a/third_party/skia/src/gpu/gl/GrGLGpuProgramCache.cpp b/third_party/skia/src/gpu/gl/GrGLGpuProgramCache.cpp index 0109741edbfe..c5f9f2a7afde 100644 --- a/third_party/skia/src/gpu/gl/GrGLGpuProgramCache.cpp +++ b/third_party/skia/src/gpu/gl/GrGLGpuProgramCache.cpp @@ -47,12 +47,11 @@ void GrGLGpu::ProgramCache::reset() { GrGLProgram* GrGLGpu::ProgramCache::refProgram(GrGLGpu* gpu, GrRenderTarget* renderTarget, - const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType) { - // TODO: can this be unified between GL, Vk and Mtl? - // Get GrGLProgramDesc - GrProgramDesc desc; - if (!GrProgramDesc::Build(&desc, renderTarget, programInfo, primitiveType, gpu)) { + const GrProgramInfo& programInfo) { + const GrCaps& caps = *gpu->caps(); + + GrProgramDesc desc = caps.makeDesc(renderTarget, programInfo); + if (!desc.isValid()) { GrCapsDebugf(gpu->caps(), "Failed to gl program descriptor!\n"); return nullptr; } diff --git a/third_party/skia/src/gpu/gl/GrGLInterface.cpp b/third_party/skia/src/gpu/gl/GrGLInterface.cpp deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/gpu/gl/GrGLInterfaceAutogen.cpp b/third_party/skia/src/gpu/gl/GrGLInterfaceAutogen.cpp index dd1207e72ef2..b36684318b81 100644 --- a/third_party/skia/src/gpu/gl/GrGLInterfaceAutogen.cpp +++ b/third_party/skia/src/gpu/gl/GrGLInterfaceAutogen.cpp @@ -395,7 +395,9 @@ bool GrGLInterface::validate() const { (GR_IS_GR_GL_ES(fStandard) && ( (glVer >= GR_GL_VER(3,0)) || fExtensions.has("GL_CHROMIUM_framebuffer_multisample") || - fExtensions.has("GL_ANGLE_framebuffer_blit")))) { + fExtensions.has("GL_ANGLE_framebuffer_blit"))) || + (GR_IS_GR_WEBGL(fStandard) && ( + (glVer >= GR_GL_VER(2,0))))) { if (!fFunctions.fBlitFramebuffer) { RETURN_FALSE_INTERFACE; } diff --git a/third_party/skia/src/gpu/gl/GrGLPath.cpp b/third_party/skia/src/gpu/gl/GrGLPath.cpp index e001bf93a1fc..798d8fd2e8b8 100644 --- a/third_party/skia/src/gpu/gl/GrGLPath.cpp +++ b/third_party/skia/src/gpu/gl/GrGLPath.cpp @@ -193,15 +193,15 @@ inline bool init_path_object_for_general_path(GrGLGpu* gpu, GrGLuint pathID, /* * For now paths only natively support winding and even odd fill types */ -static GrPathRendering::FillType convert_skpath_filltype(SkPath::FillType fill) { +static GrPathRendering::FillType convert_skpath_filltype(SkPathFillType fill) { switch (fill) { default: SK_ABORT("Incomplete Switch\n"); - case SkPath::kWinding_FillType: - case SkPath::kInverseWinding_FillType: + case SkPathFillType::kWinding: + case SkPathFillType::kInverseWinding: return GrPathRendering::kWinding_FillType; - case SkPath::kEvenOdd_FillType: - case SkPath::kInverseEvenOdd_FillType: + case SkPathFillType::kEvenOdd: + case SkPathFillType::kInverseEvenOdd: return GrPathRendering::kEvenOdd_FillType; } } @@ -224,13 +224,11 @@ void GrGLPath::InitPathObjectPathData(GrGLGpu* gpu, int verbCnt = skPath.countVerbs(); int pointCnt = skPath.countPoints(); int coordCnt = pointCnt * 2; - SkSTArray<16, GrGLubyte, true> pathCommands(verbCnt); - SkSTArray<16, GrGLfloat, true> pathCoords(coordCnt); + SkAutoSTArray<16, GrGLubyte> pathCommands(verbCnt); + SkAutoSTArray<16, GrGLfloat> pathCoords(coordCnt); static_assert(sizeof(SkPoint) == sizeof(GrGLfloat) * 2, "sk_point_not_two_floats"); - pathCommands.resize_back(verbCnt); - pathCoords.resize_back(coordCnt); skPath.getPoints(reinterpret_cast(&pathCoords[0]), pointCnt); skPath.getVerbs(&pathCommands[0], verbCnt); @@ -317,7 +315,7 @@ GrGLPath::GrGLPath(GrGLGpu* gpu, const SkPath& origSkPath, const GrStyle& style) fShouldFill = stroke.isFillStyle() || stroke.getStyle() == SkStrokeRec::kStrokeAndFill_Style; - fFillType = convert_skpath_filltype(skPath->getFillType()); + fFillType = convert_skpath_filltype(skPath->getNewFillType()); fBounds = skPath->getBounds(); SkScalar radius = stroke.getInflationRadius(); fBounds.outset(radius, radius); diff --git a/third_party/skia/src/gpu/gl/GrGLPathRendering.cpp b/third_party/skia/src/gpu/gl/GrGLPathRendering.cpp index abcae33067d1..3d1654316e82 100644 --- a/third_party/skia/src/gpu/gl/GrGLPathRendering.cpp +++ b/third_party/skia/src/gpu/gl/GrGLPathRendering.cpp @@ -89,8 +89,8 @@ void GrGLPathRendering::onStencilPath(const StencilPathArgs& args, const GrPath* gpu->flushColorWrite(false); GrGLRenderTarget* rt = static_cast(args.fProxy->peekRenderTarget()); - SkISize size = SkISize::Make(rt->width(), rt->height()); - this->setProjectionMatrix(*args.fViewMatrix, size, args.fProxy->origin()); + SkISize dimensions = rt->dimensions(); + this->setProjectionMatrix(*args.fViewMatrix, dimensions, args.fProxy->origin()); gpu->flushScissor(*args.fScissor, rt->width(), rt->height(), args.fProxy->origin()); gpu->flushHWAAState(rt, args.fUseHWAA); gpu->flushRenderTarget(rt); @@ -99,9 +99,9 @@ void GrGLPathRendering::onStencilPath(const StencilPathArgs& args, const GrPath* this->flushPathStencilSettings(*args.fStencil); - GrGLenum fillMode = - gr_stencil_op_to_gl_path_rendering_fill_mode(fHWPathStencilSettings.frontAndBack().fPassOp); - GrGLint writeMask = fHWPathStencilSettings.frontAndBack().fWriteMask; + GrGLenum fillMode = gr_stencil_op_to_gl_path_rendering_fill_mode( + fHWPathStencilSettings.singleSidedFace().fPassOp); + GrGLint writeMask = fHWPathStencilSettings.singleSidedFace().fWriteMask; if (glPath->shouldFill()) { GL_CALL(StencilFillPath(glPath->pathID(), fillMode, writeMask)); @@ -115,7 +115,7 @@ void GrGLPathRendering::onDrawPath(GrRenderTarget* renderTarget, const GrProgramInfo& programInfo, const GrStencilSettings& stencilPassSettings, const GrPath* path) { - if (!this->gpu()->flushGLState(renderTarget, programInfo, GrPrimitiveType::kPath)) { + if (!this->gpu()->flushGLState(renderTarget, programInfo)) { return; } @@ -123,9 +123,9 @@ void GrGLPathRendering::onDrawPath(GrRenderTarget* renderTarget, this->flushPathStencilSettings(stencilPassSettings); - GrGLenum fillMode = - gr_stencil_op_to_gl_path_rendering_fill_mode(fHWPathStencilSettings.frontAndBack().fPassOp); - GrGLint writeMask = fHWPathStencilSettings.frontAndBack().fWriteMask; + GrGLenum fillMode = gr_stencil_op_to_gl_path_rendering_fill_mode( + fHWPathStencilSettings.singleSidedFace().fPassOp); + GrGLint writeMask = fHWPathStencilSettings.singleSidedFace().fWriteMask; if (glPath->shouldStroke()) { if (glPath->shouldFill()) { @@ -247,14 +247,14 @@ void GrGLPathRendering::flushPathStencilSettings(const GrStencilSettings& stenci SkASSERT(stencilSettings.isValid()); // Just the func, ref, and mask is set here. The op and write mask are params to the call // that draws the path to the SB (glStencilFillPath) - uint16_t ref = stencilSettings.frontAndBack().fRef; - GrStencilTest test = stencilSettings.frontAndBack().fTest; - uint16_t testMask = stencilSettings.frontAndBack().fTestMask; + uint16_t ref = stencilSettings.singleSidedFace().fRef; + GrStencilTest test = stencilSettings.singleSidedFace().fTest; + uint16_t testMask = stencilSettings.singleSidedFace().fTestMask; if (!fHWPathStencilSettings.isValid() || - ref != fHWPathStencilSettings.frontAndBack().fRef || - test != fHWPathStencilSettings.frontAndBack().fTest || - testMask != fHWPathStencilSettings.frontAndBack().fTestMask) { + ref != fHWPathStencilSettings.singleSidedFace().fRef || + test != fHWPathStencilSettings.singleSidedFace().fTest || + testMask != fHWPathStencilSettings.singleSidedFace().fTestMask) { GL_CALL(PathStencilFunc(GrToGLStencilFunc(test), ref, testMask)); } fHWPathStencilSettings = stencilSettings; diff --git a/third_party/skia/src/gpu/gl/GrGLProgram.cpp b/third_party/skia/src/gpu/gl/GrGLProgram.cpp index 74cf5392fa54..53760e640758 100644 --- a/third_party/skia/src/gpu/gl/GrGLProgram.cpp +++ b/third_party/skia/src/gpu/gl/GrGLProgram.cpp @@ -84,8 +84,8 @@ void GrGLProgram::updateUniformsAndTextureBindings(const GrRenderTarget* renderT // 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. - fPrimitiveProcessor->setData(fProgramDataManager, programInfo.primProc(), - GrFragmentProcessor::CoordTransformIter(programInfo.pipeline())); + GrFragmentProcessor::PipelineCoordTransformRange range(programInfo.pipeline()); + fPrimitiveProcessor->setData(fProgramDataManager, programInfo.primProc(), range); if (programInfo.hasFixedPrimProcTextures()) { this->updatePrimitiveProcessorTextureBindings(programInfo.primProc(), programInfo.fixedPrimProcTextures()); @@ -101,15 +101,16 @@ void GrGLProgram::updateUniformsAndTextureBindings(const GrRenderTarget* renderT fXferProcessor->setData(fProgramDataManager, xp, dstTexture, offset); if (dstTexture) { fGpu->bindTexture(nextTexSamplerIdx++, GrSamplerState::ClampNearest(), - programInfo.pipeline().dstTextureProxy()->textureSwizzle(), + programInfo.pipeline().dstProxyView().swizzle(), static_cast(dstTexture)); } SkASSERT(nextTexSamplerIdx == fNumTextureSamplers); } void GrGLProgram::updatePrimitiveProcessorTextureBindings(const GrPrimitiveProcessor& primProc, - const GrTextureProxy* const proxies[]) { + const GrSurfaceProxy* const proxies[]) { for (int i = 0; i < primProc.numTextureSamplers(); ++i) { + SkASSERT(proxies[i]->asTextureProxy()); auto* tex = static_cast(proxies[i]->peekTexture()); fGpu->bindTexture(i, primProc.textureSampler(i).samplerState(), primProc.textureSampler(i).swizzle(), tex); @@ -117,21 +118,17 @@ void GrGLProgram::updatePrimitiveProcessorTextureBindings(const GrPrimitiveProce } void GrGLProgram::setFragmentData(const GrPipeline& pipeline, int* nextTexSamplerIdx) { - GrFragmentProcessor::Iter iter(pipeline); + GrFragmentProcessor::CIter fpIter(pipeline); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); - const GrFragmentProcessor* fp = iter.next(); - GrGLSLFragmentProcessor* glslFP = glslIter.next(); - while (fp && glslFP) { - glslFP->setData(fProgramDataManager, *fp); - for (int i = 0; i < fp->numTextureSamplers(); ++i) { - const GrFragmentProcessor::TextureSampler& sampler = fp->textureSampler(i); + for (; fpIter && glslIter; ++fpIter, ++glslIter) { + glslIter->setData(fProgramDataManager, *fpIter); + for (int i = 0; i < fpIter->numTextureSamplers(); ++i) { + const GrFragmentProcessor::TextureSampler& sampler = fpIter->textureSampler(i); fGpu->bindTexture((*nextTexSamplerIdx)++, sampler.samplerState(), sampler.swizzle(), static_cast(sampler.peekTexture())); } - fp = iter.next(); - glslFP = glslIter.next(); } - SkASSERT(!fp && !glslFP); + SkASSERT(!fpIter && !glslIter); } void GrGLProgram::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrigin origin, @@ -147,12 +144,11 @@ void GrGLProgram::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrigin } // set RT adjustment - SkISize size; - size.set(rt->width(), rt->height()); + SkISize dimensions = rt->dimensions(); if (!primProc.isPathRendering()) { if (fRenderTargetState.fRenderTargetOrigin != origin || - fRenderTargetState.fRenderTargetSize != size) { - fRenderTargetState.fRenderTargetSize = size; + fRenderTargetState.fRenderTargetSize != dimensions) { + fRenderTargetState.fRenderTargetSize = dimensions; fRenderTargetState.fRenderTargetOrigin = origin; float rtAdjustmentVec[4]; @@ -162,7 +158,6 @@ void GrGLProgram::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrigin } else { SkASSERT(fGpu->glCaps().shaderCaps()->pathRenderingSupport()); const GrPathProcessor& pathProc = primProc.cast(); - fGpu->glPathRendering()->setProjectionMatrix(pathProc.viewMatrix(), - size, origin); + fGpu->glPathRendering()->setProjectionMatrix(pathProc.viewMatrix(), dimensions, origin); } } diff --git a/third_party/skia/src/gpu/gl/GrGLProgram.h b/third_party/skia/src/gpu/gl/GrGLProgram.h index cf2e2aab6eba..5554e7e72366 100644 --- a/third_party/skia/src/gpu/gl/GrGLProgram.h +++ b/third_party/skia/src/gpu/gl/GrGLProgram.h @@ -122,7 +122,7 @@ class GrGLProgram : public SkRefCnt { void updateUniformsAndTextureBindings(const GrRenderTarget*, const GrProgramInfo&); void updatePrimitiveProcessorTextureBindings(const GrPrimitiveProcessor&, - const GrTextureProxy* const[]); + const GrSurfaceProxy* const[]); int vertexStride() const { return fVertexStride; } int instanceStride() const { return fInstanceStride; } diff --git a/third_party/skia/src/gpu/gl/GrGLRenderTarget.cpp b/third_party/skia/src/gpu/gl/GrGLRenderTarget.cpp index 0442945f0734..48aad476c8e7 100644 --- a/third_party/skia/src/gpu/gl/GrGLRenderTarget.cpp +++ b/third_party/skia/src/gpu/gl/GrGLRenderTarget.cpp @@ -20,27 +20,27 @@ // Because this class is virtually derived from GrSurface we must explicitly call its constructor. // Constructor for wrapped render targets. GrGLRenderTarget::GrGLRenderTarget(GrGLGpu* gpu, - const SkISize& size, + const SkISize& dimensions, GrGLFormat format, GrPixelConfig config, int sampleCount, const IDs& ids, GrGLStencilAttachment* stencil) - : GrSurface(gpu, size, config, GrProtected::kNo) - , INHERITED(gpu, size, config, sampleCount, GrProtected::kNo, stencil) { + : GrSurface(gpu, dimensions, config, GrProtected::kNo) + , INHERITED(gpu, dimensions, config, sampleCount, GrProtected::kNo, stencil) { this->setFlags(gpu->glCaps(), ids); this->init(format, ids); this->registerWithCacheWrapped(GrWrapCacheable::kNo); } GrGLRenderTarget::GrGLRenderTarget(GrGLGpu* gpu, - const SkISize& size, + const SkISize& dimensions, GrGLFormat format, GrPixelConfig config, int sampleCount, const IDs& ids) - : GrSurface(gpu, size, config, GrProtected::kNo) - , INHERITED(gpu, size, config, sampleCount, GrProtected::kNo) { + : GrSurface(gpu, dimensions, config, GrProtected::kNo) + , INHERITED(gpu, dimensions, config, sampleCount, GrProtected::kNo) { this->setFlags(gpu->glCaps(), ids); this->init(format, ids); } @@ -61,7 +61,7 @@ void GrGLRenderTarget::init(GrGLFormat format, const IDs& idDesc) { } sk_sp GrGLRenderTarget::MakeWrapped(GrGLGpu* gpu, - const SkISize& size, + const SkISize& dimensions, GrGLFormat format, GrPixelConfig config, int sampleCount, @@ -76,11 +76,11 @@ sk_sp GrGLRenderTarget::MakeWrapped(GrGLGpu* gpu, format.fStencilBits = stencilBits; format.fTotalBits = stencilBits; // Ownership of sb is passed to the GrRenderTarget so doesn't need to be deleted - sb = new GrGLStencilAttachment(gpu, sbDesc, size.width(), size.height(), sampleCount, - format); + sb = new GrGLStencilAttachment(gpu, sbDesc, dimensions.width(), dimensions.height(), + sampleCount, format); } return sk_sp( - new GrGLRenderTarget(gpu, size, format, config, sampleCount, idDesc, sb)); + new GrGLRenderTarget(gpu, dimensions, format, config, sampleCount, idDesc, sb)); } GrBackendRenderTarget GrGLRenderTarget::getBackendRenderTarget() const { @@ -104,7 +104,7 @@ GrBackendFormat GrGLRenderTarget::backendFormat() const { size_t GrGLRenderTarget::onGpuMemorySize() const { const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), fNumSamplesOwnedPerPixel, GrMipMapped::kNo); } @@ -222,8 +222,8 @@ void GrGLRenderTarget::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) // Log any renderbuffer's contribution to memory. if (fMSColorRenderbufferID) { const GrCaps& caps = *this->getGpu()->caps(); - size_t size = GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), - this->height(), this->msaaSamples(), GrMipMapped::kNo); + size_t size = GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), + this->msaaSamples(), GrMipMapped::kNo); // Due to this resource having both a texture and a renderbuffer component, dump as // skia/gpu_resources/resource_#/renderbuffer diff --git a/third_party/skia/src/gpu/gl/GrGLSemaphore.cpp b/third_party/skia/src/gpu/gl/GrGLSemaphore.cpp index d3a224ee1bb1..4ddfee8736ae 100644 --- a/third_party/skia/src/gpu/gl/GrGLSemaphore.cpp +++ b/third_party/skia/src/gpu/gl/GrGLSemaphore.cpp @@ -10,20 +10,11 @@ #include "src/gpu/gl/GrGLGpu.h" GrGLSemaphore::GrGLSemaphore(GrGLGpu* gpu, bool isOwned) - : INHERITED(gpu), fSync(0), fIsOwned(isOwned) { - isOwned ? this->registerWithCache(SkBudgeted::kNo) - : this->registerWithCacheWrapped(GrWrapCacheable::kNo); + : fGpu(gpu), fSync(0), fIsOwned(isOwned) { } -void GrGLSemaphore::onRelease() { +GrGLSemaphore::~GrGLSemaphore() { if (fSync && fIsOwned) { - static_cast(this->getGpu())->deleteSync(fSync); + fGpu->deleteSync(fSync); } - fSync = 0; - INHERITED::onRelease(); -} - -void GrGLSemaphore::onAbandon() { - fSync = 0; - INHERITED::onAbandon(); } diff --git a/third_party/skia/src/gpu/gl/GrGLSemaphore.h b/third_party/skia/src/gpu/gl/GrGLSemaphore.h index aff3b7324835..75880aaec7e3 100644 --- a/third_party/skia/src/gpu/gl/GrGLSemaphore.h +++ b/third_party/skia/src/gpu/gl/GrGLSemaphore.h @@ -16,19 +16,21 @@ class GrGLGpu; class GrGLSemaphore : public GrSemaphore { public: - static sk_sp Make(GrGLGpu* gpu, bool isOwned) { - return sk_sp(new GrGLSemaphore(gpu, isOwned)); + static std::unique_ptr Make(GrGLGpu* gpu, bool isOwned) { + return std::unique_ptr(new GrGLSemaphore(gpu, isOwned)); } - static sk_sp MakeWrapped(GrGLGpu* gpu, - GrGLsync sync, - GrWrapOwnership ownership) { - auto sema = sk_sp(new GrGLSemaphore(gpu, - kBorrow_GrWrapOwnership != ownership)); + static std::unique_ptr MakeWrapped(GrGLGpu* gpu, + GrGLsync sync, + GrWrapOwnership ownership) { + auto sema = std::unique_ptr( + new GrGLSemaphore(gpu, kBorrow_GrWrapOwnership != ownership)); sema->setSync(sync); return sema; } + ~GrGLSemaphore() override; + GrGLsync sync() const { return fSync; } void setSync(const GrGLsync& sync) { fSync = sync; } @@ -41,9 +43,11 @@ class GrGLSemaphore : public GrSemaphore { private: GrGLSemaphore(GrGLGpu* gpu, bool isOwned); - void onRelease() override; - void onAbandon() override; + void setIsOwned() override { + fIsOwned = true; + } + GrGLGpu* fGpu; GrGLsync fSync; bool fIsOwned; diff --git a/third_party/skia/src/gpu/gl/GrGLTextureRenderTarget.cpp b/third_party/skia/src/gpu/gl/GrGLTextureRenderTarget.cpp index 38bc4ef4c7e6..6648828d62ef 100644 --- a/third_party/skia/src/gpu/gl/GrGLTextureRenderTarget.cpp +++ b/third_party/skia/src/gpu/gl/GrGLTextureRenderTarget.cpp @@ -73,6 +73,6 @@ sk_sp GrGLTextureRenderTarget::MakeWrapped( size_t GrGLTextureRenderTarget::onGpuMemorySize() const { const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), this->numSamplesOwnedPerPixel(), this->texturePriv().mipMapped()); } diff --git a/third_party/skia/src/gpu/gl/GrGLUniformHandler.cpp b/third_party/skia/src/gpu/gl/GrGLUniformHandler.cpp index 56ed244dbf92..f8884731424a 100644 --- a/third_party/skia/src/gpu/gl/GrGLUniformHandler.cpp +++ b/third_party/skia/src/gpu/gl/GrGLUniformHandler.cpp @@ -59,18 +59,19 @@ GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray( return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1); } -GrGLSLUniformHandler::SamplerHandle GrGLUniformHandler::addSampler(const GrTextureProxy* texture, +GrGLSLUniformHandler::SamplerHandle GrGLUniformHandler::addSampler(const GrSurfaceProxy* texture, const GrSamplerState&, const GrSwizzle& swizzle, const char* name, const GrShaderCaps* shaderCaps) { SkASSERT(name && strlen(name)); + SkASSERT(texture->asTextureProxy()); SkString mangleName; char prefix = 'u'; fProgramBuilder->nameVariable(&mangleName, prefix, name, true); - GrTextureType type = texture->textureType(); + GrTextureType type = texture->backendFormat().textureType(); UniformInfo& sampler = fSamplers.push_back(); sampler.fVariable.setType(GrSLCombinedSamplerTypeForTextureType(type)); diff --git a/third_party/skia/src/gpu/gl/GrGLUniformHandler.h b/third_party/skia/src/gpu/gl/GrGLUniformHandler.h index f577755e3a01..89549c7c7f77 100644 --- a/third_party/skia/src/gpu/gl/GrGLUniformHandler.h +++ b/third_party/skia/src/gpu/gl/GrGLUniformHandler.h @@ -42,7 +42,7 @@ class GrGLUniformHandler : public GrGLSLUniformHandler { fUniforms[u.toIndex()].fVisibility |= visibility; } - SamplerHandle addSampler(const GrTextureProxy*, const GrSamplerState&, const GrSwizzle&, + SamplerHandle addSampler(const GrSurfaceProxy*, const GrSamplerState&, const GrSwizzle&, const char* name, const GrShaderCaps*) override; const char* samplerVariable(SamplerHandle handle) const override { diff --git a/third_party/skia/src/gpu/gl/GrGLUtil.cpp b/third_party/skia/src/gpu/gl/GrGLUtil.cpp index 3f6766387afa..6970e9c5da54 100644 --- a/third_party/skia/src/gpu/gl/GrGLUtil.cpp +++ b/third_party/skia/src/gpu/gl/GrGLUtil.cpp @@ -5,6 +5,7 @@ * found in the LICENSE file. */ + #include "include/core/SkMatrix.h" #include "include/private/GrTypesPriv.h" #include "src/gpu/GrDataUtils.h" @@ -151,7 +152,7 @@ void GrGLGetDriverInfo(GrGLStandard standard, } static const char kChromium[] = "Chromium"; - char suffix[SK_ARRAY_COUNT(kChromium)]; + char suffix[SK_ARRAY_COUNT(kChromium)] = {0}; if (0 == strcmp(rendererString, kChromium) || (3 == sscanf(versionString, "OpenGL ES %d.%d %8s", &major, &minor, suffix) && 0 == strcmp(kChromium, suffix))) { @@ -457,6 +458,12 @@ GrGLRenderer GrGLGetRendererFromStrings(const char* rendererString, if (adrenoNumber < 600) { return kAdreno5xx_GrGLRenderer; } + if (adrenoNumber == 615) { + return kAdreno615_GrGLRenderer; + } + if (adrenoNumber == 630) { + return kAdreno630_GrGLRenderer; + } } } if (0 == strcmp("Google SwiftShader", rendererString)) { @@ -532,21 +539,36 @@ GrGLRenderer GrGLGetRendererFromStrings(const char* rendererString, } // The AMD string can have a somewhat arbitrary preamble (see skbug.com/7195) - if (const char* amdString = strstr(rendererString, "Radeon")) { + static constexpr char kRadeonStr[] = "Radeon "; + if (const char* amdString = strstr(rendererString, kRadeonStr)) { + amdString += strlen(kRadeonStr); char amdGeneration, amdTier, amdRevision; - n = sscanf(amdString, "Radeon (TM) R9 M%c%c%c", - &amdGeneration, &amdTier, &amdRevision); + // Sometimes there is a (TM) and sometimes not. + static constexpr char kTMStr[] = "(TM) "; + if (!strncmp(amdString, kTMStr, strlen(kTMStr))) { + amdString += strlen(kTMStr); + } + n = sscanf(amdString, "R9 M%c%c%c", &amdGeneration, &amdTier, &amdRevision); if (3 == n) { - if ('4' == amdGeneration) { + if ('3' == amdGeneration) { + return kAMDRadeonR9M3xx_GrGLRenderer; + } else if ('4' == amdGeneration) { return kAMDRadeonR9M4xx_GrGLRenderer; } } char amd0, amd1, amd2; - n = sscanf(amdString, "Radeon HD 7%c%c%c Series", &amd0, &amd1, &amd2); + n = sscanf(amdString, "HD 7%c%c%c Series", &amd0, &amd1, &amd2); if (3 == n) { return kAMDRadeonHD7xxx_GrGLRenderer; } + + int amdVegaModel=0; + n = sscanf(amdString, "Pro Vega %i", &amdVegaModel); + if (1 == n) { + return kAMDRadeonProVegaxx_GrGLRenderer; + } + } if (strstr(rendererString, "llvmpipe")) { diff --git a/third_party/skia/src/gpu/gl/GrGLUtil.h b/third_party/skia/src/gpu/gl/GrGLUtil.h index 35d9ad83bdc0..e5afc312dd28 100644 --- a/third_party/skia/src/gpu/gl/GrGLUtil.h +++ b/third_party/skia/src/gpu/gl/GrGLUtil.h @@ -61,6 +61,8 @@ enum GrGLRenderer { kAdreno430_GrGLRenderer, kAdreno4xx_other_GrGLRenderer, kAdreno5xx_GrGLRenderer, + kAdreno615_GrGLRenderer, // Pixel3a + kAdreno630_GrGLRenderer, // Pixel3 kGoogleSwiftShader_GrGLRenderer, /** Intel GPU families, ordered by generation **/ @@ -92,8 +94,10 @@ enum GrGLRenderer { kMaliT_GrGLRenderer, kANGLE_GrGLRenderer, - kAMDRadeonHD7xxx_GrGLRenderer, // AMD Radeon HD 7000 Series - kAMDRadeonR9M4xx_GrGLRenderer, // AMD Radeon R9 M400 Series + kAMDRadeonHD7xxx_GrGLRenderer, // AMD Radeon HD 7000 Series + kAMDRadeonR9M3xx_GrGLRenderer, // AMD Radeon R9 M300 Series + kAMDRadeonR9M4xx_GrGLRenderer, // AMD Radeon R9 M400 Series + kAMDRadeonProVegaxx_GrGLRenderer, // AMD Radeon Pro Vega kOther_GrGLRenderer }; diff --git a/third_party/skia/src/gpu/glsl/GrGLSLBlend.cpp b/third_party/skia/src/gpu/glsl/GrGLSLBlend.cpp index 2d1e93c7777a..49810c31fee2 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLBlend.cpp +++ b/third_party/skia/src/gpu/glsl/GrGLSLBlend.cpp @@ -5,7 +5,6 @@ * found in the LICENSE file. */ -#include "src/core/SkBlendModePriv.h" #include "src/gpu/glsl/GrGLSLBlend.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLProgramBuilder.h" diff --git a/third_party/skia/src/gpu/glsl/GrGLSLFragmentProcessor.cpp b/third_party/skia/src/gpu/glsl/GrGLSLFragmentProcessor.cpp index e5e97deccf05..8d6c94dc5075 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLFragmentProcessor.cpp +++ b/third_party/skia/src/gpu/glsl/GrGLSLFragmentProcessor.cpp @@ -35,7 +35,7 @@ void GrGLSLFragmentProcessor::writeChildCall(GrGLSLFPFragmentBuilder* fragBuilde } // if the fragment processor is invoked with overridden coordinates, it must *always* be invoked // with overridden coords - SkASSERT(args.fFp.computeLocalCoordsInVertexShader() == (skslCoords.length() == 0)); + SkASSERT(args.fFp.coordTransformsApplyToLocalCoords() == (skslCoords.length() == 0)); fragBuilder->codeAppendf("%s = %s(%s", outputColor, fFunctionNames[childIndex].c_str(), inputColor ? inputColor : "half4(1)"); if (skslCoords.length()) { @@ -54,7 +54,7 @@ void GrGLSLFragmentProcessor::invokeChild(int childIndex, const char* inputColor while (childIndex >= (int) fFunctionNames.size()) { fFunctionNames.emplace_back(); } - if (!args.fFp.computeLocalCoordsInVertexShader() && skslCoords.length() == 0) { + if (!args.fFp.coordTransformsApplyToLocalCoords() && skslCoords.length() == 0) { skslCoords = "_coords"; } if (fFunctionNames[childIndex].size() == 0) { @@ -117,14 +117,26 @@ void GrGLSLFragmentProcessor::internalInvokeChild(int childIndex, const char* in ////////////////////////////////////////////////////////////////////////////// -GrGLSLFragmentProcessor* GrGLSLFragmentProcessor::Iter::next() { - if (fFPStack.empty()) { - return nullptr; +GrGLSLFragmentProcessor::Iter::Iter(std::unique_ptr fps[], int cnt) { + for (int i = cnt - 1; i >= 0; --i) { + fFPStack.push_back(fps[i].get()); } - GrGLSLFragmentProcessor* back = fFPStack.back(); +} + +GrGLSLFragmentProcessor& GrGLSLFragmentProcessor::Iter::operator*() const { + return *fFPStack.back(); +} + +GrGLSLFragmentProcessor* GrGLSLFragmentProcessor::Iter::operator->() const { + return fFPStack.back(); +} + +GrGLSLFragmentProcessor::Iter& GrGLSLFragmentProcessor::Iter::operator++() { + SkASSERT(!fFPStack.empty()); + const GrGLSLFragmentProcessor* back = fFPStack.back(); fFPStack.pop_back(); for (int i = back->numChildProcessors() - 1; i >= 0; --i) { fFPStack.push_back(back->childProcessor(i)); } - return back; + return *this; } diff --git a/third_party/skia/src/gpu/glsl/GrGLSLFragmentProcessor.h b/third_party/skia/src/gpu/glsl/GrGLSLFragmentProcessor.h index ad441d8efc30..a1947d165083 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLFragmentProcessor.h +++ b/third_party/skia/src/gpu/glsl/GrGLSLFragmentProcessor.h @@ -35,7 +35,7 @@ class GrGLSLFragmentProcessor { private: /** - * This class allows the shader builder to provide each GrGLSLFragmentProcesor with an array of + * This class allows the shader builder to provide each GrGLSLFragmentProcessor with an array of * generated variables where each generated variable corresponds to an element of an array on * the GrFragmentProcessor that generated the GLSLFP. For example, this is used to provide a * variable holding transformed coords for each GrCoordTransform owned by the FP. @@ -54,15 +54,15 @@ class GrGLSLFragmentProcessor { BuilderInputProvider childInputs(int childIdx) const { const GrFragmentProcessor* child = &fFP->childProcessor(childIdx); - GrFragmentProcessor::Iter iter(fFP); int numToSkip = 0; - while (true) { - const GrFragmentProcessor* fp = iter.next(); - if (fp == child) { + for (const auto& fp : GrFragmentProcessor::FPCRange(*fFP)) { + if (&fp == child) { return BuilderInputProvider(child, fTs + numToSkip); } - numToSkip += (fp->*COUNT)(); + numToSkip += (fp.*COUNT)(); } + SK_ABORT("Didn't find the child."); + return {nullptr, nullptr}; } private: @@ -134,9 +134,7 @@ class GrGLSLFragmentProcessor { int numChildProcessors() const { return fChildProcessors.count(); } - GrGLSLFragmentProcessor* childProcessor(int index) { - return fChildProcessors[index]; - } + GrGLSLFragmentProcessor* childProcessor(int index) const { return fChildProcessors[index]; } // Invoke the child with the default input color (solid white) inline void invokeChild(int childIndex, SkString* outputColor, EmitArgs& parentArgs, @@ -168,17 +166,22 @@ class GrGLSLFragmentProcessor { /** * Pre-order traversal of a GLSLFP hierarchy, or of multiple trees with roots in an array of - * GLSLFPS. This agrees with the traversal order of GrFragmentProcessor::Iter + * GLSLFPS. If initialized with an array color followed by coverage processors installed in a + * program thenthe iteration order will agree with a GrFragmentProcessor::Iter initialized with + * a GrPipeline that produces the same program key. */ - class Iter : public SkNoncopyable { + class Iter { public: - explicit Iter(GrGLSLFragmentProcessor* fp) { fFPStack.push_back(fp); } - explicit Iter(std::unique_ptr fps[], int cnt) { - for (int i = cnt - 1; i >= 0; --i) { - fFPStack.push_back(fps[i].get()); - } - } - GrGLSLFragmentProcessor* next(); + Iter(std::unique_ptr fps[], int cnt); + + GrGLSLFragmentProcessor& operator*() const; + GrGLSLFragmentProcessor* operator->() const; + Iter& operator++(); + operator bool() const { return !fFPStack.empty(); } + + // Because each iterator carries a stack we want to avoid copies. + Iter(const Iter&) = delete; + Iter& operator=(const Iter&) = delete; private: SkSTArray<4, GrGLSLFragmentProcessor*, true> fFPStack; diff --git a/third_party/skia/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/third_party/skia/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp index 85dc827f7391..5976330ada05 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp +++ b/third_party/skia/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp @@ -72,6 +72,9 @@ GrGLSLFragmentShaderBuilder::GrGLSLFragmentShaderBuilder(GrGLSLProgramBuilder* p } SkString GrGLSLFragmentShaderBuilder::ensureCoords2D(const GrShaderVar& coords) { + if (!coords.getName().size()) { + return SkString("_coords"); + } if (kFloat3_GrSLType != coords.getType() && kHalf3_GrSLType != coords.getType()) { SkASSERT(kFloat2_GrSLType == coords.getType() || kHalf2_GrSLType == coords.getType()); return coords.getName(); @@ -94,7 +97,7 @@ const char* GrGLSLFragmentShaderBuilder::sampleOffsets() { void GrGLSLFragmentShaderBuilder::maskOffMultisampleCoverage( const char* mask, ScopeFlags scopeFlags) { const GrShaderCaps& shaderCaps = *fProgramBuilder->shaderCaps(); - if (!shaderCaps.sampleVariablesSupport() && !shaderCaps.sampleVariablesStencilSupport()) { + if (!shaderCaps.sampleMaskSupport()) { SkDEBUGFAIL("Attempted to mask sample coverage without support."); return; } @@ -105,15 +108,15 @@ void GrGLSLFragmentShaderBuilder::maskOffMultisampleCoverage( if (!fHasModifiedSampleMask) { fHasModifiedSampleMask = true; if (ScopeFlags::kTopLevel != scopeFlags) { - this->codePrependf("gl_SampleMask[0] = ~0;"); + this->codePrependf("sk_SampleMask[0] = ~0;"); } if (!(ScopeFlags::kInsideLoop & scopeFlags)) { - this->codeAppendf("gl_SampleMask[0] = (%s);", mask); + this->codeAppendf("sk_SampleMask[0] = (%s);", mask); return; } } - this->codeAppendf("gl_SampleMask[0] &= (%s);", mask); + this->codeAppendf("sk_SampleMask[0] &= (%s);", mask); } void GrGLSLFragmentShaderBuilder::applyFnToMultisampleMask( @@ -160,14 +163,14 @@ SkString GrGLSLFPFragmentBuilder::writeProcessorFunction(GrGLSLFragmentProcessor GrGLSLFragmentProcessor::EmitArgs& args) { this->onBeforeChildProcEmitCode(); this->nextStage(); - if (!args.fFp.computeLocalCoordsInVertexShader() && args.fTransformedCoords.count() > 0) { + if (!args.fFp.coordTransformsApplyToLocalCoords() && args.fTransformedCoords.count() > 0) { // we currently only support overriding a single coordinate pair SkASSERT(args.fTransformedCoords.count() == 1); const GrGLSLProgramDataManager::UniformHandle& mat = args.fTransformedCoords[0].fUniformMatrix; if (mat.isValid()) { args.fUniformHandler->updateUniformVisibility(mat, kFragment_GrShaderFlag); - this->codeAppendf("_coords = (float3(_coords, 1) * %s).xy;\n", + this->codeAppendf("_coords = (%s * float3(_coords, 1)).xy;\n", args.fTransformedCoords[0].fMatrixCode.c_str()); } } @@ -179,7 +182,7 @@ SkString GrGLSLFPFragmentBuilder::writeProcessorFunction(GrGLSLFragmentProcessor SkString result; this->emitFunction(kHalf4_GrSLType, "stage", - args.fFp.computeLocalCoordsInVertexShader() ? 1 : 2, + args.fFp.coordTransformsApplyToLocalCoords() ? 1 : 2, params, this->code().c_str(), &result); @@ -291,7 +294,8 @@ void GrGLSLFragmentShaderBuilder::onFinalize() { if (CustomFeatures::kSampleLocations & fProgramBuilder->processorFeatures()) { const SkTArray& sampleLocations = fProgramBuilder->getSampleLocations(); - this->definitions().append("const float2 _sampleOffsets[] = float2[]("); + this->definitions().appendf("const float2 _sampleOffsets[%i] = float2[%i](", + sampleLocations.count(), sampleLocations.count()); for (int i = 0; i < sampleLocations.count(); ++i) { SkPoint offset = sampleLocations[i] - SkPoint::Make(.5f, .5f); if (kBottomLeft_GrSurfaceOrigin == this->getSurfaceOrigin()) { diff --git a/third_party/skia/src/gpu/glsl/GrGLSLGeometryProcessor.cpp b/third_party/skia/src/gpu/glsl/GrGLSLGeometryProcessor.cpp index d99239ebb9e3..26288b924e7d 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLGeometryProcessor.cpp +++ b/third_party/skia/src/gpu/glsl/GrGLSLGeometryProcessor.cpp @@ -67,48 +67,62 @@ void GrGLSLGeometryProcessor::emitTransforms(GrGLSLVertexBuilder* vb, } else { localCoords.printf("float3(%s, 1)", localCoordsVar.c_str()); } - int i = 0; - while (const GrCoordTransform* coordTransform = handler->nextCoordTransform()) { - SkString strUniName; - strUniName.printf("CoordTransformMatrix_%d", i); - const char* uniName; - fInstalledTransforms.push_back().fHandle = uniformHandler->addUniform(kVertex_GrShaderFlag, - kFloat3x3_GrSLType, - strUniName.c_str(), - &uniName).toIndex(); - GrSLType varyingType = kFloat2_GrSLType; - if (localMatrix.hasPerspective() || coordTransform->getMatrix().hasPerspective() - || threeComponentLocalCoords) { - varyingType = kFloat3_GrSLType; - } - SkString strVaryingName; - strVaryingName.printf("TransformedCoords_%d", i); - GrGLSLVarying v(varyingType); - if (coordTransform->computeInVertexShader()) { - varyingHandler->addVarying(strVaryingName.c_str(), &v); + for (int i = 0; *handler; ++*handler, ++i) { + auto [coordTransform, fp] = handler->get(); + if (coordTransform.isNoOp() && !fp.coordTransformsApplyToLocalCoords()) { + handler->omitCoordsForCurrCoordTransform(); + fInstalledTransforms.push_back(); + } else { + SkString strUniName; + strUniName.printf("CoordTransformMatrix_%d", i); + const char* uniName; + fInstalledTransforms.push_back().fHandle = uniformHandler + ->addUniform(kVertex_GrShaderFlag, + kFloat3x3_GrSLType, + strUniName.c_str(), + &uniName) + .toIndex(); + GrSLType varyingType = kFloat2_GrSLType; + if (localMatrix.hasPerspective() || coordTransform.matrix().hasPerspective() || + threeComponentLocalCoords) { + varyingType = kFloat3_GrSLType; + } + SkString strVaryingName; + strVaryingName.printf("TransformedCoords_%d", i); + GrGLSLVarying v(varyingType); + if (fp.coordTransformsApplyToLocalCoords()) { + varyingHandler->addVarying(strVaryingName.c_str(), &v); - if (kFloat2_GrSLType == varyingType) { - vb->codeAppendf("%s = (%s * %s).xy;", v.vsOut(), uniName, localCoords.c_str()); - } else { - vb->codeAppendf("%s = %s * %s;", v.vsOut(), uniName, localCoords.c_str()); + if (kFloat2_GrSLType == varyingType) { + vb->codeAppendf("%s = (%s * %s).xy;", v.vsOut(), uniName, localCoords.c_str()); + } else { + vb->codeAppendf("%s = %s * %s;", v.vsOut(), uniName, localCoords.c_str()); + } } + handler->specifyCoordsForCurrCoordTransform( + SkString(uniName), + fInstalledTransforms.back().fHandle, + GrShaderVar(SkString(v.fsIn()), varyingType)); } - handler->specifyCoordsForCurrCoordTransform(SkString(uniName), - fInstalledTransforms.back().fHandle, - GrShaderVar(SkString(v.fsIn()), varyingType)); - ++i; } } void GrGLSLGeometryProcessor::setTransformDataHelper(const SkMatrix& localMatrix, const GrGLSLProgramDataManager& pdman, - FPCoordTransformIter* transformIter) { + const CoordTransformRange& transformRange) { int i = 0; - while (const GrCoordTransform* coordTransform = transformIter->next()) { - const SkMatrix& m = GetTransformMatrix(localMatrix, *coordTransform); - if (!fInstalledTransforms[i].fCurrentValue.cheapEqualTo(m)) { - pdman.setSkMatrix(fInstalledTransforms[i].fHandle.toIndex(), m); - fInstalledTransforms[i].fCurrentValue = m; + for (auto [transform, fp] : transformRange) { + if (fInstalledTransforms[i].fHandle.isValid()) { + SkMatrix m; + if (fp.coordTransformsApplyToLocalCoords()) { + m = GetTransformMatrix(transform, localMatrix); + } else { + m = GetTransformMatrix(transform, SkMatrix::I()); + } + if (!fInstalledTransforms[i].fCurrentValue.cheapEqualTo(m)) { + pdman.setSkMatrix(fInstalledTransforms[i].fHandle.toIndex(), m); + fInstalledTransforms[i].fCurrentValue = m; + } } ++i; } diff --git a/third_party/skia/src/gpu/glsl/GrGLSLGeometryProcessor.h b/third_party/skia/src/gpu/glsl/GrGLSLGeometryProcessor.h index eb34412687df..c8f7895eaf3f 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLGeometryProcessor.h +++ b/third_party/skia/src/gpu/glsl/GrGLSLGeometryProcessor.h @@ -26,7 +26,7 @@ class GrGLSLGeometryProcessor : public GrGLSLPrimitiveProcessor { // A helper which subclasses can use to upload coord transform matrices in setData(). void setTransformDataHelper(const SkMatrix& localMatrix, const GrGLSLProgramDataManager& pdman, - FPCoordTransformIter*); + 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 diff --git a/third_party/skia/src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp b/third_party/skia/src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp index 9d35c4496068..c28b370be990 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp +++ b/third_party/skia/src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp @@ -14,10 +14,10 @@ #include "src/gpu/glsl/GrGLSLUniformHandler.h" #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" -SkMatrix GrGLSLPrimitiveProcessor::GetTransformMatrix(const SkMatrix& localMatrix, - const GrCoordTransform& coordTransform) { +SkMatrix GrGLSLPrimitiveProcessor::GetTransformMatrix(const GrCoordTransform& coordTransform, + const SkMatrix& preMatrix) { SkMatrix combined; - combined.setConcat(coordTransform.getMatrix(), localMatrix); + combined.setConcat(coordTransform.matrix(), preMatrix); if (coordTransform.normalize()) { combined.postIDiv(coordTransform.peekTexture()->width(), coordTransform.peekTexture()->height()); @@ -66,13 +66,19 @@ void GrGLSLPrimitiveProcessor::setupUniformColor(GrGLSLFPFragmentBuilder* fragBu ////////////////////////////////////////////////////////////////////////////// -const GrCoordTransform* GrGLSLPrimitiveProcessor::FPCoordTransformHandler::nextCoordTransform() { -#ifdef SK_DEBUG - SkASSERT(nullptr == fCurr || fAddedCoord); - fAddedCoord = false; - fCurr = fIter.next(); - return fCurr; -#else - return fIter.next(); -#endif +GrGLSLPrimitiveProcessor::FPCoordTransformHandler::FPCoordTransformHandler( + const GrPipeline& pipeline, SkTArray* transformedCoordVars) + : fIter(pipeline), fTransformedCoordVars(transformedCoordVars) {} + +std::pair +GrGLSLPrimitiveProcessor::FPCoordTransformHandler::get() const { + return *fIter; +} + +GrGLSLPrimitiveProcessor::FPCoordTransformHandler& +GrGLSLPrimitiveProcessor::FPCoordTransformHandler::operator++() { + SkASSERT(fAddedCoord); + ++fIter; + SkDEBUGCODE(fAddedCoord = false;) + return *this; } diff --git a/third_party/skia/src/gpu/glsl/GrGLSLPrimitiveProcessor.h b/third_party/skia/src/gpu/glsl/GrGLSLPrimitiveProcessor.h index 12fb74f11421..f4ca1f36bff3 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLPrimitiveProcessor.h +++ b/third_party/skia/src/gpu/glsl/GrGLSLPrimitiveProcessor.h @@ -23,9 +23,9 @@ class GrShaderCaps; class GrGLSLPrimitiveProcessor { public: - using UniformHandle = GrGLSLProgramDataManager::UniformHandle; - using SamplerHandle = GrGLSLUniformHandler::SamplerHandle; - using FPCoordTransformIter = GrFragmentProcessor::CoordTransformIter; + using UniformHandle = GrGLSLProgramDataManager::UniformHandle; + using SamplerHandle = GrGLSLUniformHandler::SamplerHandle; + using CoordTransformRange = GrFragmentProcessor::PipelineCoordTransformRange; struct TransformVar { TransformVar() = default; @@ -56,14 +56,15 @@ class GrGLSLPrimitiveProcessor { */ class FPCoordTransformHandler : public SkNoncopyable { public: - FPCoordTransformHandler(const GrPipeline& pipeline, - SkTArray* transformedCoordVars) - : fIter(pipeline) - , fTransformedCoordVars(transformedCoordVars) {} + FPCoordTransformHandler(const GrPipeline&, SkTArray*); + ~FPCoordTransformHandler() { SkASSERT(!fIter); } - ~FPCoordTransformHandler() { SkASSERT(!this->nextCoordTransform());} + operator bool() const { return (bool)fIter; } - const GrCoordTransform* nextCoordTransform(); + // Gets the current coord transform and its owning GrFragmentProcessor. + std::pair get() const; + + FPCoordTransformHandler& operator++(); // 'args' are constructor params to GrShaderVar. template @@ -73,10 +74,15 @@ class GrGLSLPrimitiveProcessor { SkDEBUGCODE(fAddedCoord = true;) } + void omitCoordsForCurrCoordTransform() { + SkASSERT(!fAddedCoord); + fTransformedCoordVars->push_back(); + SkDEBUGCODE(fAddedCoord = true;) + } + private: GrFragmentProcessor::CoordTransformIter fIter; SkDEBUGCODE(bool fAddedCoord = false;) - SkDEBUGCODE(const GrCoordTransform* fCurr = nullptr;) SkTArray* fTransformedCoordVars; }; @@ -132,14 +138,15 @@ class GrGLSLPrimitiveProcessor { * GrPrimitiveProcessor parameter is guaranteed to be of the same type and to have an * identical processor key as the GrPrimitiveProcessor that created this * GrGLSLPrimitiveProcessor. - * The subclass may use the transform iterator to perform any setup required for the particular - * set of fp transform matrices, such as uploading via uniforms. The iterator will iterate over - * the transforms in the same order as the TransformHandler passed to emitCode. + * The subclass should use the transform range to perform any setup required for the coord + * transforms of the FPs that are part of the same program, such as updating matrix uniforms. + * The range will iterate over the transforms in the same order as the TransformHandler passed + * to emitCode. */ virtual void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - FPCoordTransformIter&&) = 0; + const CoordTransformRange&) = 0; - static SkMatrix GetTransformMatrix(const SkMatrix& localMatrix, const GrCoordTransform&); + static SkMatrix GetTransformMatrix(const GrCoordTransform&, const SkMatrix& preMatrix); protected: void setupUniformColor(GrGLSLFPFragmentBuilder* fragBuilder, diff --git a/third_party/skia/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/third_party/skia/src/gpu/glsl/GrGLSLProgramBuilder.cpp index 8cdf43dfa2cf..77f7aeea5c1d 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLProgramBuilder.cpp +++ b/third_party/skia/src/gpu/glsl/GrGLSLProgramBuilder.cpp @@ -68,7 +68,7 @@ void GrGLSLProgramBuilder::emitAndInstallPrimProc(SkString* outputColor, // Because all the texture properties must be consistent between all the dynamic and fixed // primProc proxies, we just deal w/ the first set of dynamic proxies or the set of fixed // proxies here. - const GrTextureProxy* const* primProcProxies = nullptr; + const GrSurfaceProxy* const* primProcProxies = nullptr; if (fProgramInfo.hasDynamicPrimProcTextures()) { primProcProxies = fProgramInfo.dynamicPrimProcTextures(0); } else if (fProgramInfo.hasFixedPrimProcTextures()) { @@ -108,7 +108,7 @@ void GrGLSLProgramBuilder::emitAndInstallPrimProc(SkString* outputColor, SkString name; name.printf("TextureSampler_%d", i); const auto& sampler = proc.textureSampler(i); - SkASSERT(sampler.textureType() == primProcProxies[i]->textureType()); + SkASSERT(sampler.textureType() == primProcProxies[i]->backendFormat().textureType()); texSamplers[i] = this->emitSampler(primProcProxies[i], sampler.samplerState(), sampler.swizzle(), @@ -150,9 +150,8 @@ void GrGLSLProgramBuilder::emitAndInstallFragProcs(SkString* color, SkString* co const GrFragmentProcessor& fp = this->pipeline().getFragmentProcessor(i); output = this->emitAndInstallFragProc(fp, i, transformedCoordVarsIdx, **inOut, output, &glslFragmentProcessors); - GrFragmentProcessor::Iter iter(&fp); - while (const GrFragmentProcessor* fp = iter.next()) { - transformedCoordVarsIdx += fp->numCoordTransforms(); + for (const auto& subFP : GrFragmentProcessor::FPCRange(fp)) { + transformedCoordVarsIdx += subFP.numCoordTransforms(); } **inOut = output; } @@ -185,20 +184,18 @@ SkString GrGLSLProgramBuilder::emitAndInstallFragProc( GrGLSLFragmentProcessor* fragProc = fp.createGLSLInstance(); SkSTArray<4, SamplerHandle> texSamplers; - GrFragmentProcessor::Iter fpIter(&fp); int samplerIdx = 0; - while (const auto* subFP = fpIter.next()) { - for (int i = 0; i < subFP->numTextureSamplers(); ++i) { + for (const auto& subFP : GrFragmentProcessor::FPCRange(fp)) { + for (int i = 0; i < subFP.numTextureSamplers(); ++i) { SkString name; name.printf("TextureSampler_%d", samplerIdx++); - const auto& sampler = subFP->textureSampler(i); + const auto& sampler = subFP.textureSampler(i); texSamplers.emplace_back(this->emitSampler(sampler.proxy(), sampler.samplerState(), sampler.swizzle(), name.c_str())); } } - const GrGLSLPrimitiveProcessor::TransformVar* coordVars = fTransformedCoordVars.begin() + transformedCoordVarsIdx; GrGLSLFragmentProcessor::TransformedCoordVars coords(&fp, coordVars); @@ -248,12 +245,13 @@ void GrGLSLProgramBuilder::emitAndInstallXferProc(const SkString& colorIn, SamplerHandle dstTextureSamplerHandle; GrSurfaceOrigin dstTextureOrigin = kTopLeft_GrSurfaceOrigin; - if (GrTextureProxy* dstTextureProxy = this->pipeline().dstTextureProxy()) { + const GrSurfaceProxyView& dstView = this->pipeline().dstProxyView(); + if (GrTextureProxy* dstTextureProxy = dstView.asTextureProxy()) { // GrProcessor::TextureSampler sampler(dstTexture); - const GrSwizzle& swizzle = dstTextureProxy->textureSwizzle(); + const GrSwizzle& swizzle = dstView.swizzle(); dstTextureSamplerHandle = this->emitSampler(dstTextureProxy, GrSamplerState(), swizzle, "DstTextureSampler"); - dstTextureOrigin = dstTextureProxy->origin(); + dstTextureOrigin = dstView.origin(); SkASSERT(dstTextureProxy->textureType() != GrTextureType::kExternal); } @@ -278,7 +276,7 @@ void GrGLSLProgramBuilder::emitAndInstallXferProc(const SkString& colorIn, fFS.codeAppend("}"); } -GrGLSLProgramBuilder::SamplerHandle GrGLSLProgramBuilder::emitSampler(const GrTextureProxy* texture, +GrGLSLProgramBuilder::SamplerHandle GrGLSLProgramBuilder::emitSampler(const GrSurfaceProxy* texture, const GrSamplerState& state, const GrSwizzle& swizzle, const char* name) { diff --git a/third_party/skia/src/gpu/glsl/GrGLSLProgramBuilder.h b/third_party/skia/src/gpu/glsl/GrGLSLProgramBuilder.h index dc63aa82aa1b..1b82a0c0c15c 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLProgramBuilder.h +++ b/third_party/skia/src/gpu/glsl/GrGLSLProgramBuilder.h @@ -10,7 +10,6 @@ #include "src/gpu/GrCaps.h" #include "src/gpu/GrGeometryProcessor.h" -#include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrProgramInfo.h" #include "src/gpu/GrRenderTarget.h" #include "src/gpu/GrRenderTargetPriv.h" @@ -22,6 +21,7 @@ #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" #include "src/gpu/glsl/GrGLSLXferProcessor.h" +class GrProgramDesc; class GrShaderVar; class GrGLSLVaryingHandler; class SkString; @@ -37,7 +37,6 @@ class GrGLSLProgramBuilder { virtual const GrCaps* caps() const = 0; const GrShaderCaps* shaderCaps() const { return this->caps()->shaderCaps(); } - int numSamples() const { return fProgramInfo.numSamples(); } GrSurfaceOrigin origin() const { return fProgramInfo.origin(); } const GrPipeline& pipeline() const { return fProgramInfo.pipeline(); } const GrPrimitiveProcessor& primitiveProcessor() const { return fProgramInfo.primProc(); } @@ -47,8 +46,7 @@ class GrGLSLProgramBuilder { bool snapVerticesToPixelCenters() const { return fProgramInfo.pipeline().snapVerticesToPixelCenters(); } - // TODO: remove this usage of the descriptor's header - bool hasPointSize() const { return fDesc->hasPointSize(); } + bool hasPointSize() const { return fProgramInfo.primitiveType() == GrPrimitiveType::kPoints; } // TODO: stop passing in the renderTarget for just the sampleLocations int effectiveSampleCnt() const { @@ -163,7 +161,7 @@ class GrGLSLProgramBuilder { SkString output, SkTArray>*); void emitAndInstallXferProc(const SkString& colorIn, const SkString& coverageIn); - SamplerHandle emitSampler(const GrTextureProxy*, const GrSamplerState&, const GrSwizzle&, + SamplerHandle emitSampler(const GrSurfaceProxy*, const GrSamplerState&, const GrSwizzle&, const char* name); bool checkSamplerCounts(); diff --git a/third_party/skia/src/gpu/glsl/GrGLSLShaderBuilder.cpp b/third_party/skia/src/gpu/glsl/GrGLSLShaderBuilder.cpp index 7675744bc57d..b1e549952d2a 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLShaderBuilder.cpp +++ b/third_party/skia/src/gpu/glsl/GrGLSLShaderBuilder.cpp @@ -62,7 +62,7 @@ void GrGLSLShaderBuilder::emitFunction(GrSLType returnType, static inline void append_texture_swizzle(SkString* out, GrSwizzle swizzle) { if (swizzle != GrSwizzle::RGBA()) { - out->appendf(".%s", swizzle.c_str()); + out->appendf(".%s", swizzle.asString().c_str()); } } diff --git a/third_party/skia/src/gpu/glsl/GrGLSLUniformHandler.h b/third_party/skia/src/gpu/glsl/GrGLSLUniformHandler.h index f27d961a9592..726195beaaad 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLUniformHandler.h +++ b/third_party/skia/src/gpu/glsl/GrGLSLUniformHandler.h @@ -17,7 +17,7 @@ class GrGLSLProgramBuilder; class GrSamplerState; -class GrTextureProxy; +class GrSurfaceProxy; // Handles for program uniforms (other than per-effect uniforms) struct GrGLSLBuiltinUniformHandles { @@ -84,7 +84,7 @@ class GrGLSLUniformHandler { // Only called if GrShaderCaps(:textureSwizzleAppliedInShader() == true. virtual GrSwizzle samplerSwizzle(SamplerHandle) const = 0; - virtual SamplerHandle addSampler(const GrTextureProxy*, const GrSamplerState&, const GrSwizzle&, + virtual SamplerHandle addSampler(const GrSurfaceProxy*, const GrSamplerState&, const GrSwizzle&, const char* name, const GrShaderCaps*) = 0; virtual UniformHandle internalAddUniformArray(uint32_t visibility, diff --git a/third_party/skia/src/gpu/glsl/GrGLSLXferProcessor.cpp b/third_party/skia/src/gpu/glsl/GrGLSLXferProcessor.cpp index 7a04f4bfd217..2535a4b8420f 100644 --- a/third_party/skia/src/gpu/glsl/GrGLSLXferProcessor.cpp +++ b/third_party/skia/src/gpu/glsl/GrGLSLXferProcessor.cpp @@ -113,9 +113,10 @@ void GrGLSLXferProcessor::emitOutputSwizzle( GrGLSLXPFragmentBuilder* x, const GrSwizzle& swizzle, const char* outColor, const char* outColorSecondary) const { if (GrSwizzle::RGBA() != swizzle) { - x->codeAppendf("%s = %s.%s;", outColor, outColor, swizzle.c_str()); + x->codeAppendf("%s = %s.%s;", outColor, outColor, swizzle.asString().c_str()); if (outColorSecondary) { - x->codeAppendf("%s = %s.%s;", outColorSecondary, outColorSecondary, swizzle.c_str()); + x->codeAppendf("%s = %s.%s;", outColorSecondary, outColorSecondary, + swizzle.asString().c_str()); } } } diff --git a/third_party/skia/src/gpu/gpu_workaround_list.txt b/third_party/skia/src/gpu/gpu_workaround_list.txt index b58ce5d94b07..3f30fd16dfc8 100644 --- a/third_party/skia/src/gpu/gpu_workaround_list.txt +++ b/third_party/skia/src/gpu/gpu_workaround_list.txt @@ -15,3 +15,4 @@ restore_scissor_on_fbo_change rewrite_do_while_loops unbind_attachments_on_bound_render_fbo_delete unfold_short_circuit_as_ternary_operation +disable_dual_source_blending_support diff --git a/third_party/skia/src/gpu/gradients/generated/GrLinearGradientLayout.cpp b/third_party/skia/src/gpu/gradients/generated/GrLinearGradientLayout.cpp index a20b0e5676e9..c5e70d6804e1 100644 --- a/third_party/skia/src/gpu/gradients/generated/GrLinearGradientLayout.cpp +++ b/third_party/skia/src/gpu/gradients/generated/GrLinearGradientLayout.cpp @@ -29,9 +29,7 @@ class GrGLSLLinearGradientLayout : public GrGLSLFragmentProcessor { fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint); fragBuilder->codeAppendf( "half t = half(%s.x) + 9.9999997473787516e-06;\n%s = half4(t, 1.0, 0.0, 0.0);\n", - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - args.fOutputColor); + sk_TransformedCoords2D_0.c_str(), args.fOutputColor); } private: diff --git a/third_party/skia/src/gpu/gradients/generated/GrRadialGradientLayout.cpp b/third_party/skia/src/gpu/gradients/generated/GrRadialGradientLayout.cpp index f1639438acce..79fbf48f14c2 100644 --- a/third_party/skia/src/gpu/gradients/generated/GrRadialGradientLayout.cpp +++ b/third_party/skia/src/gpu/gradients/generated/GrRadialGradientLayout.cpp @@ -28,10 +28,7 @@ class GrGLSLRadialGradientLayout : public GrGLSLFragmentProcessor { SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint); fragBuilder->codeAppendf("half t = half(length(%s));\n%s = half4(t, 1.0, 0.0, 0.0);\n", - _outer.computeLocalCoordsInVertexShader() - ? sk_TransformedCoords2D_0.c_str() - : "_coords", - args.fOutputColor); + sk_TransformedCoords2D_0.c_str(), args.fOutputColor); } private: diff --git a/third_party/skia/src/gpu/gradients/generated/GrSweepGradientLayout.cpp b/third_party/skia/src/gpu/gradients/generated/GrSweepGradientLayout.cpp index 6abcbb178042..5b5f04a39a00 100644 --- a/third_party/skia/src/gpu/gradients/generated/GrSweepGradientLayout.cpp +++ b/third_party/skia/src/gpu/gradients/generated/GrSweepGradientLayout.cpp @@ -39,17 +39,9 @@ class GrGLSLSweepGradientLayout : public GrGLSLFragmentProcessor { "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", - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - args.fUniformHandler->getUniformCStr(biasVar), + 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), args.fUniformHandler->getUniformCStr(scaleVar), args.fOutputColor); } diff --git a/third_party/skia/src/gpu/gradients/generated/GrTextureGradientColorizer.cpp b/third_party/skia/src/gpu/gradients/generated/GrTextureGradientColorizer.cpp index 466b407cf72c..61d03bf394dd 100644 --- a/third_party/skia/src/gpu/gradients/generated/GrTextureGradientColorizer.cpp +++ b/third_party/skia/src/gpu/gradients/generated/GrTextureGradientColorizer.cpp @@ -27,7 +27,10 @@ class GrGLSLTextureGradientColorizer : public GrGLSLFragmentProcessor { "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]).c_str()); + fragBuilder->getProgramBuilder() + ->samplerSwizzle(args.fTexSamplers[0]) + .asString() + .c_str()); } private: diff --git a/third_party/skia/src/gpu/gradients/generated/GrTextureGradientColorizer.h b/third_party/skia/src/gpu/gradients/generated/GrTextureGradientColorizer.h index e15558eddebe..9ed5d3e3a799 100644 --- a/third_party/skia/src/gpu/gradients/generated/GrTextureGradientColorizer.h +++ b/third_party/skia/src/gpu/gradients/generated/GrTextureGradientColorizer.h @@ -16,7 +16,7 @@ #include "src/gpu/GrFragmentProcessor.h" class GrTextureGradientColorizer : public GrFragmentProcessor { public: - static std::unique_ptr Make(sk_sp gradient) { + static std::unique_ptr Make(sk_sp gradient) { return std::unique_ptr(new GrTextureGradientColorizer(gradient)); } GrTextureGradientColorizer(const GrTextureGradientColorizer& src); @@ -25,7 +25,7 @@ class GrTextureGradientColorizer : public GrFragmentProcessor { TextureSampler gradient; private: - GrTextureGradientColorizer(sk_sp gradient) + GrTextureGradientColorizer(sk_sp gradient) : INHERITED(kGrTextureGradientColorizer_ClassID, kNone_OptimizationFlags) , gradient(std::move(gradient), GrSamplerState::ClampBilerp()) { this->setTextureSamplerCnt(1); diff --git a/third_party/skia/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp b/third_party/skia/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp index 804a42c6d82c..235a137d8c1e 100644 --- a/third_party/skia/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp +++ b/third_party/skia/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp @@ -52,9 +52,8 @@ class GrGLSLTwoPointConicalGradientLayout : public GrGLSLFragmentProcessor { "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 ", - _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str() - : "_coords", - (int)_outer.type, args.fUniformHandler->getUniformCStr(focalParamsVar), + sk_TransformedCoords2D_0.c_str(), (int)_outer.type, + args.fUniformHandler->getUniformCStr(focalParamsVar), args.fUniformHandler->getUniformCStr(focalParamsVar), (_outer.isRadiusIncreasing ? "true" : "false")); fragBuilder->codeAppendf( diff --git a/third_party/skia/src/gpu/mock/GrMockCaps.cpp b/third_party/skia/src/gpu/mock/GrMockCaps.cpp index 8d798faf3bef..680e69d93936 100644 --- a/third_party/skia/src/gpu/mock/GrMockCaps.cpp +++ b/third_party/skia/src/gpu/mock/GrMockCaps.cpp @@ -7,6 +7,16 @@ #include "src/gpu/mock/GrMockCaps.h" +#include "src/gpu/GrProgramDesc.h" + +GrProgramDesc GrMockCaps::makeDesc(const GrRenderTarget* rt, + const GrProgramInfo& programInfo) const { + GrProgramDesc desc; + SkDEBUGCODE(bool result =) GrProgramDesc::Build(&desc, rt, programInfo, *this); + SkASSERT(result == desc.isValid()); + return desc; +} + #if GR_TEST_UTILS std::vector GrMockCaps::getTestingCombinations() const { // TODO: need to add compressed formats to this list diff --git a/third_party/skia/src/gpu/mock/GrMockCaps.h b/third_party/skia/src/gpu/mock/GrMockCaps.h index 457236c23874..b38657138f45 100644 --- a/third_party/skia/src/gpu/mock/GrMockCaps.h +++ b/third_party/skia/src/gpu/mock/GrMockCaps.h @@ -34,10 +34,9 @@ class GrMockCaps : public GrCaps { fShaderCaps->fMaxFragmentSamplers = options.fMaxFragmentSamplers; fShaderCaps->fShaderDerivativeSupport = options.fShaderDerivativeSupport; fShaderCaps->fDualSourceBlendingSupport = options.fDualSourceBlendingSupport; - fShaderCaps->fSampleVariablesSupport = true; - fShaderCaps->fSampleVariablesStencilSupport = true; + fShaderCaps->fSampleMaskSupport = true; - this->applyOptionsOverrides(contextOptions); + this->finishInitialization(contextOptions); } bool isFormatSRGB(const GrBackendFormat& format) const override { @@ -144,6 +143,8 @@ class GrMockCaps : public GrCaps { return GrSwizzle(); } + GrProgramDesc makeDesc(const GrRenderTarget*, const GrProgramInfo&) const override; + #if GR_TEST_UTILS std::vector getTestingCombinations() const override; #endif diff --git a/third_party/skia/src/gpu/mock/GrMockGpu.cpp b/third_party/skia/src/gpu/mock/GrMockGpu.cpp index 0825d86ecb15..f50a80d731cb 100644 --- a/third_party/skia/src/gpu/mock/GrMockGpu.cpp +++ b/third_party/skia/src/gpu/mock/GrMockGpu.cpp @@ -56,7 +56,7 @@ GrOpsRenderPass* GrMockGpu::getOpsRenderPass( GrRenderTarget* rt, GrSurfaceOrigin origin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, const GrOpsRenderPass::StencilLoadAndStoreInfo&, - const SkTArray& sampledProxies) { + const SkTArray& sampledProxies) { return new GrMockOpsRenderPass(this, rt, origin, colorInfo); } @@ -258,14 +258,12 @@ GrStencilAttachment* GrMockGpu::createStencilAttachmentForRenderTarget( return new GrMockStencilAttachment(this, width, height, kBits, rt->numSamples()); } -GrBackendTexture GrMockGpu::onCreateBackendTexture(int w, int h, +GrBackendTexture GrMockGpu::onCreateBackendTexture(SkISize dimensions, const GrBackendFormat& format, - GrMipMapped mipMapped, - GrRenderable /* renderable */, - const SkPixmap /*srcData*/[], - int /*numMipLevels*/, - const SkColor4f* /* color */, - GrProtected /* isProtected */) { + GrRenderable, + const BackendTextureData*, + int numMipLevels, + GrProtected) { auto colorType = format.asMockColorType(); if (!this->caps()->isFormatTexturable(format)) { return GrBackendTexture(); // invalid @@ -274,7 +272,8 @@ GrBackendTexture GrMockGpu::onCreateBackendTexture(int w, int h, GrMockTextureInfo info(colorType, NextExternalTextureID()); fOutstandingTestingOnlyTextureIDs.add(info.fID); - return GrBackendTexture(w, h, mipMapped, info); + auto mipMapped = numMipLevels > 1 ? GrMipMapped::kYes : GrMipMapped::kNo; + return GrBackendTexture(dimensions.width(), dimensions.height(), mipMapped, info); } void GrMockGpu::deleteBackendTexture(const GrBackendTexture& tex) { diff --git a/third_party/skia/src/gpu/mock/GrMockGpu.h b/third_party/skia/src/gpu/mock/GrMockGpu.h index bbafae0270d9..1fd97cc1dc53 100644 --- a/third_party/skia/src/gpu/mock/GrMockGpu.h +++ b/third_party/skia/src/gpu/mock/GrMockGpu.h @@ -28,21 +28,26 @@ class GrMockGpu : public GrGpu { GrRenderTarget*, GrSurfaceOrigin, const SkIRect&, const GrOpsRenderPass::LoadAndStoreInfo&, const GrOpsRenderPass::StencilLoadAndStoreInfo&, - const SkTArray& sampledProxies) override; + const SkTArray& sampledProxies) override; GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; } bool waitFence(GrFence, uint64_t) override { return true; } void deleteFence(GrFence) const override {} - sk_sp SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override { + std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override { + return nullptr; + } + 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 {} + std::unique_ptr prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; } - sk_sp wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) override { return nullptr; } - void insertSemaphore(sk_sp semaphore) override {} - void waitSemaphore(sk_sp semaphore) override {} - sk_sp prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; } void submit(GrOpsRenderPass* renderPass) override; @@ -121,19 +126,22 @@ class GrMockGpu : public GrGpu { void onResolveRenderTarget(GrRenderTarget* target, const SkIRect&, GrSurfaceOrigin, ForExternalIO) override {} - void onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, + bool onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, const GrPrepareForExternalIORequests&) override { if (info.fFinishedProc) { info.fFinishedProc(info.fFinishedContext); } + return true; } GrStencilAttachment* createStencilAttachmentForRenderTarget( const GrRenderTarget*, int width, int height, int numStencilSamples) override; - GrBackendTexture onCreateBackendTexture(int w, int h, const GrBackendFormat&, - GrMipMapped, GrRenderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrProtected) override; + GrBackendTexture onCreateBackendTexture(SkISize, + const GrBackendFormat&, + GrRenderable, + const BackendTextureData* data, + int numMipLevels, + GrProtected) override; void deleteBackendTexture(const GrBackendTexture&) override; #if GR_TEST_UTILS diff --git a/third_party/skia/src/gpu/mock/GrMockTexture.h b/third_party/skia/src/gpu/mock/GrMockTexture.h index 21d0634fe39e..9590e07eef88 100644 --- a/third_party/skia/src/gpu/mock/GrMockTexture.h +++ b/third_party/skia/src/gpu/mock/GrMockTexture.h @@ -103,7 +103,7 @@ class GrMockRenderTarget : public GrRenderTarget { ++numColorSamples; } const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), numColorSamples, GrMipMapped::kNo); } @@ -188,7 +188,7 @@ class GrMockTextureRenderTarget : public GrMockTexture, public GrMockRenderTarge ++numColorSamples; } const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), numColorSamples, this->texturePriv().mipMapped()); } diff --git a/third_party/skia/src/gpu/mtl/GrMtlBuffer.mm b/third_party/skia/src/gpu/mtl/GrMtlBuffer.mm index fe585fcf50a6..304da546d10a 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlBuffer.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlBuffer.mm @@ -41,6 +41,11 @@ if (@available(macOS 10.11, iOS 9.0, *)) { options |= MTLResourceStorageModePrivate; } +#ifdef SK_BUILD_FOR_MAC + // Mac requires 4-byte alignment for copies so we need + // to ensure we have space for the extra data + size = GrSizeAlignUp(size, 4); +#endif fMtlBuffer = size == 0 ? nil : [gpu->device() newBufferWithLength: size options: options]; @@ -77,7 +82,7 @@ } SkASSERT(fMappedBuffer); if (!fIsDynamic) { - SkASSERT(srcInBytes == fMappedBuffer.length); + SkASSERT(GrSizeAlignUp(srcInBytes, 4) == fMappedBuffer.length); } memcpy(fMapPtr, src, srcInBytes); this->internalUnmap(srcInBytes); @@ -129,6 +134,10 @@ if (@available(macOS 10.11, iOS 9.0, *)) { options |= MTLResourceStorageModeShared; } +#ifdef SK_BUILD_FOR_MAC + // Mac requires 4-byte alignment for copies so we pad this out + sizeInBytes = GrSizeAlignUp(sizeInBytes, 4); +#endif fMappedBuffer = [this->mtlGpu()->device() newBufferWithLength: sizeInBytes options: options]; @@ -149,9 +158,13 @@ fMapPtr = nullptr; return; } +#ifdef SK_BUILD_FOR_MAC + // In both cases the size needs to be 4-byte aligned on Mac + sizeInBytes = GrSizeAlignUp(sizeInBytes, 4); +#endif if (fIsDynamic) { #ifdef SK_BUILD_FOR_MAC - // TODO: need to make sure offset and size have valid alignments. + SkASSERT(0 == (fOffset & 0x3)); // should be 4-byte aligned [fMtlBuffer didModifyRange: NSMakeRange(fOffset, sizeInBytes)]; #endif } else { diff --git a/third_party/skia/src/gpu/mtl/GrMtlCaps.h b/third_party/skia/src/gpu/mtl/GrMtlCaps.h index 6ffd3c322511..9962559bd1cf 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlCaps.h +++ b/third_party/skia/src/gpu/mtl/GrMtlCaps.h @@ -65,8 +65,13 @@ class GrMtlCaps : public GrCaps { return fPreferredStencilFormat; } - bool canCopyAsBlit(MTLPixelFormat dstFormat, int dstSampleCount, MTLPixelFormat srcFormat, - int srcSampleCount, const SkIRect& srcRect, const SkIPoint& dstPoint, + bool canCopyAsBlit(GrSurface* dst, int dstSampleCount, GrSurface* src, int srcSampleCount, + const SkIRect& srcRect, const SkIPoint& dstPoint, + bool areDstSrcSameObj) const; + + bool canCopyAsBlit(MTLPixelFormat dstFormat, int dstSampleCount, + MTLPixelFormat srcFormat, int srcSampleCount, + const SkIRect& srcRect, const SkIPoint& dstPoint, bool areDstSrcSameObj) const; bool canCopyAsResolve(GrSurface* dst, int dstSampleCount, GrSurface* src, int srcSampleCount, @@ -85,6 +90,8 @@ class GrMtlCaps : public GrCaps { GrSwizzle getTextureSwizzle(const GrBackendFormat&, GrColorType) const override; GrSwizzle getOutputSwizzle(const GrBackendFormat&, GrColorType) const override; + GrProgramDesc makeDesc(const GrRenderTarget*, const GrProgramInfo&) const override; + #if GR_TEST_UTILS std::vector getTestingCombinations() const override; #endif diff --git a/third_party/skia/src/gpu/mtl/GrMtlCaps.mm b/third_party/skia/src/gpu/mtl/GrMtlCaps.mm index 7511f263663b..a5fbdef5e8c5 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlCaps.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlCaps.mm @@ -9,7 +9,11 @@ #include "include/core/SkRect.h" #include "include/gpu/GrBackendSurface.h" +#include "src/gpu/GrProcessor.h" +#include "src/gpu/GrProgramDesc.h" +#include "src/gpu/GrProgramInfo.h" #include "src/gpu/GrRenderTarget.h" +#include "src/gpu/GrRenderTargetPriv.h" #include "src/gpu/GrRenderTargetProxy.h" #include "src/gpu/GrShaderCaps.h" #include "src/gpu/GrSurfaceProxy.h" @@ -30,12 +34,7 @@ this->initFormatTable(); this->initStencilFormat(device); - this->applyOptionsOverrides(contextOptions); - fShaderCaps->applyOptionsOverrides(contextOptions); - - // The following are disabled due to the unfinished Metal backend, not because Metal itself - // doesn't support it. - fCrossContextTextureSupport = false; // GrMtlGpu::prepareTextureForCrossContextUsage() not impl + this->finishInitialization(contextOptions); } void GrMtlCaps::initFeatureSet(MTLFeatureSet featureSet) { @@ -128,6 +127,23 @@ SK_ABORT("Requested an unsupported feature set"); } +bool GrMtlCaps::canCopyAsBlit(GrSurface* dst, int dstSampleCount, + GrSurface* src, int srcSampleCount, + const SkIRect& srcRect, const SkIPoint& dstPoint, + bool areDstSrcSameObj) const { + id dstTex = GrGetMTLTextureFromSurface(dst); + id srcTex = GrGetMTLTextureFromSurface(src); + if (srcTex.framebufferOnly || dstTex.framebufferOnly) { + return false; + } + + MTLPixelFormat dstFormat = dstTex.pixelFormat; + MTLPixelFormat srcFormat = srcTex.pixelFormat; + + return this->canCopyAsBlit(dstFormat, dstSampleCount, srcFormat, srcSampleCount, + srcRect, dstPoint, areDstSrcSameObj); +} + bool GrMtlCaps::canCopyAsBlit(MTLPixelFormat dstFormat, int dstSampleCount, MTLPixelFormat srcFormat, int srcSampleCount, const SkIRect& srcRect, const SkIPoint& dstPoint, @@ -185,6 +201,8 @@ SkASSERT((dstSampleCnt > 0) == SkToBool(dst->asRenderTargetProxy())); SkASSERT((srcSampleCnt > 0) == SkToBool(src->asRenderTargetProxy())); + // TODO: need some way to detect whether the proxy is framebufferOnly + return this->canCopyAsBlit(GrBackendFormatAsMTLPixelFormat(dst->backendFormat()), dstSampleCnt, GrBackendFormatAsMTLPixelFormat(src->backendFormat()), srcSampleCnt, srcRect, dstPoint, dst == src); @@ -273,8 +291,10 @@ } fSemaphoreSupport = supportsMTLEvent; - fCrossContextTextureSupport = false; + fCrossContextTextureSupport = true; fHalfFloatVertexAttributeSupport = true; + + fDynamicStateArrayGeometryProcessorTextureSupport = true; } static bool format_is_srgb(MTLPixelFormat format) { @@ -950,6 +970,11 @@ static constexpr GrPixelConfig validate_sized_format(GrMTLPixelFormat grFormat, case GrColorType::kAlpha_8xxx: case GrColorType::kAlpha_F32xxx: case GrColorType::kGray_8xxx: + case GrColorType::kRGB_888: + case GrColorType::kR_8: + case GrColorType::kR_16: + case GrColorType::kR_F16: + case GrColorType::kGray_F16: return kUnknown_GrPixelConfig; } SkUNREACHABLE; @@ -1074,6 +1099,52 @@ static constexpr GrPixelConfig validate_sized_format(GrMTLPixelFormat grFormat, return {GrColorType::kUnknown, 0}; } +/** + * For Metal we want to cache the entire pipeline for reuse of draws. The Desc here holds all + * the information needed to differentiate one pipeline from another. + * + * The GrProgramDesc contains all the information need to create the actual shaders for the + * pipeline. + * + * For Metal we need to add to the GrProgramDesc to include the rest of the state on the + * pipeline. This includes blending information and primitive type. The pipeline is immutable + * so any remaining dynamic state is set via the MtlRenderCmdEncoder. + */ +GrProgramDesc GrMtlCaps::makeDesc(const GrRenderTarget* rt, + const GrProgramInfo& programInfo) const { + + GrProgramDesc desc; + if (!GrProgramDesc::Build(&desc, rt, programInfo, *this)) { + SkASSERT(!desc.isValid()); + return desc; + } + + GrProcessorKeyBuilder b(&desc.key()); + + b.add32(programInfo.backendFormat().asMtlFormat()); + + b.add32(programInfo.numRasterSamples()); + +#ifdef SK_DEBUG + if (rt && programInfo.pipeline().isStencilEnabled()) { + SkASSERT(rt->renderTargetPriv().getStencilAttachment()); + } +#endif + + b.add32(programInfo.pipeline().isStencilEnabled() + ? this->preferredStencilFormat().fInternalFormat + : MTLPixelFormatInvalid); + b.add32((uint32_t)programInfo.pipeline().isStencilEnabled()); + // Stencil samples don't seem to be tracked in the MTLRenderPipeline + + programInfo.pipeline().genKey(&b, *this); + + b.add32((uint32_t)programInfo.primitiveType()); + + return desc; +} + + #if GR_TEST_UTILS std::vector GrMtlCaps::getTestingCombinations() const { std::vector combos = { diff --git a/third_party/skia/src/gpu/mtl/GrMtlDepthStencil.mm b/third_party/skia/src/gpu/mtl/GrMtlDepthStencil.mm index 7434772531c1..8cb584d6548f 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlDepthStencil.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlDepthStencil.mm @@ -75,11 +75,11 @@ MTLStencilOperation skia_stencil_op_to_mtl(GrStencilOp op) { MTLDepthStencilDescriptor* desc = [[MTLDepthStencilDescriptor alloc] init]; if (!stencil.isDisabled()) { if (stencil.isTwoSided()) { - desc.frontFaceStencil = skia_stencil_to_mtl(stencil.front(origin)); - desc.backFaceStencil = skia_stencil_to_mtl(stencil.back(origin)); + desc.frontFaceStencil = skia_stencil_to_mtl(stencil.postOriginCCWFace(origin)); + desc.backFaceStencil = skia_stencil_to_mtl(stencil.postOriginCWFace(origin)); } else { - desc.frontFaceStencil = skia_stencil_to_mtl(stencil.frontAndBack()); + desc.frontFaceStencil = skia_stencil_to_mtl(stencil.singleSidedFace()); desc.backFaceStencil = desc.frontFaceStencil; } } @@ -113,11 +113,11 @@ void skia_stencil_to_key(GrStencilSettings::Face face, GrMtlDepthStencil::Key::F memset(&depthStencilKey, 0, sizeof(Key)); } else { if (stencil.isTwoSided()) { - skia_stencil_to_key(stencil.front(origin), &depthStencilKey.fFront); - skia_stencil_to_key(stencil.back(origin), &depthStencilKey.fBack); + skia_stencil_to_key(stencil.postOriginCCWFace(origin), &depthStencilKey.fFront); + skia_stencil_to_key(stencil.postOriginCWFace(origin), &depthStencilKey.fBack); } else { - skia_stencil_to_key(stencil.frontAndBack(), &depthStencilKey.fFront); + skia_stencil_to_key(stencil.singleSidedFace(), &depthStencilKey.fFront); memcpy(&depthStencilKey.fBack, &depthStencilKey.fFront, sizeof(Key::Face)); } } diff --git a/third_party/skia/src/gpu/mtl/GrMtlGpu.h b/third_party/skia/src/gpu/mtl/GrMtlGpu.h index 7fd9134afddb..4df71c56a5c2 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlGpu.h +++ b/third_party/skia/src/gpu/mtl/GrMtlGpu.h @@ -80,7 +80,7 @@ class GrMtlGpu : public GrGpu { GrRenderTarget*, GrSurfaceOrigin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo&, const GrOpsRenderPass::StencilLoadAndStoreInfo&, - const SkTArray& sampledProxies) override; + const SkTArray& sampledProxies) override; SkSL::Compiler* shaderCompiler() const { return fCompiler.get(); } @@ -90,14 +90,17 @@ class GrMtlGpu : public GrGpu { bool waitFence(GrFence, uint64_t) override; void deleteFence(GrFence) const override; - sk_sp SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override; - sk_sp wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) override; - void insertSemaphore(sk_sp semaphore) override; - void waitSemaphore(sk_sp semaphore) override; + std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override; + std::unique_ptr wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, + GrWrapOwnership ownership) override; + void insertSemaphore(GrSemaphore* semaphore) override; + void waitSemaphore(GrSemaphore* semaphore) override; void checkFinishProcs() override; - sk_sp prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; } + std::unique_ptr prepareTextureForCrossContextUsage(GrTexture*) override { + return nullptr; + } // When the Metal backend actually uses indirect command buffers, this function will actually do // what it says. For now, every command is encoded directly into the primary command buffer, so @@ -123,10 +126,12 @@ class GrMtlGpu : public GrGpu { void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {} - GrBackendTexture onCreateBackendTexture(int w, int h, const GrBackendFormat&, - GrMipMapped, GrRenderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrProtected) override; + GrBackendTexture onCreateBackendTexture(SkISize, + const GrBackendFormat&, + GrRenderable, + const BackendTextureData*, + int numMipLevels, + GrProtected) override; sk_sp onCreateTexture(const GrSurfaceDesc& desc, const GrBackendFormat& format, @@ -180,7 +185,7 @@ class GrMtlGpu : public GrGpu { void resolveTexture(id colorTexture, id resolveTexture); - void onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, + bool onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, const GrPrepareForExternalIORequests&) override; // Function that uploads data onto textures with private storage mode (GPU access only). @@ -196,10 +201,12 @@ class GrMtlGpu : public GrGpu { const GrRenderTarget*, int width, int height, int numStencilSamples) override; bool createMtlTextureForBackendSurface(MTLPixelFormat, - int w, int h, bool texturable, - bool renderable, GrMipMapped, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrMtlTextureInfo*); + SkISize, + bool texturable, + bool renderable, + const BackendTextureData*, + int numMipLevels, + GrMtlTextureInfo*); #if GR_TEST_UTILS void testingOnly_startCapture() override; @@ -217,11 +224,6 @@ class GrMtlGpu : public GrGpu { GrMtlResourceProvider fResourceProvider; - // For FenceSync - id fSharedEvent API_AVAILABLE(macos(10.14), ios(12.0)); - MTLSharedEventListener* fSharedEventListener API_AVAILABLE(macos(10.14), ios(12.0)); - uint64_t fLatestEvent; - bool fDisconnected; struct FinishCallback { diff --git a/third_party/skia/src/gpu/mtl/GrMtlGpu.mm b/third_party/skia/src/gpu/mtl/GrMtlGpu.mm index 8e102306ae23..e2da15a094ff 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlGpu.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlGpu.mm @@ -120,14 +120,6 @@ static bool get_feature_set(id device, MTLFeatureSet* featureSet) { , fDisconnected(false) { fMtlCaps.reset(new GrMtlCaps(options, fDevice, featureSet)); fCaps = fMtlCaps; - if (@available(macOS 10.14, iOS 12.0, *)) { - if (fMtlCaps->fenceSyncSupport()) { - fSharedEvent = [fDevice newSharedEvent]; - dispatch_queue_t dispatchQ = dispatch_queue_create("MTLFenceSync", NULL); - fSharedEventListener = [[MTLSharedEventListener alloc] initWithDispatchQueue:dispatchQ]; - fLatestEvent = 0; - } - } } GrMtlGpu::~GrMtlGpu() { @@ -167,7 +159,7 @@ static bool get_feature_set(id device, MTLFeatureSet* featureSet) { GrRenderTarget* renderTarget, GrSurfaceOrigin origin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo, - const SkTArray& sampledProxies) { + const SkTArray& sampledProxies) { return new GrMtlOpsRenderPass(this, renderTarget, origin, colorInfo, stencilInfo); } @@ -193,7 +185,7 @@ static bool get_feature_set(id device, MTLFeatureSet* featureSet) { } } -void GrMtlGpu::onFinishFlush(GrSurfaceProxy*[], int, SkSurface::BackendSurfaceAccess, +bool GrMtlGpu::onFinishFlush(GrSurfaceProxy*[], int, SkSurface::BackendSurfaceAccess, const GrFlushInfo& info, const GrPrepareForExternalIORequests&) { bool forceSync = SkToBool(info.fFlags & kSyncCpu_GrFlushFlag) || (info.fFinishedProc && !this->mtlCaps().fenceSyncSupport()); @@ -219,6 +211,7 @@ static bool get_feature_set(id device, MTLFeatureSet* featureSet) { } this->submitCommandBuffer(kSkip_SyncQueue); } + return true; } void GrMtlGpu::checkFinishProcs() { @@ -285,9 +278,8 @@ static bool check_max_blit_width(int widthInPixels) { size_t bpp = GrColorTypeBytesPerPixel(dataColorType); SkTArray individualMipOffsets(mipLevelCount); - size_t combinedBufferSize = GrComputeTightCombinedBufferSize(bpp, width, height, - &individualMipOffsets, - mipLevelCount); + size_t combinedBufferSize = GrComputeTightCombinedBufferSize( + bpp, {width, height}, &individualMipOffsets, mipLevelCount); SkASSERT(combinedBufferSize); size_t bufferOffset; @@ -740,31 +732,29 @@ static inline void init_surface_desc(GrSurfaceDesc* surfaceDesc, id return true; } -static GrPixelConfig mtl_format_to_pixelconfig(MTLPixelFormat format) { +// Used to "clear" a backend texture to a constant color by transferring. +static GrColorType mtl_format_to_backend_tex_clear_colortype(MTLPixelFormat format) { switch(format) { - case MTLPixelFormatA8Unorm: return kAlpha_8_GrPixelConfig; - case MTLPixelFormatR8Unorm: return kAlpha_8_GrPixelConfig; + case MTLPixelFormatA8Unorm: return GrColorType::kAlpha_8; + case MTLPixelFormatR8Unorm: return GrColorType::kR_8; #ifdef SK_BUILD_FOR_IOS - case MTLPixelFormatB5G6R5Unorm: return kRGB_565_GrPixelConfig; - case MTLPixelFormatABGR4Unorm: return kRGBA_4444_GrPixelConfig; + case MTLPixelFormatB5G6R5Unorm: return GrColorType::kBGR_565; + case MTLPixelFormatABGR4Unorm: return GrColorType::kABGR_4444; #endif - case MTLPixelFormatRGBA8Unorm: return kRGBA_8888_GrPixelConfig; - case MTLPixelFormatRGBA8Unorm_sRGB: return kSRGBA_8888_GrPixelConfig; + case MTLPixelFormatRGBA8Unorm: return GrColorType::kRGBA_8888; + case MTLPixelFormatRGBA8Unorm_sRGB: return GrColorType::kRGBA_8888_SRGB; -#ifdef SK_BUILD_FOR_IOS - case MTLPixelFormatETC2_RGB8: return kRGB_ETC1_GrPixelConfig; -#endif - case MTLPixelFormatRG8Unorm: return kRG_88_GrPixelConfig; - case MTLPixelFormatBGRA8Unorm: return kBGRA_8888_GrPixelConfig; - case MTLPixelFormatRGB10A2Unorm: return kRGBA_1010102_GrPixelConfig; - case MTLPixelFormatR16Float: return kAlpha_half_GrPixelConfig; - case MTLPixelFormatRGBA16Float: return kRGBA_half_GrPixelConfig; - case MTLPixelFormatR16Unorm: return kAlpha_16_GrPixelConfig; - case MTLPixelFormatRG16Unorm: return kRG_1616_GrPixelConfig; - case MTLPixelFormatRGBA16Unorm: return kRGBA_16161616_GrPixelConfig; - case MTLPixelFormatRG16Float: return kRG_half_GrPixelConfig; - default: return kUnknown_GrPixelConfig; + case MTLPixelFormatRG8Unorm: return GrColorType::kRG_88; + case MTLPixelFormatBGRA8Unorm: return GrColorType::kBGRA_8888; + case MTLPixelFormatRGB10A2Unorm: return GrColorType::kRGBA_1010102; + case MTLPixelFormatR16Float: return GrColorType::kR_F16; + case MTLPixelFormatRGBA16Float: return GrColorType::kRGBA_F16; + case MTLPixelFormatR16Unorm: return GrColorType::kR_16; + case MTLPixelFormatRG16Unorm: return GrColorType::kRG_1616; + case MTLPixelFormatRGBA16Unorm: return GrColorType::kRGBA_16161616; + case MTLPixelFormatRG16Float: return GrColorType::kRG_F16; + default: return GrColorType::kUnknown; } SkUNREACHABLE; @@ -785,14 +775,15 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi } bool GrMtlGpu::createMtlTextureForBackendSurface(MTLPixelFormat format, - int w, int h, bool texturable, - bool renderable, GrMipMapped mipMapped, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrMtlTextureInfo* info) { + SkISize dimensions, + bool texturable, + bool renderable, + const BackendTextureData* data, + int numMipLevels, + GrMtlTextureInfo* info) { SkASSERT(texturable || renderable); if (!texturable) { - SkASSERT(GrMipMapped::kNo == mipMapped); - SkASSERT(!srcData && !numMipLevels); + SkASSERT(!data && numMipLevels == 1); } #ifdef SK_BUILD_FOR_IOS @@ -807,23 +798,15 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi return false; } - if (!check_max_blit_width(w)) { + if (!check_max_blit_width(dimensions.width())) { return false; } - int mipLevelCount = 1; - if (srcData) { - SkASSERT(numMipLevels > 0); - mipLevelCount = numMipLevels; - } else if (GrMipMapped::kYes == mipMapped) { - mipLevelCount = SkMipMap::ComputeLevelCount(w, h) + 1; - } - - bool mipmapped = mipMapped == GrMipMapped::kYes ? true : false; + bool mipmapped = numMipLevels > 1; MTLTextureDescriptor* desc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat: format - width: w - height: h + width: dimensions.width() + height: dimensions.height() mipmapped: mipmapped]; if (@available(macOS 10.11, iOS 9.0, *)) { desc.storageMode = MTLStorageModePrivate; @@ -832,7 +815,7 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi } id testTexture = [fDevice newTextureWithDescriptor: desc]; - if (!srcData && !color) { + if (!data) { info->fTexture.reset(GrRetainPtrFromId(testTexture)); return true; @@ -841,11 +824,6 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi // Create the transfer buffer size_t bytesPerPixel = fMtlCaps->bytesPerPixel(format); - SkTArray individualMipOffsets(mipLevelCount); - size_t combinedBufferSize = GrComputeTightCombinedBufferSize(bytesPerPixel, w, h, - &individualMipOffsets, - mipLevelCount); - NSUInteger options = 0; // TODO: consider other options here if (@available(macOS 10.11, iOS 9.0, *)) { #ifdef SK_BUILD_FOR_MAC @@ -855,34 +833,51 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi #endif } - id transferBuffer = [fDevice newBufferWithLength: combinedBufferSize - options: options]; - if (nil == transferBuffer) { - return false; - } - - char* buffer = (char*) transferBuffer.contents; - - // Fill buffer with data - if (srcData) { - copy_src_data(buffer, bytesPerPixel, individualMipOffsets, - srcData, numMipLevels, combinedBufferSize); - } else if (color) { - GrPixelConfig config = mtl_format_to_pixelconfig(format); - auto colorType = GrPixelConfigToColorType(config); - SkASSERT(kUnknown_GrPixelConfig != config); - GrFillInData(colorType, w, h, individualMipOffsets, buffer, *color); + // Create a transfer buffer and fill with data. + SkSTArray<16, size_t> individualMipOffsets; + id transferBuffer; + size_t transferBufferSize; + if (data->type() == BackendTextureData::Type::kPixmaps) { + transferBufferSize = GrComputeTightCombinedBufferSize(bytesPerPixel, dimensions, + &individualMipOffsets, numMipLevels); + transferBuffer = [fDevice newBufferWithLength: transferBufferSize + options: options]; + if (nil == transferBuffer) { + return false; + } + char* buffer = (char*)transferBuffer.contents; + copy_src_data(buffer, bytesPerPixel, individualMipOffsets, data->pixmaps(), numMipLevels, + transferBufferSize); + } else { + SkASSERT(data->type() == BackendTextureData::Type::kColor); + auto colorType = mtl_format_to_backend_tex_clear_colortype(format); + if (colorType == GrColorType::kUnknown) { + return false; + } + GrImageInfo ii(colorType, kUnpremul_SkAlphaType, nullptr, dimensions); + auto rb = ii.minRowBytes(); + transferBufferSize = rb*dimensions.height(); + transferBuffer = [fDevice newBufferWithLength: transferBufferSize + options: options]; + if (nil == transferBuffer) { + return false; + } + if (!GrClearImage(ii, transferBuffer.contents, rb, data->color())) { + return false; + } + // Reuse the same buffer for all levels. Should be ok since we made the row bytes tight. + individualMipOffsets.push_back_n(numMipLevels, (size_t)0); } // Transfer buffer contents to texture - int currentWidth = w; - int currentHeight = h; + int currentWidth = dimensions.width(); + int currentHeight = dimensions.height(); MTLOrigin origin = MTLOriginMake(0, 0, 0); id cmdBuffer = [fQueue commandBuffer]; id blitCmdEncoder = [cmdBuffer blitCommandEncoder]; - for (int currentMipLevel = 0; currentMipLevel < mipLevelCount; currentMipLevel++) { + for (int currentMipLevel = 0; currentMipLevel < numMipLevels; currentMipLevel++) { size_t trimRowBytes = currentWidth * bytesPerPixel; size_t levelSize = trimRowBytes*currentHeight; @@ -901,7 +896,7 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi currentHeight = SkTMax(1, currentHeight/2); } #ifdef SK_BUILD_FOR_MAC - [transferBuffer didModifyRange: NSMakeRange(0, combinedBufferSize)]; + [transferBuffer didModifyRange: NSMakeRange(0, transferBufferSize)]; #endif [blitCmdEncoder endEncoding]; @@ -914,30 +909,22 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi return true; } -GrBackendTexture GrMtlGpu::onCreateBackendTexture(int w, int h, +GrBackendTexture GrMtlGpu::onCreateBackendTexture(SkISize dimensions, const GrBackendFormat& format, - GrMipMapped mipMapped, GrRenderable renderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, + const BackendTextureData* data, + int numMipLevels, GrProtected isProtected) { - SkDEBUGCODE(const GrMtlCaps& caps = this->mtlCaps();) - // GrGpu::createBackendTexture should've ensured these conditions - SkASSERT(w >= 1 && w <= caps.maxTextureSize() && h >= 1 && h <= caps.maxTextureSize()); - SkASSERT(GrGpu::MipMapsAreCorrect(w, h, mipMapped, srcData, numMipLevels)); - SkASSERT(mipMapped == GrMipMapped::kNo || caps.mipMapSupport()); - const MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(format); GrMtlTextureInfo info; - if (!this->createMtlTextureForBackendSurface(mtlFormat, - w, h, true, - GrRenderable::kYes == renderable, mipMapped, - srcData, numMipLevels, color, &info)) { + if (!this->createMtlTextureForBackendSurface(mtlFormat, dimensions, true, + GrRenderable::kYes == renderable, data, + numMipLevels, &info)) { return {}; } - - GrBackendTexture backendTex(w, h, mipMapped, info); + GrMipMapped mipMapped = numMipLevels > 1 ? GrMipMapped::kYes : GrMipMapped::kNo; + GrBackendTexture backendTex(dimensions.width(), dimensions.height(), mipMapped, info); return backendTex; } @@ -978,8 +965,7 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi } GrMtlTextureInfo info; - if (!this->createMtlTextureForBackendSurface(format, w, h, false, true, - GrMipMapped::kNo, nullptr, 0, nullptr, &info)) { + if (!this->createMtlTextureForBackendSurface(format, {w, h}, false, true, nullptr, 1, &info)) { return {}; } @@ -1028,15 +1014,15 @@ static int get_surface_sample_cnt(GrSurface* surf) { void GrMtlGpu::copySurfaceAsBlit(GrSurface* dst, GrSurface* src, const SkIRect& srcRect, const SkIPoint& dstPoint) { - id dstTex = GrGetMTLTextureFromSurface(dst); - id srcTex = GrGetMTLTextureFromSurface(src); - #ifdef SK_DEBUG int dstSampleCnt = get_surface_sample_cnt(dst); int srcSampleCnt = get_surface_sample_cnt(src); - SkASSERT(this->mtlCaps().canCopyAsBlit(dstTex.pixelFormat, dstSampleCnt, srcTex.pixelFormat, - srcSampleCnt, srcRect, dstPoint, dst == src)); + SkASSERT(this->mtlCaps().canCopyAsBlit(dst, dstSampleCnt, src, srcSampleCnt, + srcRect, dstPoint, dst == src)); #endif + id dstTex = GrGetMTLTextureFromSurface(dst); + id srcTex = GrGetMTLTextureFromSurface(src); + id blitCmdEncoder = this->commandBuffer()->getBlitCommandEncoder(); [blitCmdEncoder copyFromTexture: srcTex sourceSlice: 0 @@ -1053,9 +1039,6 @@ static int get_surface_sample_cnt(GrSurface* surf) { const SkIPoint& dstPoint) { SkASSERT(!src->isProtected() && !dst->isProtected()); - MTLPixelFormat dstFormat = GrBackendFormatAsMTLPixelFormat(dst->backendFormat()); - MTLPixelFormat srcFormat = GrBackendFormatAsMTLPixelFormat(src->backendFormat()); - int dstSampleCnt = get_surface_sample_cnt(dst); int srcSampleCnt = get_surface_sample_cnt(src); @@ -1063,8 +1046,8 @@ static int get_surface_sample_cnt(GrSurface* surf) { if (this->mtlCaps().canCopyAsResolve(dst, dstSampleCnt, src, srcSampleCnt, srcRect, dstPoint)) { this->copySurfaceAsResolve(dst, src); success = true; - } else if (this->mtlCaps().canCopyAsBlit(dstFormat, dstSampleCnt, srcFormat, srcSampleCnt, - srcRect, dstPoint, dst == src)) { + } else if (this->mtlCaps().canCopyAsBlit(dst, dstSampleCnt, src, srcSampleCnt, srcRect, + dstPoint, dst == src)) { this->copySurfaceAsBlit(dst, src, srcRect, dstPoint); success = true; } @@ -1249,14 +1232,8 @@ static int get_surface_sample_cnt(GrSurface* surf) { GrFence SK_WARN_UNUSED_RESULT GrMtlGpu::insertFence() { GrMtlCommandBuffer* cmdBuffer = this->commandBuffer(); - if (@available(macOS 10.14, iOS 12.0, *)) { - ++fLatestEvent; - cmdBuffer->encodeSignalEvent(fSharedEvent, fLatestEvent); - - return fLatestEvent; - } - // If MTLSharedEvent isn't available, we create a semaphore and signal it - // within the current command buffer's completion handler. + // We create a semaphore and signal it within the current + // command buffer's completion handler. dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); cmdBuffer->addCompletedHandler(^(id commandBuffer) { dispatch_semaphore_signal(semaphore); @@ -1267,61 +1244,44 @@ static int get_surface_sample_cnt(GrSurface* surf) { } bool GrMtlGpu::waitFence(GrFence fence, uint64_t timeout) { - dispatch_semaphore_t semaphore; - if (@available(macOS 10.14, iOS 12.0, *)) { - semaphore = dispatch_semaphore_create(0); - - // Add listener for this particular value or greater - __block dispatch_semaphore_t block_sema = semaphore; - [fSharedEvent notifyListener: fSharedEventListener - atValue: fence - block: ^(id sharedEvent, uint64_t value) { - dispatch_semaphore_signal(block_sema); - }]; + const void* cfFence = (const void*) fence; + dispatch_semaphore_t semaphore = (__bridge dispatch_semaphore_t)cfFence; - } else { - const void* cfFence = (const void*) fence; - semaphore = (__bridge dispatch_semaphore_t)cfFence; - } long result = dispatch_semaphore_wait(semaphore, timeout); return !result; } void GrMtlGpu::deleteFence(GrFence fence) const { - if (@available(macOS 10.14, iOS 12.0, *)) { - // nothing to delete - } else { - const void* cfFence = (const void*) fence; - // In this case it's easier to release in CoreFoundation than depend on ARC - CFRelease(cfFence); - } + const void* cfFence = (const void*) fence; + // In this case it's easier to release in CoreFoundation than depend on ARC + CFRelease(cfFence); } -sk_sp SK_WARN_UNUSED_RESULT GrMtlGpu::makeSemaphore(bool isOwned) { +std::unique_ptr SK_WARN_UNUSED_RESULT GrMtlGpu::makeSemaphore(bool /*isOwned*/) { SkASSERT(this->caps()->semaphoreSupport()); - return GrMtlSemaphore::Make(this, isOwned); + return GrMtlSemaphore::Make(this); } -sk_sp GrMtlGpu::wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) { +std::unique_ptr GrMtlGpu::wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, + GrWrapOwnership /*ownership*/) { SkASSERT(this->caps()->semaphoreSupport()); - return GrMtlSemaphore::MakeWrapped(this, semaphore.mtlSemaphore(), semaphore.mtlValue(), - ownership); + return GrMtlSemaphore::MakeWrapped(semaphore.mtlSemaphore(), semaphore.mtlValue()); } -void GrMtlGpu::insertSemaphore(sk_sp semaphore) { +void GrMtlGpu::insertSemaphore(GrSemaphore* semaphore) { if (@available(macOS 10.14, iOS 12.0, *)) { - GrMtlSemaphore* mtlSem = static_cast(semaphore.get()); + GrMtlSemaphore* mtlSem = static_cast(semaphore); this->commandBuffer()->encodeSignalEvent(mtlSem->event(), mtlSem->value()); } } -void GrMtlGpu::waitSemaphore(sk_sp semaphore) { +void GrMtlGpu::waitSemaphore(GrSemaphore* semaphore) { if (@available(macOS 10.14, iOS 12.0, *)) { - GrMtlSemaphore* mtlSem = static_cast(semaphore.get()); + GrMtlSemaphore* mtlSem = static_cast(semaphore); this->commandBuffer()->encodeWaitForEvent(mtlSem->event(), mtlSem->value()); } diff --git a/third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.h b/third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.h index 702bf29d80d6..a308bbe1487f 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.h +++ b/third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.h @@ -44,7 +44,7 @@ class GrMtlOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl private: GrGpu* gpu() override { return fGpu; } - GrMtlPipelineState* prepareDrawState(const GrProgramInfo&, GrPrimitiveType); + GrMtlPipelineState* prepareDrawState(const GrProgramInfo&); void onDraw(const GrProgramInfo& programInfo, const GrMesh mesh[], diff --git a/third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm b/third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm index f587492f771a..39110df3208f 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlOpsRenderPass.mm @@ -51,14 +51,11 @@ fGpu->submitIndirectCommandBuffer(fRenderTarget, fOrigin, &iBounds); } -GrMtlPipelineState* GrMtlOpsRenderPass::prepareDrawState(const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType) { +GrMtlPipelineState* GrMtlOpsRenderPass::prepareDrawState(const GrProgramInfo& programInfo) { // TODO: resolve textures and regenerate mipmaps as needed GrMtlPipelineState* pipelineState = - fGpu->resourceProvider().findOrCreateCompatiblePipelineState(fRenderTarget, - programInfo, - primitiveType); + fGpu->resourceProvider().findOrCreateCompatiblePipelineState(fRenderTarget, programInfo); if (!pipelineState) { return nullptr; } @@ -76,8 +73,7 @@ SkASSERT(meshCount); // guaranteed by GrOpsRenderPass::draw - GrPrimitiveType primitiveType = meshes[0].primitiveType(); - GrMtlPipelineState* pipelineState = this->prepareDrawState(programInfo, primitiveType); + GrMtlPipelineState* pipelineState = this->prepareDrawState(programInfo); if (!pipelineState) { return; } @@ -93,6 +89,7 @@ programInfo.pipeline().getXferProcessor()); bool hasDynamicScissors = programInfo.hasDynamicScissors(); + bool hasDynamicTextures = programInfo.hasDynamicPrimProcTextures(); if (!programInfo.pipeline().isScissorEnabled()) { GrMtlPipelineState::SetDynamicScissorRectState(fActiveRenderCmdEncoder, @@ -107,28 +104,25 @@ programInfo.fixedScissor()); } + if (!hasDynamicTextures) { + pipelineState->bindTextures(fActiveRenderCmdEncoder); + } + for (int i = 0; i < meshCount; ++i) { const GrMesh& mesh = meshes[i]; SkASSERT(nil != fActiveRenderCmdEncoder); - if (mesh.primitiveType() != primitiveType) { - SkDEBUGCODE(pipelineState = nullptr); - primitiveType = mesh.primitiveType(); - pipelineState = this->prepareDrawState(programInfo, primitiveType); - if (!pipelineState) { - return; - } - - [fActiveRenderCmdEncoder setRenderPipelineState:pipelineState->mtlPipelineState()]; - pipelineState->setDrawState(fActiveRenderCmdEncoder, - programInfo.pipeline().outputSwizzle(), - programInfo.pipeline().getXferProcessor()); - } + SkASSERT(mesh.primitiveType() == programInfo.primitiveType()); if (hasDynamicScissors) { GrMtlPipelineState::SetDynamicScissorRectState(fActiveRenderCmdEncoder, fRenderTarget, fOrigin, programInfo.dynamicScissor(i)); } + if (hasDynamicTextures) { + auto meshProxies = programInfo.dynamicPrimProcTextures(i); + pipelineState->setTextures(programInfo, meshProxies); + pipelineState->bindTextures(fActiveRenderCmdEncoder); + } mesh.sendToGpu(this); } diff --git a/third_party/skia/src/gpu/mtl/GrMtlPipelineState.h b/third_party/skia/src/gpu/mtl/GrMtlPipelineState.h index e71aee261132..4562591767c3 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlPipelineState.h +++ b/third_party/skia/src/gpu/mtl/GrMtlPipelineState.h @@ -48,6 +48,10 @@ class GrMtlPipelineState { void setData(const GrRenderTarget*, const GrProgramInfo&); + void setTextures(const GrProgramInfo& programInfo, + const GrSurfaceProxy* const primProcTextures[]); + void bindTextures(id renderCmdEncoder); + void setDrawState(id, const GrSwizzle& outputSwizzle, const GrXferProcessor&); @@ -97,7 +101,7 @@ class GrMtlPipelineState { void setRenderTargetState(const GrRenderTarget*, GrSurfaceOrigin); - void bind(id); + void bindUniforms(id); void setBlendConstants(id, const GrSwizzle&, const GrXferProcessor&); diff --git a/third_party/skia/src/gpu/mtl/GrMtlPipelineState.mm b/third_party/skia/src/gpu/mtl/GrMtlPipelineState.mm index 83af60373183..b59630994dd2 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlPipelineState.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlPipelineState.mm @@ -58,36 +58,47 @@ 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); - // Note: the Metal backend currently only supports fixed primProc textures - SkASSERT(!programInfo.hasDynamicPrimProcTextures()); - auto proxies = programInfo.hasFixedPrimProcTextures() ? programInfo.fixedPrimProcTextures() - : nullptr; + if (!programInfo.hasDynamicPrimProcTextures()) { + auto proxies = programInfo.hasFixedPrimProcTextures() ? programInfo.fixedPrimProcTextures() + : nullptr; + this->setTextures(programInfo, proxies); + } + fDataManager.resetDirtyBits(); - this->setRenderTargetState(renderTarget, programInfo.origin()); - fGeometryProcessor->setData(fDataManager, programInfo.primProc(), - GrFragmentProcessor::CoordTransformIter(programInfo.pipeline())); +#ifdef SK_DEBUG + if (programInfo.pipeline().isStencilEnabled()) { + SkASSERT(renderTarget->renderTargetPriv().getStencilAttachment()); + SkASSERT(renderTarget->renderTargetPriv().numStencilBits() == 8); + } +#endif + + fStencil = programInfo.nonGLStencilSettings(); +} + +void GrMtlPipelineState::setTextures(const GrProgramInfo& programInfo, + const GrSurfaceProxy* const primProcTextures[]) { fSamplerBindings.reset(); for (int i = 0; i < programInfo.primProc().numTextureSamplers(); ++i) { + SkASSERT(primProcTextures[i]->asTextureProxy()); const auto& sampler = programInfo.primProc().textureSampler(i); - auto texture = static_cast(proxies[i]->peekTexture()); + auto texture = static_cast(primProcTextures[i]->peekTexture()); fSamplerBindings.emplace_back(sampler.samplerState(), texture, fGpu); } - GrFragmentProcessor::Iter iter(programInfo.pipeline()); + GrFragmentProcessor::CIter fpIter(programInfo.pipeline()); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); - const GrFragmentProcessor* fp = iter.next(); - GrGLSLFragmentProcessor* glslFP = glslIter.next(); - while (fp && glslFP) { - glslFP->setData(fDataManager, *fp); - for (int i = 0; i < fp->numTextureSamplers(); ++i) { - const auto& sampler = fp->textureSampler(i); + for (; fpIter && glslIter; ++fpIter, ++glslIter) { + glslIter->setData(fDataManager, *fpIter); + for (int i = 0; i < fpIter->numTextureSamplers(); ++i) { + const auto& sampler = fpIter->textureSampler(i); fSamplerBindings.emplace_back(sampler.samplerState(), sampler.peekTexture(), fGpu); } - fp = iter.next(); - glslFP = glslIter.next(); } - SkASSERT(!fp && !glslFP); + SkASSERT(!fpIter && !glslIter); { SkIPoint offset; @@ -97,36 +108,30 @@ dstTexture, offset); } - if (GrTextureProxy* dstTextureProxy = programInfo.pipeline().dstTextureProxy()) { + if (GrTextureProxy* dstTextureProxy = programInfo.pipeline().dstProxyView().asTextureProxy()) { fSamplerBindings.emplace_back(GrSamplerState::ClampNearest(), dstTextureProxy->peekTexture(), fGpu); } SkASSERT(fNumSamplers == fSamplerBindings.count()); - fDataManager.resetDirtyBits(); - - if (programInfo.pipeline().isStencilEnabled()) { - SkASSERT(renderTarget->renderTargetPriv().getStencilAttachment()); - fStencil.reset(*programInfo.pipeline().getUserStencil(), - programInfo.pipeline().hasStencilClip(), - renderTarget->renderTargetPriv().numStencilBits()); - } } void GrMtlPipelineState::setDrawState(id renderCmdEncoder, const GrSwizzle& outputSwizzle, const GrXferProcessor& xferProcessor) { [renderCmdEncoder pushDebugGroup:@"setDrawState"]; - this->bind(renderCmdEncoder); + this->bindUniforms(renderCmdEncoder); this->setBlendConstants(renderCmdEncoder, outputSwizzle, xferProcessor); this->setDepthStencilState(renderCmdEncoder); [renderCmdEncoder popDebugGroup]; } -void GrMtlPipelineState::bind(id renderCmdEncoder) { +void GrMtlPipelineState::bindUniforms(id renderCmdEncoder) { fDataManager.uploadAndBindUniformBuffers(fGpu, renderCmdEncoder); +} +void GrMtlPipelineState::bindTextures(id renderCmdEncoder) { SkASSERT(fNumSamplers == fSamplerBindings.count()); for (int index = 0; index < fNumSamplers; ++index) { [renderCmdEncoder setFragmentTexture: fSamplerBindings[index].fTexture @@ -144,12 +149,11 @@ } // set RT adjustment - SkISize size; - size.set(rt->width(), rt->height()); + SkISize dimensions = rt->dimensions(); SkASSERT(fBuiltinUniformHandles.fRTAdjustmentUni.isValid()); if (fRenderTargetState.fRenderTargetOrigin != origin || - fRenderTargetState.fRenderTargetSize != size) { - fRenderTargetState.fRenderTargetSize = size; + fRenderTargetState.fRenderTargetSize != dimensions) { + fRenderTargetState.fRenderTargetSize = dimensions; fRenderTargetState.fRenderTargetOrigin = origin; float rtAdjustmentVec[4]; @@ -198,15 +202,16 @@ static bool blend_coeff_refs_constant(GrBlendCoeff coeff) { if (!fStencil.isDisabled()) { if (fStencil.isTwoSided()) { if (@available(macOS 10.11, iOS 9.0, *)) { - [renderCmdEncoder setStencilFrontReferenceValue:fStencil.front(origin).fRef - backReferenceValue:fStencil.back(origin).fRef]; + [renderCmdEncoder + setStencilFrontReferenceValue:fStencil.postOriginCCWFace(origin).fRef + backReferenceValue:fStencil.postOriginCWFace(origin).fRef]; } else { // Two-sided stencil not supported on older versions of iOS // TODO: Find a way to recover from this SkASSERT(false); } } else { - [renderCmdEncoder setStencilReferenceValue:fStencil.frontAndBack().fRef]; + [renderCmdEncoder setStencilReferenceValue:fStencil.singleSidedFace().fRef]; } } [renderCmdEncoder setDepthStencilState:state->mtlDepthStencil()]; diff --git a/third_party/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.h b/third_party/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.h index fda1e6583d0b..bfa0c45b757d 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.h +++ b/third_party/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.h @@ -9,7 +9,6 @@ #define GrMtlPipelineStateBuilder_DEFINED #include "src/gpu/GrPipeline.h" -#include "src/gpu/GrProgramDesc.h" #include "src/gpu/glsl/GrGLSLProgramBuilder.h" #include "src/gpu/mtl/GrMtlUniformHandler.h" #include "src/gpu/mtl/GrMtlVaryingHandler.h" @@ -17,36 +16,14 @@ #import +class GrProgramDesc; class GrProgramInfo; +class GrMtlCaps; class GrMtlGpu; class GrMtlPipelineState; class GrMtlPipelineStateBuilder : public GrGLSLProgramBuilder { public: - /** - * For Metal we want to cache the entire pipeline for reuse of draws. The Desc here holds all - * the information needed to differentiate one pipeline from another. - * - * The GrProgramDesc contains all the information need to create the actual shaders for the - * pipeline. - * - * For Metal we need to add to the GrProgramDesc to include the rest of the state on the - * pipeline. This includes blending information and primitive type. The pipeline is immutable - * so any remaining dynamic state is set via the MtlRenderCmdEncoder. - */ - class Desc : public GrProgramDesc { - public: - static bool Build(Desc*, GrRenderTarget*, - const GrProgramInfo&, GrPrimitiveType, GrMtlGpu* gpu); - - size_t shaderKeyLength() const { return fShaderKeyLength; } - - private: - size_t fShaderKeyLength; - - typedef GrProgramDesc INHERITED; - }; - /** Generates a pipeline state. * * The GrMtlPipelineState implements what is specified in the GrPipeline and @@ -58,12 +35,12 @@ class GrMtlPipelineStateBuilder : public GrGLSLProgramBuilder { static GrMtlPipelineState* CreatePipelineState(GrMtlGpu*, GrRenderTarget*, const GrProgramInfo&, - Desc*); + GrProgramDesc*); private: GrMtlPipelineStateBuilder(GrMtlGpu*, GrRenderTarget*, const GrProgramInfo&, GrProgramDesc*); - GrMtlPipelineState* finalize(GrRenderTarget*, const GrProgramInfo&, Desc*); + GrMtlPipelineState* finalize(GrRenderTarget*, const GrProgramInfo&, GrProgramDesc*); const GrCaps* caps() const override; diff --git a/third_party/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm b/third_party/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm index 090c41b9de66..dc98db2dc017 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm @@ -8,6 +8,7 @@ #include "src/gpu/mtl/GrMtlPipelineStateBuilder.h" #include "include/gpu/GrContext.h" +#include "src/gpu/GrAutoLocaleSetter.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/mtl/GrMtlGpu.h" @@ -25,7 +26,8 @@ GrMtlPipelineState* GrMtlPipelineStateBuilder::CreatePipelineState(GrMtlGpu* gpu, GrRenderTarget* renderTarget, const GrProgramInfo& programInfo, - Desc* desc) { + GrProgramDesc* desc) { + GrAutoLocaleSetter als("C"); GrMtlPipelineStateBuilder builder(gpu, renderTarget, programInfo, desc); if (!builder.emitAndInstallProcs()) { @@ -294,12 +296,10 @@ static MTLBlendOperation blend_equation_to_mtl_blend_op(GrBlendEquation equation } static MTLRenderPipelineColorAttachmentDescriptor* create_color_attachment( - GrPixelConfig config, const GrPipeline& pipeline) { + MTLPixelFormat format, const GrPipeline& pipeline) { auto mtlColorAttachment = [[MTLRenderPipelineColorAttachmentDescriptor alloc] init]; // pixel format - MTLPixelFormat format; - SkAssertResult(GrPixelConfigToMTLFormat(config, &format)); mtlColorAttachment.pixelFormat = format; // blending @@ -341,8 +341,8 @@ uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment) { GrMtlPipelineState* GrMtlPipelineStateBuilder::finalize(GrRenderTarget* renderTarget, const GrProgramInfo& programInfo, - Desc* desc) { - auto pipelineDescriptor = [MTLRenderPipelineDescriptor new]; + GrProgramDesc* desc) { + auto pipelineDescriptor = [[MTLRenderPipelineDescriptor alloc] init]; fVS.extensions().appendf("#extension GL_ARB_separate_shader_objects : enable\n"); fFS.extensions().appendf("#extension GL_ARB_separate_shader_objects : enable\n"); @@ -389,9 +389,15 @@ uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment) { pipelineDescriptor.vertexFunction = vertexFunction; pipelineDescriptor.fragmentFunction = fragmentFunction; pipelineDescriptor.vertexDescriptor = create_vertex_descriptor(programInfo.primProc()); - pipelineDescriptor.colorAttachments[0] = create_color_attachment(renderTarget->config(), + + MTLPixelFormat pixelFormat = GrBackendFormatAsMTLPixelFormat(renderTarget->backendFormat()); + if (pixelFormat == MTLPixelFormatInvalid) { + return nullptr; + } + + pipelineDescriptor.colorAttachments[0] = create_color_attachment(pixelFormat, programInfo.pipeline()); - pipelineDescriptor.sampleCount = renderTarget->numSamples(); + pipelineDescriptor.sampleCount = programInfo.numRasterSamples(); bool hasStencilAttachment = SkToBool(renderTarget->renderTargetPriv().getStencilAttachment()); GrMtlCaps* mtlCaps = (GrMtlCaps*)this->caps(); pipelineDescriptor.stencilAttachmentPixelFormat = @@ -444,32 +450,3 @@ uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment) { ////////////////////////////////////////////////////////////////////////////// -bool GrMtlPipelineStateBuilder::Desc::Build(Desc* desc, - GrRenderTarget* renderTarget, - const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType, - GrMtlGpu* gpu) { - if (!GrProgramDesc::Build(desc, renderTarget, programInfo, primitiveType, gpu)) { - return false; - } - - GrProcessorKeyBuilder b(&desc->key()); - - int keyLength = desc->key().count(); - SkASSERT(0 == (keyLength % 4)); - desc->fShaderKeyLength = SkToU32(keyLength); - - b.add32(renderTarget->config()); - b.add32(renderTarget->numSamples()); - bool hasStencilAttachment = SkToBool(renderTarget->renderTargetPriv().getStencilAttachment()); - b.add32(hasStencilAttachment ? gpu->mtlCaps().preferredStencilFormat().fInternalFormat - : MTLPixelFormatInvalid); - b.add32((uint32_t)programInfo.pipeline().isStencilEnabled()); - // Stencil samples don't seem to be tracked in the MTLRenderPipeline - - b.add32(programInfo.pipeline().getBlendInfoKey()); - - b.add32((uint32_t)primitiveType); - - return true; -} diff --git a/third_party/skia/src/gpu/mtl/GrMtlRenderTarget.h b/third_party/skia/src/gpu/mtl/GrMtlRenderTarget.h index 4ae34d75ae6e..0ef1bcce5dbe 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlRenderTarget.h +++ b/third_party/skia/src/gpu/mtl/GrMtlRenderTarget.h @@ -63,7 +63,7 @@ class GrMtlRenderTarget: public GrRenderTarget { ++numColorSamples; } const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), numColorSamples, GrMipMapped::kNo); } diff --git a/third_party/skia/src/gpu/mtl/GrMtlResourceProvider.h b/third_party/skia/src/gpu/mtl/GrMtlResourceProvider.h index 0b8d2194e54b..e568fd33614d 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlResourceProvider.h +++ b/third_party/skia/src/gpu/mtl/GrMtlResourceProvider.h @@ -11,6 +11,7 @@ #include "include/private/SkSpinlock.h" #include "include/private/SkTArray.h" #include "src/core/SkLRUCache.h" +#include "src/gpu/GrProgramDesc.h" #include "src/gpu/mtl/GrMtlDepthStencil.h" #include "src/gpu/mtl/GrMtlPipelineStateBuilder.h" #include "src/gpu/mtl/GrMtlSampler.h" @@ -25,8 +26,7 @@ class GrMtlResourceProvider { GrMtlResourceProvider(GrMtlGpu* gpu); GrMtlPipelineState* findOrCreateCompatiblePipelineState(GrRenderTarget*, - const GrProgramInfo&, - GrPrimitiveType); + const GrProgramInfo&); // Finds or creates a compatible MTLDepthStencilState based on the GrStencilSettings. GrMtlDepthStencil* findOrCreateCompatibleDepthStencilState(const GrStencilSettings&, @@ -52,8 +52,7 @@ class GrMtlResourceProvider { ~PipelineStateCache(); void release(); - GrMtlPipelineState* refPipelineState(GrRenderTarget*, const GrProgramInfo&, - GrPrimitiveType); + GrMtlPipelineState* refPipelineState(GrRenderTarget*, const GrProgramInfo&); private: struct Entry; @@ -64,9 +63,9 @@ class GrMtlResourceProvider { } }; - SkLRUCache, DescHash> fMap; + SkLRUCache, DescHash> fMap; - GrMtlGpu* fGpu; + GrMtlGpu* fGpu; #ifdef GR_PIPELINE_STATE_CACHE_STATS int fTotalRequests; diff --git a/third_party/skia/src/gpu/mtl/GrMtlResourceProvider.mm b/third_party/skia/src/gpu/mtl/GrMtlResourceProvider.mm index 9774d2677f07..89be009bc3fd 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlResourceProvider.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlResourceProvider.mm @@ -39,9 +39,8 @@ GrMtlPipelineState* GrMtlResourceProvider::findOrCreateCompatiblePipelineState( GrRenderTarget* renderTarget, - const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType) { - return fPipelineStateCache->refPipelineState(renderTarget, programInfo, primitiveType); + const GrProgramInfo& programInfo) { + return fPipelineStateCache->refPipelineState(renderTarget, programInfo); } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -135,16 +134,15 @@ GrMtlPipelineState* GrMtlResourceProvider::PipelineStateCache::refPipelineState( GrRenderTarget* renderTarget, - const GrProgramInfo& programInfo, - GrPrimitiveType primType) { + const GrProgramInfo& programInfo) { #ifdef GR_PIPELINE_STATE_CACHE_STATS ++fTotalRequests; #endif - // TODO: unify GL, VK and Mtl - // Get GrMtlProgramDesc - GrMtlPipelineStateBuilder::Desc desc; - if (!GrMtlPipelineStateBuilder::Desc::Build(&desc, renderTarget, programInfo, primType, fGpu)) { + const GrMtlCaps& caps = fGpu->mtlCaps(); + + GrProgramDesc desc = caps.makeDesc(renderTarget, programInfo); + if (!desc.isValid()) { GrCapsDebugf(fGpu->caps(), "Failed to build mtl program descriptor!\n"); return nullptr; } @@ -262,6 +260,10 @@ } id GrMtlResourceProvider::getDynamicBuffer(size_t size, size_t* offset) { +#ifdef SK_BUILD_FOR_MAC + // Mac requires 4-byte alignment for didModifyRange: + size = GrSizeAlignUp(size, 4); +#endif id buffer = fBufferSuballocator->getAllocation(size, offset); if (buffer) { return buffer; diff --git a/third_party/skia/src/gpu/mtl/GrMtlSemaphore.h b/third_party/skia/src/gpu/mtl/GrMtlSemaphore.h index 5a5ad9ce26a5..1991c9a12635 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlSemaphore.h +++ b/third_party/skia/src/gpu/mtl/GrMtlSemaphore.h @@ -19,12 +19,11 @@ class GrMtlGpu; class GrMtlSemaphore : public GrSemaphore { public: - static sk_sp Make(GrMtlGpu* gpu, bool isOwned); + static std::unique_ptr Make(GrMtlGpu* gpu); - static sk_sp MakeWrapped(GrMtlGpu* gpu, - GrMTLHandle event, - uint64_t value, - GrWrapOwnership ownership); + static std::unique_ptr MakeWrapped(GrMTLHandle event, uint64_t value); + + ~GrMtlSemaphore() override {} id event() const API_AVAILABLE(macos(10.14), ios(12.0)) { return fEvent; } uint64_t value() const { return fValue; } @@ -32,11 +31,9 @@ class GrMtlSemaphore : public GrSemaphore { GrBackendSemaphore backendSemaphore() const override; private: - GrMtlSemaphore(GrMtlGpu* gpu, id event, - uint64_t value, bool isOwned) API_AVAILABLE(macos(10.14), ios(12.0)); + GrMtlSemaphore(id event, uint64_t value) API_AVAILABLE(macos(10.14), ios(12.0)); - void onRelease() override; - void onAbandon() override; + void setIsOwned() override {} id fEvent API_AVAILABLE(macos(10.14), ios(12.0)); uint64_t fValue; diff --git a/third_party/skia/src/gpu/mtl/GrMtlSemaphore.mm b/third_party/skia/src/gpu/mtl/GrMtlSemaphore.mm index 3eb31ac503a7..775752013b48 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlSemaphore.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlSemaphore.mm @@ -5,57 +5,38 @@ * found in the LICENSE file. */ -#include "src/gpu/mtl/GrMtlGpu.h" #include "src/gpu/mtl/GrMtlSemaphore.h" +#include "src/gpu/mtl/GrMtlGpu.h" + #if !__has_feature(objc_arc) #error This file must be compiled with Arc. Use -fobjc-arc flag #endif -sk_sp GrMtlSemaphore::Make(GrMtlGpu* gpu, bool isOwned) { +std::unique_ptr GrMtlSemaphore::Make(GrMtlGpu* gpu) { if (@available(macOS 10.14, iOS 12.0, *)) { id event = [gpu->device() newEvent]; uint64_t value = 1; // seems like a reasonable starting point - return sk_sp(new GrMtlSemaphore(gpu, event, value, isOwned)); + return std::unique_ptr(new GrMtlSemaphore(event, value)); } else { return nullptr; } } -sk_sp GrMtlSemaphore::MakeWrapped(GrMtlGpu* gpu, - GrMTLHandle event, - uint64_t value, - GrWrapOwnership ownership) { +std::unique_ptr GrMtlSemaphore::MakeWrapped(GrMTLHandle event, + uint64_t value) { // The GrMtlSemaphore will have strong ownership at this point. // The GrMTLHandle will subsequently only have weak ownership. if (@available(macOS 10.14, iOS 12.0, *)) { id mtlEvent = (__bridge_transfer id)event; - auto sema = sk_sp(new GrMtlSemaphore(gpu, mtlEvent, value, - kBorrow_GrWrapOwnership != ownership)); - return sema; + return std::unique_ptr(new GrMtlSemaphore(mtlEvent, value)); } else { return nullptr; } } -GrMtlSemaphore::GrMtlSemaphore(GrMtlGpu* gpu, id event, uint64_t value, bool isOwned) - : INHERITED(gpu), fEvent(event), fValue(value) { - isOwned ? this->registerWithCache(SkBudgeted::kNo) - : this->registerWithCacheWrapped(GrWrapCacheable::kNo); -} - -void GrMtlSemaphore::onRelease() { - if (@available(macOS 10.14, iOS 12.0, *)) { - fEvent = nil; - } - INHERITED::onRelease(); -} - -void GrMtlSemaphore::onAbandon() { - if (@available(macOS 10.14, iOS 12.0, *)) { - fEvent = nil; - } - INHERITED::onAbandon(); +GrMtlSemaphore::GrMtlSemaphore(id event, uint64_t value) + : fEvent(event), fValue(value) { } GrBackendSemaphore GrMtlSemaphore::backendSemaphore() const { diff --git a/third_party/skia/src/gpu/mtl/GrMtlTexture.mm b/third_party/skia/src/gpu/mtl/GrMtlTexture.mm index be9736fceddf..7dd5450b6896 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlTexture.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlTexture.mm @@ -25,6 +25,10 @@ GrTextureType::k2D, mipMapsStatus) , fTexture(texture) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == texture.mipmapLevelCount)); + if (@available(macOS 10.11, iOS 9.0, *)) { + SkASSERT(SkToBool(texture.usage & MTLTextureUsageShaderRead)); + } + SkASSERT(!texture.framebufferOnly); this->registerWithCache(budgeted); if (GrMtlFormatIsCompressed(texture.pixelFormat)) { this->setReadOnly(); @@ -43,6 +47,10 @@ GrTextureType::k2D, mipMapsStatus) , fTexture(texture) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == texture.mipmapLevelCount)); + if (@available(macOS 10.11, iOS 9.0, *)) { + SkASSERT(SkToBool(texture.usage & MTLTextureUsageShaderRead)); + } + SkASSERT(!texture.framebufferOnly); if (ioType == kRead_GrIOType) { this->setReadOnly(); } @@ -58,6 +66,10 @@ GrTextureType::k2D, mipMapsStatus) , fTexture(texture) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == texture.mipmapLevelCount)); + if (@available(macOS 10.11, iOS 9.0, *)) { + SkASSERT(SkToBool(texture.usage & MTLTextureUsageShaderRead)); + } + SkASSERT(!texture.framebufferOnly); } sk_sp GrMtlTexture::MakeNewTexture(GrMtlGpu* gpu, SkBudgeted budgeted, @@ -69,7 +81,7 @@ return nullptr; } if (@available(macOS 10.11, iOS 9.0, *)) { - SkASSERT(MTLTextureUsageShaderRead & texture.usage); + SkASSERT(SkToBool(texture.usage & MTLTextureUsageShaderRead)); } return sk_sp(new GrMtlTexture(gpu, budgeted, desc, texture, mipMapsStatus)); } @@ -81,7 +93,7 @@ GrIOType ioType) { SkASSERT(nil != texture); if (@available(macOS 10.11, iOS 9.0, *)) { - SkASSERT(MTLTextureUsageShaderRead & texture.usage); + SkASSERT(SkToBool(texture.usage & MTLTextureUsageShaderRead)); } GrMipMapsStatus mipMapsStatus = texture.mipmapLevelCount > 1 ? GrMipMapsStatus::kValid : GrMipMapsStatus::kNotAllocated; diff --git a/third_party/skia/src/gpu/mtl/GrMtlTextureRenderTarget.h b/third_party/skia/src/gpu/mtl/GrMtlTextureRenderTarget.h index 18656e118ffb..2e1bda79edcc 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlTextureRenderTarget.h +++ b/third_party/skia/src/gpu/mtl/GrMtlTextureRenderTarget.h @@ -78,7 +78,7 @@ class GrMtlTextureRenderTarget: public GrMtlTexture, public GrMtlRenderTarget { ++numColorSamples; } const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), numColorSamples, GrMipMapped::kNo); } }; diff --git a/third_party/skia/src/gpu/mtl/GrMtlUniformHandler.h b/third_party/skia/src/gpu/mtl/GrMtlUniformHandler.h index bcf15a05f3ec..89e3380653e0 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlUniformHandler.h +++ b/third_party/skia/src/gpu/mtl/GrMtlUniformHandler.h @@ -61,7 +61,7 @@ class GrMtlUniformHandler : public GrGLSLUniformHandler { fUniforms[u.toIndex()].fVisibility |= visibility; } - SamplerHandle addSampler(const GrTextureProxy*, + SamplerHandle addSampler(const GrSurfaceProxy*, const GrSamplerState&, const GrSwizzle&, const char* name, diff --git a/third_party/skia/src/gpu/mtl/GrMtlUniformHandler.mm b/third_party/skia/src/gpu/mtl/GrMtlUniformHandler.mm index 89e1263eaf9b..870d662c4636 100644 --- a/third_party/skia/src/gpu/mtl/GrMtlUniformHandler.mm +++ b/third_party/skia/src/gpu/mtl/GrMtlUniformHandler.mm @@ -242,7 +242,7 @@ static void get_ubo_aligned_offset(uint32_t* uniformOffset, return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1); } -GrGLSLUniformHandler::SamplerHandle GrMtlUniformHandler::addSampler(const GrTextureProxy* texture, +GrGLSLUniformHandler::SamplerHandle GrMtlUniformHandler::addSampler(const GrSurfaceProxy* texture, const GrSamplerState&, const GrSwizzle& swizzle, const char* name, @@ -252,7 +252,7 @@ static void get_ubo_aligned_offset(uint32_t* uniformOffset, char prefix = 'u'; fProgramBuilder->nameVariable(&mangleName, prefix, name, true); - GrTextureType type = texture->textureType(); + GrTextureType type = texture->backendFormat().textureType(); UniformInfo& info = fSamplers.push_back(); info.fVariable.setType(GrSLCombinedSamplerTypeForTextureType(type)); diff --git a/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp b/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp index 8906d29a5e12..9efdd3a02ce0 100644 --- a/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp +++ b/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp @@ -537,10 +537,11 @@ static void create_vertices(const SegmentArray& segments, class QuadEdgeEffect : public GrGeometryProcessor { public: - static sk_sp Make(const SkMatrix& localMatrix, bool usesLocalCoords, - bool wideColor) { - return sk_sp( - new QuadEdgeEffect(localMatrix, usesLocalCoords, wideColor)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const SkMatrix& localMatrix, + bool usesLocalCoords, + bool wideColor) { + return arena->make(localMatrix, usesLocalCoords, wideColor); } ~QuadEdgeEffect() override {} @@ -610,9 +611,9 @@ class QuadEdgeEffect : public GrGeometryProcessor { void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const QuadEdgeEffect& qe = gp.cast(); - this->setTransformDataHelper(qe.fLocalMatrix, pdman, &transformIter); + this->setTransformDataHelper(qe.fLocalMatrix, pdman, transformRange); } private: @@ -628,6 +629,8 @@ class QuadEdgeEffect : public GrGeometryProcessor { } private: + friend class ::SkArenaAlloc; // for access to ctor + QuadEdgeEffect(const SkMatrix& localMatrix, bool usesLocalCoords, bool wideColor) : INHERITED(kQuadEdgeEffect_ClassID) , fLocalMatrix(localMatrix) @@ -653,11 +656,11 @@ class QuadEdgeEffect : public GrGeometryProcessor { GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect); #if GR_TEST_UTILS -sk_sp QuadEdgeEffect::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* QuadEdgeEffect::TestCreate(GrProcessorTestData* d) { // Doesn't work without derivative instructions. return d->caps()->shaderCaps()->shaderDerivativeSupport() - ? QuadEdgeEffect::Make(GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool(), - d->fRandom->nextBool()) + ? QuadEdgeEffect::Make(d->allocator(), GrTest::TestMatrix(d->fRandom), + d->fRandom->nextBool(), d->fRandom->nextBool()) : nullptr; } #endif @@ -740,8 +743,9 @@ class AAConvexPathOp final : public GrMeshDrawOp { } // Setup GrGeometryProcessor - sk_sp quadProcessor( - QuadEdgeEffect::Make(invert, fHelper.usesLocalCoords(), fWideColor)); + GrGeometryProcessor* quadProcessor = QuadEdgeEffect::Make(target->allocator(), invert, + fHelper.usesLocalCoords(), + fWideColor); const size_t kVertexStride = quadProcessor->vertexStride(); // TODO generate all segments for all paths and use one vertex buffer @@ -812,7 +816,7 @@ class AAConvexPathOp final : public GrMeshDrawOp { firstIndex += draw.fIndexCnt; firstVertex += draw.fVertexCnt; } - target->recordDraw(quadProcessor, meshes, draws.count()); + target->recordDraw(quadProcessor, meshes, draws.count(), GrPrimitiveType::kTriangles); } } diff --git a/third_party/skia/src/gpu/ops/GrAAConvexTessellator.cpp b/third_party/skia/src/gpu/ops/GrAAConvexTessellator.cpp index 9952491b64b4..86aa54ca3058 100644 --- a/third_party/skia/src/gpu/ops/GrAAConvexTessellator.cpp +++ b/third_party/skia/src/gpu/ops/GrAAConvexTessellator.cpp @@ -61,12 +61,20 @@ static bool duplicate_pt(const SkPoint& p0, const SkPoint& p1) { static bool points_are_colinear_and_b_is_middle(const SkPoint& a, const SkPoint& b, const SkPoint& c) { - // 'area' is twice the area of the triangle with corners a, b, and c. - SkScalar area = a.fX * (b.fY - c.fY) + b.fX * (c.fY - a.fY) + c.fX * (a.fY - b.fY); - if (SkScalarAbs(area) >= 2 * kCloseSqd) { + // First check distance from b to the infinite line through a, c + SkVector aToC = c - a; + SkVector n = {aToC.fY, -aToC.fX}; + n.normalize(); + + SkScalar distBToLineAC = n.dot(b) - n.dot(a); + if (SkScalarAbs(distBToLineAC) >= kClose) { + // Too far from the line, cannot be colinear return false; } - return (a - b).dot(b - c) >= 0; + + // b is colinear, but it may not be in the line segment between a and c. It's in the middle if + // both the angle at a and the angle at c are acute. + return aToC.dot(b - a) > 0 && aToC.dot(c - b) > 0; } int GrAAConvexTessellator::addPt(const SkPoint& pt, @@ -369,7 +377,7 @@ bool GrAAConvexTessellator::computePtAlongBisector(int startIdx, } bool GrAAConvexTessellator::extractFromPath(const SkMatrix& m, const SkPath& path) { - SkASSERT(SkPath::kConvex_Convexity == path.getConvexity()); + SkASSERT(SkPathConvexityType::kConvex == path.getConvexityType()); SkRect bounds = path.getBounds(); m.mapRect(&bounds); diff --git a/third_party/skia/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/third_party/skia/src/gpu/ops/GrAAHairLinePathRenderer.cpp index f78c6722b486..b41a968cc98c 100644 --- a/third_party/skia/src/gpu/ops/GrAAHairLinePathRenderer.cpp +++ b/third_party/skia/src/gpu/ops/GrAAHairLinePathRenderer.cpp @@ -849,6 +849,16 @@ class AAHairlineOp final : public GrMeshDrawOp { } private: + GrGeometryProcessor* makeLineGP(const GrCaps&, SkArenaAlloc*, + const SkMatrix* geometryProcessorViewM, + const SkMatrix* geometryProcessorLocalM); + GrGeometryProcessor* makeQuadGP(const GrCaps&, SkArenaAlloc*, + const SkMatrix* geometryProcessorViewM, + const SkMatrix* geometryProcessorLocalM); + GrGeometryProcessor* makeConicGP(const GrCaps&, SkArenaAlloc*, + const SkMatrix* geometryProcessorViewM, + const SkMatrix* geometryProcessorLocalM); + void onPrepareDraws(Target*) override; void onExecute(GrOpFlushState*, const SkRect& chainBounds) override; @@ -913,6 +923,59 @@ class AAHairlineOp final : public GrMeshDrawOp { } // anonymous namespace +GrGeometryProcessor* AAHairlineOp::makeLineGP(const GrCaps& caps, SkArenaAlloc* arena, + const SkMatrix* geometryProcessorViewM, + const SkMatrix* geometryProcessorLocalM) { + using namespace GrDefaultGeoProcFactory; + + Color color(this->color()); + LocalCoords localCoords(fHelper.usesLocalCoords() ? LocalCoords::kUsePosition_Type + : LocalCoords::kUnused_Type); + localCoords.fMatrix = geometryProcessorLocalM; + + GrGeometryProcessor* lineGP = GrDefaultGeoProcFactory::Make(arena, + caps.shaderCaps(), + color, + Coverage::kAttribute_Type, + localCoords, + *geometryProcessorViewM); + SkASSERT(sizeof(LineVertex) == lineGP->vertexStride()); + + return lineGP; +} + +GrGeometryProcessor* AAHairlineOp::makeQuadGP(const GrCaps& caps, SkArenaAlloc* arena, + const SkMatrix* geometryProcessorViewM, + const SkMatrix* geometryProcessorLocalM) { + GrGeometryProcessor* quadGP = GrQuadEffect::Make(arena, + this->color(), + *geometryProcessorViewM, + GrClipEdgeType::kHairlineAA, + caps, + *geometryProcessorLocalM, + fHelper.usesLocalCoords(), + this->coverage()); + SkASSERT(sizeof(BezierVertex) == quadGP->vertexStride()); + + return quadGP; +} + +GrGeometryProcessor* AAHairlineOp::makeConicGP(const GrCaps& caps, SkArenaAlloc* arena, + const SkMatrix* geometryProcessorViewM, + const SkMatrix* geometryProcessorLocalM) { + GrGeometryProcessor* conicGP = GrConicEffect::Make(arena, + this->color(), + *geometryProcessorViewM, + GrClipEdgeType::kHairlineAA, + caps, + *geometryProcessorLocalM, + fHelper.usesLocalCoords(), + this->coverage()); + SkASSERT(sizeof(BezierVertex) == conicGP->vertexStride()); + + return conicGP; +} + void AAHairlineOp::onPrepareDraws(Target* target) { // Setup the viewmatrix and localmatrix for the GrGeometryProcessor. SkMatrix invert; @@ -962,30 +1025,14 @@ void AAHairlineOp::onPrepareDraws(Target* target) { // do lines first if (lineCount) { - sk_sp lineGP; - { - using namespace GrDefaultGeoProcFactory; - - Color color(this->color()); - LocalCoords localCoords(fHelper.usesLocalCoords() ? LocalCoords::kUsePosition_Type - : LocalCoords::kUnused_Type); - localCoords.fMatrix = geometryProcessorLocalM; - lineGP = GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(), - color, Coverage::kAttribute_Type, localCoords, - *geometryProcessorViewM); - } - sk_sp linesIndexBuffer = get_lines_index_buffer(target->resourceProvider()); - sk_sp vertexBuffer; - int firstVertex; - - SkASSERT(sizeof(LineVertex) == lineGP->vertexStride()); - int vertexCount = kLineSegNumVertices * lineCount; - LineVertex* verts = reinterpret_cast(target->makeVertexSpace( - sizeof(LineVertex), vertexCount, &vertexBuffer, &firstVertex)); + GrMeshDrawOp::PatternHelper helper(target, GrPrimitiveType::kTriangles, sizeof(LineVertex), + std::move(linesIndexBuffer), kLineSegNumVertices, + kIdxsPerLineSeg, lineCount, kLineSegsNumInIdxBuffer); - if (!verts|| !linesIndexBuffer) { + LineVertex* verts = reinterpret_cast(helper.vertices()); + if (!verts) { SkDebugf("Could not allocate vertices\n"); return; } @@ -994,37 +1041,19 @@ void AAHairlineOp::onPrepareDraws(Target* target) { add_line(&lines[2*i], toSrc, this->coverage(), &verts); } - GrMesh* mesh = target->allocMesh(GrPrimitiveType::kTriangles); - mesh->setIndexedPatterned(std::move(linesIndexBuffer), kIdxsPerLineSeg, kLineSegNumVertices, - lineCount, kLineSegsNumInIdxBuffer); - mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(lineGP), mesh); + GrGeometryProcessor* lineGP = this->makeLineGP(target->caps(), target->allocator(), + geometryProcessorViewM, + geometryProcessorLocalM); + + helper.recordDraw(target, lineGP); } if (quadCount || conicCount) { - sk_sp quadGP(GrQuadEffect::Make(this->color(), - *geometryProcessorViewM, - GrClipEdgeType::kHairlineAA, - target->caps(), - *geometryProcessorLocalM, - fHelper.usesLocalCoords(), - this->coverage())); - - sk_sp conicGP(GrConicEffect::Make(this->color(), - *geometryProcessorViewM, - GrClipEdgeType::kHairlineAA, - target->caps(), - *geometryProcessorLocalM, - fHelper.usesLocalCoords(), - this->coverage())); - sk_sp vertexBuffer; int firstVertex; sk_sp quadsIndexBuffer = get_quads_index_buffer(target->resourceProvider()); - SkASSERT(sizeof(BezierVertex) == quadGP->vertexStride()); - SkASSERT(sizeof(BezierVertex) == conicGP->vertexStride()); int vertexCount = kQuadNumVertices * quadAndConicCount; void* vertices = target->makeVertexSpace(sizeof(BezierVertex), vertexCount, &vertexBuffer, &firstVertex); @@ -1049,20 +1078,28 @@ void AAHairlineOp::onPrepareDraws(Target* target) { } if (quadCount > 0) { + GrGeometryProcessor* quadGP = this->makeQuadGP(target->caps(), target->allocator(), + geometryProcessorViewM, + geometryProcessorLocalM); + GrMesh* mesh = target->allocMesh(GrPrimitiveType::kTriangles); mesh->setIndexedPatterned(quadsIndexBuffer, kIdxsPerQuad, kQuadNumVertices, quadCount, kQuadsNumInIdxBuffer); mesh->setVertexData(vertexBuffer, firstVertex); - target->recordDraw(std::move(quadGP), mesh); + target->recordDraw(quadGP, mesh, 1, GrPrimitiveType::kTriangles); firstVertex += quadCount * kQuadNumVertices; } if (conicCount > 0) { + GrGeometryProcessor* conicGP = this->makeConicGP(target->caps(), target->allocator(), + geometryProcessorViewM, + geometryProcessorLocalM); + GrMesh* mesh = target->allocMesh(GrPrimitiveType::kTriangles); mesh->setIndexedPatterned(std::move(quadsIndexBuffer), kIdxsPerQuad, kQuadNumVertices, conicCount, kQuadsNumInIdxBuffer); mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(conicGP), mesh); + target->recordDraw(conicGP, mesh, 1, GrPrimitiveType::kTriangles); } } } diff --git a/third_party/skia/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/third_party/skia/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp index d0cbb41013f7..0f3508ba48c4 100644 --- a/third_party/skia/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp +++ b/third_party/skia/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp @@ -96,11 +96,12 @@ static void extract_verts(const GrAAConvexTessellator& tess, } } -static sk_sp create_lines_only_gp(const GrShaderCaps* shaderCaps, - bool tweakAlphaForCoverage, - const SkMatrix& viewMatrix, - bool usesLocalCoords, - bool wideColor) { +static GrGeometryProcessor* create_lines_only_gp(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + bool tweakAlphaForCoverage, + const SkMatrix& viewMatrix, + bool usesLocalCoords, + bool wideColor) { using namespace GrDefaultGeoProcFactory; Coverage::Type coverageType = @@ -110,7 +111,8 @@ static sk_sp create_lines_only_gp(const GrShaderCaps* shade Color::Type colorType = wideColor ? Color::kPremulWideColorAttribute_Type : Color::kPremulGrColorAttribute_Type; - return MakeForDeviceSpace(shaderCaps, colorType, coverageType, localCoordsType, viewMatrix); + return MakeForDeviceSpace(arena, shaderCaps, colorType, coverageType, + localCoordsType, viewMatrix); } namespace { @@ -198,7 +200,7 @@ class AAFlatteningConvexPathOp final : public GrMeshDrawOp { } private: - void recordDraw(Target* target, sk_sp gp, int vertexCount, + void recordDraw(Target* target, const GrGeometryProcessor* gp, int vertexCount, size_t vertexStride, void* vertices, int indexCount, uint16_t* indices) const { if (vertexCount == 0 || indexCount == 0) { return; @@ -225,16 +227,17 @@ class AAFlatteningConvexPathOp final : public GrMeshDrawOp { mesh->setIndexed(std::move(indexBuffer), indexCount, firstIndex, 0, vertexCount - 1, GrPrimitiveRestart::kNo); mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(gp), mesh); + target->recordDraw(gp, mesh, 1, GrPrimitiveType::kTriangles); } void onPrepareDraws(Target* target) override { // Setup GrGeometryProcessor - sk_sp gp(create_lines_only_gp(target->caps().shaderCaps(), - fHelper.compatibleWithCoverageAsAlpha(), - this->viewMatrix(), - fHelper.usesLocalCoords(), - fWideColor)); + GrGeometryProcessor* gp = create_lines_only_gp(target->allocator(), + target->caps().shaderCaps(), + fHelper.compatibleWithCoverageAsAlpha(), + this->viewMatrix(), + fHelper.usesLocalCoords(), + fWideColor); if (!gp) { SkDebugf("Couldn't create a GrGeometryProcessor\n"); return; @@ -294,8 +297,7 @@ class AAFlatteningConvexPathOp final : public GrMeshDrawOp { indexCount += currentIndices; } if (vertexCount <= SK_MaxS32 && indexCount <= SK_MaxS32) { - this->recordDraw(target, std::move(gp), vertexCount, vertexStride, vertices, indexCount, - indices); + this->recordDraw(target, gp, vertexCount, vertexStride, vertices, indexCount, indices); } sk_free(vertices); sk_free(indices); diff --git a/third_party/skia/src/gpu/ops/GrAtlasTextOp.cpp b/third_party/skia/src/gpu/ops/GrAtlasTextOp.cpp index bcf4670395ea..d425b713e89d 100644 --- a/third_party/skia/src/gpu/ops/GrAtlasTextOp.cpp +++ b/third_party/skia/src/gpu/ops/GrAtlasTextOp.cpp @@ -106,7 +106,7 @@ void GrAtlasTextOp::init() { } SkRect bounds; - geo.fBlob->computeSubRunBounds(&bounds, geo.fRun, geo.fSubRun, geo.fViewMatrix, geo.fX, geo.fY, + geo.fBlob->computeSubRunBounds(&bounds, *geo.fSubRunPtr, geo.fViewMatrix, geo.fX, geo.fY, fNeedsGlyphTransform); // We don't have tight bounds on the glyph paths in device space. For the purposes of bounds // we treat this as a set of non-AA rects rendered with a texture. @@ -122,12 +122,11 @@ SkString GrAtlasTextOp::dumpInfo() const { SkString str; for (int i = 0; i < fGeoCount; ++i) { - str.appendf("%d: Color: 0x%08x Trans: %.2f,%.2f Runs: %d\n", + str.appendf("%d: Color: 0x%08x Trans: %.2f,%.2f\n", i, fGeoData[i].fColor.toBytes_RGBA(), fGeoData[i].fX, - fGeoData[i].fY, - fGeoData[i].fBlob->runCountLimit()); + fGeoData[i].fY); } str += fProcessors.dumpProcessors(); @@ -315,12 +314,13 @@ void GrAtlasTextOp::onPrepareDraws(Target* target) { bool vmPerspective = fGeoData[0].fViewMatrix.hasPerspective(); if (this->usesDistanceFields()) { - flushInfo.fGeometryProcessor = this->setupDfProcessor(*target->caps().shaderCaps(), + flushInfo.fGeometryProcessor = this->setupDfProcessor(target->allocator(), + *target->caps().shaderCaps(), proxies, numActiveProxies); } else { GrSamplerState samplerState = fNeedsGlyphTransform ? GrSamplerState::ClampBilerp() : GrSamplerState::ClampNearest(); - flushInfo.fGeometryProcessor = GrBitmapTextGeoProc::Make( + flushInfo.fGeometryProcessor = GrBitmapTextGeoProc::Make(target->allocator(), *target->caps().shaderCaps(), this->color(), false, proxies, numActiveProxies, samplerState, maskFormat, localMatrix, vmPerspective); } @@ -332,7 +332,7 @@ void GrAtlasTextOp::onPrepareDraws(Target* target) { void* vertices = target->makeVertexSpace(vertexStride, glyphCount * kVerticesPerGlyph, &flushInfo.fVertexBuffer, &flushInfo.fVertexOffset); - flushInfo.fIndexBuffer = resourceProvider->refQuadIndexBuffer(); + flushInfo.fIndexBuffer = resourceProvider->refNonAAQuadIndexBuffer(); if (!vertices || !flushInfo.fVertexBuffer) { SkDebugf("Could not allocate vertices\n"); return; @@ -340,16 +340,15 @@ void GrAtlasTextOp::onPrepareDraws(Target* target) { char* currVertex = reinterpret_cast(vertices); - SkExclusiveStrikePtr autoGlyphCache; // each of these is a SubRun for (int i = 0; i < fGeoCount; i++) { const Geometry& args = fGeoData[i]; Blob* blob = args.fBlob; // TODO4F: Preserve float colors GrTextBlob::VertexRegenerator regenerator( - resourceProvider, blob, args.fRun, args.fSubRun, args.fViewMatrix, args.fX, args.fY, + resourceProvider, blob, args.fSubRunPtr, args.fViewMatrix, args.fX, args.fY, args.fColor.toBytes_RGBA(), target->deferredUploadTarget(), glyphCache, - atlasManager, &autoGlyphCache); + atlasManager); bool done = false; while (!done) { GrTextBlob::VertexRegenerator::Result result; @@ -405,12 +404,16 @@ void GrAtlasTextOp::flush(GrMeshDrawOp::Target* target, FlushInfo* flushInfo) co auto atlasManager = target->atlasManager(); - GrGeometryProcessor* gp = flushInfo->fGeometryProcessor.get(); + GrGeometryProcessor* gp = flushInfo->fGeometryProcessor; GrMaskFormat maskFormat = this->maskFormat(); unsigned int numActiveProxies; const sk_sp* proxies = atlasManager->getProxies(maskFormat, &numActiveProxies); SkASSERT(proxies); + // Something has gone terribly wrong, bail + if (!proxies || 0 == numActiveProxies) { + return; + } if (gp->numTextureSamplers() != (int) numActiveProxies) { // During preparation the number of atlas pages has increased. // Update the proxies used in the GP to match. @@ -440,8 +443,8 @@ void GrAtlasTextOp::flush(GrMeshDrawOp::Target* target, FlushInfo* flushInfo) co mesh->setIndexedPatterned(flushInfo->fIndexBuffer, kIndicesPerGlyph, kVerticesPerGlyph, flushInfo->fGlyphsToFlush, maxGlyphsPerDraw); mesh->setVertexData(flushInfo->fVertexBuffer, flushInfo->fVertexOffset); - target->recordDraw( - flushInfo->fGeometryProcessor, mesh, 1, flushInfo->fFixedDynamicState, nullptr); + target->recordDraw(flushInfo->fGeometryProcessor, mesh, 1, flushInfo->fFixedDynamicState, + nullptr, GrPrimitiveType::kTriangles); flushInfo->fVertexOffset += kVerticesPerGlyph * flushInfo->fGlyphsToFlush; flushInfo->fGlyphsToFlush = 0; } @@ -525,9 +528,10 @@ GrOp::CombineResult GrAtlasTextOp::onCombineIfPossible(GrOp* t, const GrCaps& ca // TODO trying to figure out why lcd is so whack // (see comments in GrTextContext::ComputeCanonicalColor) -sk_sp GrAtlasTextOp::setupDfProcessor(const GrShaderCaps& caps, - const sk_sp* proxies, - unsigned int numActiveProxies) const { +GrGeometryProcessor* GrAtlasTextOp::setupDfProcessor(SkArenaAlloc* arena, + const GrShaderCaps& caps, + const sk_sp* proxies, + unsigned int numActiveProxies) const { bool isLCD = this->isLCD(); SkMatrix localMatrix = SkMatrix::I(); @@ -551,7 +555,7 @@ sk_sp GrAtlasTextOp::setupDfProcessor(const GrShaderCaps& c GrDistanceFieldLCDTextGeoProc::DistanceAdjust widthAdjust = GrDistanceFieldLCDTextGeoProc::DistanceAdjust::Make( redCorrection, greenCorrection, blueCorrection); - return GrDistanceFieldLCDTextGeoProc::Make(caps, proxies, numActiveProxies, + return GrDistanceFieldLCDTextGeoProc::Make(arena, caps, proxies, numActiveProxies, GrSamplerState::ClampBilerp(), widthAdjust, fDFGPFlags, localMatrix); } else { @@ -563,11 +567,11 @@ sk_sp GrAtlasTextOp::setupDfProcessor(const GrShaderCaps& c correction = fDistanceAdjustTable->getAdjustment(lum >> kDistanceAdjustLumShift, fUseGammaCorrectDistanceTable); } - return GrDistanceFieldA8TextGeoProc::Make(caps, proxies, numActiveProxies, + return GrDistanceFieldA8TextGeoProc::Make(arena, caps, proxies, numActiveProxies, GrSamplerState::ClampBilerp(), correction, fDFGPFlags, localMatrix); #else - return GrDistanceFieldA8TextGeoProc::Make(caps, proxies, numActiveProxies, + return GrDistanceFieldA8TextGeoProc::Make(arena, caps, proxies, numActiveProxies, GrSamplerState::ClampBilerp(), fDFGPFlags, localMatrix); #endif diff --git a/third_party/skia/src/gpu/ops/GrAtlasTextOp.h b/third_party/skia/src/gpu/ops/GrAtlasTextOp.h index 6b821e605e06..027ea7261c06 100644 --- a/third_party/skia/src/gpu/ops/GrAtlasTextOp.h +++ b/third_party/skia/src/gpu/ops/GrAtlasTextOp.h @@ -35,8 +35,7 @@ class GrAtlasTextOp final : public GrMeshDrawOp { Blob* fBlob; SkScalar fX; SkScalar fY; - uint16_t fRun; - uint16_t fSubRun; + GrTextBlob::SubRun* fSubRunPtr; SkPMColor4f fColor; }; @@ -107,7 +106,7 @@ class GrAtlasTextOp final : public GrMeshDrawOp { struct FlushInfo { sk_sp fVertexBuffer; sk_sp fIndexBuffer; - sk_sp fGeometryProcessor; + GrGeometryProcessor* fGeometryProcessor; GrPipeline::FixedDynamicState* fFixedDynamicState; int fGlyphsToFlush; int fVertexOffset; @@ -153,9 +152,10 @@ class GrAtlasTextOp final : public GrMeshDrawOp { CombineResult onCombineIfPossible(GrOp* t, const GrCaps& caps) override; - sk_sp setupDfProcessor(const GrShaderCaps& caps, - const sk_sp* proxies, - unsigned int numActiveProxies) const; + GrGeometryProcessor* setupDfProcessor(SkArenaAlloc* arena, + const GrShaderCaps& caps, + const sk_sp* proxies, + unsigned int numActiveProxies) const; SkAutoSTMalloc fGeoData; int fGeoDataAllocSize; diff --git a/third_party/skia/src/gpu/ops/GrClearOp.cpp b/third_party/skia/src/gpu/ops/GrClearOp.cpp index b6dcab35707a..a138dbc87391 100644 --- a/third_party/skia/src/gpu/ops/GrClearOp.cpp +++ b/third_party/skia/src/gpu/ops/GrClearOp.cpp @@ -18,7 +18,7 @@ std::unique_ptr GrClearOp::Make(GrRecordingContext* context, const GrFixedClip& clip, const SkPMColor4f& color, GrSurfaceProxy* dstProxy) { - const SkIRect rect = SkIRect::MakeWH(dstProxy->width(), dstProxy->height()); + const SkIRect rect = SkIRect::MakeSize(dstProxy->dimensions()); if (clip.scissorEnabled() && !SkIRect::Intersects(clip.scissorRect(), rect)) { return nullptr; } @@ -43,7 +43,7 @@ GrClearOp::GrClearOp(const GrFixedClip& clip, const SkPMColor4f& color, GrSurfac : INHERITED(ClassID()) , fClip(clip) , fColor(color) { - const SkIRect rtRect = SkIRect::MakeWH(proxy->width(), proxy->height()); + const SkIRect rtRect = SkIRect::MakeSize(proxy->dimensions()); if (fClip.scissorEnabled()) { // Don't let scissors extend outside the RT. This may improve op combining. if (!fClip.intersect(rtRect)) { diff --git a/third_party/skia/src/gpu/ops/GrClearStencilClipOp.h b/third_party/skia/src/gpu/ops/GrClearStencilClipOp.h index 0a4a7403f613..a23315377899 100644 --- a/third_party/skia/src/gpu/ops/GrClearStencilClipOp.h +++ b/third_party/skia/src/gpu/ops/GrClearStencilClipOp.h @@ -49,9 +49,8 @@ class GrClearStencilClipOp final : public GrOp { : INHERITED(ClassID()) , fClip(clip) , fInsideStencilMask(insideStencilMask) { - const SkRect& bounds = fClip.scissorEnabled() - ? SkRect::Make(fClip.scissorRect()) - : SkRect::MakeIWH(proxy->width(), proxy->height()); + const SkRect& bounds = + fClip.scissorEnabled() ? SkRect::Make(fClip.scissorRect()) : proxy->getBoundsRect(); this->setBounds(bounds, HasAABloat::kNo, IsHairline::kNo); } diff --git a/third_party/skia/src/gpu/ops/GrDashOp.cpp b/third_party/skia/src/gpu/ops/GrDashOp.cpp index ceba8e6d06e3..ecd5b16646b3 100644 --- a/third_party/skia/src/gpu/ops/GrDashOp.cpp +++ b/third_party/skia/src/gpu/ops/GrDashOp.cpp @@ -188,11 +188,12 @@ static void setup_dashed_rect(const SkRect& rect, GrVertexWriter& vertices, cons * Bounding geometry is rendered and the effect computes coverage based on the fragment's * position relative to the dashed line. */ -static sk_sp make_dash_gp(const SkPMColor4f&, - AAMode aaMode, - DashCap cap, - const SkMatrix& localMatrix, - bool usesLocalCoords); +static GrGeometryProcessor* make_dash_gp(SkArenaAlloc* arena, + const SkPMColor4f&, + AAMode aaMode, + DashCap cap, + const SkMatrix& localMatrix, + bool usesLocalCoords); class DashOp final : public GrMeshDrawOp { public: @@ -330,17 +331,18 @@ class DashOp final : public GrMeshDrawOp { bool isRoundCap = SkPaint::kRound_Cap == cap; DashCap capType = isRoundCap ? kRound_DashCap : kNonRound_DashCap; - sk_sp gp; + GrGeometryProcessor* gp; if (this->fullDash()) { - gp = make_dash_gp(this->color(), this->aaMode(), capType, this->viewMatrix(), - fUsesLocalCoords); + gp = make_dash_gp(target->allocator(), this->color(), this->aaMode(), capType, + this->viewMatrix(), fUsesLocalCoords); } else { // Set up the vertex data for the line and start/end dashes using namespace GrDefaultGeoProcFactory; Color color(this->color()); LocalCoords::Type localCoordsType = fUsesLocalCoords ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type; - gp = MakeForDeviceSpace(target->caps().shaderCaps(), + gp = MakeForDeviceSpace(target->allocator(), + target->caps().shaderCaps(), color, Coverage::kSolid_Type, localCoordsType, @@ -622,7 +624,7 @@ class DashOp final : public GrMeshDrawOp { } rectIndex++; } - helper.recordDraw(target, std::move(gp)); + helper.recordDraw(target, gp); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -764,10 +766,11 @@ class DashingCircleEffect : public GrGeometryProcessor { public: typedef SkPathEffect::DashInfo DashInfo; - static sk_sp Make(const SkPMColor4f&, - AAMode aaMode, - const SkMatrix& localMatrix, - bool usesLocalCoords); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const SkPMColor4f&, + AAMode aaMode, + const SkMatrix& localMatrix, + bool usesLocalCoords); const char* name() const override { return "DashingCircleEffect"; } @@ -784,21 +787,23 @@ class DashingCircleEffect : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: + friend class GLDashingCircleEffect; + friend class ::SkArenaAlloc; // for access to ctor + DashingCircleEffect(const SkPMColor4f&, AAMode aaMode, const SkMatrix& localMatrix, bool usesLocalCoords); - SkPMColor4f fColor; - SkMatrix fLocalMatrix; - bool fUsesLocalCoords; - AAMode fAAMode; + SkPMColor4f fColor; + SkMatrix fLocalMatrix; + bool fUsesLocalCoords; + AAMode fAAMode; - Attribute fInPosition; - Attribute fInDashParams; - Attribute fInCircleParams; + Attribute fInPosition; + Attribute fInDashParams; + Attribute fInCircleParams; GR_DECLARE_GEOMETRY_PROCESSOR_TEST - friend class GLDashingCircleEffect; typedef GrGeometryProcessor INHERITED; }; @@ -815,7 +820,8 @@ class GLDashingCircleEffect : public GrGLSLGeometryProcessor { GrProcessorKeyBuilder*); void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - FPCoordTransformIter&& transformIter) override; + const CoordTransformRange& transformRange) override; + private: UniformHandle fParamUniform; UniformHandle fColorUniform; @@ -888,13 +894,13 @@ void GLDashingCircleEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { void GLDashingCircleEffect::setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& processor, - FPCoordTransformIter&& transformIter) { + const CoordTransformRange& transformRange) { const DashingCircleEffect& dce = processor.cast(); if (dce.color() != fColor) { pdman.set4fv(fColorUniform, 1, dce.color().vec()); fColor = dce.color(); } - this->setTransformDataHelper(dce.localMatrix(), pdman, &transformIter); + this->setTransformDataHelper(dce.localMatrix(), pdman, transformRange); } void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, @@ -909,12 +915,12 @@ void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, ////////////////////////////////////////////////////////////////////////////// -sk_sp DashingCircleEffect::Make(const SkPMColor4f& color, - AAMode aaMode, - const SkMatrix& localMatrix, - bool usesLocalCoords) { - return sk_sp( - new DashingCircleEffect(color, aaMode, localMatrix, usesLocalCoords)); +GrGeometryProcessor* DashingCircleEffect::Make(SkArenaAlloc* arena, + const SkPMColor4f& color, + AAMode aaMode, + const SkMatrix& localMatrix, + bool usesLocalCoords) { + return arena->make(color, aaMode, localMatrix, usesLocalCoords); } void DashingCircleEffect::getGLSLProcessorKey(const GrShaderCaps& caps, @@ -930,11 +936,11 @@ DashingCircleEffect::DashingCircleEffect(const SkPMColor4f& color, AAMode aaMode, const SkMatrix& localMatrix, bool usesLocalCoords) - : INHERITED(kDashingCircleEffect_ClassID) - , fColor(color) - , fLocalMatrix(localMatrix) - , fUsesLocalCoords(usesLocalCoords) - , fAAMode(aaMode) { + : INHERITED(kDashingCircleEffect_ClassID) + , fColor(color) + , fLocalMatrix(localMatrix) + , fUsesLocalCoords(usesLocalCoords) + , fAAMode(aaMode) { fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; fInDashParams = {"inDashParams", kFloat3_GrVertexAttribType, kHalf3_GrSLType}; fInCircleParams = {"inCircleParams", kFloat2_GrVertexAttribType, kHalf2_GrSLType}; @@ -944,9 +950,10 @@ DashingCircleEffect::DashingCircleEffect(const SkPMColor4f& color, GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DashingCircleEffect); #if GR_TEST_UTILS -sk_sp DashingCircleEffect::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* DashingCircleEffect::TestCreate(GrProcessorTestData* d) { AAMode aaMode = static_cast(d->fRandom->nextULessThan(GrDashOp::kAAModeCnt)); - return DashingCircleEffect::Make(SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), + return DashingCircleEffect::Make(d->allocator(), + SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), aaMode, GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); } @@ -969,10 +976,11 @@ class DashingLineEffect : public GrGeometryProcessor { public: typedef SkPathEffect::DashInfo DashInfo; - static sk_sp Make(const SkPMColor4f&, - AAMode aaMode, - const SkMatrix& localMatrix, - bool usesLocalCoords); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const SkPMColor4f&, + AAMode aaMode, + const SkMatrix& localMatrix, + bool usesLocalCoords); const char* name() const override { return "DashingEffect"; } @@ -980,7 +988,7 @@ class DashingLineEffect : public GrGeometryProcessor { const SkPMColor4f& color() const { return fColor; } - const SkMatrix& localMatrix() const { return fLocalMatrix; } + const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } @@ -989,22 +997,23 @@ class DashingLineEffect : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: + friend class GLDashingLineEffect; + friend class ::SkArenaAlloc; // for access to ctor + DashingLineEffect(const SkPMColor4f&, AAMode aaMode, const SkMatrix& localMatrix, bool usesLocalCoords); - SkPMColor4f fColor; - SkMatrix fLocalMatrix; - bool fUsesLocalCoords; - AAMode fAAMode; + SkPMColor4f fColor; + SkMatrix fLocalMatrix; + bool fUsesLocalCoords; + AAMode fAAMode; - Attribute fInPosition; - Attribute fInDashParams; - Attribute fInRect; + Attribute fInPosition; + Attribute fInDashParams; + Attribute fInRect; GR_DECLARE_GEOMETRY_PROCESSOR_TEST - friend class GLDashingLineEffect; - typedef GrGeometryProcessor INHERITED; }; @@ -1021,7 +1030,7 @@ class GLDashingLineEffect : public GrGLSLGeometryProcessor { GrProcessorKeyBuilder*); void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - FPCoordTransformIter&& iter) override; + const CoordTransformRange&) override; private: SkPMColor4f fColor; @@ -1112,13 +1121,13 @@ void GLDashingLineEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { void GLDashingLineEffect::setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& processor, - FPCoordTransformIter&& transformIter) { + const CoordTransformRange& transformRange) { const DashingLineEffect& de = processor.cast(); if (de.color() != fColor) { pdman.set4fv(fColorUniform, 1, de.color().vec()); fColor = de.color(); } - this->setTransformDataHelper(de.localMatrix(), pdman, &transformIter); + this->setTransformDataHelper(de.localMatrix(), pdman, transformRange); } void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, @@ -1133,12 +1142,12 @@ void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, ////////////////////////////////////////////////////////////////////////////// -sk_sp DashingLineEffect::Make(const SkPMColor4f& color, - AAMode aaMode, - const SkMatrix& localMatrix, - bool usesLocalCoords) { - return sk_sp( - new DashingLineEffect(color, aaMode, localMatrix, usesLocalCoords)); +GrGeometryProcessor* DashingLineEffect::Make(SkArenaAlloc* arena, + const SkPMColor4f& color, + AAMode aaMode, + const SkMatrix& localMatrix, + bool usesLocalCoords) { + return arena->make(color, aaMode, localMatrix, usesLocalCoords); } void DashingLineEffect::getGLSLProcessorKey(const GrShaderCaps& caps, @@ -1168,9 +1177,10 @@ DashingLineEffect::DashingLineEffect(const SkPMColor4f& color, GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DashingLineEffect); #if GR_TEST_UTILS -sk_sp DashingLineEffect::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* DashingLineEffect::TestCreate(GrProcessorTestData* d) { AAMode aaMode = static_cast(d->fRandom->nextULessThan(GrDashOp::kAAModeCnt)); - return DashingLineEffect::Make(SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), + return DashingLineEffect::Make(d->allocator(), + SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), aaMode, GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); } @@ -1178,11 +1188,12 @@ sk_sp DashingLineEffect::TestCreate(GrProcessorTestData* d) #endif ////////////////////////////////////////////////////////////////////////////// -static sk_sp make_dash_gp(const SkPMColor4f& color, - AAMode aaMode, - DashCap cap, - const SkMatrix& viewMatrix, - bool usesLocalCoords) { +static GrGeometryProcessor* make_dash_gp(SkArenaAlloc* arena, + const SkPMColor4f& color, + AAMode aaMode, + DashCap cap, + const SkMatrix& viewMatrix, + bool usesLocalCoords) { SkMatrix invert; if (usesLocalCoords && !viewMatrix.invert(&invert)) { SkDebugf("Failed to invert\n"); @@ -1191,9 +1202,9 @@ static sk_sp make_dash_gp(const SkPMColor4f& color, switch (cap) { case kRound_DashCap: - return DashingCircleEffect::Make(color, aaMode, invert, usesLocalCoords); + return DashingCircleEffect::Make(arena, color, aaMode, invert, usesLocalCoords); case kNonRound_DashCap: - return DashingLineEffect::Make(color, aaMode, invert, usesLocalCoords); + return DashingLineEffect::Make(arena, color, aaMode, invert, usesLocalCoords); } return nullptr; } diff --git a/third_party/skia/src/gpu/ops/GrDefaultPathRenderer.cpp b/third_party/skia/src/gpu/ops/GrDefaultPathRenderer.cpp index 535b3eee42b3..6b8e50222ae1 100644 --- a/third_party/skia/src/gpu/ops/GrDefaultPathRenderer.cpp +++ b/third_party/skia/src/gpu/ops/GrDefaultPathRenderer.cpp @@ -67,11 +67,11 @@ namespace { class PathGeoBuilder { public: PathGeoBuilder(GrPrimitiveType primitiveType, GrMeshDrawOp::Target* target, - sk_sp geometryProcessor) + const GrGeometryProcessor* geometryProcessor) : fPrimitiveType(primitiveType) , fTarget(target) , fVertexStride(sizeof(SkPoint)) - , fGeometryProcessor(std::move(geometryProcessor)) + , fGeometryProcessor(geometryProcessor) , fFirstIndex(0) , fIndicesInChunk(0) , fIndices(nullptr) { @@ -277,7 +277,7 @@ class PathGeoBuilder { vertexCount - 1, GrPrimitiveRestart::kNo); } mesh->setVertexData(std::move(fVertexBuffer), fFirstVertex); - fTarget->recordDraw(fGeometryProcessor, mesh); + fTarget->recordDraw(fGeometryProcessor, mesh, 1, fPrimitiveType); } fTarget->putBackIndices((size_t)(fIndicesInChunk - indexCount)); @@ -313,7 +313,7 @@ class PathGeoBuilder { GrPrimitiveType fPrimitiveType; GrMeshDrawOp::Target* fTarget; size_t fVertexStride; - sk_sp fGeometryProcessor; + const GrGeometryProcessor* fGeometryProcessor; sk_sp fVertexBuffer; int fFirstVertex; @@ -402,14 +402,15 @@ class DefaultPathOp final : public GrMeshDrawOp { private: void onPrepareDraws(Target* target) override { - sk_sp gp; + GrGeometryProcessor* gp; { using namespace GrDefaultGeoProcFactory; Color color(this->color()); Coverage coverage(this->coverage()); LocalCoords localCoords(fHelper.usesLocalCoords() ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type); - gp = GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(), + gp = GrDefaultGeoProcFactory::Make(target->allocator(), + target->caps().shaderCaps(), color, coverage, localCoords, @@ -431,7 +432,7 @@ class DefaultPathOp final : public GrMeshDrawOp { } else { primitiveType = GrPrimitiveType::kTriangles; } - PathGeoBuilder pathGeoBuilder(primitiveType, target, std::move(gp)); + PathGeoBuilder pathGeoBuilder(primitiveType, target, gp); // fill buffers for (int i = 0; i < instanceCount; i++) { @@ -539,11 +540,11 @@ bool GrDefaultPathRenderer::internalDrawPath(GrRenderTargetContext* renderTarget } lastPassIsBounds = false; } else { - switch (path.getFillType()) { - case SkPath::kInverseEvenOdd_FillType: + switch (path.getNewFillType()) { + case SkPathFillType::kInverseEvenOdd: reverse = true; // fallthrough - case SkPath::kEvenOdd_FillType: + case SkPathFillType::kEvenOdd: passes[0] = &gEOStencilPass; if (stencilOnly) { passCount = 1; @@ -559,10 +560,10 @@ bool GrDefaultPathRenderer::internalDrawPath(GrRenderTargetContext* renderTarget } break; - case SkPath::kInverseWinding_FillType: + case SkPathFillType::kInverseWinding: reverse = true; // fallthrough - case SkPath::kWinding_FillType: + case SkPathFillType::kWinding: passes[0] = &gWindStencilPass; passCount = 2; if (stencilOnly) { @@ -588,9 +589,7 @@ bool GrDefaultPathRenderer::internalDrawPath(GrRenderTargetContext* renderTarget SkScalar srcSpaceTol = GrPathUtils::scaleToleranceToSrc(tol, viewMatrix, path.getBounds()); SkRect devBounds; - GetPathDevBounds(path, - renderTargetContext->asRenderTargetProxy()->worstCaseWidth(), - renderTargetContext->asRenderTargetProxy()->worstCaseHeight(), + GetPathDevBounds(path, renderTargetContext->asRenderTargetProxy()->backingStoreDimensions(), viewMatrix, &devBounds); for (int p = 0; p < passCount; ++p) { diff --git a/third_party/skia/src/gpu/ops/GrDrawAtlasOp.cpp b/third_party/skia/src/gpu/ops/GrDrawAtlasOp.cpp index 417e2b4d17c4..c8818ecc57b5 100644 --- a/third_party/skia/src/gpu/ops/GrDrawAtlasOp.cpp +++ b/third_party/skia/src/gpu/ops/GrDrawAtlasOp.cpp @@ -73,17 +73,18 @@ class DrawAtlasOp final : public GrMeshDrawOp { typedef GrMeshDrawOp INHERITED; }; -static sk_sp make_gp(const GrShaderCaps* shaderCaps, - bool hasColors, - const SkPMColor4f& color, - const SkMatrix& viewMatrix) { +static GrGeometryProcessor* make_gp(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + bool hasColors, + const SkPMColor4f& color, + const SkMatrix& viewMatrix) { using namespace GrDefaultGeoProcFactory; Color gpColor(color); if (hasColors) { gpColor.fType = Color::kPremulGrColorAttribute_Type; } - return GrDefaultGeoProcFactory::Make(shaderCaps, gpColor, Coverage::kSolid_Type, + return GrDefaultGeoProcFactory::Make(arena, shaderCaps, gpColor, Coverage::kSolid_Type, LocalCoords::kHasExplicit_Type, viewMatrix); } @@ -184,10 +185,11 @@ SkString DrawAtlasOp::dumpInfo() const { void DrawAtlasOp::onPrepareDraws(Target* target) { // Setup geometry processor - sk_sp gp(make_gp(target->caps().shaderCaps(), - this->hasColors(), - this->color(), - this->viewMatrix())); + GrGeometryProcessor* gp = make_gp(target->allocator(), + target->caps().shaderCaps(), + this->hasColors(), + this->color(), + this->viewMatrix()); int instanceCount = fGeoData.count(); size_t vertexStride = gp->vertexStride(); @@ -208,7 +210,7 @@ void DrawAtlasOp::onPrepareDraws(Target* target) { memcpy(vertPtr, args.fVerts.begin(), allocSize); vertPtr += allocSize; } - helper.recordDraw(target, std::move(gp)); + helper.recordDraw(target, gp); } void DrawAtlasOp::onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) { diff --git a/third_party/skia/src/gpu/ops/GrDrawOp.h b/third_party/skia/src/gpu/ops/GrDrawOp.h index a9e97520f51c..3385b64c9b9e 100644 --- a/third_party/skia/src/gpu/ops/GrDrawOp.h +++ b/third_party/skia/src/gpu/ops/GrDrawOp.h @@ -54,6 +54,11 @@ class GrDrawOp : public GrOp { } #endif +#if GR_TEST_UTILS + // This is really only intended for GrTextureOp and GrFillRectOp to override + virtual int numQuads() const { return -1; } +#endif + private: typedef GrOp INHERITED; }; diff --git a/third_party/skia/src/gpu/ops/GrDrawPathOp.cpp b/third_party/skia/src/gpu/ops/GrDrawPathOp.cpp index 526ebc03d58e..f2fdbb2e5666 100644 --- a/third_party/skia/src/gpu/ops/GrDrawPathOp.cpp +++ b/third_party/skia/src/gpu/ops/GrDrawPathOp.cpp @@ -50,7 +50,7 @@ GrPipeline::InitArgs GrDrawPathOpBase::pipelineInitArgs(const GrOpFlushState& st } args.fUserStencil = &kCoverPass; args.fCaps = &state.caps(); - args.fDstProxy = state.drawOpArgs().dstProxy(); + args.fDstProxyView = state.drawOpArgs().dstProxyView(); args.fOutputSwizzle = state.drawOpArgs().outputSwizzle(); return args; } @@ -70,8 +70,9 @@ void init_stencil_pass_settings(const GrOpFlushState& flushState, GrPathRendering::FillType fillType, GrStencilSettings* stencil) { const GrAppliedClip* appliedClip = flushState.drawOpArgs().appliedClip(); bool stencilClip = appliedClip && appliedClip->hasStencilClip(); + GrRenderTarget* rt = flushState.drawOpArgs().proxy()->peekRenderTarget(); stencil->reset(GrPathRendering::GetStencilPassSettings(fillType), stencilClip, - flushState.drawOpArgs().renderTarget()->renderTargetPriv().numStencilBits()); + rt->renderTargetPriv().numStencilBits()); } ////////////////////////////////////////////////////////////////////////////// @@ -88,21 +89,31 @@ std::unique_ptr GrDrawPathOp::Make(GrRecordingContext* context, void GrDrawPathOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) { GrAppliedClip appliedClip = state->detachAppliedClip(); - GrPipeline::FixedDynamicState fixedDynamicState(appliedClip.scissorState().rect()); + + GrPipeline::FixedDynamicState* fixedDynamicState = nullptr, storage; + + if (appliedClip.scissorState().enabled()) { + storage.fScissorRect = appliedClip.scissorState().rect(); + fixedDynamicState = &storage; + } + GrPipeline pipeline(this->pipelineInitArgs(*state), this->detachProcessors(), std::move(appliedClip)); sk_sp pathProc(GrPathProcessor::Create(this->color(), this->viewMatrix())); - GrProgramInfo programInfo(state->drawOpArgs().numSamples(), - state->drawOpArgs().origin(), - pipeline, - *pathProc, - &fixedDynamicState, - nullptr, 0); + GrProgramInfo programInfo(state->proxy()->numSamples(), + state->proxy()->numStencilSamples(), + state->proxy()->backendFormat(), + state->view()->origin(), + &pipeline, + pathProc.get(), + fixedDynamicState, + nullptr, 0, + GrPrimitiveType::kPath); GrStencilSettings stencil; init_stencil_pass_settings(*state, this->fillType(), &stencil); - state->gpu()->pathRendering()->drawPath(state->drawOpArgs().renderTarget(), + state->gpu()->pathRendering()->drawPath(state->drawOpArgs().proxy()->peekRenderTarget(), programInfo, stencil, fPath.get()); } diff --git a/third_party/skia/src/gpu/ops/GrDrawVerticesOp.cpp b/third_party/skia/src/gpu/ops/GrDrawVerticesOp.cpp index 4b311b520708..102fa3d901dc 100644 --- a/third_party/skia/src/gpu/ops/GrDrawVerticesOp.cpp +++ b/third_party/skia/src/gpu/ops/GrDrawVerticesOp.cpp @@ -60,15 +60,16 @@ class DrawVerticesOp final : public GrMeshDrawOp { uint16_t* indices) const; void drawVertices(Target*, - sk_sp, + const GrGeometryProcessor*, sk_sp vertexBuffer, int firstVertex, sk_sp indexBuffer, int firstIndex); - sk_sp makeGP(const GrShaderCaps* shaderCaps, - bool* hasColorAttribute, - bool* hasLocalCoordAttribute) const; + GrGeometryProcessor* makeGP(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + bool* hasColorAttribute, + bool* hasLocalCoordAttribute) const; GrPrimitiveType primitiveType() const { return fPrimitiveType; } bool combinablePrimitive() const { @@ -229,9 +230,10 @@ GrProcessorSet::Analysis DrawVerticesOp::finalize( return result; } -sk_sp DrawVerticesOp::makeGP(const GrShaderCaps* shaderCaps, - bool* hasColorAttribute, - bool* hasLocalCoordAttribute) const { +GrGeometryProcessor* DrawVerticesOp::makeGP(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + bool* hasColorAttribute, + bool* hasLocalCoordAttribute) const { using namespace GrDefaultGeoProcFactory; LocalCoords::Type localCoordsType; if (fHelper.usesLocalCoords()) { @@ -264,11 +266,12 @@ sk_sp DrawVerticesOp::makeGP(const GrShaderCaps* shaderCaps const SkMatrix& vm = this->hasMultipleViewMatrices() ? SkMatrix::I() : fMeshes[0].fViewMatrix; - return GrDefaultGeoProcFactory::Make(shaderCaps, - color, - Coverage::kSolid_Type, - localCoordsType, - vm); + return GrDefaultGeoProcFactory::Make(arena, + shaderCaps, + color, + Coverage::kSolid_Type, + localCoordsType, + vm); } void DrawVerticesOp::onPrepareDraws(Target* target) { @@ -283,9 +286,10 @@ void DrawVerticesOp::onPrepareDraws(Target* target) { void DrawVerticesOp::drawVolatile(Target* target) { bool hasColorAttribute; bool hasLocalCoordsAttribute; - sk_sp gp = this->makeGP(target->caps().shaderCaps(), - &hasColorAttribute, - &hasLocalCoordsAttribute); + GrGeometryProcessor* gp = this->makeGP(target->allocator(), + target->caps().shaderCaps(), + &hasColorAttribute, + &hasLocalCoordsAttribute); // Allocate buffers. size_t vertexStride = gp->vertexStride(); @@ -316,8 +320,7 @@ void DrawVerticesOp::drawVolatile(Target* target) { indices); // Draw the vertices. - this->drawVertices(target, std::move(gp), std::move(vertexBuffer), firstVertex, indexBuffer, - firstIndex); + this->drawVertices(target, gp, std::move(vertexBuffer), firstVertex, indexBuffer, firstIndex); } void DrawVerticesOp::drawNonVolatile(Target* target) { @@ -325,9 +328,10 @@ void DrawVerticesOp::drawNonVolatile(Target* target) { bool hasColorAttribute; bool hasLocalCoordsAttribute; - sk_sp gp = this->makeGP(target->caps().shaderCaps(), - &hasColorAttribute, - &hasLocalCoordsAttribute); + GrGeometryProcessor* gp = this->makeGP(target->allocator(), + target->caps().shaderCaps(), + &hasColorAttribute, + &hasLocalCoordsAttribute); SkASSERT(fMeshes.count() == 1); // Non-volatile meshes should never combine. @@ -351,8 +355,7 @@ void DrawVerticesOp::drawNonVolatile(Target* target) { // Draw using the cached buffers if possible. if (vertexBuffer && (!this->isIndexed() || indexBuffer)) { - this->drawVertices(target, std::move(gp), std::move(vertexBuffer), 0, - std::move(indexBuffer), 0); + this->drawVertices(target, gp, std::move(vertexBuffer), 0, std::move(indexBuffer), 0); return; } @@ -396,8 +399,7 @@ void DrawVerticesOp::drawNonVolatile(Target* target) { rp->assignUniqueKeyToResource(indexKey, indexBuffer.get()); // Draw the vertices. - this->drawVertices(target, std::move(gp), std::move(vertexBuffer), 0, std::move(indexBuffer), - 0); + this->drawVertices(target, gp, std::move(vertexBuffer), 0, std::move(indexBuffer), 0); } void DrawVerticesOp::fillBuffers(bool hasColorAttribute, @@ -493,7 +495,7 @@ void DrawVerticesOp::fillBuffers(bool hasColorAttribute, } void DrawVerticesOp::drawVertices(Target* target, - sk_sp gp, + const GrGeometryProcessor* gp, sk_sp vertexBuffer, int firstVertex, sk_sp indexBuffer, @@ -506,7 +508,7 @@ void DrawVerticesOp::drawVertices(Target* target, mesh->setNonIndexedNonInstanced(fVertexCount); } mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(gp), mesh); + target->recordDraw(gp, mesh, 1, this->primitiveType()); } void DrawVerticesOp::onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) { diff --git a/third_party/skia/src/gpu/ops/GrFillRRectOp.cpp b/third_party/skia/src/gpu/ops/GrFillRRectOp.cpp index 6b3c023ff689..1637c7eac0f9 100644 --- a/third_party/skia/src/gpu/ops/GrFillRRectOp.cpp +++ b/third_party/skia/src/gpu/ops/GrFillRRectOp.cpp @@ -47,7 +47,8 @@ std::unique_ptr GrFillRRectOp::Make( } } else { if (GrAAType::kMSAA == aaType) { - if (!caps.sampleLocationsSupport() || !caps.shaderCaps()->sampleVariablesSupport()) { + if (!caps.sampleLocationsSupport() || !caps.shaderCaps()->sampleMaskSupport() || + caps.shaderCaps()->canOnlyUseSampleMaskWithStencil()) { return nullptr; } } @@ -93,9 +94,9 @@ std::unique_ptr GrFillRRectOp::Make( return pool->allocate(aaType, rrect, flags, m, std::move(paint), devBounds); } -GrFillRRectOp::GrFillRRectOp( - GrAAType aaType, const SkRRect& rrect, Flags flags, - const SkMatrix& totalShapeMatrix, GrPaint&& paint, const SkRect& devBounds) +GrFillRRectOp::GrFillRRectOp(GrAAType aaType, const SkRRect& rrect, Flags flags, + const SkMatrix& totalShapeMatrix, GrPaint&& paint, + const SkRect& devBounds) : GrDrawOp(ClassID()) , fAAType(aaType) , fOriginalColor(paint.getColor4f()) @@ -134,7 +135,6 @@ GrProcessorSet::Analysis GrFillRRectOp::finalize( SkPMColor4f overrideColor; const GrProcessorSet::Analysis& analysis = fProcessors.finalize( - fOriginalColor, GrProcessorAnalysisCoverage::kSingleChannel, clip, &GrUserStencilSettings::kUnused, hasMixedSampledCoverage, caps, clampType, &overrideColor); @@ -143,9 +143,7 @@ GrProcessorSet::Analysis GrFillRRectOp::finalize( SkPMColor4f finalColor = analysis.inputColorIsOverridden() ? overrideColor : fOriginalColor; if (!SkPMColor4fFitsInBytes(finalColor)) { fFlags |= Flags::kWideColor; - uint32_t halfColor[2]; - SkFloatToHalf_finite_ftz(Sk4f::Load(finalColor.vec())).store(&halfColor); - this->writeInstanceData(halfColor[0], halfColor[1]); + this->writeInstanceData(finalColor); } else { this->writeInstanceData(finalColor.toBytes_RGBA()); } @@ -174,8 +172,23 @@ GrDrawOp::CombineResult GrFillRRectOp::onCombineIfPossible(GrOp* op, const GrCap class GrFillRRectOp::Processor : public GrGeometryProcessor { public: + static GrGeometryProcessor* Make(SkArenaAlloc* arena, GrAAType aaType, Flags flags) { + return arena->make(aaType, flags); + } + + const char* name() const final { return "GrFillRRectOp::Processor"; } + + void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const final { + b->add32(((uint32_t)fFlags << 16) | (uint32_t)fAAType); + } + + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const final; + +private: + friend class ::SkArenaAlloc; // for access to ctor + Processor(GrAAType aaType, Flags flags) - : GrGeometryProcessor(kGrFillRRectOp_Processor_ClassID) + : INHERITED(kGrFillRRectOp_Processor_ClassID) , fAAType(aaType) , fFlags(flags) { int numVertexAttribs = (GrAAType::kCoverage == fAAType) ? 3 : 2; @@ -207,15 +220,6 @@ class GrFillRRectOp::Processor : public GrGeometryProcessor { } } - const char* name() const override { return "GrFillRRectOp::Processor"; } - - void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override { - b->add32(((uint32_t)fFlags << 16) | (uint32_t)fAAType); - } - - GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; - -private: static constexpr Attribute kVertexAttribs[] = { {"radii_selector", kFloat4_GrVertexAttribType, kFloat4_GrSLType}, {"corner_and_radius_outsets", kFloat4_GrVertexAttribType, kFloat4_GrSLType}, @@ -230,6 +234,8 @@ class GrFillRRectOp::Processor : public GrGeometryProcessor { class CoverageImpl; class MSAAImpl; + + typedef GrGeometryProcessor INHERITED; }; constexpr GrPrimitiveProcessor::Attribute GrFillRRectOp::Processor::kVertexAttribs[]; @@ -441,6 +447,20 @@ static constexpr uint16_t kMSAAIndexData[] = { GR_DECLARE_STATIC_UNIQUE_KEY(gMSAAIndexBufferKey); +void GrFillRRectOp::onPrePrepare(GrRecordingContext* context, + const GrSurfaceProxyView* dstView, + GrAppliedClip* clip, + const GrXferProcessor::DstProxyView& dstProxyView) { + SkArenaAlloc* arena = context->priv().recordTimeAllocator(); + + // This is equivalent to a GrOpFlushState::detachAppliedClip + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + + // TODO: need to also give this to the recording context + fProgramInfo = this->createProgramInfo(context->priv().caps(), arena, dstView, + std::move(appliedClip), dstProxyView); +} + void GrFillRRectOp::onPrepare(GrOpFlushState* flushState) { if (void* instanceData = flushState->makeVertexSpace(fInstanceStride, fInstanceCount, &fInstanceBuffer, &fBaseInstance)) { @@ -610,8 +630,8 @@ class GrFillRRectOp::Processor::CoverageImpl : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - FPCoordTransformIter&& transformIter) override { - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + const CoordTransformRange& transformRange) override { + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } }; @@ -716,8 +736,8 @@ class GrFillRRectOp::Processor::MSAAImpl : public GrGLSLGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - FPCoordTransformIter&& transformIter) override { - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + const CoordTransformRange& transformRange) override { + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } }; @@ -729,42 +749,67 @@ GrGLSLPrimitiveProcessor* GrFillRRectOp::Processor::createGLSLInstance( return new CoverageImpl(); } +GrProgramInfo* GrFillRRectOp::createProgramInfo(const GrCaps* caps, + SkArenaAlloc* arena, + const GrSurfaceProxyView* dstView, + GrAppliedClip&& appliedClip, + const GrXferProcessor::DstProxyView& dstProxyView) { + GrGeometryProcessor* geomProc = Processor::Make(arena, fAAType, fFlags); + SkASSERT(geomProc->instanceStride() == (size_t)fInstanceStride); + + GrPipeline::InitArgs initArgs; + if (GrAAType::kMSAA == fAAType) { + initArgs.fInputFlags = GrPipeline::InputFlags::kHWAntialias; + } + initArgs.fCaps = caps; + initArgs.fDstProxyView = dstProxyView; + initArgs.fOutputSwizzle = dstView->swizzle(); + + GrPipeline::FixedDynamicState* fixedDynamicState = nullptr; + + if (appliedClip.scissorState().enabled()) { + fixedDynamicState = arena->make( + appliedClip.scissorState().rect()); + } + + GrPipeline* pipeline = arena->make(initArgs, + std::move(fProcessors), + std::move(appliedClip)); + + GrRenderTargetProxy* dstProxy = dstView->asRenderTargetProxy(); + return arena->make(dstProxy->numSamples(), + dstProxy->numStencilSamples(), + dstProxy->backendFormat(), + dstView->origin(), + pipeline, + geomProc, + fixedDynamicState, + nullptr, 0, + GrPrimitiveType::kTriangles); +} + void GrFillRRectOp::onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) { if (!fInstanceBuffer || !fIndexBuffer || !fVertexBuffer) { return; // Setup failed. } - Processor* proc = flushState->allocator()->make(fAAType, fFlags); - SkASSERT(proc->instanceStride() == (size_t)fInstanceStride); + if (!fProgramInfo) { + const GrSurfaceProxyView* dstView = flushState->view(); - GrPipeline::InitArgs initArgs; - if (GrAAType::kMSAA == fAAType) { - initArgs.fInputFlags = GrPipeline::InputFlags::kHWAntialias; + fProgramInfo = this->createProgramInfo(&flushState->caps(), + flushState->allocator(), + dstView, + flushState->detachAppliedClip(), + flushState->dstProxyView()); } - initArgs.fCaps = &flushState->caps(); - initArgs.fDstProxy = flushState->drawOpArgs().dstProxy(); - initArgs.fOutputSwizzle = flushState->drawOpArgs().outputSwizzle(); - auto clip = flushState->detachAppliedClip(); - GrPipeline::FixedDynamicState* fixedDynamicState = - flushState->allocator()->make(clip.scissorState().rect()); - GrPipeline* pipeline = flushState->allocator()->make(initArgs, - std::move(fProcessors), - std::move(clip)); - - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - *pipeline, - *proc, - fixedDynamicState, - nullptr, 0); GrMesh* mesh = flushState->allocator()->make(GrPrimitiveType::kTriangles); - mesh->setIndexedInstanced( - std::move(fIndexBuffer), fIndexCount, std::move(fInstanceBuffer), fInstanceCount, - fBaseInstance, GrPrimitiveRestart::kNo); + mesh->setIndexedInstanced(std::move(fIndexBuffer), fIndexCount, + std::move(fInstanceBuffer), fInstanceCount, + fBaseInstance, GrPrimitiveRestart::kNo); mesh->setVertexData(std::move(fVertexBuffer)); - flushState->opsRenderPass()->draw(programInfo, mesh, 1, this->bounds()); - fIndexCount = 0; + + flushState->opsRenderPass()->draw(*fProgramInfo, mesh, 1, this->bounds()); } // Will the given corner look good if we use HW derivatives? diff --git a/third_party/skia/src/gpu/ops/GrFillRRectOp.h b/third_party/skia/src/gpu/ops/GrFillRRectOp.h index c3e759947a99..c6ad1e28485a 100644 --- a/third_party/skia/src/gpu/ops/GrFillRRectOp.h +++ b/third_party/skia/src/gpu/ops/GrFillRRectOp.h @@ -8,6 +8,7 @@ #ifndef GrFillRRectOp_DEFINED #define GrFillRRectOp_DEFINED +#include "src/gpu/GrProgramInfo.h" #include "src/gpu/ops/GrDrawOp.h" class GrRecordingContext; @@ -20,21 +21,29 @@ class GrFillRRectOp : public GrDrawOp { GrRecordingContext*, GrAAType, const SkMatrix& viewMatrix, const SkRRect&, const GrCaps&, GrPaint&&); - const char* name() const override { return "GrFillRRectOp"; } - FixedFunctionFlags fixedFunctionFlags() const override { - return (GrAAType::kMSAA == fAAType) - ? FixedFunctionFlags::kUsesHWAA - : FixedFunctionFlags::kNone; + const char* name() const final { return "GrFillRRectOp"; } + + FixedFunctionFlags fixedFunctionFlags() const final { + return (GrAAType::kMSAA == fAAType) ? FixedFunctionFlags::kUsesHWAA + : FixedFunctionFlags::kNone; } GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, - bool hasMixedSampledCoverage, GrClampType) override; - CombineResult onCombineIfPossible(GrOp*, const GrCaps&) override; + bool hasMixedSampledCoverage, GrClampType) final; + CombineResult onCombineIfPossible(GrOp*, const GrCaps&) final; void visitProxies(const VisitProxyFunc& fn) const override { - fProcessors.visitProxies(fn); + if (fProgramInfo) { + fProgramInfo->visitProxies(fn); + } else { + fProcessors.visitProxies(fn); + } } - void onPrepare(GrOpFlushState*) override; - void onExecute(GrOpFlushState*, const SkRect& chainBounds) override; + void onPrePrepare(GrRecordingContext*, const GrSurfaceProxyView*, GrAppliedClip*, + const GrXferProcessor::DstProxyView&) final; + + void onPrepare(GrOpFlushState*) final; + + void onExecute(GrOpFlushState*, const SkRect& chainBounds) final; private: enum class Flags { @@ -68,6 +77,13 @@ class GrFillRRectOp : public GrDrawOp { void writeInstanceData() {} // Halt condition. + // Create a GrProgramInfo object in the provided arena + GrProgramInfo* createProgramInfo(const GrCaps*, + SkArenaAlloc*, + const GrSurfaceProxyView* dstView, + GrAppliedClip&&, + const GrXferProcessor::DstProxyView&); + const GrAAType fAAType; const SkPMColor4f fOriginalColor; const SkRect fLocalRect; @@ -81,9 +97,13 @@ class GrFillRRectOp : public GrDrawOp { sk_sp fInstanceBuffer; sk_sp fVertexBuffer; sk_sp fIndexBuffer; - int fBaseInstance; + int fBaseInstance = 0; int fIndexCount = 0; + // If this op is prePrepared the created programInfo will be stored here from use in + // onExecute. In the prePrepared case it will have been stored in the record-time arena. + GrProgramInfo* fProgramInfo = nullptr; + friend class GrOpMemoryPool; }; diff --git a/third_party/skia/src/gpu/ops/GrFillRectOp.cpp b/third_party/skia/src/gpu/ops/GrFillRectOp.cpp index 560adc0a9786..58476eb89c51 100644 --- a/third_party/skia/src/gpu/ops/GrFillRectOp.cpp +++ b/third_party/skia/src/gpu/ops/GrFillRectOp.cpp @@ -29,9 +29,10 @@ using VertexSpec = GrQuadPerEdgeAA::VertexSpec; using ColorType = GrQuadPerEdgeAA::ColorType; #ifdef SK_DEBUG -static SkString dump_quad_info(int index, const GrQuad& deviceQuad, - const GrQuad& localQuad, const SkPMColor4f& color, +static SkString dump_quad_info(int index, const GrQuad* deviceQuad, + const GrQuad* localQuad, const SkPMColor4f& color, GrQuadAAFlags aaFlags) { + GrQuad safeLocal = localQuad ? *localQuad : GrQuad(); SkString str; str.appendf("%d: Color: [%.2f, %.2f, %.2f, %.2f], Edge AA: l%u_t%u_r%u_b%u, \n" " device quad: [(%.2f, %2.f, %.2f), (%.2f, %.2f, %.2f), (%.2f, %.2f, %.2f), " @@ -43,14 +44,14 @@ static SkString dump_quad_info(int index, const GrQuad& deviceQuad, (uint32_t) (aaFlags & GrQuadAAFlags::kTop), (uint32_t) (aaFlags & GrQuadAAFlags::kRight), (uint32_t) (aaFlags & GrQuadAAFlags::kBottom), - deviceQuad.x(0), deviceQuad.y(0), deviceQuad.w(0), - deviceQuad.x(1), deviceQuad.y(1), deviceQuad.w(1), - deviceQuad.x(2), deviceQuad.y(2), deviceQuad.w(2), - deviceQuad.x(3), deviceQuad.y(3), deviceQuad.w(3), - localQuad.x(0), localQuad.y(0), localQuad.w(0), - localQuad.x(1), localQuad.y(1), localQuad.w(1), - localQuad.x(2), localQuad.y(2), localQuad.w(2), - localQuad.x(3), localQuad.y(3), localQuad.w(3)); + deviceQuad->x(0), deviceQuad->y(0), deviceQuad->w(0), + deviceQuad->x(1), deviceQuad->y(1), deviceQuad->w(1), + deviceQuad->x(2), deviceQuad->y(2), deviceQuad->w(2), + deviceQuad->x(3), deviceQuad->y(3), deviceQuad->w(3), + safeLocal.x(0), safeLocal.y(0), safeLocal.w(0), + safeLocal.x(1), safeLocal.y(1), safeLocal.w(1), + safeLocal.x(2), safeLocal.y(2), safeLocal.w(2), + safeLocal.x(3), safeLocal.y(3), safeLocal.w(3)); return str; } #endif @@ -145,7 +146,7 @@ class FillRectOp final : public GrMeshDrawOp { iter = fQuads.metadata(); SkPMColor4f colorOverride; if (quadColors.isConstant(&colorOverride)) { - fColorType = GrQuadPerEdgeAA::MinColorType(colorOverride, clampType, caps); + fColorType = GrQuadPerEdgeAA::MinColorType(colorOverride); while(iter.next()) { iter->fColor = colorOverride; } @@ -153,8 +154,7 @@ class FillRectOp final : public GrMeshDrawOp { // Otherwise compute the color type needed as the max over all quads. fColorType = ColorType::kNone; while(iter.next()) { - fColorType = SkTMax(fColorType, - GrQuadPerEdgeAA::MinColorType(iter->fColor, clampType, caps)); + fColorType = SkTMax(fColorType, GrQuadPerEdgeAA::MinColorType(iter->fColor)); } } // Most SkShaders' FPs multiply their calculated color by the paint color or alpha. We want @@ -178,62 +178,105 @@ class FillRectOp final : public GrMeshDrawOp { DEFINE_OP_CLASS_ID private: - // For GrFillRectOp::MakeSet's use of addQuad - friend std::unique_ptr GrFillRectOp::MakeSet( - GrRecordingContext*, - GrPaint&&, - GrAAType, const SkMatrix& viewMatrix, - const GrRenderTargetContext::QuadSetEntry quads[], int quadCount, - const GrUserStencilSettings*); + friend class ::GrFillRectOp; // for access to addQuad - void onPrepareDraws(Target* target) override { +#if GR_TEST_UTILS + int numQuads() const final { return fQuads.count(); } +#endif + + VertexSpec vertexSpec() const { + auto indexBufferOption = GrQuadPerEdgeAA::CalcIndexBufferOption(fHelper.aaType(), + fQuads.count()); + + return VertexSpec(fQuads.deviceQuadType(), fColorType, fQuads.localQuadType(), + fHelper.usesLocalCoords(), GrQuadPerEdgeAA::Domain::kNo, + fHelper.aaType(), + fHelper.compatibleWithCoverageAsAlpha(), indexBufferOption); + } + + void onPrePrepareDraws(GrRecordingContext* context, + const GrSurfaceProxyView*, + GrAppliedClip*, + const GrXferProcessor::DstProxyView&) override { TRACE_EVENT0("skia.gpu", TRACE_FUNC); - using Domain = GrQuadPerEdgeAA::Domain; + SkASSERT(!fPrePreparedVertices); + + SkArenaAlloc* arena = context->priv().recordTimeAllocator(); + + const VertexSpec vertexSpec = this->vertexSpec(); + + const int totalNumVertices = fQuads.count() * vertexSpec.verticesPerQuad(); + const size_t totalVertexSizeInBytes = vertexSpec.vertexSize() * totalNumVertices; + + fPrePreparedVertices = arena->makeArrayDefault(totalVertexSizeInBytes); + + this->tessellate(vertexSpec, fPrePreparedVertices); + } + + void tessellate(const VertexSpec& vertexSpec, char* dst) const { static constexpr SkRect kEmptyDomain = SkRect::MakeEmpty(); - VertexSpec vertexSpec(fQuads.deviceQuadType(), fColorType, fQuads.localQuadType(), - fHelper.usesLocalCoords(), Domain::kNo, fHelper.aaType(), - fHelper.compatibleWithCoverageAsAlpha()); + GrQuadPerEdgeAA::Tessellator tessellator(vertexSpec, dst); + auto iter = fQuads.iterator(); + while (iter.next()) { + // All entries should have local coords, or no entries should have local coords, + // matching !helper.isTrivial() (which is more conservative than helper.usesLocalCoords) + SkASSERT(iter.isLocalValid() != fHelper.isTrivial()); + auto info = iter.metadata(); + tessellator.append(iter.deviceQuad(), iter.localQuad(), + info.fColor, kEmptyDomain, info.fAAFlags); + } + } + + void onPrepareDraws(Target* target) override { + TRACE_EVENT0("skia.gpu", TRACE_FUNC); + + const VertexSpec vertexSpec = this->vertexSpec(); + // Make sure that if the op thought it was a solid color, the vertex spec does not use // local coords. SkASSERT(!fHelper.isTrivial() || !fHelper.usesLocalCoords()); - sk_sp gp = GrQuadPerEdgeAA::MakeProcessor(vertexSpec); - size_t vertexSize = gp->vertexStride(); + GrGeometryProcessor* gp = GrQuadPerEdgeAA::MakeProcessor(target->allocator(), vertexSpec); + SkASSERT(gp->vertexStride() == vertexSpec.vertexSize()); - sk_sp vbuffer; + sk_sp vertexBuffer; int vertexOffsetInBuffer = 0; + const int totalNumVertices = fQuads.count() * vertexSpec.verticesPerQuad(); + // Fill the allocated vertex data - void* vdata = target->makeVertexSpace( - vertexSize, fQuads.count() * vertexSpec.verticesPerQuad(), - &vbuffer, &vertexOffsetInBuffer); + void* vdata = target->makeVertexSpace(vertexSpec.vertexSize(), totalNumVertices, + &vertexBuffer, &vertexOffsetInBuffer); if (!vdata) { SkDebugf("Could not allocate vertices\n"); return; } - // vertices pointer advances through vdata based on Tessellate's return value - void* vertices = vdata; - auto iter = fQuads.iterator(); - while(iter.next()) { - // All entries should have local coords, or no entries should have local coords, - // matching !helper.isTrivial() (which is more conservative than helper.usesLocalCoords) - SkASSERT(iter.isLocalValid() != fHelper.isTrivial()); - auto info = iter.metadata(); - vertices = GrQuadPerEdgeAA::Tessellate(vertices, vertexSpec, iter.deviceQuad(), - info.fColor, iter.localQuad(), kEmptyDomain, info.fAAFlags); + if (fPrePreparedVertices) { + const size_t totalVertexSizeInBytes = vertexSpec.vertexSize() * totalNumVertices; + + memcpy(vdata, fPrePreparedVertices, totalVertexSizeInBytes); + } else { + this->tessellate(vertexSpec, (char*) vdata); + } + + sk_sp indexBuffer; + if (vertexSpec.needsIndexBuffer()) { + indexBuffer = GrQuadPerEdgeAA::GetIndexBuffer(target, vertexSpec.indexBufferOption()); + if (!indexBuffer) { + SkDebugf("Could not allocate indices\n"); + return; + } } // Configure the mesh for the vertex data GrMesh* mesh = target->allocMeshes(1); - if (!GrQuadPerEdgeAA::ConfigureMeshIndices(target, mesh, vertexSpec, fQuads.count())) { - SkDebugf("Could not allocate indices\n"); - return; - } - mesh->setVertexData(std::move(vbuffer), vertexOffsetInBuffer); - target->recordDraw(std::move(gp), mesh); + GrQuadPerEdgeAA::ConfigureMesh(target->caps(), mesh, vertexSpec, 0, fQuads.count(), + totalNumVertices, std::move(vertexBuffer), + std::move(indexBuffer), vertexOffsetInBuffer); + target->recordDraw(gp, mesh, 1, vertexSpec.primitiveType()); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -244,10 +287,16 @@ class FillRectOp final : public GrMeshDrawOp { TRACE_EVENT0("skia.gpu", TRACE_FUNC); const auto* that = t->cast(); - if ((fHelper.aaType() == GrAAType::kCoverage || - that->fHelper.aaType() == GrAAType::kCoverage) && - fQuads.count() + that->fQuads.count() > GrQuadPerEdgeAA::kNumAAQuadsInIndexBuffer) { - // This limit on batch size seems to help on Adreno devices + bool upgradeToCoverageAAOnMerge = false; + if (fHelper.aaType() != that->fHelper.aaType()) { + if (!CanUpgradeAAOnMerge(fHelper.aaType(), that->fHelper.aaType())) { + return CombineResult::kCannotCombine; + } + upgradeToCoverageAAOnMerge = true; + } + + if (CombinedQuadCountWillOverflow(fHelper.aaType(), upgradeToCoverageAAOnMerge, + fQuads.count() + that->fQuads.count())) { return CombineResult::kCannotCombine; } @@ -268,7 +317,7 @@ class FillRectOp final : public GrMeshDrawOp { // The helper stores the aa type, but isCompatible(with true arg) allows the two ops' aa // types to be none and coverage, in which case this op's aa type must be lifted to coverage // so that quads with no aa edges can be batched with quads that have some/all edges aa'ed. - if (fHelper.aaType() == GrAAType::kNone && that->fHelper.aaType() == GrAAType::kCoverage) { + if (upgradeToCoverageAAOnMerge) { fHelper.setAAType(GrAAType::kCoverage); } @@ -280,19 +329,29 @@ class FillRectOp final : public GrMeshDrawOp { // But since it's avoiding the op list management, it must update the op's bounds. This is only // used with quad sets, which uses the same view matrix for each quad so this assumes that the // device quad type of the new quad is the same as the op's. - void addQuad(const GrQuad& deviceQuad, const GrQuad& localQuad, + bool addQuad(const GrQuad& deviceQuad, const GrQuad& localQuad, const SkPMColor4f& color, GrQuadAAFlags edgeAA, GrAAType aaType) { // The new quad's aa type should be the same as the first quad's or none, except when the // first quad's aa type was already downgraded to none, in which case the stored type must // be lifted to back to the requested type. - if (aaType != fHelper.aaType()) { - if (aaType != GrAAType::kNone) { - // Original quad was downgraded to non-aa, lift back up to this quad's required type - SkASSERT(fHelper.aaType() == GrAAType::kNone); - fHelper.setAAType(aaType); + if (aaType != fHelper.aaType() && aaType != GrAAType::kNone) { + auto indexBufferOption = GrQuadPerEdgeAA::CalcIndexBufferOption(aaType, + fQuads.count()+1); + if (fQuads.count()+1 > GrQuadPerEdgeAA::QuadLimit(indexBufferOption)) { + // Promoting to the new aaType would've caused an overflow of the indexBuffer + // limit + return false; + } + + // Original quad was downgraded to non-aa, lift back up to this quad's required type + SkASSERT(fHelper.aaType() == GrAAType::kNone); + fHelper.setAAType(aaType); + } else { + auto indexBufferOption = GrQuadPerEdgeAA::CalcIndexBufferOption(fHelper.aaType(), + fQuads.count()+1); + if (fQuads.count()+1 > GrQuadPerEdgeAA::QuadLimit(indexBufferOption)) { + return false; // This op can't grow any more } - // else the new quad could have been downgraded but the other quads can't be, so don't - // reset the op's accumulated aa type. } // Update the bounds and add the quad to this op's storage @@ -301,6 +360,7 @@ class FillRectOp final : public GrMeshDrawOp { this->setBounds(newBounds, HasAABloat(fHelper.aaType() == GrAAType::kCoverage), IsHairline::kNo); fQuads.append(deviceQuad, { color, edgeAA }, fHelper.isTrivial() ? nullptr : &localQuad); + return true; } struct ColorAndAA { @@ -310,6 +370,7 @@ class FillRectOp final : public GrMeshDrawOp { Helper fHelper; GrQuadBuffer fQuads; + char* fPrePreparedVertices = nullptr; ColorType fColorType; @@ -318,45 +379,46 @@ class FillRectOp final : public GrMeshDrawOp { } // anonymous namespace -namespace GrFillRectOp { - -std::unique_ptr Make(GrRecordingContext* context, - GrPaint&& paint, - GrAAType aaType, - GrQuadAAFlags aaFlags, - const GrQuad& deviceQuad, - const GrQuad& localQuad, - const GrUserStencilSettings* stencil) { +std::unique_ptr GrFillRectOp::Make(GrRecordingContext* context, + GrPaint&& paint, + GrAAType aaType, + GrQuadAAFlags aaFlags, + const GrQuad& deviceQuad, + const GrQuad& localQuad, + const GrUserStencilSettings* stencil) { return FillRectOp::Make(context, std::move(paint), aaType, aaFlags, stencil, deviceQuad, localQuad); } -std::unique_ptr MakeNonAARect(GrRecordingContext* context, - GrPaint&& paint, - const SkMatrix& view, - const SkRect& rect, - const GrUserStencilSettings* stencil) { +std::unique_ptr GrFillRectOp::MakeNonAARect(GrRecordingContext* context, + GrPaint&& paint, + const SkMatrix& view, + const SkRect& rect, + const GrUserStencilSettings* stencil) { return FillRectOp::Make(context, std::move(paint), GrAAType::kNone, GrQuadAAFlags::kNone, stencil, GrQuad::MakeFromRect(rect, view), GrQuad(rect)); } -std::unique_ptr MakeSet(GrRecordingContext* context, - GrPaint&& paint, - GrAAType aaType, - const SkMatrix& viewMatrix, - const GrRenderTargetContext::QuadSetEntry quads[], - int cnt, - const GrUserStencilSettings* stencilSettings) { +std::unique_ptr GrFillRectOp::MakeOp(GrRecordingContext* context, + GrPaint&& paint, + GrAAType aaType, + const SkMatrix& viewMatrix, + const GrRenderTargetContext::QuadSetEntry quads[], + int cnt, + const GrUserStencilSettings* stencilSettings, + int* numConsumed) { // First make a draw op for the first quad in the set SkASSERT(cnt > 0); paint.setColor4f(quads[0].fColor); - std::unique_ptr op = FillRectOp::Make(context, std::move(paint), aaType, + std::unique_ptr op = FillRectOp::Make( + context, std::move(paint), aaType, quads[0].fAAFlags, stencilSettings, GrQuad::MakeFromRect(quads[0].fRect, viewMatrix), GrQuad::MakeFromRect(quads[0].fRect, quads[0].fLocalMatrix)); - auto* fillRects = op->cast(); + FillRectOp* fillRects = op->cast(); + *numConsumed = 1; // Accumulate remaining quads similar to onCombineIfPossible() without creating an op for (int i = 1; i < cnt; ++i) { GrQuad deviceQuad = GrQuad::MakeFromRect(quads[i].fRect, viewMatrix); @@ -366,18 +428,52 @@ std::unique_ptr MakeSet(GrRecordingContext* context, GrQuadUtils::ResolveAAType(aaType, quads[i].fAAFlags, deviceQuad, &resolvedAA, &resolvedEdgeFlags); - fillRects->addQuad(deviceQuad, - GrQuad::MakeFromRect(quads[i].fRect, quads[i].fLocalMatrix), - quads[i].fColor, resolvedEdgeFlags,resolvedAA); + if (!fillRects->addQuad(deviceQuad, + GrQuad::MakeFromRect(quads[i].fRect, quads[i].fLocalMatrix), + quads[i].fColor, resolvedEdgeFlags, resolvedAA)) { + break; + } + + (*numConsumed)++; } return op; } -} // namespace GrFillRectOp +void GrFillRectOp::AddFillRectOps(GrRenderTargetContext* rtc, + const GrClip& clip, + GrRecordingContext* context, + GrPaint&& paint, + GrAAType aaType, + const SkMatrix& viewMatrix, + const GrRenderTargetContext::QuadSetEntry quads[], + int cnt, + const GrUserStencilSettings* stencilSettings) { + + int offset = 0; + int numLeft = cnt; + while (numLeft) { + int numConsumed = 0; + + std::unique_ptr op = MakeOp(context, GrPaint::Clone(paint), aaType, viewMatrix, + &quads[offset], numLeft, stencilSettings, + &numConsumed); + + offset += numConsumed; + numLeft -= numConsumed; + + rtc->addDrawOp(clip, std::move(op)); + } + + SkASSERT(offset == cnt); +} #if GR_TEST_UTILS +uint32_t GrFillRectOp::ClassID() { + return FillRectOp::ClassID(); +} + #include "src/gpu/GrDrawOpTest.h" #include "src/gpu/SkGr.h" @@ -400,35 +496,11 @@ GR_DRAW_OP_TEST_DEFINE(FillRectOp) { if (random->nextBool()) { if (random->nextBool()) { - if (random->nextBool()) { - // Local matrix with a set op - uint32_t extraQuadCt = random->nextRangeU(1, 4); - SkTArray quads(extraQuadCt + 1); - quads.push_back( - {rect, SkPMColor4f::FromBytes_RGBA(SkColorToPremulGrColor(random->nextU())), - GrTest::TestMatrixInvertible(random), aaFlags}); - for (uint32_t i = 0; i < extraQuadCt; ++i) { - GrQuadAAFlags aaFlags = GrQuadAAFlags::kNone; - aaFlags |= random->nextBool() ? GrQuadAAFlags::kLeft : GrQuadAAFlags::kNone; - aaFlags |= random->nextBool() ? GrQuadAAFlags::kTop : GrQuadAAFlags::kNone; - aaFlags |= random->nextBool() ? GrQuadAAFlags::kRight : GrQuadAAFlags::kNone; - aaFlags |= random->nextBool() ? GrQuadAAFlags::kBottom : GrQuadAAFlags::kNone; - - quads.push_back( - {GrTest::TestRect(random), - SkPMColor4f::FromBytes_RGBA(SkColorToPremulGrColor(random->nextU())), - GrTest::TestMatrixInvertible(random), aaFlags}); - } - - return GrFillRectOp::MakeSet(context, std::move(paint), aaType, viewMatrix, - quads.begin(), quads.count(), stencil); - } else { - // Single local matrix - SkMatrix localMatrix = GrTest::TestMatrixInvertible(random); - return GrFillRectOp::Make(context, std::move(paint), aaType, aaFlags, - GrQuad::MakeFromRect(rect, viewMatrix), - GrQuad::MakeFromRect(rect, localMatrix), stencil); - } + // Single local matrix + SkMatrix localMatrix = GrTest::TestMatrixInvertible(random); + return GrFillRectOp::Make(context, std::move(paint), aaType, aaFlags, + GrQuad::MakeFromRect(rect, viewMatrix), + GrQuad::MakeFromRect(rect, localMatrix), stencil); } else { // Pass local rect directly SkRect localRect = GrTest::TestRect(random); diff --git a/third_party/skia/src/gpu/ops/GrFillRectOp.h b/third_party/skia/src/gpu/ops/GrFillRectOp.h index 768ed8bc78dd..600e87b0a0e9 100644 --- a/third_party/skia/src/gpu/ops/GrFillRectOp.h +++ b/third_party/skia/src/gpu/ops/GrFillRectOp.h @@ -25,34 +25,53 @@ struct SkRect; * the GrPaint is only consumed by these methods if a valid op is returned. If null is returned then * the paint is unmodified and may still be used. */ -namespace GrFillRectOp { - -std::unique_ptr Make(GrRecordingContext* context, - GrPaint&& paint, - GrAAType aaType, - GrQuadAAFlags aaFlags, - const GrQuad& deviceQuad, - const GrQuad& localQuad, - const GrUserStencilSettings* stencil = nullptr); - -// Utility function to create a non-AA rect transformed by view. This is used commonly enough in -// testing and GMs that manage ops without going through GrRTC that it's worth the convenience. -std::unique_ptr MakeNonAARect(GrRecordingContext* context, - GrPaint&& paint, - const SkMatrix& view, - const SkRect& rect, - const GrUserStencilSettings* stencil = nullptr); - -// Bulk API for drawing quads with a single op -// TODO(michaelludwig) - remove if the bulk API is not useful for SkiaRenderer -std::unique_ptr MakeSet(GrRecordingContext* context, - GrPaint&& paint, - GrAAType aaType, - const SkMatrix& viewMatrix, - const GrRenderTargetContext::QuadSetEntry quads[], - int quadCount, - const GrUserStencilSettings* stencil = nullptr); - -} // namespace GrFillRectOp +class GrFillRectOp { +public: + + static std::unique_ptr Make(GrRecordingContext* context, + GrPaint&& paint, + GrAAType aaType, + GrQuadAAFlags aaFlags, + const GrQuad& deviceQuad, + const GrQuad& localQuad, + const GrUserStencilSettings* stencil = nullptr); + + // Utility function to create a non-AA rect transformed by view. This is used commonly enough + // in testing and GMs that manage ops without going through GrRTC that it's worth the + // convenience. + static std::unique_ptr MakeNonAARect(GrRecordingContext* context, + GrPaint&& paint, + const SkMatrix& view, + const SkRect& rect, + const GrUserStencilSettings* stencil = nullptr); + + // Bulk API for drawing quads with a single op + // TODO(michaelludwig) - remove if the bulk API is not useful for SkiaRenderer + static void AddFillRectOps(GrRenderTargetContext*, + const GrClip& clip, + GrRecordingContext*, + GrPaint&&, + GrAAType, + const SkMatrix& viewMatrix, + const GrRenderTargetContext::QuadSetEntry quads[], + int quadCount, + const GrUserStencilSettings* = nullptr); + +#if GR_TEST_UTILS + static uint32_t ClassID(); +#endif + +private: + // Create a GrFillRectOp that uses as many quads as possible from 'quads' w/o exceeding + // any index buffer size limits. + static std::unique_ptr MakeOp(GrRecordingContext*, + GrPaint&&, + GrAAType, + const SkMatrix& viewMatrix, + const GrRenderTargetContext::QuadSetEntry quads[], + int quadCount, + const GrUserStencilSettings*, + int* numConsumed); +}; #endif // GrFillRectOp_DEFINED diff --git a/third_party/skia/src/gpu/ops/GrLatticeOp.cpp b/third_party/skia/src/gpu/ops/GrLatticeOp.cpp index adcfe8c0b83f..c341e07ea3ec 100644 --- a/third_party/skia/src/gpu/ops/GrLatticeOp.cpp +++ b/third_party/skia/src/gpu/ops/GrLatticeOp.cpp @@ -18,6 +18,7 @@ #include "src/gpu/GrVertexWriter.h" #include "src/gpu/SkGr.h" #include "src/gpu/glsl/GrGLSLColorSpaceXformHelper.h" +#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLGeometryProcessor.h" #include "src/gpu/glsl/GrGLSLVarying.h" #include "src/gpu/ops/GrLatticeOp.h" @@ -28,13 +29,12 @@ namespace { class LatticeGP : public GrGeometryProcessor { public: - static sk_sp Make(GrGpu* gpu, - const GrTextureProxy* proxy, - sk_sp csxf, - GrSamplerState::Filter filter, - bool wideColor) { - return sk_sp( - new LatticeGP(gpu, proxy, std::move(csxf), filter, wideColor)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, + const GrTextureProxy* proxy, + sk_sp csxf, + GrSamplerState::Filter filter, + bool wideColor) { + return arena->make(proxy, std::move(csxf), filter, wideColor); } const char* name() const override { return "LatticeGP"; } @@ -47,9 +47,9 @@ class LatticeGP : public GrGeometryProcessor { class GLSLProcessor : public GrGLSLGeometryProcessor { public: void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const auto& latticeGP = proc.cast(); - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); fColorSpaceXformHelper.setData(pdman, latticeGP.fColorSpaceXform.get()); } @@ -92,17 +92,15 @@ class LatticeGP : public GrGeometryProcessor { } private: - LatticeGP(GrGpu* gpu, const GrTextureProxy* proxy, sk_sp csxf, - GrSamplerState::Filter filter, bool wideColor) - : INHERITED(kLatticeGP_ClassID), fColorSpaceXform(std::move(csxf)) { + friend class ::SkArenaAlloc; // for access to ctor - GrSamplerState samplerState = GrSamplerState(GrSamplerState::WrapMode::kClamp, - filter); - uint32_t extraSamplerKey = gpu->getExtraSamplerKeyForProgram(samplerState, - proxy->backendFormat()); + LatticeGP(const GrTextureProxy* proxy, sk_sp csxf, + GrSamplerState::Filter filter, bool wideColor) + : INHERITED(kLatticeGP_ClassID) + , fColorSpaceXform(std::move(csxf)) { - fSampler.reset(proxy->textureType(), samplerState, proxy->textureSwizzle(), - extraSamplerKey); + fSampler.reset(GrSamplerState(GrSamplerState::WrapMode::kClamp, filter), + proxy->backendFormat(), proxy->textureSwizzle()); this->setTextureSamplerCnt(1); fInPosition = {"position", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; fInTextureCoords = {"textureCoords", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; @@ -131,9 +129,6 @@ class NonAALatticeOp final : public GrMeshDrawOp { public: DEFINE_OP_CLASS_ID - static const int kVertsPerRect = 4; - static const int kIndicesPerRect = 6; - static std::unique_ptr Make(GrRecordingContext* context, GrPaint&& paint, const SkMatrix& viewMatrix, @@ -208,14 +203,14 @@ class NonAALatticeOp final : public GrMeshDrawOp { caps, clip, hasMixedSampledCoverage, clampType, GrProcessorAnalysisCoverage::kNone, &analysisColor); analysisColor.isConstant(&fPatches[0].fColor); - fWideColor = SkPMColor4fNeedsWideColor(fPatches[0].fColor, clampType, caps); + fWideColor = !fPatches[0].fColor.fitsInBytes(); return result; } private: void onPrepareDraws(Target* target) override { - GrGpu* gpu = target->resourceProvider()->priv().gpu(); - auto gp = LatticeGP::Make(gpu, fProxy.get(), fColorSpaceXform, fFilter, fWideColor); + auto gp = LatticeGP::Make(target->allocator(), fProxy.get(), fColorSpaceXform, + fFilter, fWideColor); if (!gp) { SkDebugf("Couldn't create GrGeometryProcessor\n"); return; @@ -232,13 +227,9 @@ class NonAALatticeOp final : public GrMeshDrawOp { } const size_t kVertexStride = gp->vertexStride(); - sk_sp indexBuffer = target->resourceProvider()->refQuadIndexBuffer(); - if (!indexBuffer) { - SkDebugf("Could not allocate indices\n"); - return; - } - PatternHelper helper(target, GrPrimitiveType::kTriangles, kVertexStride, - std::move(indexBuffer), kVertsPerRect, kIndicesPerRect, numRects); + + QuadHelper helper(target, kVertexStride, numRects); + GrVertexWriter vertices{helper.vertices()}; if (!vertices.fPtr) { SkDebugf("Could not allocate vertices\n"); @@ -288,13 +279,14 @@ class NonAALatticeOp final : public GrMeshDrawOp { // If we didn't handle it above, apply the matrix here. if (!isScaleTranslate) { - SkMatrixPriv::MapPointsWithStride(patch.fViewMatrix, patchPositions, kVertexStride, - kVertsPerRect * patch.fIter->numRectsToDraw()); + SkMatrixPriv::MapPointsWithStride( + patch.fViewMatrix, patchPositions, kVertexStride, + GrResourceProvider::NumVertsPerNonAAQuad() * patch.fIter->numRectsToDraw()); } } auto fixedDynamicState = target->makeFixedDynamicState(1); fixedDynamicState->fPrimitiveProcessorTextures[0] = fProxy.get(); - helper.recordDraw(target, std::move(gp), fixedDynamicState); + helper.recordDraw(target, gp, fixedDynamicState); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { diff --git a/third_party/skia/src/gpu/ops/GrMeshDrawOp.cpp b/third_party/skia/src/gpu/ops/GrMeshDrawOp.cpp index 0ba8e43ce70b..bfd052bf3226 100644 --- a/third_party/skia/src/gpu/ops/GrMeshDrawOp.cpp +++ b/third_party/skia/src/gpu/ops/GrMeshDrawOp.cpp @@ -20,15 +20,15 @@ void GrMeshDrawOp::onPrepare(GrOpFlushState* state) { this->onPrepareDraws(state GrMeshDrawOp::PatternHelper::PatternHelper(Target* target, GrPrimitiveType primitiveType, size_t vertexStride, sk_sp indexBuffer, int verticesPerRepetition, int indicesPerRepetition, - int repeatCount) { + int repeatCount, int maxRepetitions) { this->init(target, primitiveType, vertexStride, std::move(indexBuffer), verticesPerRepetition, - indicesPerRepetition, repeatCount); + indicesPerRepetition, repeatCount, maxRepetitions); } void GrMeshDrawOp::PatternHelper::init(Target* target, GrPrimitiveType primitiveType, size_t vertexStride, sk_sp indexBuffer, int verticesPerRepetition, int indicesPerRepetition, - int repeatCount) { + int repeatCount, int maxRepetitions) { SkASSERT(target); if (!indexBuffer) { return; @@ -42,65 +42,77 @@ void GrMeshDrawOp::PatternHelper::init(Target* target, GrPrimitiveType primitive return; } SkASSERT(vertexBuffer); - size_t ibSize = indexBuffer->size(); - int maxRepetitions = static_cast(ibSize / (sizeof(uint16_t) * indicesPerRepetition)); fMesh = target->allocMesh(primitiveType); + fPrimitiveType = primitiveType; + + SkASSERT(maxRepetitions == + static_cast(indexBuffer->size() / (sizeof(uint16_t) * indicesPerRepetition))); fMesh->setIndexedPatterned(std::move(indexBuffer), indicesPerRepetition, verticesPerRepetition, repeatCount, maxRepetitions); fMesh->setVertexData(std::move(vertexBuffer), firstVertex); } -void GrMeshDrawOp::PatternHelper::recordDraw( - Target* target, sk_sp gp) const { - target->recordDraw(std::move(gp), fMesh); +void GrMeshDrawOp::PatternHelper::recordDraw(Target* target, const GrGeometryProcessor* gp) const { + target->recordDraw(gp, fMesh, 1, fPrimitiveType); } void GrMeshDrawOp::PatternHelper::recordDraw( - Target* target, sk_sp gp, + Target* target, const GrGeometryProcessor* gp, const GrPipeline::FixedDynamicState* fixedDynamicState) const { - target->recordDraw(std::move(gp), fMesh, 1, fixedDynamicState, nullptr); + target->recordDraw(gp, fMesh, 1, fixedDynamicState, nullptr, fPrimitiveType); } ////////////////////////////////////////////////////////////////////////////// GrMeshDrawOp::QuadHelper::QuadHelper(Target* target, size_t vertexStride, int quadsToDraw) { - sk_sp quadIndexBuffer = target->resourceProvider()->refQuadIndexBuffer(); - if (!quadIndexBuffer) { + sk_sp indexBuffer = target->resourceProvider()->refNonAAQuadIndexBuffer(); + if (!indexBuffer) { SkDebugf("Could not get quad index buffer."); return; } - this->init(target, GrPrimitiveType::kTriangles, vertexStride, std::move(quadIndexBuffer), - kVerticesPerQuad, kIndicesPerQuad, quadsToDraw); + this->init(target, GrPrimitiveType::kTriangles, vertexStride, std::move(indexBuffer), + GrResourceProvider::NumVertsPerNonAAQuad(), + GrResourceProvider::NumIndicesPerNonAAQuad(), quadsToDraw, + GrResourceProvider::MaxNumNonAAQuads()); } ////////////////////////////////////////////////////////////////////////////// -GrPipeline::DynamicStateArrays* GrMeshDrawOp::Target::allocDynamicStateArrays( - int numMeshes, int numPrimitiveProcessorTextures, bool allocScissors) { - auto result = this->allocator()->make(); +GrPipeline::DynamicStateArrays* GrMeshDrawOp::Target::AllocDynamicStateArrays( + SkArenaAlloc* arena, int numMeshes, int numPrimitiveProcessorTextures, + bool allocScissors) { + + auto result = arena->make(); + if (allocScissors) { - result->fScissorRects = this->allocator()->makeArray(numMeshes); + result->fScissorRects = arena->makeArray(numMeshes); } + if (numPrimitiveProcessorTextures) { - result->fPrimitiveProcessorTextures = - this->allocator()->makeArrayDefault( + result->fPrimitiveProcessorTextures = arena->makeArrayDefault( numPrimitiveProcessorTextures * numMeshes); } + return result; } -GrPipeline::FixedDynamicState* GrMeshDrawOp::Target::makeFixedDynamicState( - int numPrimProcTextures) { - const GrAppliedClip* clip = this->appliedClip(); - if ((clip && clip->scissorState().enabled()) || numPrimProcTextures) { - const SkIRect& scissor = (clip) ? clip->scissorState().rect() : SkIRect::MakeEmpty(); - auto fixedDynamicState = - this->allocator()->make(scissor); +GrPipeline::FixedDynamicState* GrMeshDrawOp::Target::MakeFixedDynamicState( + SkArenaAlloc* arena, const GrAppliedClip* clip, int numPrimProcTextures) { + + bool haveScissor = clip && clip->scissorState().enabled(); + + if (haveScissor || numPrimProcTextures) { + auto result = arena->make(); + + if (haveScissor) { + result->fScissorRect = clip->scissorState().rect(); + } + if (numPrimProcTextures) { - fixedDynamicState->fPrimitiveProcessorTextures = - this->allocator()->makeArrayDefault(numPrimProcTextures); + result->fPrimitiveProcessorTextures = arena->makeArrayDefault( + numPrimProcTextures); } - return fixedDynamicState; + return result; } return nullptr; } diff --git a/third_party/skia/src/gpu/ops/GrMeshDrawOp.h b/third_party/skia/src/gpu/ops/GrMeshDrawOp.h index 6bdb63768a3b..19222660b485 100644 --- a/third_party/skia/src/gpu/ops/GrMeshDrawOp.h +++ b/third_party/skia/src/gpu/ops/GrMeshDrawOp.h @@ -8,6 +8,7 @@ #ifndef GrMeshDrawOp_DEFINED #define GrMeshDrawOp_DEFINED +#include "src/core/SkArenaAlloc.h" #include "src/gpu/GrAppliedClip.h" #include "src/gpu/GrGeometryProcessor.h" #include "src/gpu/GrMesh.h" @@ -27,6 +28,11 @@ class GrMeshDrawOp : public GrDrawOp { /** Abstract interface that represents a destination for a GrMeshDrawOp. */ class Target; + static bool CanUpgradeAAOnMerge(GrAAType aa1, GrAAType aa2) { + return (aa1 == GrAAType::kNone && aa2 == GrAAType::kCoverage) || + (aa1 == GrAAType::kCoverage && aa2 == GrAAType::kNone); + } + protected: GrMeshDrawOp(uint32_t classID); @@ -36,11 +42,11 @@ class GrMeshDrawOp : public GrDrawOp { public: PatternHelper(Target*, GrPrimitiveType, size_t vertexStride, sk_sp indexBuffer, int verticesPerRepetition, - int indicesPerRepetition, int repeatCount); + int indicesPerRepetition, int repeatCount, int maxRepetitions); /** Called to issue draws to the GrMeshDrawOp::Target.*/ - void recordDraw(Target*, sk_sp) const; - void recordDraw(Target*, sk_sp, + void recordDraw(Target*, const GrGeometryProcessor*) const; + void recordDraw(Target*, const GrGeometryProcessor*, const GrPipeline::FixedDynamicState*) const; void* vertices() const { return fVertices; } @@ -48,17 +54,18 @@ class GrMeshDrawOp : public GrDrawOp { protected: PatternHelper() = default; void init(Target*, GrPrimitiveType, size_t vertexStride, sk_sp indexBuffer, - int verticesPerRepetition, int indicesPerRepetition, int repeatCount); + int verticesPerRepetition, int indicesPerRepetition, int repeatCount, + int maxRepetitions); private: void* fVertices = nullptr; GrMesh* fMesh = nullptr; + GrPrimitiveType fPrimitiveType; }; - static const int kVerticesPerQuad = 4; - static const int kIndicesPerQuad = 6; - - /** A specialization of InstanceHelper for quad rendering. */ + /** A specialization of InstanceHelper for quad rendering. + * It only draws non-antialiased indexed quads. + */ class QuadHelper : private PatternHelper { public: QuadHelper() = delete; @@ -71,12 +78,29 @@ class GrMeshDrawOp : public GrDrawOp { typedef PatternHelper INHERITED; }; + static bool CombinedQuadCountWillOverflow(GrAAType aaType, + bool willBeUpgradedToAA, + int combinedQuadCount) { + bool willBeAA = (aaType == GrAAType::kCoverage) || willBeUpgradedToAA; + + return combinedQuadCount > (willBeAA ? GrResourceProvider::MaxNumAAQuads() + : GrResourceProvider::MaxNumNonAAQuads()); + } + private: - void onPrePrepare(GrRecordingContext* context) final { this->onPrePrepareDraws(context); } + void onPrePrepare(GrRecordingContext* context, + const GrSurfaceProxyView* dstView, + GrAppliedClip* clip, + const GrXferProcessor::DstProxyView& dstProxyView) final { + this->onPrePrepareDraws(context, dstView, clip, dstProxyView); + } void onPrepare(GrOpFlushState* state) final; // Only the GrTextureOp currently overrides this virtual - virtual void onPrePrepareDraws(GrRecordingContext*) {} + virtual void onPrePrepareDraws(GrRecordingContext*, + const GrSurfaceProxyView*, + GrAppliedClip*, + const GrXferProcessor::DstProxyView&) {} virtual void onPrepareDraws(Target*) = 0; typedef GrDrawOp INHERITED; @@ -88,17 +112,19 @@ class GrMeshDrawOp::Target { /** Adds a draw of a mesh. */ virtual void recordDraw( - sk_sp, const GrMesh[], int meshCnt, - const GrPipeline::FixedDynamicState*, const GrPipeline::DynamicStateArrays*) = 0; + const GrGeometryProcessor*, const GrMesh[], int meshCnt, + const GrPipeline::FixedDynamicState*, const GrPipeline::DynamicStateArrays*, + GrPrimitiveType) = 0; /** * Helper for drawing GrMesh(es) with zero primProc textures and no dynamic state besides the * scissor clip. */ - void recordDraw(sk_sp gp, const GrMesh meshes[], int meshCnt = 1) { + void recordDraw(const GrGeometryProcessor* gp, const GrMesh meshes[], int meshCnt, + GrPrimitiveType primitiveType) { static constexpr int kZeroPrimProcTextures = 0; auto fixedDynamicState = this->makeFixedDynamicState(kZeroPrimProcTextures); - this->recordDraw(std::move(gp), meshes, meshCnt, fixedDynamicState, nullptr); + this->recordDraw(gp, meshes, meshCnt, fixedDynamicState, nullptr, primitiveType); } /** @@ -146,18 +172,27 @@ class GrMeshDrawOp::Target { GrMesh* allocMeshes(int n) { return this->allocator()->makeArray(n); } - GrPipeline::DynamicStateArrays* allocDynamicStateArrays(int numMeshes, - int numPrimitiveProcessorTextures, - bool allocScissors); + static GrPipeline::DynamicStateArrays* AllocDynamicStateArrays(SkArenaAlloc*, + int numMeshes, + int numPrimitiveProcTextures, + bool allocScissors); + + static GrPipeline::FixedDynamicState* MakeFixedDynamicState(SkArenaAlloc*, + const GrAppliedClip* clip, + int numPrimitiveProcessorTextures); - GrPipeline::FixedDynamicState* makeFixedDynamicState(int numPrimitiveProcessorTextures); + + GrPipeline::FixedDynamicState* makeFixedDynamicState(int numPrimitiveProcessorTextures) { + return MakeFixedDynamicState(this->allocator(), this->appliedClip(), + numPrimitiveProcessorTextures); + } virtual GrRenderTargetProxy* proxy() const = 0; - virtual const GrAppliedClip* appliedClip() = 0; + virtual const GrAppliedClip* appliedClip() const = 0; virtual GrAppliedClip detachAppliedClip() = 0; - virtual const GrXferProcessor::DstProxy& dstProxy() const = 0; + virtual const GrXferProcessor::DstProxyView& dstProxyView() const = 0; virtual GrResourceProvider* resourceProvider() const = 0; uint32_t contextUniqueID() const { return this->resourceProvider()->contextUniqueID(); } @@ -168,13 +203,12 @@ class GrMeshDrawOp::Target { // This should be called during onPrepare of a GrOp. The caller should add any proxies to the // array it will use that it did not access during a call to visitProxies. This is usually the // case for atlases. - virtual SkTArray* sampledProxyArray() = 0; + virtual SkTArray* sampledProxyArray() = 0; virtual const GrCaps& caps() const = 0; virtual GrDeferredUploadTarget* deferredUploadTarget() = 0; -private: virtual SkArenaAlloc* allocator() = 0; }; diff --git a/third_party/skia/src/gpu/ops/GrOp.h b/third_party/skia/src/gpu/ops/GrOp.h index ac738f9af537..2280f40e4959 100644 --- a/third_party/skia/src/gpu/ops/GrOp.h +++ b/third_party/skia/src/gpu/ops/GrOp.h @@ -18,6 +18,7 @@ #include #include +class GrAppliedClip; class GrCaps; class GrOpFlushState; class GrOpsRenderPass; @@ -68,7 +69,7 @@ class GrOp : private SkNoncopyable { virtual const char* name() const = 0; - using VisitProxyFunc = std::function; + using VisitProxyFunc = std::function; virtual void visitProxies(const VisitProxyFunc&) const { // This default implementation assumes the op has no proxies @@ -158,7 +159,10 @@ class GrOp : private SkNoncopyable { * onPrePrepare must be prepared to handle both cases (when onPrePrepare has been called * ahead of time and when it has not been called). */ - void prePrepare(GrRecordingContext* context) { this->onPrePrepare(context); } + void prePrepare(GrRecordingContext* context, GrSurfaceProxyView* dstView, GrAppliedClip* clip, + const GrXferProcessor::DstProxyView& dstProxyView) { + this->onPrePrepare(context, dstView, clip, dstProxyView); + } /** * Called prior to executing. The op should perform any resource creation or data transfers @@ -268,8 +272,7 @@ class GrOp : private SkNoncopyable { this->setBoundsFlags(aabloat, zeroArea); } void makeFullScreen(GrSurfaceProxy* proxy) { - this->setBounds(SkRect::MakeIWH(proxy->width(), proxy->height()), - HasAABloat::kNo, IsHairline::kNo); + this->setBounds(proxy->getBoundsRect(), HasAABloat::kNo, IsHairline::kNo); } static uint32_t GenOpClassID() { return GenID(&gCurrOpClassID); } @@ -289,8 +292,11 @@ class GrOp : private SkNoncopyable { return CombineResult::kCannotCombine; } - // Only GrMeshDrawOp currently overrides this virtual - virtual void onPrePrepare(GrRecordingContext*) {} + // TODO: the parameters to onPrePrepare mirror GrOpFlushState::OpArgs - fuse the two? + virtual void onPrePrepare(GrRecordingContext*, + const GrSurfaceProxyView*, + GrAppliedClip*, + const GrXferProcessor::DstProxyView&) {} virtual void onPrepare(GrOpFlushState*) = 0; // If this op is chained then chainBounds is the union of the bounds of all ops in the chain. // Otherwise, this op's bounds. diff --git a/third_party/skia/src/gpu/ops/GrOvalOpFactory.cpp b/third_party/skia/src/gpu/ops/GrOvalOpFactory.cpp index b32758150f42..6adb970867cc 100644 --- a/third_party/skia/src/gpu/ops/GrOvalOpFactory.cpp +++ b/third_party/skia/src/gpu/ops/GrOvalOpFactory.cpp @@ -63,6 +63,26 @@ static inline GrVertexWriter::TriStrip origin_centered_tri_strip(float x, class CircleGeometryProcessor : public GrGeometryProcessor { public: + static GrGeometryProcessor* Make(SkArenaAlloc* arena, bool stroke, bool clipPlane, + bool isectPlane, bool unionPlane, bool roundCaps, + bool wideColor, const SkMatrix& localMatrix) { + return arena->make(stroke, clipPlane, isectPlane, unionPlane, + roundCaps, wideColor, localMatrix); + } + + const char* name() const override { return "CircleGeometryProcessor"; } + + void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override { + GLSLProcessor::GenKey(*this, caps, b); + } + + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override { + return new GLSLProcessor(); + } + +private: + friend class ::SkArenaAlloc; // for access to ctor + CircleGeometryProcessor(bool stroke, bool clipPlane, bool isectPlane, bool unionPlane, bool roundCaps, bool wideColor, const SkMatrix& localMatrix) : INHERITED(kCircleGeometryProcessor_ClassID) @@ -90,19 +110,6 @@ class CircleGeometryProcessor : public GrGeometryProcessor { this->setVertexAttributes(&fInPosition, 7); } - ~CircleGeometryProcessor() override {} - - const char* name() const override { return "CircleEdge"; } - - void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override { - GLSLProcessor::GenKey(*this, caps, b); - } - - GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override { - return new GLSLProcessor(); - } - -private: class GLSLProcessor : public GrGLSLGeometryProcessor { public: GLSLProcessor() {} @@ -214,9 +221,9 @@ class CircleGeometryProcessor : public GrGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { this->setTransformDataHelper(primProc.cast().fLocalMatrix, - pdman, &transformIter); + pdman, transformRange); } private: @@ -243,7 +250,7 @@ class CircleGeometryProcessor : public GrGeometryProcessor { GR_DEFINE_GEOMETRY_PROCESSOR_TEST(CircleGeometryProcessor); #if GR_TEST_UTILS -sk_sp CircleGeometryProcessor::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* CircleGeometryProcessor::TestCreate(GrProcessorTestData* d) { bool stroke = d->fRandom->nextBool(); bool roundCaps = stroke ? d->fRandom->nextBool() : false; bool wideColor = d->fRandom->nextBool(); @@ -251,20 +258,16 @@ sk_sp CircleGeometryProcessor::TestCreate(GrProcessorTestDa bool isectPlane = d->fRandom->nextBool(); bool unionPlane = d->fRandom->nextBool(); const SkMatrix& matrix = GrTest::TestMatrix(d->fRandom); - return sk_sp(new CircleGeometryProcessor( - stroke, clipPlane, isectPlane, unionPlane, roundCaps, wideColor, matrix)); + return CircleGeometryProcessor::Make(d->allocator(), stroke, clipPlane, isectPlane, + unionPlane, roundCaps, wideColor, matrix); } #endif class ButtCapDashedCircleGeometryProcessor : public GrGeometryProcessor { public: - ButtCapDashedCircleGeometryProcessor(bool wideColor, const SkMatrix& localMatrix) - : INHERITED(kButtCapStrokedCircleGeometryProcessor_ClassID), fLocalMatrix(localMatrix) { - fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; - fInColor = MakeColorAttribute("inColor", wideColor); - fInCircleEdge = {"inCircleEdge", kFloat4_GrVertexAttribType, kFloat4_GrSLType}; - fInDashParams = {"inDashParams", kFloat4_GrVertexAttribType, kFloat4_GrSLType}; - this->setVertexAttributes(&fInPosition, 4); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, bool wideColor, + const SkMatrix& localMatrix) { + return arena->make(wideColor, localMatrix); } ~ButtCapDashedCircleGeometryProcessor() override {} @@ -280,6 +283,18 @@ class ButtCapDashedCircleGeometryProcessor : public GrGeometryProcessor { } private: + friend class ::SkArenaAlloc; // for access to ctor + + ButtCapDashedCircleGeometryProcessor(bool wideColor, const SkMatrix& localMatrix) + : INHERITED(kButtCapStrokedCircleGeometryProcessor_ClassID) + , fLocalMatrix(localMatrix) { + fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; + fInColor = MakeColorAttribute("inColor", wideColor); + fInCircleEdge = {"inCircleEdge", kFloat4_GrVertexAttribType, kFloat4_GrSLType}; + fInDashParams = {"inDashParams", kFloat4_GrVertexAttribType, kFloat4_GrSLType}; + this->setVertexAttributes(&fInPosition, 4); + } + class GLSLProcessor : public GrGLSLGeometryProcessor { public: GLSLProcessor() {} @@ -466,10 +481,10 @@ class ButtCapDashedCircleGeometryProcessor : public GrGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { this->setTransformDataHelper( primProc.cast().fLocalMatrix, pdman, - &transformIter); + transformRange); } private: @@ -488,10 +503,10 @@ class ButtCapDashedCircleGeometryProcessor : public GrGeometryProcessor { }; #if GR_TEST_UTILS -sk_sp ButtCapDashedCircleGeometryProcessor::TestCreate(GrProcessorTestData* d) { +GrGeometryProcessor* ButtCapDashedCircleGeometryProcessor::TestCreate(GrProcessorTestData* d) { bool wideColor = d->fRandom->nextBool(); const SkMatrix& matrix = GrTest::TestMatrix(d->fRandom); - return sk_sp(new ButtCapDashedCircleGeometryProcessor(wideColor, matrix)); + return ButtCapDashedCircleGeometryProcessor::Make(d->allocator(), wideColor, matrix); } #endif @@ -507,26 +522,14 @@ sk_sp ButtCapDashedCircleGeometryProcessor::TestCreate(GrPr class EllipseGeometryProcessor : public GrGeometryProcessor { public: - EllipseGeometryProcessor(bool stroke, bool wideColor, bool useScale, - const SkMatrix& localMatrix) - : INHERITED(kEllipseGeometryProcessor_ClassID) - , fLocalMatrix(localMatrix) - , fStroke(stroke) - , fUseScale(useScale) { - fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; - fInColor = MakeColorAttribute("inColor", wideColor); - if (useScale) { - fInEllipseOffset = {"inEllipseOffset", kFloat3_GrVertexAttribType, kFloat3_GrSLType}; - } else { - fInEllipseOffset = {"inEllipseOffset", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; - } - fInEllipseRadii = {"inEllipseRadii", kFloat4_GrVertexAttribType, kFloat4_GrSLType}; - this->setVertexAttributes(&fInPosition, 4); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, bool stroke, bool wideColor, + bool useScale, const SkMatrix& localMatrix) { + return arena->make(stroke, wideColor, useScale, localMatrix); } ~EllipseGeometryProcessor() override {} - const char* name() const override { return "EllipseEdge"; } + const char* name() const override { return "EllipseGeometryProcessor"; } void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override { GLSLProcessor::GenKey(*this, caps, b); @@ -537,6 +540,25 @@ class EllipseGeometryProcessor : public GrGeometryProcessor { } private: + friend class ::SkArenaAlloc; // for access to ctor + + EllipseGeometryProcessor(bool stroke, bool wideColor, bool useScale, + const SkMatrix& localMatrix) + : INHERITED(kEllipseGeometryProcessor_ClassID) + , fLocalMatrix(localMatrix) + , fStroke(stroke) + , fUseScale(useScale) { + fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; + fInColor = MakeColorAttribute("inColor", wideColor); + if (useScale) { + fInEllipseOffset = {"inEllipseOffset", kFloat3_GrVertexAttribType, kFloat3_GrSLType}; + } else { + fInEllipseOffset = {"inEllipseOffset", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; + } + fInEllipseRadii = {"inEllipseRadii", kFloat4_GrVertexAttribType, kFloat4_GrSLType}; + this->setVertexAttributes(&fInPosition, 4); + } + class GLSLProcessor : public GrGLSLGeometryProcessor { public: GLSLProcessor() {} @@ -650,9 +672,9 @@ class EllipseGeometryProcessor : public GrGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const EllipseGeometryProcessor& egp = primProc.cast(); - this->setTransformDataHelper(egp.fLocalMatrix, pdman, &transformIter); + this->setTransformDataHelper(egp.fLocalMatrix, pdman, transformRange); } private: @@ -676,10 +698,10 @@ class EllipseGeometryProcessor : public GrGeometryProcessor { GR_DEFINE_GEOMETRY_PROCESSOR_TEST(EllipseGeometryProcessor); #if GR_TEST_UTILS -sk_sp EllipseGeometryProcessor::TestCreate(GrProcessorTestData* d) { - return sk_sp( - new EllipseGeometryProcessor(d->fRandom->nextBool(), d->fRandom->nextBool(), - d->fRandom->nextBool(), GrTest::TestMatrix(d->fRandom))); +GrGeometryProcessor* EllipseGeometryProcessor::TestCreate(GrProcessorTestData* d) { + return EllipseGeometryProcessor::Make(d->allocator(), d->fRandom->nextBool(), + d->fRandom->nextBool(), d->fRandom->nextBool(), + GrTest::TestMatrix(d->fRandom)); } #endif @@ -698,6 +720,26 @@ enum class DIEllipseStyle { kStroke = 0, kHairline, kFill }; class DIEllipseGeometryProcessor : public GrGeometryProcessor { public: + static GrGeometryProcessor* Make(SkArenaAlloc* arena, bool wideColor, bool useScale, + const SkMatrix& viewMatrix, DIEllipseStyle style) { + return arena->make(wideColor, useScale, viewMatrix, style); + } + + ~DIEllipseGeometryProcessor() override {} + + const char* name() const override { return "DIEllipseGeometryProcessor"; } + + void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override { + GLSLProcessor::GenKey(*this, caps, b); + } + + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override { + return new GLSLProcessor(); + } + +private: + friend class ::SkArenaAlloc; // for access to ctor + DIEllipseGeometryProcessor(bool wideColor, bool useScale, const SkMatrix& viewMatrix, DIEllipseStyle style) : INHERITED(kDIEllipseGeometryProcessor_ClassID) @@ -717,19 +759,6 @@ class DIEllipseGeometryProcessor : public GrGeometryProcessor { this->setVertexAttributes(&fInPosition, 4); } - ~DIEllipseGeometryProcessor() override {} - - const char* name() const override { return "DIEllipseEdge"; } - - void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override { - GLSLProcessor::GenKey(*this, caps, b); - } - - GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override { - return new GLSLProcessor(); - } - -private: class GLSLProcessor : public GrGLSLGeometryProcessor { public: GLSLProcessor() : fViewMatrix(SkMatrix::InvalidMatrix()) {} @@ -839,7 +868,7 @@ class DIEllipseGeometryProcessor : public GrGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const DIEllipseGeometryProcessor& diegp = gp.cast(); if (!diegp.fViewMatrix.isIdentity() && !fViewMatrix.cheapEqualTo(diegp.fViewMatrix)) { @@ -848,7 +877,7 @@ class DIEllipseGeometryProcessor : public GrGeometryProcessor { GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } private: @@ -876,10 +905,10 @@ class DIEllipseGeometryProcessor : public GrGeometryProcessor { GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DIEllipseGeometryProcessor); #if GR_TEST_UTILS -sk_sp DIEllipseGeometryProcessor::TestCreate(GrProcessorTestData* d) { - return sk_sp(new DIEllipseGeometryProcessor( - d->fRandom->nextBool(), d->fRandom->nextBool(), GrTest::TestMatrix(d->fRandom), - (DIEllipseStyle)(d->fRandom->nextRangeU(0, 2)))); +GrGeometryProcessor* DIEllipseGeometryProcessor::TestCreate(GrProcessorTestData* d) { + return DIEllipseGeometryProcessor::Make(d->allocator(), d->fRandom->nextBool(), + d->fRandom->nextBool(), GrTest::TestMatrix(d->fRandom), + (DIEllipseStyle)(d->fRandom->nextRangeU(0, 2))); } #endif @@ -1240,9 +1269,11 @@ class CircleOp final : public GrMeshDrawOp { } // Setup geometry processor - sk_sp gp(new CircleGeometryProcessor( - !fAllFill, fClipPlane, fClipPlaneIsect, fClipPlaneUnion, fRoundCaps, fWideColor, - localMatrix)); + GrGeometryProcessor* gp = CircleGeometryProcessor::Make(target->allocator(), + !fAllFill, fClipPlane, + fClipPlaneIsect, fClipPlaneUnion, + fRoundCaps, fWideColor, + localMatrix); sk_sp vertexBuffer; int firstVertex; @@ -1364,7 +1395,7 @@ class CircleOp final : public GrMeshDrawOp { mesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertCount - 1, GrPrimitiveRestart::kNo); mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(gp), mesh); + target->recordDraw(gp, mesh, 1, GrPrimitiveType::kTriangles); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -1572,8 +1603,9 @@ class ButtCapDashedCircleOp final : public GrMeshDrawOp { } // Setup geometry processor - sk_sp gp(new ButtCapDashedCircleGeometryProcessor(fWideColor, - localMatrix)); + GrGeometryProcessor* gp = ButtCapDashedCircleGeometryProcessor::Make(target->allocator(), + fWideColor, + localMatrix); sk_sp vertexBuffer; int firstVertex; @@ -1654,7 +1686,7 @@ class ButtCapDashedCircleOp final : public GrMeshDrawOp { mesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertCount - 1, GrPrimitiveRestart::kNo); mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(gp), mesh); + target->recordDraw(gp, mesh, 1, GrPrimitiveType::kTriangles); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -1871,8 +1903,9 @@ class EllipseOp : public GrMeshDrawOp { } // Setup geometry processor - sk_sp gp(new EllipseGeometryProcessor(fStroked, fWideColor, fUseScale, - localMatrix)); + GrGeometryProcessor* gp = EllipseGeometryProcessor::Make(target->allocator(), + fStroked, fWideColor, fUseScale, + localMatrix); QuadHelper helper(target, gp->vertexStride(), fEllipses.count()); GrVertexWriter verts{helper.vertices()}; if (!verts.fPtr) { @@ -1908,7 +1941,7 @@ class EllipseOp : public GrMeshDrawOp { GrVertexWriter::If(fUseScale, SkTMax(xRadius, yRadius)), invRadii); } - helper.recordDraw(target, std::move(gp)); + helper.recordDraw(target, gp); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -2109,9 +2142,9 @@ class DIEllipseOp : public GrMeshDrawOp { private: void onPrepareDraws(Target* target) override { // Setup geometry processor - sk_sp gp( - new DIEllipseGeometryProcessor(fWideColor, fUseScale, this->viewMatrix(), - this->style())); + GrGeometryProcessor* gp = DIEllipseGeometryProcessor::Make(target->allocator(), fWideColor, + fUseScale, this->viewMatrix(), + this->style()); QuadHelper helper(target, gp->vertexStride(), fEllipses.count()); GrVertexWriter verts{helper.vertices()}; @@ -2145,7 +2178,7 @@ class DIEllipseOp : public GrMeshDrawOp { origin_centered_tri_strip(innerRatioX + offsetDx, innerRatioY + offsetDy)); } - helper.recordDraw(target, std::move(gp)); + helper.recordDraw(target, gp); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -2485,9 +2518,9 @@ class CircularRRectOp : public GrMeshDrawOp { } // Setup geometry processor - sk_sp gp( - new CircleGeometryProcessor(!fAllFill, false, false, false, false, fWideColor, - localMatrix)); + GrGeometryProcessor* gp = CircleGeometryProcessor::Make(target->allocator(), !fAllFill, + false, false, false, false, + fWideColor, localMatrix); sk_sp vertexBuffer; int firstVertex; @@ -2576,7 +2609,7 @@ class CircularRRectOp : public GrMeshDrawOp { mesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertCount - 1, GrPrimitiveRestart::kNo); mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(gp), mesh); + target->recordDraw(gp, mesh, 1, GrPrimitiveType::kTriangles); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -2777,8 +2810,9 @@ class EllipticalRRectOp : public GrMeshDrawOp { } // Setup geometry processor - sk_sp gp(new EllipseGeometryProcessor(fStroked, fWideColor, fUseScale, - localMatrix)); + GrGeometryProcessor* gp = EllipseGeometryProcessor::Make(target->allocator(), fStroked, + fWideColor, fUseScale, + localMatrix); // drop out the middle quad if we're stroked int indicesPerInstance = fStroked ? kIndicesPerStrokeRRect : kIndicesPerFillRRect; @@ -2791,7 +2825,7 @@ class EllipticalRRectOp : public GrMeshDrawOp { } PatternHelper helper(target, GrPrimitiveType::kTriangles, gp->vertexStride(), std::move(indexBuffer), kVertsPerStandardRRect, indicesPerInstance, - fRRects.count()); + fRRects.count(), kNumRRectsInIndexBuffer); GrVertexWriter verts{helper.vertices()}; if (!verts.fPtr) { SkDebugf("Could not allocate vertices\n"); @@ -2857,7 +2891,7 @@ class EllipticalRRectOp : public GrMeshDrawOp { reciprocalRadii); } } - helper.recordDraw(target, std::move(gp)); + helper.recordDraw(target, gp); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { diff --git a/third_party/skia/src/gpu/ops/GrQuadPerEdgeAA.cpp b/third_party/skia/src/gpu/ops/GrQuadPerEdgeAA.cpp index 27bd00eec002..e1a3616f665e 100644 --- a/third_party/skia/src/gpu/ops/GrQuadPerEdgeAA.cpp +++ b/third_party/skia/src/gpu/ops/GrQuadPerEdgeAA.cpp @@ -7,9 +7,9 @@ #include "src/gpu/ops/GrQuadPerEdgeAA.h" -#include "include/private/SkNx.h" -#include "src/gpu/GrVertexWriter.h" +#include "include/private/SkVx.h" #include "src/gpu/SkGr.h" +#include "src/gpu/geometry/GrQuadUtils.h" #include "src/gpu/glsl/GrGLSLColorSpaceXformHelper.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLGeometryProcessor.h" @@ -17,641 +17,439 @@ #include "src/gpu/glsl/GrGLSLVarying.h" #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" -#define AI SK_ALWAYS_INLINE namespace { -// Helper data types since there is a lot of information that needs to be passed around to -// avoid recalculation in the different procedures for tessellating an AA quad. - -using V4f = skvx::Vec<4, float>; -using M4f = skvx::Vec<4, int32_t>; - -struct Vertices { - // X, Y, and W coordinates in device space. If not perspective, w should be set to 1.f - V4f fX, fY, fW; - // U, V, and R coordinates representing local quad. Ignored depending on uvrCount (0, 1, 2). - V4f fU, fV, fR; - int fUVRCount; -}; - -struct QuadMetadata { - // Normalized edge vectors of the device space quad, ordered L, B, T, R (i.e. nextCCW(x) - x). - V4f fDX, fDY; - // 1 / edge length of the device space quad - V4f fInvLengths; - // Edge mask (set to all 1s if aa flags is kAll), otherwise 1.f if edge was AA, 0.f if non-AA. - V4f fMask; -}; +// Generic WriteQuadProc that can handle any VertexSpec. It writes the 4 vertices in triangle strip +// order, although the data per-vertex is dependent on the VertexSpec. +static void write_quad_generic(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain) { + static constexpr auto If = GrVertexWriter::If; -struct Edges { - // a * x + b * y + c = 0; positive distance is inside the quad; ordered LBTR. - V4f fA, fB, fC; - // Whether or not the edge normals had to be flipped to preserve positive distance on the inside - bool fFlipped; -}; + SkASSERT(!spec.hasLocalCoords() || localQuad); -static constexpr float kTolerance = 1e-2f; -// True/false bit masks for initializing an M4f -static constexpr int32_t kTrue = ~0; -static constexpr int32_t kFalse = 0; + GrQuadPerEdgeAA::CoverageMode mode = spec.coverageMode(); + for (int i = 0; i < 4; ++i) { + // save position, this is a float2 or float3 or float4 depending on the combination of + // perspective and coverage mode. + vb->write(deviceQuad->x(i), deviceQuad->y(i), + If(spec.deviceQuadType() == GrQuad::Type::kPerspective, deviceQuad->w(i)), + If(mode == GrQuadPerEdgeAA::CoverageMode::kWithPosition, coverage[i])); -static AI V4f fma(const V4f& f, const V4f& m, const V4f& a) { - return mad(f, m, a); -} + // save color + if (spec.hasVertexColors()) { + bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kFloat; + vb->write(GrVertexColor( + color * (mode == GrQuadPerEdgeAA::CoverageMode::kWithColor ? coverage[i] : 1.f), + wide)); + } -// These rotate the points/edge values either clockwise or counterclockwise assuming tri strip -// order. -static AI V4f nextCW(const V4f& v) { - return skvx::shuffle<2, 0, 3, 1>(v); -} + // save local position + if (spec.hasLocalCoords()) { + vb->write(localQuad->x(i), localQuad->y(i), + If(spec.localQuadType() == GrQuad::Type::kPerspective, localQuad->w(i))); + } -static AI V4f nextCCW(const V4f& v) { - return skvx::shuffle<1, 3, 0, 2>(v); -} + // save the geometry domain + if (spec.requiresGeometryDomain()) { + vb->write(geomDomain); + } -// Replaces zero-length 'bad' edge vectors with the reversed opposite edge vector. -// e3 may be null if only 2D edges need to be corrected for. -static AI void correct_bad_edges(const M4f& bad, V4f* e1, V4f* e2, V4f* e3) { - if (any(bad)) { - // Want opposite edges, L B T R -> R T B L but with flipped sign to preserve winding - *e1 = if_then_else(bad, -skvx::shuffle<3, 2, 1, 0>(*e1), *e1); - *e2 = if_then_else(bad, -skvx::shuffle<3, 2, 1, 0>(*e2), *e2); - if (e3) { - *e3 = if_then_else(bad, -skvx::shuffle<3, 2, 1, 0>(*e3), *e3); + // save the texture domain + if (spec.hasDomain()) { + vb->write(texDomain); } } } -// Replace 'bad' coordinates by rotating CCW to get the next point. c3 may be null for 2D points. -static AI void correct_bad_coords(const M4f& bad, V4f* c1, V4f* c2, V4f* c3) { - if (any(bad)) { - *c1 = if_then_else(bad, nextCCW(*c1), *c1); - *c2 = if_then_else(bad, nextCCW(*c2), *c2); - if (c3) { - *c3 = if_then_else(bad, nextCCW(*c3), *c3); - } +// Specialized WriteQuadProcs for particular VertexSpecs that show up frequently (determined +// experimentally through recorded GMs, SKPs, and SVGs, as well as SkiaRenderer's usage patterns): + +// 2D (XY), no explicit coverage, vertex color, no locals, no geometry domain, no texture domain +// This represents simple, solid color or shader, non-AA (or AA with cov. as alpha) rects. +static void write_2d_color(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain) { + // Assert assumptions about VertexSpec + SkASSERT(spec.deviceQuadType() != GrQuad::Type::kPerspective); + SkASSERT(!spec.hasLocalCoords()); + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kNone || + spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor); + SkASSERT(spec.hasVertexColors()); + SkASSERT(!spec.requiresGeometryDomain()); + SkASSERT(!spec.hasDomain()); + // We don't assert that localQuad == nullptr, since it is possible for GrFillRectOp to + // accumulate local coords conservatively (paint not trivial), and then after analysis realize + // the processors don't need local coordinates. + + bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kFloat; + for (int i = 0; i < 4; ++i) { + // If this is not coverage-with-alpha, make sure coverage == 1 so it doesn't do anything + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor || + coverage[i] == 1.f); + vb->write(deviceQuad->x(i), deviceQuad->y(i), GrVertexColor(color * coverage[i], wide)); } } -static AI QuadMetadata get_metadata(const Vertices& vertices, GrQuadAAFlags aaFlags) { - V4f dx = nextCCW(vertices.fX) - vertices.fX; - V4f dy = nextCCW(vertices.fY) - vertices.fY; - V4f invLengths = rsqrt(fma(dx, dx, dy * dy)); - - V4f mask = aaFlags == GrQuadAAFlags::kAll ? V4f(1.f) : - V4f{(GrQuadAAFlags::kLeft & aaFlags) ? 1.f : 0.f, - (GrQuadAAFlags::kBottom & aaFlags) ? 1.f : 0.f, - (GrQuadAAFlags::kTop & aaFlags) ? 1.f : 0.f, - (GrQuadAAFlags::kRight & aaFlags) ? 1.f : 0.f}; - return { dx * invLengths, dy * invLengths, invLengths, mask }; -} +// 2D (XY), no explicit coverage, UV locals, no color, no geometry domain, no texture domain +// This represents opaque, non AA, textured rects +static void write_2d_uv(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain) { + // Assert assumptions about VertexSpec + SkASSERT(spec.deviceQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.hasLocalCoords() && spec.localQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kNone); + SkASSERT(!spec.hasVertexColors()); + SkASSERT(!spec.requiresGeometryDomain()); + SkASSERT(!spec.hasDomain()); + SkASSERT(localQuad); -static AI Edges get_edge_equations(const QuadMetadata& metadata, const Vertices& vertices) { - V4f dx = metadata.fDX; - V4f dy = metadata.fDY; - // Correct for bad edges by copying adjacent edge information into the bad component - correct_bad_edges(metadata.fInvLengths >= 1.f / kTolerance, &dx, &dy, nullptr); - - V4f c = fma(dx, vertices.fY, -dy * vertices.fX); - // Make sure normals point into the shape - V4f test = fma(dy, nextCW(vertices.fX), fma(-dx, nextCW(vertices.fY), c)); - if (any(test < -kTolerance)) { - return {-dy, dx, -c, true}; - } else { - return {dy, -dx, c, false}; + for (int i = 0; i < 4; ++i) { + vb->write(deviceQuad->x(i), deviceQuad->y(i), localQuad->x(i), localQuad->y(i)); } } -// Sets 'outset' to the magnitude of outset/inset to adjust each corner of a quad given the -// edge angles and lengths. If the quad is too small, has empty edges, or too sharp of angles, -// false is returned and the degenerate slow-path should be used. -static bool get_optimized_outset(const QuadMetadata& metadata, bool rectilinear, V4f* outset) { - if (rectilinear) { - *outset = 0.5f; - // Stay in the fast path as long as all edges are at least a pixel long (so 1/len <= 1) - return all(metadata.fInvLengths <= 1.f); +// 2D (XY), no explicit coverage, UV locals, vertex color, no geometry or texture domains +// This represents transparent, non AA (or AA with cov. as alpha), textured rects +static void write_2d_color_uv(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain) { + // Assert assumptions about VertexSpec + SkASSERT(spec.deviceQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.hasLocalCoords() && spec.localQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kNone || + spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor); + SkASSERT(spec.hasVertexColors()); + SkASSERT(!spec.requiresGeometryDomain()); + SkASSERT(!spec.hasDomain()); + SkASSERT(localQuad); + + bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kFloat; + for (int i = 0; i < 4; ++i) { + // If this is not coverage-with-alpha, make sure coverage == 1 so it doesn't do anything + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor || + coverage[i] == 1.f); + vb->write(deviceQuad->x(i), deviceQuad->y(i), GrVertexColor(color * coverage[i], wide), + localQuad->x(i), localQuad->y(i)); } +} - if (any(metadata.fInvLengths >= 1.f / kTolerance)) { - // Have an empty edge from a degenerate quad, so there's no hope - return false; - } +// 2D (XY), explicit coverage, UV locals, no color, no geometry domain, no texture domain +// This represents opaque, AA, textured rects +static void write_2d_cov_uv(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain) { + // Assert assumptions about VertexSpec + SkASSERT(spec.deviceQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.hasLocalCoords() && spec.localQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithPosition); + SkASSERT(!spec.hasVertexColors()); + SkASSERT(!spec.requiresGeometryDomain()); + SkASSERT(!spec.hasDomain()); + SkASSERT(localQuad); - // The distance the point needs to move is 1/2sin(theta), where theta is the angle between the - // two edges at that point. cos(theta) is equal to dot(dxy, nextCW(dxy)) - V4f cosTheta = fma(metadata.fDX, nextCW(metadata.fDX), metadata.fDY * nextCW(metadata.fDY)); - // If the angle is too shallow between edges, go through the degenerate path, otherwise adding - // and subtracting very large vectors in almost opposite directions leads to float errors - if (any(abs(cosTheta) >= 0.9f)) { - return false; + for (int i = 0; i < 4; ++i) { + vb->write(deviceQuad->x(i), deviceQuad->y(i), coverage[i], + localQuad->x(i), localQuad->y(i)); } - *outset = 0.5f * rsqrt(1.f - cosTheta * cosTheta); // 1/2sin(theta) - - // When outsetting or insetting, the current edge's AA adds to the length: - // cos(pi - theta)/2sin(theta) + cos(pi-ccw(theta))/2sin(ccw(theta)) - // Moving an adjacent edge updates the length by 1/2sin(theta|ccw(theta)) - V4f halfTanTheta = -cosTheta * (*outset); // cos(pi - theta) = -cos(theta) - V4f edgeAdjust = metadata.fMask * (halfTanTheta + nextCCW(halfTanTheta)) + - nextCCW(metadata.fMask) * nextCCW(*outset) + - nextCW(metadata.fMask) * (*outset); - // If either outsetting (plus edgeAdjust) or insetting (minus edgeAdjust) make edgeLen negative - // then use the slow path - V4f threshold = 0.1f - (1.f / metadata.fInvLengths); - return all(edgeAdjust > threshold) && all(edgeAdjust < -threshold); } -// Ignores the quad's fW, use outset_projected_vertices if it's known to need 3D. -static AI void outset_vertices(const V4f& outset, const QuadMetadata& metadata, Vertices* quad) { - // The mask is rotated compared to the outsets and edge vectors, since if the edge is "on" - // both its points need to be moved along their other edge vectors. - auto maskedOutset = -outset * nextCW(metadata.fMask); - auto maskedOutsetCW = outset * metadata.fMask; - // x = x + outset * mask * nextCW(xdiff) - outset * nextCW(mask) * xdiff - quad->fX += fma(maskedOutsetCW, nextCW(metadata.fDX), maskedOutset * metadata.fDX); - quad->fY += fma(maskedOutsetCW, nextCW(metadata.fDY), maskedOutset * metadata.fDY); - if (quad->fUVRCount > 0) { - // We want to extend the texture coords by the same proportion as the positions. - maskedOutset *= metadata.fInvLengths; - maskedOutsetCW *= nextCW(metadata.fInvLengths); - V4f du = nextCCW(quad->fU) - quad->fU; - V4f dv = nextCCW(quad->fV) - quad->fV; - quad->fU += fma(maskedOutsetCW, nextCW(du), maskedOutset * du); - quad->fV += fma(maskedOutsetCW, nextCW(dv), maskedOutset * dv); - if (quad->fUVRCount == 3) { - V4f dr = nextCCW(quad->fR) - quad->fR; - quad->fR += fma(maskedOutsetCW, nextCW(dr), maskedOutset * dr); - } +// NOTE: The three _strict specializations below match the non-strict uv functions above, except +// that they also write the UV domain. These are included to benefit SkiaRenderer, which must make +// use of both fast and strict constrained domains. When testing _strict was not that common across +// GMS, SKPs, and SVGs but we have little visibility into actual SkiaRenderer statistics. If +// SkiaRenderer can avoid domains more, these 3 functions should probably be removed for simplicity. + +// 2D (XY), no explicit coverage, UV locals, no color, tex domain but no geometry domain +// This represents opaque, non AA, textured rects with strict uv sampling +static void write_2d_uv_strict(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain) { + // Assert assumptions about VertexSpec + SkASSERT(spec.deviceQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.hasLocalCoords() && spec.localQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kNone); + SkASSERT(!spec.hasVertexColors()); + SkASSERT(!spec.requiresGeometryDomain()); + SkASSERT(spec.hasDomain()); + SkASSERT(localQuad); + + for (int i = 0; i < 4; ++i) { + vb->write(deviceQuad->x(i), deviceQuad->y(i), localQuad->x(i), localQuad->y(i), texDomain); } } -// Updates (x,y,w) to be at (x2d,y2d) once projected. Updates (u,v,r) to match if provided. -// Gracefully handles 2D content if *w holds all 1s. -static void outset_projected_vertices(const V4f& x2d, const V4f& y2d, - GrQuadAAFlags aaFlags, Vertices* quad) { - // Left to right, in device space, for each point - V4f e1x = skvx::shuffle<2, 3, 2, 3>(quad->fX) - skvx::shuffle<0, 1, 0, 1>(quad->fX); - V4f e1y = skvx::shuffle<2, 3, 2, 3>(quad->fY) - skvx::shuffle<0, 1, 0, 1>(quad->fY); - V4f e1w = skvx::shuffle<2, 3, 2, 3>(quad->fW) - skvx::shuffle<0, 1, 0, 1>(quad->fW); - correct_bad_edges(fma(e1x, e1x, e1y * e1y) < kTolerance * kTolerance, &e1x, &e1y, &e1w); - - // // Top to bottom, in device space, for each point - V4f e2x = skvx::shuffle<1, 1, 3, 3>(quad->fX) - skvx::shuffle<0, 0, 2, 2>(quad->fX); - V4f e2y = skvx::shuffle<1, 1, 3, 3>(quad->fY) - skvx::shuffle<0, 0, 2, 2>(quad->fY); - V4f e2w = skvx::shuffle<1, 1, 3, 3>(quad->fW) - skvx::shuffle<0, 0, 2, 2>(quad->fW); - correct_bad_edges(fma(e2x, e2x, e2y * e2y) < kTolerance * kTolerance, &e2x, &e2y, &e2w); - - // Can only move along e1 and e2 to reach the new 2D point, so we have - // x2d = (x + a*e1x + b*e2x) / (w + a*e1w + b*e2w) and - // y2d = (y + a*e1y + b*e2y) / (w + a*e1w + b*e2w) for some a, b - // This can be rewritten to a*c1x + b*c2x + c3x = 0; a * c1y + b*c2y + c3y = 0, where - // the cNx and cNy coefficients are: - V4f c1x = e1w * x2d - e1x; - V4f c1y = e1w * y2d - e1y; - V4f c2x = e2w * x2d - e2x; - V4f c2y = e2w * y2d - e2y; - V4f c3x = quad->fW * x2d - quad->fX; - V4f c3y = quad->fW * y2d - quad->fY; - - // Solve for a and b - V4f a, b, denom; - if (aaFlags == GrQuadAAFlags::kAll) { - // When every edge is outset/inset, each corner can use both edge vectors - denom = c1x * c2y - c2x * c1y; - a = (c2x * c3y - c3x * c2y) / denom; - b = (c3x * c1y - c1x * c3y) / denom; - } else { - // Force a or b to be 0 if that edge cannot be used due to non-AA - M4f aMask = M4f{(aaFlags & GrQuadAAFlags::kLeft) ? kTrue : kFalse, - (aaFlags & GrQuadAAFlags::kLeft) ? kTrue : kFalse, - (aaFlags & GrQuadAAFlags::kRight) ? kTrue : kFalse, - (aaFlags & GrQuadAAFlags::kRight) ? kTrue : kFalse}; - M4f bMask = M4f{(aaFlags & GrQuadAAFlags::kTop) ? kTrue : kFalse, - (aaFlags & GrQuadAAFlags::kBottom) ? kTrue : kFalse, - (aaFlags & GrQuadAAFlags::kTop) ? kTrue : kFalse, - (aaFlags & GrQuadAAFlags::kBottom) ? kTrue : kFalse}; - - // When aMask[i]&bMask[i], then a[i], b[i], denom[i] match the kAll case. - // When aMask[i]&!bMask[i], then b[i] = 0, a[i] = -c3x/c1x or -c3y/c1y, using better denom - // When !aMask[i]&bMask[i], then a[i] = 0, b[i] = -c3x/c2x or -c3y/c2y, "" - // When !aMask[i]&!bMask[i], then both a[i] = 0 and b[i] = 0 - M4f useC1x = abs(c1x) > abs(c1y); - M4f useC2x = abs(c2x) > abs(c2y); - - denom = if_then_else(aMask, - if_then_else(bMask, - c1x * c2y - c2x * c1y, /* A & B */ - if_then_else(useC1x, c1x, c1y)), /* A & !B */ - if_then_else(bMask, - if_then_else(useC2x, c2x, c2y), /* !A & B */ - V4f(1.f))); /* !A & !B */ - - a = if_then_else(aMask, - if_then_else(bMask, - c2x * c3y - c3x * c2y, /* A & B */ - if_then_else(useC1x, -c3x, -c3y)), /* A & !B */ - V4f(0.f)) / denom; /* !A */ - b = if_then_else(bMask, - if_then_else(aMask, - c3x * c1y - c1x * c3y, /* A & B */ - if_then_else(useC2x, -c3x, -c3y)), /* !A & B */ - V4f(0.f)) / denom; /* !B */ +// 2D (XY), no explicit coverage, UV locals, vertex color, tex domain but no geometry domain +// This represents transparent, non AA (or AA with cov. as alpha), textured rects with strict sample +static void write_2d_color_uv_strict(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain) { + // Assert assumptions about VertexSpec + SkASSERT(spec.deviceQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.hasLocalCoords() && spec.localQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kNone || + spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor); + SkASSERT(spec.hasVertexColors()); + SkASSERT(!spec.requiresGeometryDomain()); + SkASSERT(spec.hasDomain()); + SkASSERT(localQuad); + + bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kFloat; + for (int i = 0; i < 4; ++i) { + // If this is not coverage-with-alpha, make sure coverage == 1 so it doesn't do anything + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithColor || + coverage[i] == 1.f); + vb->write(deviceQuad->x(i), deviceQuad->y(i), GrVertexColor(color * coverage[i], wide), + localQuad->x(i), localQuad->y(i), texDomain); } +} - V4f newW = quad->fW + a * e1w + b * e2w; - // If newW < 0, scale a and b such that the point reaches the infinity plane instead of crossing - // This breaks orthogonality of inset/outsets, but GPUs don't handle negative Ws well so this - // is far less visually disturbing (likely not noticeable since it's at extreme perspective). - // The alternative correction (multiply xyw by -1) has the disadvantage of changing how local - // coordinates would be interpolated. - static const float kMinW = 1e-6f; - if (any(newW < 0.f)) { - V4f scale = if_then_else(newW < kMinW, (kMinW - quad->fW) / (newW - quad->fW), V4f(1.f)); - a *= scale; - b *= scale; - } +// 2D (XY), explicit coverage, UV locals, no color, tex domain but no geometry domain +// This represents opaque, AA, textured rects with strict uv sampling +static void write_2d_cov_uv_strict(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain) { + // Assert assumptions about VertexSpec + SkASSERT(spec.deviceQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.hasLocalCoords() && spec.localQuadType() != GrQuad::Type::kPerspective); + SkASSERT(spec.coverageMode() == GrQuadPerEdgeAA::CoverageMode::kWithPosition); + SkASSERT(!spec.hasVertexColors()); + SkASSERT(!spec.requiresGeometryDomain()); + SkASSERT(spec.hasDomain()); + SkASSERT(localQuad); - quad->fX += a * e1x + b * e2x; - quad->fY += a * e1y + b * e2y; - quad->fW += a * e1w + b * e2w; - correct_bad_coords(abs(denom) < kTolerance, &quad->fX, &quad->fY, &quad->fW); - - if (quad->fUVRCount > 0) { - // Calculate R here so it can be corrected with U and V in case it's needed later - V4f e1u = skvx::shuffle<2, 3, 2, 3>(quad->fU) - skvx::shuffle<0, 1, 0, 1>(quad->fU); - V4f e1v = skvx::shuffle<2, 3, 2, 3>(quad->fV) - skvx::shuffle<0, 1, 0, 1>(quad->fV); - V4f e1r = skvx::shuffle<2, 3, 2, 3>(quad->fR) - skvx::shuffle<0, 1, 0, 1>(quad->fR); - correct_bad_edges(fma(e1u, e1u, e1v * e1v) < kTolerance * kTolerance, &e1u, &e1v, &e1r); - - V4f e2u = skvx::shuffle<1, 1, 3, 3>(quad->fU) - skvx::shuffle<0, 0, 2, 2>(quad->fU); - V4f e2v = skvx::shuffle<1, 1, 3, 3>(quad->fV) - skvx::shuffle<0, 0, 2, 2>(quad->fV); - V4f e2r = skvx::shuffle<1, 1, 3, 3>(quad->fR) - skvx::shuffle<0, 0, 2, 2>(quad->fR); - correct_bad_edges(fma(e2u, e2u, e2v * e2v) < kTolerance * kTolerance, &e2u, &e2v, &e2r); - - quad->fU += a * e1u + b * e2u; - quad->fV += a * e1v + b * e2v; - if (quad->fUVRCount == 3) { - quad->fR += a * e1r + b * e2r; - correct_bad_coords(abs(denom) < kTolerance, &quad->fU, &quad->fV, &quad->fR); - } else { - correct_bad_coords(abs(denom) < kTolerance, &quad->fU, &quad->fV, nullptr); - } + for (int i = 0; i < 4; ++i) { + vb->write(deviceQuad->x(i), deviceQuad->y(i), coverage[i], + localQuad->x(i), localQuad->y(i), texDomain); } } -static V4f degenerate_coverage(const V4f& px, const V4f& py, const Edges& edges) { - // Calculate distance of the 4 inset points (px, py) to the 4 edges - V4f d0 = fma(edges.fA[0], px, fma(edges.fB[0], py, edges.fC[0])); - V4f d1 = fma(edges.fA[1], px, fma(edges.fB[1], py, edges.fC[1])); - V4f d2 = fma(edges.fA[2], px, fma(edges.fB[2], py, edges.fC[2])); - V4f d3 = fma(edges.fA[3], px, fma(edges.fB[3], py, edges.fC[3])); - - // For each point, pretend that there's a rectangle that touches e0 and e3 on the horizontal - // axis, so its width is "approximately" d0 + d3, and it touches e1 and e2 on the vertical axis - // so its height is d1 + d2. Pin each of these dimensions to [0, 1] and approximate the coverage - // at each point as clamp(d0+d3, 0, 1) x clamp(d1+d2, 0, 1). For rectilinear quads this is an - // accurate calculation of its area clipped to an aligned pixel. For arbitrary quads it is not - // mathematically accurate but qualitatively provides a stable value proportional to the size of - // the shape. - V4f w = max(0.f, min(1.f, d0 + d3)); - V4f h = max(0.f, min(1.f, d1 + d2)); - return w * h; -} +} // anonymous namespace -// Outsets or insets xs/ys in place. To be used when the interior is very small, edges are near -// parallel, or edges are very short/zero-length. Returns coverage for each vertex. -// Requires (dx, dy) to already be fixed for empty edges. -static V4f compute_degenerate_quad(GrQuadAAFlags aaFlags, const V4f& mask, const Edges& edges, - bool outset, Vertices* quad) { - // Move the edge 1/2 pixel in or out depending on 'outset'. - V4f oc = edges.fC + mask * (outset ? 0.5f : -0.5f); - - // There are 6 points that we care about to determine the final shape of the polygon, which - // are the intersections between (e0,e2), (e1,e0), (e2,e3), (e3,e1) (corresponding to the - // 4 corners), and (e1, e2), (e0, e3) (representing the intersections of opposite edges). - V4f denom = edges.fA * nextCW(edges.fB) - edges.fB * nextCW(edges.fA); - V4f px = (edges.fB * nextCW(oc) - oc * nextCW(edges.fB)) / denom; - V4f py = (oc * nextCW(edges.fA) - edges.fA * nextCW(oc)) / denom; - correct_bad_coords(abs(denom) < kTolerance, &px, &py, nullptr); - - // Calculate the signed distances from these 4 corners to the other two edges that did not - // define the intersection. So p(0) is compared to e3,e1, p(1) to e3,e2 , p(2) to e0,e1, and - // p(3) to e0,e2 - V4f dists1 = px * skvx::shuffle<3, 3, 0, 0>(edges.fA) + - py * skvx::shuffle<3, 3, 0, 0>(edges.fB) + - skvx::shuffle<3, 3, 0, 0>(oc); - V4f dists2 = px * skvx::shuffle<1, 2, 1, 2>(edges.fA) + - py * skvx::shuffle<1, 2, 1, 2>(edges.fB) + - skvx::shuffle<1, 2, 1, 2>(oc); - - // If all the distances are >= 0, the 4 corners form a valid quadrilateral, so use them as - // the 4 points. If any point is on the wrong side of both edges, the interior has collapsed - // and we need to use a central point to represent it. If all four points are only on the - // wrong side of 1 edge, one edge has crossed over another and we use a line to represent it. - // Otherwise, use a triangle that replaces the bad points with the intersections of - // (e1, e2) or (e0, e3) as needed. - M4f d1v0 = dists1 < kTolerance; - M4f d2v0 = dists2 < kTolerance; - M4f d1And2 = d1v0 & d2v0; - M4f d1Or2 = d1v0 | d2v0; - - V4f coverage; - if (!any(d1Or2)) { - // Every dists1 and dists2 >= kTolerance so it's not degenerate, use all 4 corners as-is - // and use full coverage - coverage = 1.f; - } else if (any(d1And2)) { - // A point failed against two edges, so reduce the shape to a single point, which we take as - // the center of the original quad to ensure it is contained in the intended geometry. Since - // it has collapsed, we know the shape cannot cover a pixel so update the coverage. - SkPoint center = {0.25f * (quad->fX[0] + quad->fX[1] + quad->fX[2] + quad->fX[3]), - 0.25f * (quad->fY[0] + quad->fY[1] + quad->fY[2] + quad->fY[3])}; - px = center.fX; - py = center.fY; - coverage = degenerate_coverage(px, py, edges); - } else if (all(d1Or2)) { - // Degenerates to a line. Compare p[2] and p[3] to edge 0. If they are on the wrong side, - // that means edge 0 and 3 crossed, and otherwise edge 1 and 2 crossed. - if (dists1[2] < kTolerance && dists1[3] < kTolerance) { - // Edges 0 and 3 have crossed over, so make the line from average of (p0,p2) and (p1,p3) - px = 0.5f * (skvx::shuffle<0, 1, 0, 1>(px) + skvx::shuffle<2, 3, 2, 3>(px)); - py = 0.5f * (skvx::shuffle<0, 1, 0, 1>(py) + skvx::shuffle<2, 3, 2, 3>(py)); - } else { - // Edges 1 and 2 have crossed over, so make the line from average of (p0,p1) and (p2,p3) - px = 0.5f * (skvx::shuffle<0, 0, 2, 2>(px) + skvx::shuffle<1, 1, 3, 3>(px)); - py = 0.5f * (skvx::shuffle<0, 0, 2, 2>(py) + skvx::shuffle<1, 1, 3, 3>(py)); - } - coverage = degenerate_coverage(px, py, edges); - } else { - // This turns into a triangle. Replace corners as needed with the intersections between - // (e0,e3) and (e1,e2), which must now be calculated - using V2f = skvx::Vec<2, float>; - V2f eDenom = skvx::shuffle<0, 1>(edges.fA) * skvx::shuffle<3, 2>(edges.fB) - - skvx::shuffle<0, 1>(edges.fB) * skvx::shuffle<3, 2>(edges.fA); - V2f ex = (skvx::shuffle<0, 1>(edges.fB) * skvx::shuffle<3, 2>(oc) - - skvx::shuffle<0, 1>(oc) * skvx::shuffle<3, 2>(edges.fB)) / eDenom; - V2f ey = (skvx::shuffle<0, 1>(oc) * skvx::shuffle<3, 2>(edges.fA) - - skvx::shuffle<0, 1>(edges.fA) * skvx::shuffle<3, 2>(oc)) / eDenom; - - if (SkScalarAbs(eDenom[0]) > kTolerance) { - px = if_then_else(d1v0, V4f(ex[0]), px); - py = if_then_else(d1v0, V4f(ey[0]), py); - } - if (SkScalarAbs(eDenom[1]) > kTolerance) { - px = if_then_else(d2v0, V4f(ex[1]), px); - py = if_then_else(d2v0, V4f(ey[1]), py); - } +namespace GrQuadPerEdgeAA { - coverage = 1.f; +IndexBufferOption CalcIndexBufferOption(GrAAType aa, int numQuads) { + if (aa == GrAAType::kCoverage) { + return IndexBufferOption::kPictureFramed; + } else if (numQuads > 1) { + return IndexBufferOption::kIndexedRects; + } else { + return IndexBufferOption::kTriStrips; } - - outset_projected_vertices(px, py, aaFlags, quad); - return coverage; } -// Computes the vertices for the two nested quads used to create AA edges. The original single quad -// should be duplicated as input in 'inner' and 'outer', and the resulting quad frame will be -// stored in-place on return. Returns per-vertex coverage for the inner vertices. -static V4f compute_nested_quad_vertices(GrQuadAAFlags aaFlags, bool rectilinear, - Vertices* inner, Vertices* outer, SkRect* domain) { - SkASSERT(inner->fUVRCount == 0 || inner->fUVRCount == 2 || inner->fUVRCount == 3); - SkASSERT(outer->fUVRCount == inner->fUVRCount); - - QuadMetadata metadata = get_metadata(*inner, aaFlags); - - // Calculate domain first before updating vertices. It's only used when not rectilinear. - if (!rectilinear) { - SkASSERT(domain); - // The domain is the bounding box of the quad, outset by 0.5. Don't worry about edge masks - // since the FP only applies the domain on the exterior triangles, which are degenerate for - // non-AA edges. - domain->fLeft = min(outer->fX) - 0.5f; - domain->fRight = max(outer->fX) + 0.5f; - domain->fTop = min(outer->fY) - 0.5f; - domain->fBottom = max(outer->fY) + 0.5f; - } - - // When outsetting, we want the new edge to be .5px away from the old line, which means the - // corners may need to be adjusted by more than .5px if the matrix had sheer. This adjustment - // is only computed if there are no empty edges, and it may signal going through the slow path. - V4f outset = 0.5f; - if (get_optimized_outset(metadata, rectilinear, &outset)) { - // Since it's not subpixel, outsetting and insetting are trivial vector additions. - outset_vertices(outset, metadata, outer); - outset_vertices(-outset, metadata, inner); - return 1.f; +// This is a more elaborate version of fitsInBytes() that allows "no color" for white +ColorType MinColorType(SkPMColor4f color) { + if (color == SK_PMColor4fWHITE) { + return ColorType::kNone; + } else { + return color.fitsInBytes() ? ColorType::kByte : ColorType::kFloat; } - - // Only compute edge equations once since they are the same for inner and outer quads - Edges edges = get_edge_equations(metadata, *inner); - - // Calculate both outset and inset, returning the coverage reported for the inset, since the - // outset will always have 0.0f. - compute_degenerate_quad(aaFlags, metadata.fMask, edges, true, outer); - return compute_degenerate_quad(aaFlags, metadata.fMask, edges, false, inner); } -// Generalizes compute_nested_quad_vertices to extrapolate local coords such that after perspective -// division of the device coordinates, the original local coordinate value is at the original -// un-outset device position. -static V4f compute_nested_persp_quad_vertices(const GrQuadAAFlags aaFlags, Vertices* inner, - Vertices* outer, SkRect* domain) { - SkASSERT(inner->fUVRCount == 0 || inner->fUVRCount == 2 || inner->fUVRCount == 3); - SkASSERT(outer->fUVRCount == inner->fUVRCount); - - // Calculate the projected 2D quad and use it to form projeccted inner/outer quads - V4f iw = 1.0f / inner->fW; - V4f x2d = inner->fX * iw; - V4f y2d = inner->fY * iw; +////////////////// Tessellator Implementation - Vertices inner2D = { x2d, y2d, /*w*/ 1.f, 0.f, 0.f, 0.f, 0 }; // No uvr outsetting in 2D - Vertices outer2D = inner2D; - - V4f coverage = compute_nested_quad_vertices( - aaFlags, /* rect */ false, &inner2D, &outer2D, domain); - - // Now map from the 2D inset/outset back to 3D and update the local coordinates as well - outset_projected_vertices(inner2D.fX, inner2D.fY, aaFlags, inner); - outset_projected_vertices(outer2D.fX, outer2D.fY, aaFlags, outer); +Tessellator::WriteQuadProc Tessellator::GetWriteQuadProc(const VertexSpec& spec) { + // All specialized writing functions requires 2D geometry and no geometry domain. This is not + // the same as just checking device type vs. kRectilinear since non-AA general 2D quads do not + // require a geometry domain and could then go through a fast path. + if (spec.deviceQuadType() != GrQuad::Type::kPerspective && !spec.requiresGeometryDomain()) { + CoverageMode mode = spec.coverageMode(); + if (spec.hasVertexColors()) { + if (mode != CoverageMode::kWithPosition) { + // Vertex colors, but no explicit coverage + if (!spec.hasLocalCoords()) { + // Non-UV with vertex colors (possibly with coverage folded into alpha) + return write_2d_color; + } else if (spec.localQuadType() != GrQuad::Type::kPerspective) { + // UV locals with vertex colors (possibly with coverage-as-alpha) + return spec.hasDomain() ? write_2d_color_uv_strict : write_2d_color_uv; + } + } + // Else fall through; this is a spec that requires vertex colors and explicit coverage, + // which means it's anti-aliased and the FPs don't support coverage as alpha, or + // it uses 3D local coordinates. + } else if (spec.hasLocalCoords() && spec.localQuadType() != GrQuad::Type::kPerspective) { + if (mode == CoverageMode::kWithPosition) { + // UV locals with explicit coverage + return spec.hasDomain() ? write_2d_cov_uv_strict : write_2d_cov_uv; + } else { + SkASSERT(mode == CoverageMode::kNone); + return spec.hasDomain() ? write_2d_uv_strict : write_2d_uv; + } + } + // Else fall through to generic vertex function; this is a spec that has no vertex colors + // and [no|uvr] local coords, which doesn't happen often enough to warrant specialization. + } - return coverage; + // Arbitrary spec hits the slow path + return write_quad_generic; } -// Writes four vertices in triangle strip order, including the additional data for local -// coordinates, geometry + texture domains, color, and coverage as needed to satisfy the vertex spec -static void write_quad(GrVertexWriter* vb, const GrQuadPerEdgeAA::VertexSpec& spec, - GrQuadPerEdgeAA::CoverageMode mode, const V4f& coverage, SkPMColor4f color4f, - const SkRect& geomDomain, const SkRect& texDomain, const Vertices& quad) { - static constexpr auto If = GrVertexWriter::If; - - for (int i = 0; i < 4; ++i) { - // save position, this is a float2 or float3 or float4 depending on the combination of - // perspective and coverage mode. - vb->write(quad.fX[i], quad.fY[i], - If(spec.deviceQuadType() == GrQuad::Type::kPerspective, quad.fW[i]), - If(mode == GrQuadPerEdgeAA::CoverageMode::kWithPosition, coverage[i])); - - // save color - if (spec.hasVertexColors()) { - bool wide = spec.colorType() == GrQuadPerEdgeAA::ColorType::kHalf; - vb->write(GrVertexColor( - color4f * (mode == GrQuadPerEdgeAA::CoverageMode::kWithColor ? coverage[i] : 1.f), - wide)); +Tessellator::Tessellator(const VertexSpec& spec, char* vertices) + : fVertexSpec(spec) + , fVertexWriter{vertices} + , fWriteProc(Tessellator::GetWriteQuadProc(spec)) {} + +void Tessellator::append(GrQuad* deviceQuad, GrQuad* localQuad, + const SkPMColor4f& color, const SkRect& uvDomain, GrQuadAAFlags aaFlags) { + // We allow Tessellator to be created with a null vertices pointer for convenience, but it is + // assumed it will never actually be used in those cases. + SkASSERT(fVertexWriter.fPtr); + SkASSERT(deviceQuad->quadType() <= fVertexSpec.deviceQuadType()); + SkASSERT(localQuad || !fVertexSpec.hasLocalCoords()); + SkASSERT(!fVertexSpec.hasLocalCoords() || localQuad->quadType() <= fVertexSpec.localQuadType()); + + static const float kFullCoverage[4] = {1.f, 1.f, 1.f, 1.f}; + static const float kZeroCoverage[4] = {0.f, 0.f, 0.f, 0.f}; + static const SkRect kIgnoredDomain = SkRect::MakeEmpty(); + + if (fVertexSpec.usesCoverageAA()) { + SkASSERT(fVertexSpec.coverageMode() == CoverageMode::kWithColor || + fVertexSpec.coverageMode() == CoverageMode::kWithPosition); + // Must calculate inner and outer quadrilaterals for the vertex coverage ramps, and possibly + // a geometry domain if corners are not right angles + SkRect geomDomain; + if (fVertexSpec.requiresGeometryDomain()) { + geomDomain = deviceQuad->bounds(); + geomDomain.outset(0.5f, 0.5f); // account for AA expansion } - // save local position - if (spec.hasLocalCoords()) { - vb->write(quad.fU[i], quad.fV[i], - If(spec.localQuadType() == GrQuad::Type::kPerspective, quad.fR[i])); - } + if (aaFlags == GrQuadAAFlags::kNone) { + // Have to write the coverage AA vertex structure, but there's no math to be done for a + // non-aa quad batched into a coverage AA op. + fWriteProc(&fVertexWriter, fVertexSpec, deviceQuad, localQuad, kFullCoverage, color, + geomDomain, uvDomain); + // Since we pass the same corners in, the outer vertex structure will have 0 area and + // the coverage interpolation from 1 to 0 will not be visible. + fWriteProc(&fVertexWriter, fVertexSpec, deviceQuad, localQuad, kZeroCoverage, color, + geomDomain, uvDomain); + } else { + // Reset the tessellation helper to match the current geometry + fAAHelper.reset(*deviceQuad, localQuad); + + // Edge inset/outset distance ordered LBTR, set to 0.5 for a half pixel if the AA flag + // is turned on, or 0.0 if the edge is not anti-aliased. + skvx::Vec<4, float> edgeDistances; + if (aaFlags == GrQuadAAFlags::kAll) { + edgeDistances = 0.5f; + } else { + edgeDistances = { (aaFlags & GrQuadAAFlags::kLeft) ? 0.5f : 0.f, + (aaFlags & GrQuadAAFlags::kBottom) ? 0.5f : 0.f, + (aaFlags & GrQuadAAFlags::kTop) ? 0.5f : 0.f, + (aaFlags & GrQuadAAFlags::kRight) ? 0.5f : 0.f }; + } - // save the geometry domain - if (spec.requiresGeometryDomain()) { - vb->write(geomDomain); - } + // Write inner vertices first + float coverage[4]; + fAAHelper.inset(edgeDistances, deviceQuad, localQuad).store(coverage); + fWriteProc(&fVertexWriter, fVertexSpec, deviceQuad, localQuad, coverage, color, + geomDomain, uvDomain); - // save the texture domain - if (spec.hasDomain()) { - vb->write(texDomain); + // Then outer vertices, which use 0.f for their coverage + fAAHelper.outset(edgeDistances, deviceQuad, localQuad); + fWriteProc(&fVertexWriter, fVertexSpec, deviceQuad, localQuad, kZeroCoverage, color, + geomDomain, uvDomain); } + } else { + // No outsetting needed, just write a single quad with full coverage + SkASSERT(fVertexSpec.coverageMode() == CoverageMode::kNone && + !fVertexSpec.requiresGeometryDomain()); + fWriteProc(&fVertexWriter, fVertexSpec, deviceQuad, localQuad, kFullCoverage, color, + kIgnoredDomain, uvDomain); } } -GR_DECLARE_STATIC_UNIQUE_KEY(gAAFillRectIndexBufferKey); - -static const int kVertsPerAAFillRect = 8; -static const int kIndicesPerAAFillRect = 30; - -static sk_sp get_index_buffer(GrResourceProvider* resourceProvider) { - GR_DEFINE_STATIC_UNIQUE_KEY(gAAFillRectIndexBufferKey); +sk_sp GetIndexBuffer(GrMeshDrawOp::Target* target, + IndexBufferOption indexBufferOption) { + auto resourceProvider = target->resourceProvider(); - // clang-format off - static const uint16_t gFillAARectIdx[] = { - 0, 1, 2, 1, 3, 2, - 0, 4, 1, 4, 5, 1, - 0, 6, 4, 0, 2, 6, - 2, 3, 6, 3, 7, 6, - 1, 5, 3, 3, 5, 7, - }; - // clang-format on - - GR_STATIC_ASSERT(SK_ARRAY_COUNT(gFillAARectIdx) == kIndicesPerAAFillRect); - return resourceProvider->findOrCreatePatternedIndexBuffer( - gFillAARectIdx, kIndicesPerAAFillRect, GrQuadPerEdgeAA::kNumAAQuadsInIndexBuffer, - kVertsPerAAFillRect, gAAFillRectIndexBufferKey); + switch (indexBufferOption) { + case IndexBufferOption::kPictureFramed: return resourceProvider->refAAQuadIndexBuffer(); + case IndexBufferOption::kIndexedRects: return resourceProvider->refNonAAQuadIndexBuffer(); + case IndexBufferOption::kTriStrips: // fall through + default: return nullptr; + } } -} // anonymous namespace - -namespace GrQuadPerEdgeAA { - -// This is a more elaborate version of SkPMColor4fNeedsWideColor that allows "no color" for white -ColorType MinColorType(SkPMColor4f color, GrClampType clampType, const GrCaps& caps) { - if (color == SK_PMColor4fWHITE) { - return ColorType::kNone; - } else { - return SkPMColor4fNeedsWideColor(color, clampType, caps) ? ColorType::kHalf - : ColorType::kByte; +int QuadLimit(IndexBufferOption option) { + switch (option) { + case IndexBufferOption::kPictureFramed: return GrResourceProvider::MaxNumAAQuads(); + case IndexBufferOption::kIndexedRects: return GrResourceProvider::MaxNumNonAAQuads(); + case IndexBufferOption::kTriStrips: return SK_MaxS32; // not limited by an indexBuffer } + + SkUNREACHABLE; } -////////////////// Tessellate Implementation +void ConfigureMesh(const GrCaps& caps, GrMesh* mesh, const VertexSpec& spec, + int runningQuadCount, int quadsInDraw, int maxVerts, + sk_sp vertexBuffer, + sk_sp indexBuffer, int absVertBufferOffset) { + SkASSERT(vertexBuffer); -void* Tessellate(void* vertices, const VertexSpec& spec, const GrQuad& deviceQuad, - const SkPMColor4f& color4f, const GrQuad& localQuad, const SkRect& domain, - GrQuadAAFlags aaFlags) { - SkASSERT(deviceQuad.quadType() <= spec.deviceQuadType()); - SkASSERT(!spec.hasLocalCoords() || localQuad.quadType() <= spec.localQuadType()); + mesh->setPrimitiveType(spec.primitiveType()); - GrQuadPerEdgeAA::CoverageMode mode = spec.coverageMode(); + if (spec.indexBufferOption() == IndexBufferOption::kTriStrips) { + SkASSERT(!indexBuffer); - // Load position data into V4fs (always x, y, and load w to avoid branching down the road) - Vertices outer; - outer.fX = deviceQuad.x4f(); - outer.fY = deviceQuad.y4f(); - outer.fW = deviceQuad.w4f(); // Guaranteed to be 1f if it's not perspective - - // Load local position data into V4fs (either none, just u,v or all three) - outer.fUVRCount = spec.localDimensionality(); - if (spec.hasLocalCoords()) { - outer.fU = localQuad.x4f(); - outer.fV = localQuad.y4f(); - outer.fR = localQuad.w4f(); // Will be ignored if the local quad type isn't perspective + mesh->setNonIndexedNonInstanced(4); + int offset = absVertBufferOffset + + runningQuadCount * GrResourceProvider::NumVertsPerNonAAQuad(); + mesh->setVertexData(std::move(vertexBuffer), offset); + return; } - GrVertexWriter vb{vertices}; - if (spec.usesCoverageAA()) { - SkASSERT(mode == CoverageMode::kWithPosition || mode == CoverageMode::kWithColor); - // Must calculate two new quads, an outset and inset by .5 in projected device space, so - // duplicate the original quad for the inner space - Vertices inner = outer; + SkASSERT(spec.indexBufferOption() == IndexBufferOption::kPictureFramed || + spec.indexBufferOption() == IndexBufferOption::kIndexedRects); + SkASSERT(indexBuffer); - SkRect geomDomain; - V4f maxCoverage = 1.f; - if (spec.deviceQuadType() == GrQuad::Type::kPerspective) { - // For perspective, send quads with all edges non-AA through the tessellation to ensure - // their corners are processed the same as adjacent quads. This approach relies on - // solving edge equations to reconstruct corners, which can create seams if an inner - // fully non-AA quad is not similarly processed. - maxCoverage = compute_nested_persp_quad_vertices(aaFlags, &inner, &outer, &geomDomain); - } else if (aaFlags != GrQuadAAFlags::kNone) { - // In 2D, the simpler corner math does not cause issues with seaming against non-AA - // inner quads. - maxCoverage = compute_nested_quad_vertices( - aaFlags, spec.deviceQuadType() <= GrQuad::Type::kRectilinear, &inner, &outer, - &geomDomain); - } else if (spec.requiresGeometryDomain()) { - // The quad itself wouldn't need a geometric domain, but the batch does, so set the - // domain to the bounds of the X/Y coords. Since it's non-AA, this won't actually be - // evaluated by the shader, but make sure not to upload uninitialized data. - geomDomain.fLeft = min(outer.fX); - geomDomain.fRight = max(outer.fX); - geomDomain.fTop = min(outer.fY); - geomDomain.fBottom = max(outer.fY); - } + int maxNumQuads, numIndicesPerQuad, numVertsPerQuad; - // Write two quads for inner and outer, inner will use the - write_quad(&vb, spec, mode, maxCoverage, color4f, geomDomain, domain, inner); - write_quad(&vb, spec, mode, 0.f, color4f, geomDomain, domain, outer); + if (spec.indexBufferOption() == IndexBufferOption::kPictureFramed) { + // AA uses 8 vertices and 30 indices per quad, basically nested rectangles + maxNumQuads = GrResourceProvider::MaxNumAAQuads(); + numIndicesPerQuad = GrResourceProvider::NumIndicesPerAAQuad(); + numVertsPerQuad = GrResourceProvider::NumVertsPerAAQuad(); } else { - // No outsetting needed, just write a single quad with full coverage - SkASSERT(mode == CoverageMode::kNone && !spec.requiresGeometryDomain()); - write_quad(&vb, spec, mode, 1.f, color4f, SkRect::MakeEmpty(), domain, outer); + // Non-AA uses 4 vertices and 6 indices per quad + maxNumQuads = GrResourceProvider::MaxNumNonAAQuads(); + numIndicesPerQuad = GrResourceProvider::NumIndicesPerNonAAQuad(); + numVertsPerQuad = GrResourceProvider::NumVertsPerNonAAQuad(); } - return vb.fPtr; -} + SkASSERT(runningQuadCount + quadsInDraw <= maxNumQuads); -bool ConfigureMeshIndices(GrMeshDrawOp::Target* target, GrMesh* mesh, const VertexSpec& spec, - int quadCount) { - if (spec.usesCoverageAA()) { - // AA quads use 8 vertices, basically nested rectangles - sk_sp ibuffer = get_index_buffer(target->resourceProvider()); - if (!ibuffer) { - return false; - } + if (caps.avoidLargeIndexBufferDraws()) { + // When we need to avoid large index buffer draws we modify the base vertex of the draw + // which, in GL, requires rebinding all vertex attrib arrays, so a base index is generally + // preferred. + int offset = absVertBufferOffset + runningQuadCount * numVertsPerQuad; - mesh->setPrimitiveType(GrPrimitiveType::kTriangles); - mesh->setIndexedPatterned(std::move(ibuffer), kIndicesPerAAFillRect, kVertsPerAAFillRect, - quadCount, kNumAAQuadsInIndexBuffer); + mesh->setIndexedPatterned(std::move(indexBuffer), numIndicesPerQuad, + numVertsPerQuad, quadsInDraw, maxNumQuads); + mesh->setVertexData(std::move(vertexBuffer), offset); } else { - // Non-AA quads use 4 vertices, and regular triangle strip layout - if (quadCount > 1) { - sk_sp ibuffer = target->resourceProvider()->refQuadIndexBuffer(); - if (!ibuffer) { - return false; - } + int baseIndex = runningQuadCount * numIndicesPerQuad; + int numIndicesToDraw = quadsInDraw * numIndicesPerQuad; - mesh->setPrimitiveType(GrPrimitiveType::kTriangles); - mesh->setIndexedPatterned(std::move(ibuffer), 6, 4, quadCount, - GrResourceProvider::QuadCountOfQuadBuffer()); - } else { - mesh->setPrimitiveType(GrPrimitiveType::kTriangleStrip); - mesh->setNonIndexedNonInstanced(4); - } - } + int minVertex = runningQuadCount * numVertsPerQuad; + int maxVertex = (runningQuadCount + quadsInDraw) * numVertsPerQuad; - return true; + mesh->setIndexed(std::move(indexBuffer), numIndicesToDraw, + baseIndex, minVertex, maxVertex, GrPrimitiveRestart::kNo); + mesh->setVertexData(std::move(vertexBuffer), absVertBufferOffset); + } } ////////////////// VertexSpec Implementation @@ -710,8 +508,8 @@ size_t VertexSpec::vertexSize() const { if (ColorType::kByte == this->colorType()) { count += GrVertexAttribTypeSize(kUByte4_norm_GrVertexAttribType); - } else if (ColorType::kHalf == this->colorType()) { - count += GrVertexAttribTypeSize(kHalf4_GrVertexAttribType); + } else if (ColorType::kFloat == this->colorType()) { + count += GrVertexAttribTypeSize(kFloat4_GrVertexAttribType); } if (this->hasDomain()) { @@ -727,19 +525,20 @@ class QuadPerEdgeAAGeometryProcessor : public GrGeometryProcessor { public: using Saturate = GrTextureOp::Saturate; - static sk_sp Make(const VertexSpec& spec) { - return sk_sp(new QuadPerEdgeAAGeometryProcessor(spec)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, const VertexSpec& spec) { + return arena->make(spec); } - static sk_sp Make(const VertexSpec& vertexSpec, const GrShaderCaps& caps, - GrTextureType textureType, - const GrSamplerState& samplerState, - const GrSwizzle& swizzle, uint32_t extraSamplerKey, - sk_sp textureColorSpaceXform, - Saturate saturate) { - return sk_sp(new QuadPerEdgeAAGeometryProcessor( - vertexSpec, caps, textureType, samplerState, swizzle, extraSamplerKey, - std::move(textureColorSpaceXform), saturate)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena, const VertexSpec& vertexSpec, + const GrShaderCaps& caps, + const GrBackendFormat& backendFormat, + const GrSamplerState& samplerState, + const GrSwizzle& swizzle, + sk_sp textureColorSpaceXform, + Saturate saturate) { + return arena->make( + vertexSpec, caps, backendFormat, samplerState, swizzle, + std::move(textureColorSpaceXform), saturate); } const char* name() const override { return "QuadPerEdgeAAGeometryProcessor"; } @@ -775,10 +574,10 @@ class QuadPerEdgeAAGeometryProcessor : public GrGeometryProcessor { class GLSLProcessor : public GrGLSLGeometryProcessor { public: void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - FPCoordTransformIter&& transformIter) override { + const CoordTransformRange& transformRange) override { const auto& gp = proc.cast(); if (gp.fLocalCoord.isInitialized()) { - this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); + this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } fTextureColorSpaceXformHelper.setData(pdman, gp.fTextureColorSpaceXform.get()); } @@ -929,6 +728,8 @@ class QuadPerEdgeAAGeometryProcessor : public GrGeometryProcessor { } private: + friend class ::SkArenaAlloc; // for access to ctor + QuadPerEdgeAAGeometryProcessor(const VertexSpec& spec) : INHERITED(kQuadPerEdgeAAGeometryProcessor_ClassID) , fTextureColorSpaceXform(nullptr) { @@ -939,16 +740,15 @@ class QuadPerEdgeAAGeometryProcessor : public GrGeometryProcessor { QuadPerEdgeAAGeometryProcessor(const VertexSpec& spec, const GrShaderCaps& caps, - GrTextureType textureType, + const GrBackendFormat& backendFormat, const GrSamplerState& samplerState, const GrSwizzle& swizzle, - uint32_t extraSamplerKey, sk_sp textureColorSpaceXform, Saturate saturate) : INHERITED(kQuadPerEdgeAAGeometryProcessor_ClassID) , fSaturate(saturate) , fTextureColorSpaceXform(std::move(textureColorSpaceXform)) - , fSampler(textureType, samplerState, swizzle, extraSamplerKey) { + , fSampler(samplerState, backendFormat, swizzle) { SkASSERT(spec.hasLocalCoords()); this->initializeAttrs(spec); this->setTextureSamplerCnt(1); @@ -987,10 +787,8 @@ class QuadPerEdgeAAGeometryProcessor : public GrGeometryProcessor { fLocalCoord = {"localCoord", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; } // else localDim == 0 and attribute remains uninitialized - if (ColorType::kByte == spec.colorType()) { - fColor = {"color", kUByte4_norm_GrVertexAttribType, kHalf4_GrSLType}; - } else if (ColorType::kHalf == spec.colorType()) { - fColor = {"color", kHalf4_GrVertexAttribType, kHalf4_GrSLType}; + if (spec.hasVertexColors()) { + fColor = MakeColorAttribute("color", ColorType::kFloat == spec.colorType()); } if (spec.hasDomain()) { @@ -1024,18 +822,19 @@ class QuadPerEdgeAAGeometryProcessor : public GrGeometryProcessor { typedef GrGeometryProcessor INHERITED; }; -sk_sp MakeProcessor(const VertexSpec& spec) { - return QuadPerEdgeAAGeometryProcessor::Make(spec); +GrGeometryProcessor* MakeProcessor(SkArenaAlloc* arena, const VertexSpec& spec) { + return QuadPerEdgeAAGeometryProcessor::Make(arena, spec); } -sk_sp MakeTexturedProcessor(const VertexSpec& spec, const GrShaderCaps& caps, - GrTextureType textureType, - const GrSamplerState& samplerState, - const GrSwizzle& swizzle, uint32_t extraSamplerKey, - sk_sp textureColorSpaceXform, - Saturate saturate) { - return QuadPerEdgeAAGeometryProcessor::Make(spec, caps, textureType, samplerState, swizzle, - extraSamplerKey, std::move(textureColorSpaceXform), +GrGeometryProcessor* MakeTexturedProcessor(SkArenaAlloc* arena, const VertexSpec& spec, + const GrShaderCaps& caps, + const GrBackendFormat& backendFormat, + const GrSamplerState& samplerState, + const GrSwizzle& swizzle, + sk_sp textureColorSpaceXform, + Saturate saturate) { + return QuadPerEdgeAAGeometryProcessor::Make(arena, spec, caps, backendFormat, samplerState, + swizzle, std::move(textureColorSpaceXform), saturate); } diff --git a/third_party/skia/src/gpu/ops/GrQuadPerEdgeAA.h b/third_party/skia/src/gpu/ops/GrQuadPerEdgeAA.h index 06bb315efcb9..acd565dbc7e6 100644 --- a/third_party/skia/src/gpu/ops/GrQuadPerEdgeAA.h +++ b/third_party/skia/src/gpu/ops/GrQuadPerEdgeAA.h @@ -14,24 +14,37 @@ #include "src/gpu/GrColor.h" #include "src/gpu/GrGeometryProcessor.h" #include "src/gpu/GrSamplerState.h" +#include "src/gpu/GrVertexWriter.h" #include "src/gpu/geometry/GrQuad.h" +#include "src/gpu/geometry/GrQuadUtils.h" #include "src/gpu/ops/GrMeshDrawOp.h" #include "src/gpu/ops/GrTextureOp.h" class GrCaps; class GrColorSpaceXform; class GrShaderCaps; +struct GrVertexWriter; namespace GrQuadPerEdgeAA { using Saturate = GrTextureOp::Saturate; enum class CoverageMode { kNone, kWithPosition, kWithColor }; enum class Domain : bool { kNo = false, kYes = true }; - enum class ColorType { kNone, kByte, kHalf, kLast = kHalf }; + enum class ColorType { kNone, kByte, kFloat, kLast = kFloat }; static const int kColorTypeCount = static_cast(ColorType::kLast) + 1; + enum class IndexBufferOption { + kPictureFramed, // geometrically AA'd -> 8 verts/quad + an index buffer + kIndexedRects, // non-AA'd but indexed -> 4 verts/quad + an index buffer + kTriStrips, // non-AA'd -> 4 verts/quad but no index buffer + kLast = kTriStrips + }; + static const int kIndexBufferOptionCount = static_cast(IndexBufferOption::kLast) + 1; + + IndexBufferOption CalcIndexBufferOption(GrAAType aa, int numQuads); + // Gets the minimum ColorType that can represent a color. - ColorType MinColorType(SkPMColor4f, GrClampType, const GrCaps&); + ColorType MinColorType(SkPMColor4f); // Specifies the vertex configuration for an op that renders per-edge AA quads. The vertex // order (when enabled) is device position, color, local position, domain, aa edge equations. @@ -39,10 +52,23 @@ namespace GrQuadPerEdgeAA { // GPAttributes maintains. If hasLocalCoords is false, then the local quad type can be ignored. struct VertexSpec { public: + VertexSpec() + : fDeviceQuadType(0) // kAxisAligned + , fLocalQuadType(0) // kAxisAligned + , fIndexBufferOption(0) // kPictureFramed + , fHasLocalCoords(false) + , fColorType(0) // kNone + , fHasDomain(false) + , fUsesCoverageAA(false) + , fCompatibleWithCoverageAsAlpha(false) + , fRequiresGeometryDomain(false) {} + VertexSpec(GrQuad::Type deviceQuadType, ColorType colorType, GrQuad::Type localQuadType, - bool hasLocalCoords, Domain domain, GrAAType aa, bool coverageAsAlpha) + bool hasLocalCoords, Domain domain, GrAAType aa, bool coverageAsAlpha, + IndexBufferOption indexBufferOption) : fDeviceQuadType(static_cast(deviceQuadType)) , fLocalQuadType(static_cast(localQuadType)) + , fIndexBufferOption(static_cast(indexBufferOption)) , fHasLocalCoords(hasLocalCoords) , fColorType(static_cast(colorType)) , fHasDomain(static_cast(domain)) @@ -53,6 +79,9 @@ namespace GrQuadPerEdgeAA { GrQuad::Type deviceQuadType() const { return static_cast(fDeviceQuadType); } GrQuad::Type localQuadType() const { return static_cast(fLocalQuadType); } + IndexBufferOption indexBufferOption() const { + return static_cast(fIndexBufferOption); + } bool hasLocalCoords() const { return fHasLocalCoords; } ColorType colorType() const { return static_cast(fColorType); } bool hasVertexColors() const { return ColorType::kNone != this->colorType(); } @@ -70,12 +99,27 @@ namespace GrQuadPerEdgeAA { CoverageMode coverageMode() const; size_t vertexSize() const; + bool needsIndexBuffer() const { return this->indexBufferOption() != + IndexBufferOption::kTriStrips; } + + GrPrimitiveType primitiveType() const { + switch (this->indexBufferOption()) { + case IndexBufferOption::kPictureFramed: return GrPrimitiveType::kTriangles; + case IndexBufferOption::kIndexedRects: return GrPrimitiveType::kTriangles; + case IndexBufferOption::kTriStrips: return GrPrimitiveType::kTriangleStrip; + } + + SkUNREACHABLE; + } + private: static_assert(GrQuad::kTypeCount <= 4, "GrQuad::Type doesn't fit in 2 bits"); static_assert(kColorTypeCount <= 4, "Color doesn't fit in 2 bits"); + static_assert(kIndexBufferOptionCount <= 4, "IndexBufferOption doesn't fit in 2 bits"); unsigned fDeviceQuadType: 2; unsigned fLocalQuadType: 2; + unsigned fIndexBufferOption: 2; unsigned fHasLocalCoords: 1; unsigned fColorType : 2; unsigned fHasDomain: 1; @@ -86,35 +130,67 @@ namespace GrQuadPerEdgeAA { unsigned fRequiresGeometryDomain: 1; }; - sk_sp MakeProcessor(const VertexSpec& spec); + // A Tessellator is responsible for processing a series of device+local GrQuads into a VBO, + // as specified by a VertexSpec. This vertex data can then be processed by a GP created with + // MakeProcessor and/or MakeTexturedProcessor. + class Tessellator { + public: + explicit Tessellator(const VertexSpec& spec, char* vertices); - sk_sp MakeTexturedProcessor( - const VertexSpec& spec, const GrShaderCaps& caps, GrTextureType textureType, - const GrSamplerState& samplerState, const GrSwizzle& swizzle, uint32_t extraSamplerKey, - sk_sp textureColorSpaceXform, Saturate saturate); + // Calculates (as needed) inset and outset geometry for anti-aliasing, and appends all + // necessary position and vertex attributes required by this Tessellator's VertexSpec into + // the 'vertices' the Tessellator was called with. The insetting and outsetting may + // damage the provided GrQuads (as this is intended to work with GrQuadBuffer::Iter). + // 'localQuad' can be null if the VertexSpec does not use local coords. + void append(GrQuad* deviceQuad, GrQuad* localQuad, + const SkPMColor4f& color, const SkRect& uvDomain, GrQuadAAFlags aaFlags); - // Fill vertices with the vertex data needed to represent the given quad. The device position, - // local coords, vertex color, domain, and edge coefficients will be written and/or computed - // based on the configuration in the vertex spec; if that attribute is disabled in the spec, - // then its corresponding function argument is ignored. - // - // Tessellation is based on the quad type of the vertex spec, not the provided GrQuad's - // so that all quads in a batch are tessellated the same. - // - // Returns the advanced pointer in vertices. - void* Tessellate(void* vertices, const VertexSpec& spec, const GrQuad& deviceQuad, - const SkPMColor4f& color, const GrQuad& localQuad, const SkRect& domain, - GrQuadAAFlags aa); - - // The mesh will have its index data configured to meet the expectations of the Tessellate() - // function, but it the calling code must handle filling a vertex buffer via Tessellate() and - // then assigning it to the returned mesh. - // - // Returns false if the index data could not be allocated. - bool ConfigureMeshIndices(GrMeshDrawOp::Target* target, GrMesh* mesh, const VertexSpec& spec, - int quadCount); + SkDEBUGCODE(char* vertices() const { return (char*) fVertexWriter.fPtr; }) + + private: + // VertexSpec defines many unique ways to write vertex attributes, which can be handled + // generically by branching per-quad based on the VertexSpec. However, there are several + // specs that appear in the wild far more frequently, so they use explicit WriteQuadProcs + // that have no branches. + typedef void (*WriteQuadProc)(GrVertexWriter* vertices, const VertexSpec& spec, + const GrQuad* deviceQuad, const GrQuad* localQuad, + const float coverage[4], const SkPMColor4f& color, + const SkRect& geomDomain, const SkRect& texDomain); + static WriteQuadProc GetWriteQuadProc(const VertexSpec& spec); + + GrQuadUtils::TessellationHelper fAAHelper; + VertexSpec fVertexSpec; + GrVertexWriter fVertexWriter; + WriteQuadProc fWriteProc; + }; + + GrGeometryProcessor* MakeProcessor(SkArenaAlloc*, const VertexSpec&); - static constexpr int kNumAAQuadsInIndexBuffer = 512; + GrGeometryProcessor* MakeTexturedProcessor( + SkArenaAlloc*, const VertexSpec&, const GrShaderCaps&, const GrBackendFormat&, + const GrSamplerState&, const GrSwizzle&, + sk_sp textureColorSpaceXform, Saturate); + + // This method will return the correct index buffer for the specified indexBufferOption. + // It will, correctly, return nullptr if the indexBufferOption is kTriStrips. + sk_sp GetIndexBuffer(GrMeshDrawOp::Target*, IndexBufferOption); + + // What is the maximum number of quads allowed for the specified indexBuffer option? + int QuadLimit(IndexBufferOption); + + // This method will configure the vertex and index data of the provided 'mesh' to comply + // with the indexing method specified in the vertexSpec. It is up to the calling code + // to allocate and fill in the vertex data and acquire the correct indexBuffer if it is needed. + // + // @param runningQuadCount the number of quads already stored in 'vertexBuffer' and + // 'indexBuffer' e.g., different GrMeshes have already been placed in + // the buffers to allow dynamic state changes. + // @param quadCount the number of quads that will be drawn by the provided 'mesh'. + // A subsequent ConfigureMesh call would the use + // 'runningQuadCount' + 'quadCount' for its new 'runningQuadCount'. + void ConfigureMesh(const GrCaps&, GrMesh*, const VertexSpec&, int runningQuadCount, + int quadCount, int maxVerts, sk_sp vertexBuffer, + sk_sp indexBuffer, int absVertBufferOffset); } // namespace GrQuadPerEdgeAA diff --git a/third_party/skia/src/gpu/ops/GrRegionOp.cpp b/third_party/skia/src/gpu/ops/GrRegionOp.cpp index 6d48a339fa04..cc78057a499b 100644 --- a/third_party/skia/src/gpu/ops/GrRegionOp.cpp +++ b/third_party/skia/src/gpu/ops/GrRegionOp.cpp @@ -18,16 +18,14 @@ #include "src/gpu/ops/GrMeshDrawOp.h" #include "src/gpu/ops/GrSimpleMeshDrawOpHelper.h" -static const int kVertsPerInstance = 4; -static const int kIndicesPerInstance = 6; - -static sk_sp make_gp(const GrShaderCaps* shaderCaps, - const SkMatrix& viewMatrix, - bool wideColor) { +static GrGeometryProcessor* make_gp(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + const SkMatrix& viewMatrix, + bool wideColor) { using namespace GrDefaultGeoProcFactory; - Color::Type colorType = - wideColor ? Color::kPremulWideColorAttribute_Type : Color::kPremulGrColorAttribute_Type; - return GrDefaultGeoProcFactory::Make(shaderCaps, colorType, Coverage::kSolid_Type, + Color::Type colorType = wideColor ? Color::kPremulWideColorAttribute_Type + : Color::kPremulGrColorAttribute_Type; + return GrDefaultGeoProcFactory::Make(arena, shaderCaps, colorType, Coverage::kSolid_Type, LocalCoords::kUsePosition_Type, viewMatrix); } @@ -97,8 +95,8 @@ class RegionOp final : public GrMeshDrawOp { private: void onPrepareDraws(Target* target) override { - sk_sp gp = make_gp(target->caps().shaderCaps(), fViewMatrix, - fWideColor); + GrGeometryProcessor* gp = make_gp(target->allocator(), target->caps().shaderCaps(), + fViewMatrix, fWideColor); if (!gp) { SkDebugf("Couldn't create GrGeometryProcessor\n"); return; @@ -113,14 +111,9 @@ class RegionOp final : public GrMeshDrawOp { if (!numRects) { return; } - sk_sp indexBuffer = target->resourceProvider()->refQuadIndexBuffer(); - if (!indexBuffer) { - SkDebugf("Could not allocate indices\n"); - return; - } - PatternHelper helper(target, GrPrimitiveType::kTriangles, gp->vertexStride(), - std::move(indexBuffer), kVertsPerInstance, kIndicesPerInstance, - numRects); + + QuadHelper helper(target, gp->vertexStride(), numRects); + GrVertexWriter vertices{helper.vertices()}; if (!vertices.fPtr) { SkDebugf("Could not allocate vertices\n"); @@ -136,7 +129,7 @@ class RegionOp final : public GrMeshDrawOp { iter.next(); } } - helper.recordDraw(target, std::move(gp)); + helper.recordDraw(target, gp); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { diff --git a/third_party/skia/src/gpu/ops/GrShadowRRectOp.cpp b/third_party/skia/src/gpu/ops/GrShadowRRectOp.cpp index 546933bb8a46..d8999546d2bd 100644 --- a/third_party/skia/src/gpu/ops/GrShadowRRectOp.cpp +++ b/third_party/skia/src/gpu/ops/GrShadowRRectOp.cpp @@ -12,6 +12,7 @@ #include "src/gpu/GrDrawOpTest.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrOpFlushState.h" +#include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/effects/GrShadowGeoProc.h" @@ -189,8 +190,10 @@ class ShadowCircularRRectOp final : public GrMeshDrawOp { // An insetWidth > 1/2 rect width or height indicates a simple fill. ShadowCircularRRectOp(GrColor color, const SkRect& devRect, - float devRadius, bool isCircle, float blurRadius, float insetWidth) - : INHERITED(ClassID()) { + float devRadius, bool isCircle, float blurRadius, float insetWidth, + sk_sp falloffProxy) + : INHERITED(ClassID()) + , fFalloffProxy(falloffProxy) { SkRect bounds = devRect; SkASSERT(insetWidth > 0); SkScalar innerRadius = 0.0f; @@ -536,7 +539,8 @@ class ShadowCircularRRectOp final : public GrMeshDrawOp { void onPrepareDraws(Target* target) override { // Setup geometry processor - sk_sp gp = GrRRectShadowGeoProc::Make(); + GrGeometryProcessor* gp = GrRRectShadowGeoProc::Make(target->allocator(), + fFalloffProxy.get()); int instanceCount = fGeoData.count(); SkASSERT(sizeof(CircleVertex) == gp->vertexStride()); @@ -587,11 +591,14 @@ class ShadowCircularRRectOp final : public GrMeshDrawOp { } } + auto fixedDynamicState = target->makeFixedDynamicState(1); + fixedDynamicState->fPrimitiveProcessorTextures[0] = fFalloffProxy.get(); + GrMesh* mesh = target->allocMesh(GrPrimitiveType::kTriangles); mesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertCount - 1, GrPrimitiveRestart::kNo); mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(gp), mesh); + target->recordDraw(gp, mesh, 1, fixedDynamicState, nullptr, GrPrimitiveType::kTriangles); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -607,9 +614,14 @@ class ShadowCircularRRectOp final : public GrMeshDrawOp { return CombineResult::kMerged; } + void visitProxies(const VisitProxyFunc& func) const override { + func(fFalloffProxy.get(), GrMipMapped(false)); + } + SkSTArray<1, Geometry, true> fGeoData; int fVertCount; int fIndexCount; + sk_sp fFalloffProxy; typedef GrMeshDrawOp INHERITED; }; @@ -619,6 +631,49 @@ class ShadowCircularRRectOp final : public GrMeshDrawOp { /////////////////////////////////////////////////////////////////////////////// namespace GrShadowRRectOp { + +static sk_sp create_falloff_texture(GrProxyProvider* proxyProvider) { + static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); + GrUniqueKey key; + GrUniqueKey::Builder builder(&key, kDomain, 0, "Shadow Gaussian Falloff"); + builder.finish(); + + sk_sp falloffTexture = proxyProvider->findOrCreateProxyByUniqueKey( + key, GrColorType::kAlpha_8, kTopLeft_GrSurfaceOrigin); + if (!falloffTexture) { + static const int kWidth = 128; + static const size_t kRowBytes = kWidth*GrColorTypeBytesPerPixel(GrColorType::kAlpha_8); + SkImageInfo ii = SkImageInfo::MakeA8(kWidth, 1); + + sk_sp data = SkData::MakeUninitialized(kRowBytes); + if (!data) { + return nullptr; + } + unsigned char* values = (unsigned char*) data->writable_data(); + for (int i = 0; i < 128; ++i) { + SkScalar d = SK_Scalar1 - i/SkIntToScalar(127); + values[i] = SkScalarRoundToInt((SkScalarExp(-4*d*d) - 0.018f)*255); + } + + sk_sp img = SkImage::MakeRasterData(ii, std::move(data), kRowBytes); + if (!img) { + return nullptr; + } + + falloffTexture = proxyProvider->createTextureProxy(std::move(img), 1, SkBudgeted::kYes, + SkBackingFit::kExact); + if (!falloffTexture) { + return nullptr; + } + + SkASSERT(falloffTexture->origin() == kTopLeft_GrSurfaceOrigin); + proxyProvider->assignUniqueKeyToProxy(key, falloffTexture.get()); + } + + return falloffTexture; +} + + std::unique_ptr Make(GrRecordingContext* context, GrColor color, const SkMatrix& viewMatrix, @@ -628,6 +683,11 @@ std::unique_ptr Make(GrRecordingContext* context, // Shadow rrect ops only handle simple circular rrects. SkASSERT(viewMatrix.isSimilarity() && SkRRectPriv::EqualRadii(rrect)); + sk_sp falloffTexture = create_falloff_texture(context->priv().proxyProvider()); + if (!falloffTexture) { + return nullptr; + } + // Do any matrix crunching before we reset the draw state for device coords. const SkRect& rrectBounds = rrect.getBounds(); SkRect bounds; @@ -649,7 +709,8 @@ std::unique_ptr Make(GrRecordingContext* context, scaledRadius, rrect.isOval(), blurWidth, - scaledInsetWidth); + scaledInsetWidth, + std::move(falloffTexture)); } } @@ -658,35 +719,42 @@ std::unique_ptr Make(GrRecordingContext* context, #if GR_TEST_UTILS GR_DRAW_OP_TEST_DEFINE(ShadowRRectOp) { - // create a similarity matrix - SkScalar rotate = random->nextSScalar1() * 360.f; - SkScalar translateX = random->nextSScalar1() * 1000.f; - SkScalar translateY = random->nextSScalar1() * 1000.f; - SkScalar scale; + // We may choose matrix and inset values that cause the factory to fail. We loop until we find + // an acceptable combination. do { - scale = random->nextSScalar1() * 100.f; - } while (scale == 0); - SkMatrix viewMatrix; - viewMatrix.setRotate(rotate); - viewMatrix.postTranslate(translateX, translateY); - viewMatrix.postScale(scale, scale); - SkScalar insetWidth = random->nextSScalar1() * 72.f; - SkScalar blurWidth = random->nextSScalar1() * 72.f; - bool isCircle = random->nextBool(); - // This op doesn't use a full GrPaint, just a color. - GrColor color = paint.getColor4f().toBytes_RGBA(); - if (isCircle) { - SkRect circle = GrTest::TestSquare(random); - SkRRect rrect = SkRRect::MakeOval(circle); - return GrShadowRRectOp::Make(context, color, viewMatrix, rrect, blurWidth, insetWidth); - } else { - SkRRect rrect; - do { - // This may return a rrect with elliptical corners, which we don't support. - rrect = GrTest::TestRRectSimple(random); - } while (!SkRRectPriv::IsSimpleCircular(rrect)); - return GrShadowRRectOp::Make(context, color, viewMatrix, rrect, blurWidth, insetWidth); - } + // create a similarity matrix + SkScalar rotate = random->nextSScalar1() * 360.f; + SkScalar translateX = random->nextSScalar1() * 1000.f; + SkScalar translateY = random->nextSScalar1() * 1000.f; + SkScalar scale = random->nextSScalar1() * 100.f; + SkMatrix viewMatrix; + viewMatrix.setRotate(rotate); + viewMatrix.postTranslate(translateX, translateY); + viewMatrix.postScale(scale, scale); + SkScalar insetWidth = random->nextSScalar1() * 72.f; + SkScalar blurWidth = random->nextSScalar1() * 72.f; + bool isCircle = random->nextBool(); + // This op doesn't use a full GrPaint, just a color. + GrColor color = paint.getColor4f().toBytes_RGBA(); + if (isCircle) { + SkRect circle = GrTest::TestSquare(random); + SkRRect rrect = SkRRect::MakeOval(circle); + if (auto op = GrShadowRRectOp::Make( + context, color, viewMatrix, rrect, blurWidth, insetWidth)) { + return op; + } + } else { + SkRRect rrect; + do { + // This may return a rrect with elliptical corners, which will cause an assert. + rrect = GrTest::TestRRectSimple(random); + } while (!SkRRectPriv::IsSimpleCircular(rrect)); + if (auto op = GrShadowRRectOp::Make( + context, color, viewMatrix, rrect, blurWidth, insetWidth)) { + return op; + } + } + } while (true); } #endif diff --git a/third_party/skia/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp b/third_party/skia/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp index 3c10b8bfd41f..6d6808e4bf8e 100644 --- a/third_party/skia/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp +++ b/third_party/skia/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp @@ -37,14 +37,9 @@ GrDrawOp::FixedFunctionFlags GrSimpleMeshDrawOpHelper::fixedFunctionFlags() cons : GrDrawOp::FixedFunctionFlags::kNone; } -static bool none_as_coverage_aa_compatible(GrAAType aa1, GrAAType aa2) { - return (aa1 == GrAAType::kNone && aa2 == GrAAType::kCoverage) || - (aa1 == GrAAType::kCoverage && aa2 == GrAAType::kNone); -} - bool GrSimpleMeshDrawOpHelper::isCompatible(const GrSimpleMeshDrawOpHelper& that, const GrCaps& caps, const SkRect& thisBounds, - const SkRect& thatBounds, bool noneAsCoverageAA) const { + const SkRect& thatBounds, bool ignoreAAType) const { if (SkToBool(fProcessors) != SkToBool(that.fProcessors)) { return false; } @@ -53,8 +48,18 @@ bool GrSimpleMeshDrawOpHelper::isCompatible(const GrSimpleMeshDrawOpHelper& that return false; } } - bool result = fPipelineFlags == that.fPipelineFlags && (fAAType == that.fAAType || - (noneAsCoverageAA && none_as_coverage_aa_compatible(this->aaType(), that.aaType()))); + +#ifdef SK_DEBUG + if (ignoreAAType) { + // If we're ignoring AA it should be bc we already know they are the same or that + // the are different but are compatible (i.e., one is AA and the other is None) + SkASSERT(fAAType == that.fAAType || + GrMeshDrawOp::CanUpgradeAAOnMerge(this->aaType(), that.aaType())); + } +#endif + + bool result = fPipelineFlags == that.fPipelineFlags && + (ignoreAAType || fAAType == that.fAAType); SkASSERT(!result || fCompatibleWithCoverageAsAlpha == that.fCompatibleWithCoverageAsAlpha); SkASSERT(!result || fUsesLocalCoords == that.fUsesLocalCoords); return result; @@ -69,7 +74,7 @@ GrProcessorSet::Analysis GrSimpleMeshDrawOpHelper::finalizeProcessors( caps, clip, hasMixedSampledCoverage, clampType, geometryCoverage, &color); color.isConstant(geometryColor); if (wideColor) { - *wideColor = SkPMColor4fNeedsWideColor(*geometryColor, clampType, caps); + *wideColor = !geometryColor->fitsInBytes(); } return result; } @@ -169,15 +174,15 @@ GrProcessorSet::Analysis GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors caps, clip, hasMixedSampledCoverage, clampType, geometryCoverage, &color); color.isConstant(geometryColor); if (wideColor) { - *wideColor = SkPMColor4fNeedsWideColor(*geometryColor, clampType, caps); + *wideColor = !geometryColor->fitsInBytes(); } return result; } bool GrSimpleMeshDrawOpHelperWithStencil::isCompatible( const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps& caps, - const SkRect& thisBounds, const SkRect& thatBounds, bool noneAsCoverageAA) const { - return INHERITED::isCompatible(that, caps, thisBounds, thatBounds, noneAsCoverageAA) && + const SkRect& thisBounds, const SkRect& thatBounds, bool ignoreAAType) const { + return INHERITED::isCompatible(that, caps, thisBounds, thatBounds, ignoreAAType) && fStencilSettings == that.fStencilSettings; } diff --git a/third_party/skia/src/gpu/ops/GrSimpleMeshDrawOpHelper.h b/third_party/skia/src/gpu/ops/GrSimpleMeshDrawOpHelper.h index 35bf3cc86fe3..f1847695fc24 100644 --- a/third_party/skia/src/gpu/ops/GrSimpleMeshDrawOpHelper.h +++ b/third_party/skia/src/gpu/ops/GrSimpleMeshDrawOpHelper.h @@ -54,10 +54,9 @@ class GrSimpleMeshDrawOpHelper { GrDrawOp::FixedFunctionFlags fixedFunctionFlags() const; - // noneAACompatibleWithCoverage should be set to true if the op can properly render a non-AA - // primitive merged into a coverage-based op. + // ignoreAAType should be set to true if the op already knows the AA settings are acceptible bool isCompatible(const GrSimpleMeshDrawOpHelper& that, const GrCaps&, const SkRect& thisBounds, - const SkRect& thatBounds, bool noneAACompatibleWithCoverage = false) const; + const SkRect& thatBounds, bool ignoreAAType = false) const; /** * Finalizes the processor set and determines whether the destination must be provided @@ -120,7 +119,7 @@ class GrSimpleMeshDrawOpHelper { GrAAType aaType() const { return static_cast(fAAType); } void setAAType(GrAAType aaType) { - fAAType = static_cast(aaType); + fAAType = static_cast(aaType); } void executeDrawsAndUploads(const GrOp*, GrOpFlushState*, const SkRect& chainBounds); @@ -189,7 +188,7 @@ class GrSimpleMeshDrawOpHelperWithStencil : private GrSimpleMeshDrawOpHelper { bool isCompatible(const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps&, const SkRect& thisBounds, const SkRect& thatBounds, - bool noneAACompatibleWithCoverage = false) const; + bool ignoreAAType = false) const; void executeDrawsAndUploads(const GrOp*, GrOpFlushState*, const SkRect& chainBounds); diff --git a/third_party/skia/src/gpu/ops/GrSmallPathRenderer.cpp b/third_party/skia/src/gpu/ops/GrSmallPathRenderer.cpp index b65cb423eef9..742aa58436bb 100644 --- a/third_party/skia/src/gpu/ops/GrSmallPathRenderer.cpp +++ b/third_party/skia/src/gpu/ops/GrSmallPathRenderer.cpp @@ -309,7 +309,7 @@ class GrSmallPathRenderer::SmallPathOp final : public GrMeshDrawOp { struct FlushInfo { sk_sp fVertexBuffer; sk_sp fIndexBuffer; - sk_sp fGeometryProcessor; + GrGeometryProcessor* fGeometryProcessor; GrPipeline::FixedDynamicState* fFixedDynamicState; int fVertexOffset; int fInstancesToFlush; @@ -353,7 +353,7 @@ class GrSmallPathRenderer::SmallPathOp final : public GrMeshDrawOp { } else { matrix = &SkMatrix::I(); } - flushInfo.fGeometryProcessor = GrDistanceFieldPathGeoProc::Make( + flushInfo.fGeometryProcessor = GrDistanceFieldPathGeoProc::Make(target->allocator(), *target->caps().shaderCaps(), *matrix, fWideColor, fAtlas->getProxies(), fAtlas->numActivePages(), GrSamplerState::ClampBilerp(), flags); } else { @@ -364,7 +364,7 @@ class GrSmallPathRenderer::SmallPathOp final : public GrMeshDrawOp { } } - flushInfo.fGeometryProcessor = GrBitmapTextGeoProc::Make( + flushInfo.fGeometryProcessor = GrBitmapTextGeoProc::Make(target->allocator(), *target->caps().shaderCaps(), this->color(), fWideColor, fAtlas->getProxies(), fAtlas->numActivePages(), GrSamplerState::ClampNearest(), kA8_GrMaskFormat, invert, false); @@ -375,14 +375,14 @@ class GrSmallPathRenderer::SmallPathOp final : public GrMeshDrawOp { // We need to make sure we don't overflow a 32 bit int when we request space in the // makeVertexSpace call below. - if (instanceCount > SK_MaxS32 / kVerticesPerQuad) { + if (instanceCount > SK_MaxS32 / GrResourceProvider::NumVertsPerNonAAQuad()) { return; } - GrVertexWriter vertices{target->makeVertexSpace(kVertexStride, - kVerticesPerQuad * instanceCount, - &flushInfo.fVertexBuffer, - &flushInfo.fVertexOffset)}; - flushInfo.fIndexBuffer = target->resourceProvider()->refQuadIndexBuffer(); + GrVertexWriter vertices{ target->makeVertexSpace( + kVertexStride, GrResourceProvider::NumVertsPerNonAAQuad() * instanceCount, + &flushInfo.fVertexBuffer, &flushInfo.fVertexOffset)}; + + flushInfo.fIndexBuffer = target->resourceProvider()->refNonAAQuadIndexBuffer(); if (!vertices.fPtr || !flushInfo.fIndexBuffer) { SkDebugf("Could not allocate vertices\n"); return; @@ -774,7 +774,7 @@ class GrSmallPathRenderer::SmallPathOp final : public GrMeshDrawOp { } void flush(GrMeshDrawOp::Target* target, FlushInfo* flushInfo) const { - GrGeometryProcessor* gp = flushInfo->fGeometryProcessor.get(); + GrGeometryProcessor* gp = flushInfo->fGeometryProcessor; int numAtlasTextures = SkToInt(fAtlas->numActivePages()); auto proxies = fAtlas->getProxies(); if (gp->numTextureSamplers() != numAtlasTextures) { @@ -797,14 +797,16 @@ class GrSmallPathRenderer::SmallPathOp final : public GrMeshDrawOp { if (flushInfo->fInstancesToFlush) { GrMesh* mesh = target->allocMesh(GrPrimitiveType::kTriangles); - int maxInstancesPerDraw = - static_cast(flushInfo->fIndexBuffer->size() / sizeof(uint16_t) / 6); - mesh->setIndexedPatterned(flushInfo->fIndexBuffer, kIndicesPerQuad, kVerticesPerQuad, - flushInfo->fInstancesToFlush, maxInstancesPerDraw); + mesh->setIndexedPatterned(flushInfo->fIndexBuffer, + GrResourceProvider::NumIndicesPerNonAAQuad(), + GrResourceProvider::NumVertsPerNonAAQuad(), + flushInfo->fInstancesToFlush, + GrResourceProvider::MaxNumNonAAQuads()); mesh->setVertexData(flushInfo->fVertexBuffer, flushInfo->fVertexOffset); - target->recordDraw( - flushInfo->fGeometryProcessor, mesh, 1, flushInfo->fFixedDynamicState, nullptr); - flushInfo->fVertexOffset += kVerticesPerQuad * flushInfo->fInstancesToFlush; + target->recordDraw(flushInfo->fGeometryProcessor, mesh, 1, + flushInfo->fFixedDynamicState, nullptr, GrPrimitiveType::kTriangles); + flushInfo->fVertexOffset += GrResourceProvider::NumVertsPerNonAAQuad() * + flushInfo->fInstancesToFlush; flushInfo->fInstancesToFlush = 0; } } diff --git a/third_party/skia/src/gpu/ops/GrStencilPathOp.cpp b/third_party/skia/src/gpu/ops/GrStencilPathOp.cpp index 1cfd8ff04a8c..18fb37cea60c 100644 --- a/third_party/skia/src/gpu/ops/GrStencilPathOp.cpp +++ b/third_party/skia/src/gpu/ops/GrStencilPathOp.cpp @@ -27,7 +27,7 @@ std::unique_ptr GrStencilPathOp::Make(GrRecordingContext* context, } void GrStencilPathOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) { - GrRenderTarget* rt = state->drawOpArgs().renderTarget(); + GrRenderTarget* rt = state->drawOpArgs().proxy()->peekRenderTarget(); SkASSERT(rt); int numStencilBits = rt->renderTargetPriv().numStencilBits(); diff --git a/third_party/skia/src/gpu/ops/GrStrokeRectOp.cpp b/third_party/skia/src/gpu/ops/GrStrokeRectOp.cpp index 439a7c7dcc35..6c95eae1d8d8 100644 --- a/third_party/skia/src/gpu/ops/GrStrokeRectOp.cpp +++ b/third_party/skia/src/gpu/ops/GrStrokeRectOp.cpp @@ -176,15 +176,15 @@ class NonAAStrokeRectOp final : public GrMeshDrawOp { private: void onPrepareDraws(Target* target) override { - sk_sp gp; + GrGeometryProcessor* gp; { using namespace GrDefaultGeoProcFactory; Color color(fColor); LocalCoords::Type localCoordsType = fHelper.usesLocalCoords() ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type; - gp = GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(), color, - Coverage::kSolid_Type, localCoordsType, + gp = GrDefaultGeoProcFactory::Make(target->allocator(), target->caps().shaderCaps(), + color, Coverage::kSolid_Type, localCoordsType, fViewMatrix); } @@ -224,7 +224,7 @@ class NonAAStrokeRectOp final : public GrMeshDrawOp { GrMesh* mesh = target->allocMesh(primType); mesh->setNonIndexedNonInstanced(vertexCount); mesh->setVertexData(std::move(vertexBuffer), firstVertex); - target->recordDraw(std::move(gp), mesh); + target->recordDraw(gp, mesh, 1, primType); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { @@ -304,11 +304,12 @@ static void compute_aa_rects(SkRect* devOutside, SkRect* devOutsideAssist, SkRec } } -static sk_sp create_aa_stroke_rect_gp(const GrShaderCaps* shaderCaps, - bool tweakAlphaForCoverage, - const SkMatrix& viewMatrix, - bool usesLocalCoords, - bool wideColor) { +static GrGeometryProcessor* create_aa_stroke_rect_gp(SkArenaAlloc* arena, + const GrShaderCaps* shaderCaps, + bool tweakAlphaForCoverage, + const SkMatrix& viewMatrix, + bool usesLocalCoords, + bool wideColor) { using namespace GrDefaultGeoProcFactory; Coverage::Type coverageType = @@ -318,7 +319,8 @@ static sk_sp create_aa_stroke_rect_gp(const GrShaderCaps* s Color::Type colorType = wideColor ? Color::kPremulWideColorAttribute_Type: Color::kPremulGrColorAttribute_Type; - return MakeForDeviceSpace(shaderCaps, colorType, coverageType, localCoordsType, viewMatrix); + return MakeForDeviceSpace(arena, shaderCaps, colorType, coverageType, + localCoordsType, viewMatrix); } class AAStrokeRectOp final : public GrMeshDrawOp { @@ -469,11 +471,12 @@ class AAStrokeRectOp final : public GrMeshDrawOp { }; void AAStrokeRectOp::onPrepareDraws(Target* target) { - sk_sp gp(create_aa_stroke_rect_gp(target->caps().shaderCaps(), - fHelper.compatibleWithCoverageAsAlpha(), - this->viewMatrix(), - fHelper.usesLocalCoords(), - fWideColor)); + GrGeometryProcessor* gp = create_aa_stroke_rect_gp(target->allocator(), + target->caps().shaderCaps(), + fHelper.compatibleWithCoverageAsAlpha(), + this->viewMatrix(), + fHelper.usesLocalCoords(), + fWideColor); if (!gp) { SkDebugf("Couldn't create GrGeometryProcessor\n"); return; @@ -484,6 +487,7 @@ void AAStrokeRectOp::onPrepareDraws(Target* target) { int verticesPerInstance = (outerVertexNum + innerVertexNum) * 2; int indicesPerInstance = this->miterStroke() ? kMiterIndexCnt : kBevelIndexCnt; int instanceCount = fRects.count(); + int maxQuads = this->miterStroke() ? kNumMiterRectsInIndexBuffer : kNumBevelRectsInIndexBuffer; sk_sp indexBuffer = GetIndexBuffer(target->resourceProvider(), this->miterStroke()); @@ -493,7 +497,7 @@ void AAStrokeRectOp::onPrepareDraws(Target* target) { } PatternHelper helper(target, GrPrimitiveType::kTriangles, gp->vertexStride(), std::move(indexBuffer), verticesPerInstance, indicesPerInstance, - instanceCount); + instanceCount, maxQuads); GrVertexWriter vertices{ helper.vertices() }; if (!vertices.fPtr) { SkDebugf("Could not allocate vertices\n"); @@ -512,7 +516,7 @@ void AAStrokeRectOp::onPrepareDraws(Target* target) { info.fDegenerate, fHelper.compatibleWithCoverageAsAlpha()); } - helper.recordDraw(target, std::move(gp)); + helper.recordDraw(target, gp); } void AAStrokeRectOp::onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) { diff --git a/third_party/skia/src/gpu/ops/GrTessellatingPathRenderer.cpp b/third_party/skia/src/gpu/ops/GrTessellatingPathRenderer.cpp index 8ec223d60470..ba1e853daedd 100644 --- a/third_party/skia/src/gpu/ops/GrTessellatingPathRenderer.cpp +++ b/third_party/skia/src/gpu/ops/GrTessellatingPathRenderer.cpp @@ -255,7 +255,7 @@ class TessellatingPathOp final : public GrMeshDrawOp { return path; } - void draw(Target* target, sk_sp gp, size_t vertexStride) { + void draw(Target* target, const GrGeometryProcessor* gp, size_t vertexStride) { SkASSERT(!fAntiAlias); GrResourceProvider* rp = target->resourceProvider(); bool inverseFill = fShape.inverseFilled(); @@ -279,8 +279,7 @@ class TessellatingPathOp final : public GrMeshDrawOp { SkScalar tol = GrPathUtils::kDefaultTolerance; tol = GrPathUtils::scaleToleranceToSrc(tol, fViewMatrix, fShape.bounds()); if (cache_match(cachedVertexBuffer.get(), tol, &actualCount)) { - this->drawVertices(target, std::move(gp), std::move(cachedVertexBuffer), 0, - actualCount); + this->drawVertices(target, gp, std::move(cachedVertexBuffer), 0, actualCount); return; } @@ -307,10 +306,10 @@ class TessellatingPathOp final : public GrMeshDrawOp { key.setCustomData(SkData::MakeWithCopy(&info, sizeof(info))); rp->assignUniqueKeyToResource(key, vb.get()); - this->drawVertices(target, std::move(gp), std::move(vb), 0, count); + this->drawVertices(target, gp, std::move(vb), 0, count); } - void drawAA(Target* target, sk_sp gp, size_t vertexStride) { + void drawAA(Target* target, const GrGeometryProcessor* gp, size_t vertexStride) { SkASSERT(fAntiAlias); SkPath path = getPath(); if (path.isEmpty()) { @@ -326,12 +325,12 @@ class TessellatingPathOp final : public GrMeshDrawOp { if (count == 0) { return; } - this->drawVertices(target, std::move(gp), allocator.detachVertexBuffer(), + this->drawVertices(target, gp, allocator.detachVertexBuffer(), allocator.firstVertex(), count); } void onPrepareDraws(Target* target) override { - sk_sp gp; + GrGeometryProcessor* gp; { using namespace GrDefaultGeoProcFactory; @@ -350,40 +349,43 @@ class TessellatingPathOp final : public GrMeshDrawOp { coverageType = Coverage::kSolid_Type; } if (fAntiAlias) { - gp = GrDefaultGeoProcFactory::MakeForDeviceSpace(target->caps().shaderCaps(), + gp = GrDefaultGeoProcFactory::MakeForDeviceSpace(target->allocator(), + target->caps().shaderCaps(), color, coverageType, localCoordsType, fViewMatrix); } else { - gp = GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(), + gp = GrDefaultGeoProcFactory::Make(target->allocator(), target->caps().shaderCaps(), color, coverageType, localCoordsType, fViewMatrix); } } - if (!gp.get()) { + if (!gp) { return; } size_t vertexStride = gp->vertexStride(); if (fAntiAlias) { - this->drawAA(target, std::move(gp), vertexStride); + this->drawAA(target, gp, vertexStride); } else { - this->draw(target, std::move(gp), vertexStride); + this->draw(target, gp, vertexStride); } } - void drawVertices(Target* target, sk_sp gp, sk_sp vb, + void drawVertices(Target* target, const GrGeometryProcessor* gp, sk_sp vb, int firstVertex, int count) { - GrMesh* mesh = target->allocMesh(TESSELLATOR_WIREFRAME ? GrPrimitiveType::kLines - : GrPrimitiveType::kTriangles); + GrPrimitiveType primitiveType = TESSELLATOR_WIREFRAME ? GrPrimitiveType::kLines + : GrPrimitiveType::kTriangles; + + GrMesh* mesh = target->allocMesh(primitiveType); mesh->setNonIndexedNonInstanced(count); mesh->setVertexData(std::move(vb), firstVertex); - target->recordDraw(std::move(gp), mesh); + target->recordDraw(gp, mesh, 1, primitiveType); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { fHelper.executeDrawsAndUploads(this, flushState, chainBounds); } - Helper fHelper; + Helper fHelper; SkPMColor4f fColor; GrShape fShape; SkMatrix fViewMatrix; diff --git a/third_party/skia/src/gpu/ops/GrTextureOp.cpp b/third_party/skia/src/gpu/ops/GrTextureOp.cpp index bd4673e26a79..b67399d4a286 100644 --- a/third_party/skia/src/gpu/ops/GrTextureOp.cpp +++ b/third_party/skia/src/gpu/ops/GrTextureOp.cpp @@ -91,50 +91,86 @@ static bool filter_has_effect(const GrQuad& srcQuad, const GrQuad& dstQuad) { } } -// if normalizing the domain then pass 1/width, 1/height, 1 for iw, ih, h. Otherwise pass -// 1, 1, and height. -static void compute_domain(Domain domain, GrSamplerState::Filter filter, GrSurfaceOrigin origin, - const SkRect& domainRect, float iw, float ih, float h, SkRect* out) { +// Describes function for normalizing src coords: [x * iw, y * ih + yOffset] can represent +// regular and rectangular textures, w/ or w/o origin correction. +struct NormalizationParams { + float fIW; // 1 / width of texture, or 1.0 for texture rectangles + float fIH; // 1 / height of texture, or 1.0 for tex rects, X -1 if bottom-left origin + float fYOffset; // 0 for top-left origin, height of [normalized] tex if bottom-left +}; +static NormalizationParams proxy_normalization_params(const GrSurfaceProxy* proxy, + GrSurfaceOrigin origin) { + // Whether or not the proxy is instantiated, this is the size its texture will be, so we can + // normalize the src coordinates up front. + SkISize dimensions = proxy->backingStoreDimensions(); + float iw, ih, h; + if (proxy->backendFormat().textureType() == GrTextureType::kRectangle) { + iw = ih = 1.f; + h = dimensions.height(); + } else { + iw = 1.f / dimensions.width(); + ih = 1.f / dimensions.height(); + h = 1.f; + } + + if (origin == kBottomLeft_GrSurfaceOrigin) { + return {iw, -ih, h}; + } else { + return {iw, ih, 0.0f}; + } +} + +static void correct_domain_for_bilerp(const NormalizationParams& params, + SkRect* domainRect) { + // Normalized pixel size is also equal to iw and ih, so the insets for bilerp are just + // in those units and can be applied safely after normalization. However, if the domain is + // smaller than a texel, it should clamp to the center of that axis. + float dw = domainRect->width() < params.fIW ? domainRect->width() : params.fIW; + float dh = domainRect->height() < params.fIH ? domainRect->height() : params.fIH; + domainRect->inset(0.5f * dw, 0.5f * dh); +} + +// Normalize the domain and inset for bilerp as necessary. If 'domainRect' is null, it is assumed +// no domain constraint is desired, so a sufficiently large rect is returned even if the quad +// ends up batched with an op that uses domains overall. +static SkRect normalize_domain(GrSamplerState::Filter filter, + const NormalizationParams& params, + const SkRect* domainRect) { static constexpr SkRect kLargeRect = {-100000, -100000, 1000000, 1000000}; - if (domain == Domain::kNo) { + if (!domainRect) { // Either the quad has no domain constraint and is batched with a domain constrained op // (in which case we want a domain that doesn't restrict normalized tex coords), or the // entire op doesn't use the domain, in which case the returned value is ignored. - *out = kLargeRect; - return; + return kLargeRect; } - auto ltrb = Sk4f::Load(&domainRect); - if (filter == GrSamplerState::Filter::kBilerp) { - auto rblt = SkNx_shuffle<2, 3, 0, 1>(ltrb); - auto whwh = (rblt - ltrb).abs(); - auto c = (rblt + ltrb) * 0.5f; - static const Sk4f kOffsets = {0.5f, 0.5f, -0.5f, -0.5f}; - ltrb = (whwh < 1.f).thenElse(c, ltrb + kOffsets); - } - ltrb *= Sk4f(iw, ih, iw, ih); - if (origin == kBottomLeft_GrSurfaceOrigin) { - static const Sk4f kMul = {1.f, -1.f, 1.f, -1.f}; - const Sk4f kAdd = {0.f, h, 0.f, h}; - ltrb = SkNx_shuffle<0, 3, 2, 1>(kMul * ltrb + kAdd); + auto ltrb = skvx::Vec<4, float>::Load(domainRect); + // Normalize and offset + ltrb = mad(ltrb, {params.fIW, params.fIH, params.fIW, params.fIH}, + {0.f, params.fYOffset, 0.f, params.fYOffset}); + if (params.fIH < 0.f) { + // Flip top and bottom to keep the rect sorted when loaded back to SkRect. + ltrb = skvx::shuffle<0, 3, 2, 1>(ltrb); } - ltrb.store(out); + SkRect out; + ltrb.store(&out); + + if (filter != GrSamplerState::Filter::kNearest) { + correct_domain_for_bilerp(params, &out); + } + return out; } // Normalizes logical src coords and corrects for origin -static void compute_src_quad(GrSurfaceOrigin origin, const GrQuad& srcQuad, - float iw, float ih, float h, GrQuad* out) { +static void normalize_src_quad(const NormalizationParams& params, + GrQuad* srcQuad) { // The src quad should not have any perspective - SkASSERT(!srcQuad.hasPerspective() && !out->hasPerspective()); - skvx::Vec<4, float> xs = srcQuad.x4f() * iw; - skvx::Vec<4, float> ys = srcQuad.y4f() * ih; - if (origin == kBottomLeft_GrSurfaceOrigin) { - ys = h - ys; - } - xs.store(out->xs()); - ys.store(out->ys()); - out->setQuadType(srcQuad.quadType()); + SkASSERT(!srcQuad->hasPerspective()); + skvx::Vec<4, float> xs = srcQuad->x4f() * params.fIW; + skvx::Vec<4, float> ys = mad(srcQuad->y4f(), params.fIH, params.fYOffset); + xs.store(srcQuad->xs()); + ys.store(srcQuad->ys()); } /** @@ -144,7 +180,7 @@ static void compute_src_quad(GrSurfaceOrigin origin, const GrQuad& srcQuad, class TextureOp final : public GrMeshDrawOp { public: static std::unique_ptr Make(GrRecordingContext* context, - sk_sp proxy, + GrSurfaceProxyView proxyView, sk_sp textureXform, GrSamplerState::Filter filter, const SkPMColor4f& color, @@ -155,11 +191,13 @@ class TextureOp final : public GrMeshDrawOp { const GrQuad& localQuad, const SkRect* domain) { GrOpMemoryPool* pool = context->priv().opMemoryPool(); - return pool->allocate(std::move(proxy), std::move(textureXform), filter, color, - saturate, aaType, aaFlags, deviceQuad, localQuad, domain); + return pool->allocate(std::move(proxyView), std::move(textureXform), filter, + color, saturate, aaType, aaFlags, deviceQuad, localQuad, + domain); } + static std::unique_ptr Make(GrRecordingContext* context, - const GrRenderTargetContext::TextureSetEntry set[], + GrRenderTargetContext::TextureSetEntry set[], int cnt, GrSamplerState::Filter filter, GrTextureOp::Saturate saturate, @@ -167,7 +205,7 @@ class TextureOp final : public GrMeshDrawOp { SkCanvas::SrcRectConstraint constraint, const SkMatrix& viewMatrix, sk_sp textureColorSpaceXform) { - size_t size = sizeof(TextureOp) + sizeof(Proxy) * (cnt - 1); + size_t size = sizeof(TextureOp) + sizeof(ViewCountPair) * (cnt - 1); GrOpMemoryPool* pool = context->priv().opMemoryPool(); void* mem = pool->allocate(size); return std::unique_ptr(new (mem) TextureOp(set, cnt, filter, saturate, aaType, @@ -176,17 +214,17 @@ class TextureOp final : public GrMeshDrawOp { } ~TextureOp() override { - for (unsigned p = 0; p < fProxyCnt; ++p) { - fProxies[p].fProxy->unref(); + for (unsigned p = 1; p < fMetadata.fProxyCount; ++p) { + fViewCountPairs[p].~ViewCountPair(); } } const char* name() const override { return "TextureOp"; } void visitProxies(const VisitProxyFunc& func) const override { - for (unsigned p = 0; p < fProxyCnt; ++p) { - bool mipped = (GrSamplerState::Filter::kMipMap == this->filter()); - func(fProxies[p].fProxy, GrMipMapped(mipped)); + bool mipped = (GrSamplerState::Filter::kMipMap == fMetadata.filter()); + for (unsigned p = 0; p < fMetadata.fProxyCount; ++p) { + func(fViewCountPairs[p].fProxy.get(), GrMipMapped(mipped)); } } @@ -195,22 +233,23 @@ class TextureOp final : public GrMeshDrawOp { SkString str; str.appendf("# draws: %d\n", fQuads.count()); auto iter = fQuads.iterator(); - for (unsigned p = 0; p < fProxyCnt; ++p) { - str.appendf("Proxy ID: %d, Filter: %d\n", fProxies[p].fProxy->uniqueID().asUInt(), - static_cast(fFilter)); + for (unsigned p = 0; p < fMetadata.fProxyCount; ++p) { + str.appendf("Proxy ID: %d, Filter: %d\n", + fViewCountPairs[p].fProxy->uniqueID().asUInt(), + static_cast(fMetadata.fFilter)); int i = 0; - while(i < fProxies[p].fQuadCnt && iter.next()) { - const GrQuad& quad = iter.deviceQuad(); - const GrQuad& uv = iter.localQuad(); + while(i < fViewCountPairs[p].fQuadCnt && iter.next()) { + const GrQuad* quad = iter.deviceQuad(); + GrQuad uv = iter.isLocalValid() ? *(iter.localQuad()) : GrQuad(); const ColorDomainAndAA& info = iter.metadata(); str.appendf( "%d: Color: 0x%08x, Domain(%d): [L: %.2f, T: %.2f, R: %.2f, B: %.2f]\n" " UVs [(%.2f, %.2f), (%.2f, %.2f), (%.2f, %.2f), (%.2f, %.2f)]\n" " Quad [(%.2f, %.2f), (%.2f, %.2f), (%.2f, %.2f), (%.2f, %.2f)]\n", - i, info.fColor.toBytes_RGBA(), info.fHasDomain, info.fDomainRect.fLeft, + i, info.fColor.toBytes_RGBA(), fMetadata.fDomain, info.fDomainRect.fLeft, info.fDomainRect.fTop, info.fDomainRect.fRight, info.fDomainRect.fBottom, - quad.point(0).fX, quad.point(0).fY, quad.point(1).fX, quad.point(1).fY, - quad.point(2).fX, quad.point(2).fY, quad.point(3).fX, quad.point(3).fY, + quad->point(0).fX, quad->point(0).fY, quad->point(1).fX, quad->point(1).fY, + quad->point(2).fX, quad->point(2).fY, quad->point(3).fX, quad->point(3).fY, uv.point(0).fX, uv.point(0).fY, uv.point(1).fX, uv.point(1).fY, uv.point(2).fX, uv.point(2).fY, uv.point(3).fX, uv.point(3).fY); @@ -225,18 +264,18 @@ class TextureOp final : public GrMeshDrawOp { GrProcessorSet::Analysis finalize( const GrCaps& caps, const GrAppliedClip*, bool hasMixedSampledCoverage, GrClampType clampType) override { - fColorType = static_cast(ColorType::kNone); + SkASSERT(fMetadata.colorType() == ColorType::kNone); auto iter = fQuads.metadata(); while(iter.next()) { - auto colorType = GrQuadPerEdgeAA::MinColorType(iter->fColor, clampType, caps); - fColorType = SkTMax(fColorType, static_cast(colorType)); + auto colorType = GrQuadPerEdgeAA::MinColorType(iter->fColor); + fMetadata.fColorType = SkTMax(fMetadata.fColorType, static_cast(colorType)); } return GrProcessorSet::EmptySetAnalysis(); } FixedFunctionFlags fixedFunctionFlags() const override { - return this->aaType() == GrAAType::kMSAA ? FixedFunctionFlags::kUsesHWAA - : FixedFunctionFlags::kNone; + return fMetadata.aaType() == GrAAType::kMSAA ? FixedFunctionFlags::kUsesHWAA + : FixedFunctionFlags::kNone; } DEFINE_OP_CLASS_ID @@ -245,30 +284,143 @@ class TextureOp final : public GrMeshDrawOp { friend class ::GrOpMemoryPool; struct ColorDomainAndAA { - ColorDomainAndAA(const SkPMColor4f& color, const SkRect* domainRect, GrQuadAAFlags aaFlags) + ColorDomainAndAA(const SkPMColor4f& color, const SkRect& domainRect, GrQuadAAFlags aaFlags) : fColor(color) - , fDomainRect(domainRect ? *domainRect : SkRect::MakeEmpty()) - , fHasDomain(static_cast(domainRect ? Domain::kYes : Domain::kNo)) + , fDomainRect(domainRect) , fAAFlags(static_cast(aaFlags)) { SkASSERT(fAAFlags == static_cast(aaFlags)); } SkPMColor4f fColor; + // If the op doesn't use domains, this is ignored. If the op uses domains and the specific + // entry does not, this rect will equal kLargeRect, so it automatically has no effect. SkRect fDomainRect; - unsigned fHasDomain : 1; unsigned fAAFlags : 4; - Domain domain() const { return Domain(fHasDomain); } GrQuadAAFlags aaFlags() const { return static_cast(fAAFlags); } }; - struct Proxy { - GrTextureProxy* fProxy; + + struct ViewCountPair { + // Normally this would be a GrSurfaceProxyView, but GrTextureOp applies the GrOrigin right + // away so it doesn't need to be stored, and all ViewCountPairs in an op have the same + // swizzle so that is stored in the op metadata. + sk_sp fProxy; int fQuadCnt; }; + // TextureOp and ViewCountPair are 8 byte aligned. This is packed into 8 bytes to minimally + // increase the size of the op; increasing the op size can have a surprising impact on + // performance (since texture ops are one of the most commonly used in an app). + struct Metadata { + // AAType must be filled after initialization; ColorType is determined in finalize() + Metadata(const GrSwizzle& swizzle, GrSamplerState::Filter filter, + GrQuadPerEdgeAA::Domain domain, GrTextureOp::Saturate saturate) + : fSwizzle(swizzle) + , fProxyCount(1) + , fTotalQuadCount(1) + , fFilter(static_cast(filter)) + , fAAType(static_cast(GrAAType::kNone)) + , fColorType(static_cast(ColorType::kNone)) + , fDomain(static_cast(domain)) + , fSaturate(static_cast(saturate)) {} + + GrSwizzle fSwizzle; + uint16_t fProxyCount; + // This will be >= fProxyCount, since a proxy may be drawn multiple times + uint16_t fTotalQuadCount; + + unsigned fFilter : 2; // GrSamplerState::Filter + unsigned fAAType : 2; // GrAAType + unsigned fColorType : 2; // GrQuadPerEdgeAA::ColorType + unsigned fDomain : 1; // bool + unsigned fSaturate : 1; // bool + // unsigned fUnused : 8; + + GrSamplerState::Filter filter() const { + return static_cast(fFilter); + } + GrAAType aaType() const { return static_cast(fAAType); } + ColorType colorType() const { return static_cast(fColorType); } + Domain domain() const { return static_cast(fDomain); } + GrTextureOp::Saturate saturate() const { + return static_cast(fSaturate); + } + + static_assert(GrSamplerState::kFilterCount <= 4); + static_assert(kGrAATypeCount <= 4); + static_assert(GrQuadPerEdgeAA::kColorTypeCount <= 4); + }; + + // This descriptor is used in both onPrePrepareDraws and onPrepareDraws. + // + // In the onPrePrepareDraws case it is allocated in the creation-time opData + // arena. Both allocateCommon and allocatePrePrepareOnly are called and they also allocate + // their memory in the creation-time opData arena. + // + // In the onPrepareDraws case this descriptor is created on the stack and only + // allocateCommon is called. In this case the common memory fields are allocated + // in the flush-time arena (i.e., as part of the flushState). + struct PrePreparedDesc { + VertexSpec fVertexSpec; + int fNumProxies = 0; + int fNumTotalQuads = 0; + GrPipeline::DynamicStateArrays* fDynamicStateArrays = nullptr; + GrPipeline::FixedDynamicState* fFixedDynamicState = nullptr; + + // This member variable is only used by 'onPrePrepareDraws'. The prior five are also + // used by 'onPrepareDraws' + char* fVertices = nullptr; + + // How big should 'fVertices' be to hold all the vertex data? + size_t totalSizeInBytes() const { + return fNumTotalQuads * fVertexSpec.verticesPerQuad() * fVertexSpec.vertexSize(); + } + + int totalNumVertices() const { + return fNumTotalQuads * fVertexSpec.verticesPerQuad(); + } + + // Helper to fill in the fFixedDynamicState and fDynamicStateArrays. If there is more + // than one mesh/proxy they are stored in fDynamicStateArrays but if there is only one + // it is stored in fFixedDynamicState. + void setMeshProxy(int index, GrSurfaceProxy* proxy) { + SkASSERT(index < fNumProxies); + + if (fDynamicStateArrays) { + SkASSERT(fDynamicStateArrays->fPrimitiveProcessorTextures); + SkASSERT(fNumProxies > 1); + + fDynamicStateArrays->fPrimitiveProcessorTextures[index] = proxy; + } else { + SkASSERT(fFixedDynamicState); + SkASSERT(fNumProxies == 1); + + fFixedDynamicState->fPrimitiveProcessorTextures[index] = proxy; + } + } + + // Allocate the fields required in both onPrePrepareDraws and onPrepareDraws + void allocateCommon(SkArenaAlloc* arena, const GrAppliedClip* clip) { + // We'll use a dynamic state array for the GP textures when there are multiple ops. + // Otherwise, we use fixed dynamic state to specify the single op's proxy. + if (fNumProxies > 1) { + fDynamicStateArrays = Target::AllocDynamicStateArrays(arena, fNumProxies, 1, false); + fFixedDynamicState = Target::MakeFixedDynamicState(arena, clip, 0); + } else { + fFixedDynamicState = Target::MakeFixedDynamicState(arena, clip, 1); + } + } + + // Allocate the fields only needed by onPrePrepareDraws + void allocatePrePrepareOnly(SkArenaAlloc* arena) { + fVertices = arena->makeArrayDefault(this->totalSizeInBytes()); + } + + }; + // dstQuad should be the geometry transformed by the view matrix. If domainRect // is not null it will be used to apply the strict src rect constraint. - TextureOp(sk_sp proxy, + TextureOp(GrSurfaceProxyView proxyView, sk_sp textureColorSpaceXform, GrSamplerState::Filter filter, const SkPMColor4f& color, @@ -281,34 +433,42 @@ class TextureOp final : public GrMeshDrawOp { : INHERITED(ClassID()) , fQuads(1, true /* includes locals */) , fTextureColorSpaceXform(std::move(textureColorSpaceXform)) - , fSaturate(static_cast(saturate)) - , fFilter(static_cast(filter)) - , fPrePrepared(false) { + , fPrePreparedDesc(nullptr) + , fMetadata(proxyView.swizzle(), filter, Domain(!!domainRect), saturate) { + // Clean up disparities between the overall aa type and edge configuration and apply // optimizations based on the rect and matrix when appropriate GrQuadUtils::ResolveAAType(aaType, aaFlags, dstQuad, &aaType, &aaFlags); - fAAType = static_cast(aaType); + fMetadata.fAAType = static_cast(aaType); // We expect our caller to have already caught this optimization. - SkASSERT(!domainRect || !domainRect->contains(proxy->getWorstCaseBoundsRect())); + SkASSERT(!domainRect || + !domainRect->contains(proxyView.proxy()->backingStoreBoundsRect())); // We may have had a strict constraint with nearest filter solely due to possible AA bloat. // If we don't have (or determined we don't need) coverage AA then we can skip using a // domain. - if (domainRect && this->filter() == GrSamplerState::Filter::kNearest && + if (domainRect && filter == GrSamplerState::Filter::kNearest && aaType != GrAAType::kCoverage) { domainRect = nullptr; + fMetadata.fDomain = static_cast(Domain::kNo); } - fQuads.append(dstQuad, {color, domainRect, aaFlags}, &srcQuad); + // Normalize src coordinates and the domain (if set) + NormalizationParams params = proxy_normalization_params(proxyView.proxy(), + proxyView.origin()); + GrQuad normalizedSrcQuad = srcQuad; + normalize_src_quad(params, &normalizedSrcQuad); + SkRect domain = normalize_domain(filter, params, domainRect); + + fQuads.append(dstQuad, {color, domain, aaFlags}, &normalizedSrcQuad); + fViewCountPairs[0] = {proxyView.detachProxy(), 1}; - fProxyCnt = 1; - fProxies[0] = {proxy.release(), 1}; this->setBounds(dstQuad.bounds(), HasAABloat(aaType == GrAAType::kCoverage), IsHairline::kNo); - fDomain = static_cast(domainRect != nullptr); } - TextureOp(const GrRenderTargetContext::TextureSetEntry set[], + + TextureOp(GrRenderTargetContext::TextureSetEntry set[], int cnt, GrSamplerState::Filter filter, GrTextureOp::Saturate saturate, @@ -319,20 +479,42 @@ class TextureOp final : public GrMeshDrawOp { : INHERITED(ClassID()) , fQuads(cnt, true /* includes locals */) , fTextureColorSpaceXform(std::move(textureColorSpaceXform)) - , fSaturate(static_cast(saturate)) - , fFilter(static_cast(filter)) - , fPrePrepared(false) { - fProxyCnt = SkToUInt(cnt); + , fPrePreparedDesc(nullptr) + , fMetadata(set[0].fProxyView.swizzle(), GrSamplerState::Filter::kNearest, + Domain::kNo, saturate) { + // Update counts to reflect the batch op + fMetadata.fProxyCount = SkToUInt(cnt); + fMetadata.fTotalQuadCount = SkToUInt(cnt); + SkRect bounds = SkRectPriv::MakeLargestInverted(); - GrAAType overallAAType = GrAAType::kNone; // aa type maximally compatible with all dst rects - bool mustFilter = false; - bool allOpaque = true; + + GrAAType netAAType = GrAAType::kNone; // aa type maximally compatible with all dst rects Domain netDomain = Domain::kNo; - for (unsigned p = 0; p < fProxyCnt; ++p) { - fProxies[p].fProxy = SkRef(set[p].fProxy.get()); - fProxies[p].fQuadCnt = 1; - SkASSERT(fProxies[p].fProxy->textureType() == fProxies[0].fProxy->textureType()); - SkASSERT(fProxies[p].fProxy->config() == fProxies[0].fProxy->config()); + GrSamplerState::Filter netFilter = GrSamplerState::Filter::kNearest; + + // Net domain and filter quality are being determined simultaneously while iterating through + // the entry set. When filter changes to bilerp, all prior normalized domains in the + // GrQuadBuffer must be updated to reflect the 1/2px inset required. All quads appended + // afterwards will properly take that into account. + int correctDomainUpToIndex = 0; + const GrSurfaceProxy* curProxy; + for (unsigned p = 0; p < fMetadata.fProxyCount; ++p) { + if (p == 0) { + // We do not placement new the first ViewCountPair since that one is allocated and + // initialized as part of the GrTextureOp creation. + fViewCountPairs[p].fProxy = set[p].fProxyView.detachProxy(); + fViewCountPairs[p].fQuadCnt = 1; + } else { + // We must placement new the ViewCountPairs here so that the sk_sps in the + // GrSurfaceProxyView get initialized properly. + new(&fViewCountPairs[p])ViewCountPair({set[p].fProxyView.detachProxy(), 1}); + } + + curProxy = fViewCountPairs[p].fProxy.get(); + SkASSERT(curProxy->backendFormat().textureType() == + fViewCountPairs[0].fProxy->backendFormat().textureType()); + SkASSERT(fMetadata.fSwizzle == set[p].fProxyView.swizzle()); + SkASSERT(curProxy->config() == fViewCountPairs[0].fProxy->config()); SkMatrix ctm = viewMatrix; if (set[p].fPreViewMatrix) { @@ -353,123 +535,201 @@ class TextureOp final : public GrMeshDrawOp { srcQuad = GrQuad(set[p].fSrcRect); } - if (!mustFilter && this->filter() != GrSamplerState::Filter::kNearest) { - mustFilter = filter_has_effect(srcQuad, quad); + // Before normalizing the source coordinates, determine if bilerp is actually needed + if (netFilter != filter && filter_has_effect(srcQuad, quad)) { + // The only way netFilter != filter is if bilerp is requested and we haven't yet + // found a quad that requires bilerp (so net is still nearest). + SkASSERT(netFilter == GrSamplerState::Filter::kNearest && + filter == GrSamplerState::Filter::kBilerp); + netFilter = GrSamplerState::Filter::kBilerp; + // All quads index < p with domains were calculated as if there was no filtering, + // which is no longer true. + correctDomainUpToIndex = p; } + // Normalize the src quads and apply origin + NormalizationParams proxyParams = proxy_normalization_params( + curProxy, set[p].fProxyView.origin()); + normalize_src_quad(proxyParams, &srcQuad); + + // Update overall bounds of the op as the union of all quads bounds.joinPossiblyEmptyRect(quad.bounds()); + + // Determine the AA type for the quad, then merge with net AA type GrQuadAAFlags aaFlags; - // Don't update the overall aaType, might be inappropriate for some of the quads GrAAType aaForQuad; GrQuadUtils::ResolveAAType(aaType, set[p].fAAFlags, quad, &aaForQuad, &aaFlags); // Resolve sets aaForQuad to aaType or None, there is never a change between aa methods SkASSERT(aaForQuad == GrAAType::kNone || aaForQuad == aaType); - if (overallAAType == GrAAType::kNone && aaForQuad != GrAAType::kNone) { - overallAAType = aaType; + if (netAAType == GrAAType::kNone && aaForQuad != GrAAType::kNone) { + netAAType = aaType; } // Calculate metadata for the entry const SkRect* domainForQuad = nullptr; if (constraint == SkCanvas::kStrict_SrcRectConstraint) { // Check (briefly) if the strict constraint is needed for this set entry - if (!set[p].fSrcRect.contains(fProxies[p].fProxy->getWorstCaseBoundsRect()) && - (mustFilter || aaForQuad == GrAAType::kCoverage)) { + if (!set[p].fSrcRect.contains(curProxy->backingStoreBoundsRect()) && + (netFilter == GrSamplerState::Filter::kBilerp || + aaForQuad == GrAAType::kCoverage)) { // Can't rely on hardware clamping and the draw will access outer texels - // for AA and/or bilerp + // for AA and/or bilerp. Unlike filter quality, this op still has per-quad + // control over AA so that can check aaForQuad, not netAAType. netDomain = Domain::kYes; domainForQuad = &set[p].fSrcRect; } } + + SkRect domain = normalize_domain(filter, proxyParams, domainForQuad); float alpha = SkTPin(set[p].fAlpha, 0.f, 1.f); - allOpaque &= (1.f == alpha); - SkPMColor4f color{alpha, alpha, alpha, alpha}; - fQuads.append(quad, {color, domainForQuad, aaFlags}, &srcQuad); + fQuads.append(quad, {{alpha, alpha, alpha, alpha}, domain, aaFlags}, &srcQuad); } - fAAType = static_cast(overallAAType); - if (!mustFilter) { - fFilter = static_cast(GrSamplerState::Filter::kNearest); + + // All the quads have been recorded, but some domains need to be fixed + if (netDomain == Domain::kYes && correctDomainUpToIndex > 0) { + int p = 0; + auto iter = fQuads.metadata(); + while(p < correctDomainUpToIndex && iter.next()) { + NormalizationParams proxyParams = proxy_normalization_params( + fViewCountPairs[p].fProxy.get(), set[p].fProxyView.origin()); + correct_domain_for_bilerp(proxyParams, &(iter->fDomainRect)); + p++; + } } - this->setBounds(bounds, HasAABloat(this->aaType() == GrAAType::kCoverage), - IsHairline::kNo); - fDomain = static_cast(netDomain); + + fMetadata.fAAType = static_cast(netAAType); + fMetadata.fFilter = static_cast(netFilter); + fMetadata.fDomain = static_cast(netDomain); + + this->setBounds(bounds, HasAABloat(netAAType == GrAAType::kCoverage), IsHairline::kNo); } - void tess(void* v, const VertexSpec& spec, const GrTextureProxy* proxy, - GrQuadBuffer::Iter* iter, int cnt) const { + void onPrePrepareDraws(GrRecordingContext* context, + const GrSurfaceProxyView* dstView, + GrAppliedClip* clip, + const GrXferProcessor::DstProxyView& dstProxyView) override { TRACE_EVENT0("skia.gpu", TRACE_FUNC); - auto origin = proxy->origin(); - const auto* texture = proxy->peekTexture(); - float iw, ih, h; - if (proxy->textureType() == GrTextureType::kRectangle) { - iw = ih = 1.f; - h = texture->height(); - } else { - iw = 1.f / texture->width(); - ih = 1.f / texture->height(); - h = 1.f; - } - int i = 0; - // Explicit ctor ensures ws are 1s, which compute_src_quad requires - GrQuad srcQuad(SkRect::MakeEmpty()); - SkRect domain; - while(i < cnt && iter->next()) { - SkASSERT(iter->isLocalValid()); - const ColorDomainAndAA& info = iter->metadata(); - // Must correct the texture coordinates and domain now that the real texture size - // is known - compute_src_quad(origin, iter->localQuad(), iw, ih, h, &srcQuad); - compute_domain(info.domain(), this->filter(), origin, info.fDomainRect, iw, ih, h, - &domain); - v = GrQuadPerEdgeAA::Tessellate(v, spec, iter->deviceQuad(), info.fColor, srcQuad, - domain, info.aaFlags()); - i++; - } + SkDEBUGCODE(this->validate();) + SkASSERT(!fPrePreparedDesc); + + SkArenaAlloc* arena = context->priv().recordTimeAllocator(); + + fPrePreparedDesc = arena->make(); + + this->characterize(fPrePreparedDesc); + + fPrePreparedDesc->allocateCommon(arena, clip); + + fPrePreparedDesc->allocatePrePrepareOnly(arena); + + // At this juncture we only fill in the vertex data and state arrays. Filling in of + // the meshes is left until onPrepareDraws. + SkAssertResult(FillInData(*context->priv().caps(), this, fPrePreparedDesc, + fPrePreparedDesc->fVertices, nullptr, 0, nullptr, nullptr)); } - void onPrePrepareDraws(GrRecordingContext* context) override { - SkASSERT(!fPrePrepared); - // Pull forward the tessellation of the quads to here + static bool FillInData(const GrCaps& caps, TextureOp* texOp, PrePreparedDesc* desc, + char* pVertexData, GrMesh* meshes, int absBufferOffset, + sk_sp vertexBuffer, + sk_sp indexBuffer) { + int totQuadsSeen = 0; + SkDEBUGCODE(int totVerticesSeen = 0;) + SkDEBUGCODE(const size_t vertexSize = desc->fVertexSpec.vertexSize()); + + GrQuadPerEdgeAA::Tessellator tessellator(desc->fVertexSpec, pVertexData); + int meshIndex = 0; + for (const auto& op : ChainRange(texOp)) { + auto iter = op.fQuads.iterator(); + for (unsigned p = 0; p < op.fMetadata.fProxyCount; ++p) { + const int quadCnt = op.fViewCountPairs[p].fQuadCnt; + SkDEBUGCODE(int meshVertexCnt = quadCnt * desc->fVertexSpec.verticesPerQuad()); + SkASSERT(meshIndex < desc->fNumProxies); + + if (pVertexData) { + for (int i = 0; i < quadCnt && iter.next(); ++i) { + SkASSERT(iter.isLocalValid()); + const ColorDomainAndAA& info = iter.metadata(); + tessellator.append(iter.deviceQuad(), iter.localQuad(), + info.fColor, info.fDomainRect, info.aaFlags()); + } + desc->setMeshProxy(meshIndex, op.fViewCountPairs[p].fProxy.get()); + + SkASSERT((totVerticesSeen + meshVertexCnt) * vertexSize + == (size_t)(tessellator.vertices() - pVertexData)); + } + + if (meshes) { + GrQuadPerEdgeAA::ConfigureMesh(caps, &(meshes[meshIndex]), desc->fVertexSpec, + totQuadsSeen, quadCnt, desc->totalNumVertices(), + vertexBuffer, indexBuffer, absBufferOffset); + } + + ++meshIndex; + + totQuadsSeen += quadCnt; + SkDEBUGCODE(totVerticesSeen += meshVertexCnt); + SkASSERT(totQuadsSeen * desc->fVertexSpec.verticesPerQuad() == totVerticesSeen); + } - //GrOpMemoryPool* pool = context->priv().opMemoryPool(); + // If quad counts per proxy were calculated correctly, the entire iterator + // should have been consumed. + SkASSERT(!pVertexData || !iter.next()); + } - fPrePrepared = true; + SkASSERT(!pVertexData || + (desc->totalSizeInBytes() == (size_t)(tessellator.vertices() - pVertexData))); + SkASSERT(meshIndex == desc->fNumProxies); + SkASSERT(totQuadsSeen == desc->fNumTotalQuads); + SkASSERT(totVerticesSeen == desc->totalNumVertices()); + return true; } #ifdef SK_DEBUG void validate() const override { - auto textureType = fProxies[0].fProxy->textureType(); - const GrSwizzle& swizzle = fProxies[0].fProxy->textureSwizzle(); - GrAAType aaType = this->aaType(); + // NOTE: Since this is debug-only code, we use the virtual asTextureProxy() + auto textureType = fViewCountPairs[0].fProxy->asTextureProxy()->textureType(); + GrAAType aaType = fMetadata.aaType(); + int quadCount = 0; for (const auto& op : ChainRange(this)) { - for (unsigned p = 0; p < op.fProxyCnt; ++p) { - auto* proxy = op.fProxies[p].fProxy; + SkASSERT(op.fMetadata.fSwizzle == fMetadata.fSwizzle); + + for (unsigned p = 0; p < op.fMetadata.fProxyCount; ++p) { + auto* proxy = op.fViewCountPairs[p].fProxy->asTextureProxy(); + quadCount += op.fViewCountPairs[p].fQuadCnt; SkASSERT(proxy); SkASSERT(proxy->textureType() == textureType); - SkASSERT(proxy->textureSwizzle() == swizzle); } // Each individual op must be a single aaType. kCoverage and kNone ops can chain // together but kMSAA ones do not. if (aaType == GrAAType::kCoverage || aaType == GrAAType::kNone) { - SkASSERT(op.aaType() == GrAAType::kCoverage || op.aaType() == GrAAType::kNone); + SkASSERT(op.fMetadata.aaType() == GrAAType::kCoverage || + op.fMetadata.aaType() == GrAAType::kNone); } else { - SkASSERT(aaType == GrAAType::kMSAA && op.aaType() == GrAAType::kMSAA); + SkASSERT(aaType == GrAAType::kMSAA && op.fMetadata.aaType() == GrAAType::kMSAA); } } + + SkASSERT(quadCount == this->numChainedQuads()); } #endif - VertexSpec characterize(int* numProxies, int* numTotalQuads) const { +#if GR_TEST_UTILS + int numQuads() const final { return this->totNumQuads(); } +#endif + + void characterize(PrePreparedDesc* desc) const { GrQuad::Type quadType = GrQuad::Type::kAxisAligned; ColorType colorType = ColorType::kNone; GrQuad::Type srcQuadType = GrQuad::Type::kAxisAligned; Domain domain = Domain::kNo; - GrAAType overallAAType = this->aaType(); + GrAAType overallAAType = fMetadata.aaType(); - *numProxies = 0; - *numTotalQuads = 0; + desc->fNumProxies = 0; + desc->fNumTotalQuads = 0; + int maxQuadsPerMesh = 0; for (const auto& op : ChainRange(this)) { if (op.fQuads.deviceQuadType() > quadType) { @@ -478,21 +738,60 @@ class TextureOp final : public GrMeshDrawOp { if (op.fQuads.localQuadType() > srcQuadType) { srcQuadType = op.fQuads.localQuadType(); } - if (op.fDomain) { + if (op.fMetadata.domain() == Domain::kYes) { domain = Domain::kYes; } - colorType = SkTMax(colorType, static_cast(op.fColorType)); - *numProxies += op.fProxyCnt; - for (unsigned p = 0; p < op.fProxyCnt; ++p) { - *numTotalQuads += op.fProxies[p].fQuadCnt; + colorType = SkTMax(colorType, op.fMetadata.colorType()); + desc->fNumProxies += op.fMetadata.fProxyCount; + + for (unsigned p = 0; p < op.fMetadata.fProxyCount; ++p) { + maxQuadsPerMesh = SkTMax(op.fViewCountPairs[p].fQuadCnt, maxQuadsPerMesh); } - if (op.aaType() == GrAAType::kCoverage) { + desc->fNumTotalQuads += op.totNumQuads(); + + if (op.fMetadata.aaType() == GrAAType::kCoverage) { overallAAType = GrAAType::kCoverage; } } - return VertexSpec(quadType, colorType, srcQuadType, /* hasLocal */ true, domain, - overallAAType, /* alpha as coverage */ true); + SkASSERT(desc->fNumTotalQuads == this->numChainedQuads()); + + SkASSERT(!CombinedQuadCountWillOverflow(overallAAType, false, desc->fNumTotalQuads)); + + auto indexBufferOption = GrQuadPerEdgeAA::CalcIndexBufferOption(overallAAType, + maxQuadsPerMesh); + + desc->fVertexSpec = VertexSpec(quadType, colorType, srcQuadType, /* hasLocal */ true, + domain, overallAAType, /* alpha as coverage */ true, + indexBufferOption); + + SkASSERT(desc->fNumTotalQuads <= GrQuadPerEdgeAA::QuadLimit(indexBufferOption)); + } + + int totNumQuads() const { +#ifdef SK_DEBUG + int tmp = 0; + for (unsigned p = 0; p < fMetadata.fProxyCount; ++p) { + tmp += fViewCountPairs[p].fQuadCnt; + } + SkASSERT(tmp == fMetadata.fTotalQuadCount); +#endif + + return fMetadata.fTotalQuadCount; + } + + int numChainedQuads() const { + int numChainedQuads = this->totNumQuads(); + + for (const GrOp* tmp = this->prevInChain(); tmp; tmp = tmp->prevInChain()) { + numChainedQuads += ((const TextureOp*)tmp)->totNumQuads(); + } + + for (const GrOp* tmp = this->nextInChain(); tmp; tmp = tmp->nextInChain()) { + numChainedQuads += ((const TextureOp*)tmp)->totNumQuads(); + } + + return numChainedQuads; } // onPrePrepareDraws may or may not have been called at this point @@ -501,102 +800,85 @@ class TextureOp final : public GrMeshDrawOp { SkDEBUGCODE(this->validate();) - int numProxies, numTotalQuads; - - const VertexSpec vertexSpec = this->characterize(&numProxies, &numTotalQuads); + PrePreparedDesc desc; - // We'll use a dynamic state array for the GP textures when there are multiple ops. - // Otherwise, we use fixed dynamic state to specify the single op's proxy. - GrPipeline::DynamicStateArrays* dynamicStateArrays = nullptr; - GrPipeline::FixedDynamicState* fixedDynamicState; - if (numProxies > 1) { - dynamicStateArrays = target->allocDynamicStateArrays(numProxies, 1, false); - fixedDynamicState = target->makeFixedDynamicState(0); + if (fPrePreparedDesc) { + desc = *fPrePreparedDesc; } else { - fixedDynamicState = target->makeFixedDynamicState(1); - fixedDynamicState->fPrimitiveProcessorTextures[0] = fProxies[0].fProxy; + SkArenaAlloc* arena = target->allocator(); + + this->characterize(&desc); + desc.allocateCommon(arena, target->appliedClip()); + + SkASSERT(!desc.fVertices); } - size_t vertexSize = vertexSpec.vertexSize(); + size_t vertexSize = desc.fVertexSpec.vertexSize(); - GrMesh* meshes = target->allocMeshes(numProxies); sk_sp vbuffer; int vertexOffsetInBuffer = 0; - int numQuadVerticesLeft = numTotalQuads * vertexSpec.verticesPerQuad(); - int numAllocatedVertices = 0; - void* vdata = nullptr; - int m = 0; - for (const auto& op : ChainRange(this)) { - auto iter = op.fQuads.iterator(); - for (unsigned p = 0; p < op.fProxyCnt; ++p) { - int quadCnt = op.fProxies[p].fQuadCnt; - auto* proxy = op.fProxies[p].fProxy; - int meshVertexCnt = quadCnt * vertexSpec.verticesPerQuad(); - if (numAllocatedVertices < meshVertexCnt) { - vdata = target->makeVertexSpaceAtLeast( - vertexSize, meshVertexCnt, numQuadVerticesLeft, &vbuffer, - &vertexOffsetInBuffer, &numAllocatedVertices); - SkASSERT(numAllocatedVertices <= numQuadVerticesLeft); - if (!vdata) { - SkDebugf("Could not allocate vertices\n"); - return; - } - } - SkASSERT(numAllocatedVertices >= meshVertexCnt); - - op.tess(vdata, vertexSpec, proxy, &iter, quadCnt); + void* vdata = target->makeVertexSpace(vertexSize, desc.totalNumVertices(), + &vbuffer, &vertexOffsetInBuffer); + if (!vdata) { + SkDebugf("Could not allocate vertices\n"); + return; + } - if (!GrQuadPerEdgeAA::ConfigureMeshIndices(target, &(meshes[m]), vertexSpec, - quadCnt)) { - SkDebugf("Could not allocate indices"); - return; - } - meshes[m].setVertexData(vbuffer, vertexOffsetInBuffer); - if (dynamicStateArrays) { - dynamicStateArrays->fPrimitiveProcessorTextures[m] = proxy; - } - ++m; - numAllocatedVertices -= meshVertexCnt; - numQuadVerticesLeft -= meshVertexCnt; - vertexOffsetInBuffer += meshVertexCnt; - vdata = reinterpret_cast(vdata) + vertexSize * meshVertexCnt; + sk_sp indexBuffer; + if (desc.fVertexSpec.needsIndexBuffer()) { + indexBuffer = GrQuadPerEdgeAA::GetIndexBuffer(target, + desc.fVertexSpec.indexBufferOption()); + if (!indexBuffer) { + SkDebugf("Could not allocate indices\n"); + return; } - // If quad counts per proxy were calculated correctly, the entire iterator should have - // been consumed. - SkASSERT(!iter.next()); } - SkASSERT(!numQuadVerticesLeft); - SkASSERT(!numAllocatedVertices); - sk_sp gp; + // Note: this allocation is always in the flush-time arena (i.e., the flushState) + GrMesh* meshes = target->allocMeshes(desc.fNumProxies); - { - auto textureType = fProxies[0].fProxy->textureType(); - const GrSwizzle& swizzle = fProxies[0].fProxy->textureSwizzle(); + bool result; + if (fPrePreparedDesc) { + memcpy(vdata, desc.fVertices, desc.totalSizeInBytes()); + // The above memcpy filled in the vertex data - just call FillInData to fill in the + // mesh data + result = FillInData(target->caps(), this, &desc, nullptr, meshes, vertexOffsetInBuffer, + std::move(vbuffer), std::move(indexBuffer)); + } else { + // Fills in both vertex data and mesh data + result = FillInData(target->caps(), this, &desc, (char*) vdata, meshes, + vertexOffsetInBuffer, std::move(vbuffer), std::move(indexBuffer)); + } - GrSamplerState samplerState = GrSamplerState(GrSamplerState::WrapMode::kClamp, - this->filter()); + if (!result) { + return; + } - auto saturate = static_cast(fSaturate); + GrGeometryProcessor* gp; + + { + const GrBackendFormat& backendFormat = + fViewCountPairs[0].fProxy->backendFormat(); - GrGpu* gpu = target->resourceProvider()->priv().gpu(); - uint32_t extraSamplerKey = gpu->getExtraSamplerKeyForProgram( - samplerState, fProxies[0].fProxy->backendFormat()); + GrSamplerState samplerState = GrSamplerState(GrSamplerState::WrapMode::kClamp, + fMetadata.filter()); - gp = GrQuadPerEdgeAA::MakeTexturedProcessor( - vertexSpec, *target->caps().shaderCaps(), textureType, samplerState, swizzle, - extraSamplerKey, std::move(fTextureColorSpaceXform), saturate); + gp = GrQuadPerEdgeAA::MakeTexturedProcessor(target->allocator(), + desc.fVertexSpec, *target->caps().shaderCaps(), backendFormat, + samplerState, fMetadata.fSwizzle, std::move(fTextureColorSpaceXform), + fMetadata.saturate()); SkASSERT(vertexSize == gp->vertexStride()); } - target->recordDraw( - std::move(gp), meshes, numProxies, fixedDynamicState, dynamicStateArrays); + target->recordDraw(gp, meshes, desc.fNumProxies, + desc.fFixedDynamicState, desc.fDynamicStateArrays, + desc.fVertexSpec.primitiveType()); } void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override { - auto pipelineFlags = (GrAAType::kMSAA == this->aaType()) + auto pipelineFlags = (GrAAType::kMSAA == fMetadata.aaType()) ? GrPipeline::InputFlags::kHWAntialias : GrPipeline::InputFlags::kNone; flushState->executeDrawsAndUploadsForMeshDrawOp( @@ -607,13 +889,13 @@ class TextureOp final : public GrMeshDrawOp { TRACE_EVENT0("skia.gpu", TRACE_FUNC); const auto* that = t->cast(); - if (fPrePrepared || that->fPrePrepared) { + if (fPrePreparedDesc || that->fPrePreparedDesc) { // This should never happen (since only DDL recorded ops should be prePrepared) // but, in any case, we should never combine ops that that been prePrepared return CombineResult::kCannotCombine; } - if (fDomain != that->fDomain) { + if (fMetadata.domain() != that->fMetadata.domain()) { // It is technically possible to combine operations across domain modes, but performance // testing suggests it's better to make more draw calls where some take advantage of // the more optimal shader path without coordinate clamping. @@ -623,24 +905,33 @@ class TextureOp final : public GrMeshDrawOp { that->fTextureColorSpaceXform.get())) { return CombineResult::kCannotCombine; } + bool upgradeToCoverageAAOnMerge = false; - if (this->aaType() != that->aaType()) { - if (!((this->aaType() == GrAAType::kCoverage && that->aaType() == GrAAType::kNone) || - (that->aaType() == GrAAType::kCoverage && this->aaType() == GrAAType::kNone))) { + if (fMetadata.aaType() != that->fMetadata.aaType()) { + if (!CanUpgradeAAOnMerge(fMetadata.aaType(), that->fMetadata.aaType())) { return CombineResult::kCannotCombine; } upgradeToCoverageAAOnMerge = true; } - if (fSaturate != that->fSaturate) { + + if (CombinedQuadCountWillOverflow(fMetadata.aaType(), upgradeToCoverageAAOnMerge, + this->numChainedQuads() + that->numChainedQuads())) { + return CombineResult::kCannotCombine; + } + + if (fMetadata.saturate() != that->fMetadata.saturate()) { return CombineResult::kCannotCombine; } - if (fFilter != that->fFilter) { + if (fMetadata.filter() != that->fMetadata.filter()) { return CombineResult::kCannotCombine; } - auto thisProxy = fProxies[0].fProxy; - auto thatProxy = that->fProxies[0].fProxy; - if (fProxyCnt > 1 || that->fProxyCnt > 1 || - thisProxy->uniqueID() != thatProxy->uniqueID()) { + if (fMetadata.fSwizzle != that->fMetadata.fSwizzle) { + return CombineResult::kCannotCombine; + } + const auto* thisProxy = fViewCountPairs[0].fProxy.get(); + const auto* thatProxy = that->fViewCountPairs[0].fProxy.get(); + if (fMetadata.fProxyCount > 1 || that->fMetadata.fProxyCount > 1 || + thisProxy != thatProxy) { // We can't merge across different proxies. Check if 'this' can be chained with 'that'. if (GrTextureProxy::ProxiesAreCompatibleAsDynamicState(thisProxy, thatProxy) && caps.dynamicStateArrayGeometryProcessorTextureSupport()) { @@ -649,58 +940,62 @@ class TextureOp final : public GrMeshDrawOp { return CombineResult::kCannotCombine; } - fDomain |= that->fDomain; - fColorType = SkTMax(fColorType, that->fColorType); + fMetadata.fDomain |= that->fMetadata.fDomain; + fMetadata.fColorType = SkTMax(fMetadata.fColorType, that->fMetadata.fColorType); if (upgradeToCoverageAAOnMerge) { - fAAType = static_cast(GrAAType::kCoverage); + fMetadata.fAAType = static_cast(GrAAType::kCoverage); } // Concatenate quad lists together fQuads.concat(that->fQuads); - fProxies[0].fQuadCnt += that->fQuads.count(); + fViewCountPairs[0].fQuadCnt += that->fQuads.count(); + fMetadata.fTotalQuadCount += that->fQuads.count(); return CombineResult::kMerged; } - GrAAType aaType() const { return static_cast(fAAType); } - GrSamplerState::Filter filter() const { return static_cast(fFilter); } - GrQuadBuffer fQuads; sk_sp fTextureColorSpaceXform; - unsigned fSaturate : 1; - unsigned fFilter : 2; - unsigned fAAType : 2; - unsigned fDomain : 1; - unsigned fColorType : 2; - GR_STATIC_ASSERT(GrQuadPerEdgeAA::kColorTypeCount <= 4); - unsigned fPrePrepared : 1; - unsigned fProxyCnt : 32 - 7; - Proxy fProxies[1]; - - static_assert(GrQuad::kTypeCount <= 4, "GrQuad::Type does not fit in 2 bits"); + // 'fPrePreparedDesc' is only filled in when this op has been prePrepared. In that case, + // it - and the matching dynamic and fixed state - have been allocated in the opPOD arena + // not in the FlushState arena. + PrePreparedDesc* fPrePreparedDesc; + // All configurable state of TextureOp is packed into one field to minimize the op's size. + // Historically, increasing the size of TextureOp has caused surprising perf regressions, so + // consider/measure changes with care. + Metadata fMetadata; + + // This field must go last. When allocating this op, we will allocate extra space to hold + // additional ViewCountPairs immediately after the op's allocation so we can treat this + // as an fProxyCnt-length array. + ViewCountPair fViewCountPairs[1]; typedef GrMeshDrawOp INHERITED; }; } // anonymous namespace -namespace GrTextureOp { - -std::unique_ptr Make(GrRecordingContext* context, - sk_sp proxy, - GrColorType srcColorType, - sk_sp textureXform, - GrSamplerState::Filter filter, - const SkPMColor4f& color, - Saturate saturate, - SkBlendMode blendMode, - GrAAType aaType, - GrQuadAAFlags aaFlags, - const GrQuad& deviceQuad, - const GrQuad& localQuad, - const SkRect* domain) { +#if GR_TEST_UTILS +uint32_t GrTextureOp::ClassID() { + return TextureOp::ClassID(); +} +#endif + +std::unique_ptr GrTextureOp::Make(GrRecordingContext* context, + GrSurfaceProxyView proxyView, + SkAlphaType alphaType, + sk_sp textureXform, + GrSamplerState::Filter filter, + const SkPMColor4f& color, + Saturate saturate, + SkBlendMode blendMode, + GrAAType aaType, + GrQuadAAFlags aaFlags, + const GrQuad& deviceQuad, + const GrQuad& localQuad, + const SkRect* domain) { // Apply optimizations that are valid whether or not using GrTextureOp or GrFillRectOp - if (domain && domain->contains(proxy->getWorstCaseBoundsRect())) { + if (domain && domain->contains(proxyView.proxy()->backingStoreBoundsRect())) { // No need for a shader-based domain if hardware clamping achieves the same effect domain = nullptr; } @@ -710,26 +1005,23 @@ std::unique_ptr Make(GrRecordingContext* context, } if (blendMode == SkBlendMode::kSrcOver) { - return TextureOp::Make(context, std::move(proxy), std::move(textureXform), filter, color, - saturate, aaType, aaFlags, deviceQuad, localQuad, domain); + return TextureOp::Make(context, std::move(proxyView), std::move(textureXform), filter, + color, saturate, aaType, aaFlags, deviceQuad, localQuad, domain); } else { // Emulate complex blending using GrFillRectOp GrPaint paint; paint.setColor4f(color); paint.setXPFactory(SkBlendMode_AsXPFactory(blendMode)); + GrSurfaceProxy* proxy = proxyView.proxy(); std::unique_ptr fp; + fp = GrSimpleTextureEffect::Make(sk_ref_sp(proxy), alphaType, SkMatrix::I(), filter); if (domain) { - // Update domain to match what GrTextureOp computes during tessellation, using top-left - // as the origin so that it doesn't depend on final texture size (which the FP handles - // later, as well as accounting for the true origin). - SkRect correctedDomain; - compute_domain(Domain::kYes, filter, kTopLeft_GrSurfaceOrigin, *domain, - 1.f, 1.f, proxy->height(), &correctedDomain); - fp = GrTextureDomainEffect::Make(std::move(proxy), srcColorType, SkMatrix::I(), - correctedDomain, GrTextureDomain::kClamp_Mode, filter); - } else { - fp = GrSimpleTextureEffect::Make(std::move(proxy), srcColorType, SkMatrix::I(), filter); + // Update domain to match what GrTextureOp would do for bilerp, but don't do any + // normalization since GrTextureDomainEffect handles that and the origin. + SkRect correctedDomain = normalize_domain(filter, {1.f, 1.f, 0.f}, domain); + fp = GrDomainEffect::Make(std::move(fp), correctedDomain, GrTextureDomain::kClamp_Mode, + filter); } fp = GrColorSpaceXformEffect::Make(std::move(fp), std::move(textureXform)); paint.addColorFragmentProcessor(std::move(fp)); @@ -742,20 +1034,185 @@ std::unique_ptr Make(GrRecordingContext* context, } } -std::unique_ptr MakeSet(GrRecordingContext* context, - const GrRenderTargetContext::TextureSetEntry set[], - int cnt, - GrSamplerState::Filter filter, - Saturate saturate, - GrAAType aaType, - SkCanvas::SrcRectConstraint constraint, - const SkMatrix& viewMatrix, - sk_sp textureColorSpaceXform) { - return TextureOp::Make(context, set, cnt, filter, saturate, aaType, constraint, viewMatrix, +// A helper class that assists in breaking up bulk API quad draws into manageable chunks. +class GrTextureOp::BatchSizeLimiter { +public: + BatchSizeLimiter(GrRenderTargetContext* rtc, + const GrClip& clip, + GrRecordingContext* context, + int numEntries, + GrSamplerState::Filter filter, + GrTextureOp::Saturate saturate, + SkCanvas::SrcRectConstraint constraint, + const SkMatrix& viewMatrix, + sk_sp textureColorSpaceXform) + : fRTC(rtc) + , fClip(clip) + , fContext(context) + , fFilter(filter) + , fSaturate(saturate) + , fConstraint(constraint) + , fViewMatrix(viewMatrix) + , fTextureColorSpaceXform(textureColorSpaceXform) + , fNumLeft(numEntries) { + } + + void createOp(GrRenderTargetContext::TextureSetEntry set[], + int clumpSize, + GrAAType aaType) { + std::unique_ptr op = TextureOp::Make(fContext, &set[fNumClumped], clumpSize, + fFilter, fSaturate, aaType, + fConstraint, fViewMatrix, + fTextureColorSpaceXform); + fRTC->addDrawOp(fClip, std::move(op)); + + fNumLeft -= clumpSize; + fNumClumped += clumpSize; + } + + int numLeft() const { return fNumLeft; } + int baseIndex() const { return fNumClumped; } + +private: + GrRenderTargetContext* fRTC; + const GrClip& fClip; + GrRecordingContext* fContext; + GrSamplerState::Filter fFilter; + GrTextureOp::Saturate fSaturate; + SkCanvas::SrcRectConstraint fConstraint; + const SkMatrix& fViewMatrix; + sk_sp fTextureColorSpaceXform; + + int fNumLeft; + int fNumClumped = 0; // also the offset for the start of the next clump +}; + +// Greedily clump quad draws together until the index buffer limit is exceeded. +void GrTextureOp::AddTextureSetOps(GrRenderTargetContext* rtc, + const GrClip& clip, + GrRecordingContext* context, + GrRenderTargetContext::TextureSetEntry set[], + int cnt, + GrSamplerState::Filter filter, + Saturate saturate, + SkBlendMode blendMode, + GrAAType aaType, + SkCanvas::SrcRectConstraint constraint, + const SkMatrix& viewMatrix, + sk_sp textureColorSpaceXform) { + // First check if we can support batches as a single op + if (blendMode != SkBlendMode::kSrcOver || + !context->priv().caps()->dynamicStateArrayGeometryProcessorTextureSupport()) { + // Append each entry as its own op; these may still be GrTextureOps if the blend mode is + // src-over but the backend doesn't support dynamic state changes. Otherwise Make() + // automatically creates the appropriate GrFillRectOp to emulate GrTextureOp. + SkMatrix ctm; + for (int i = 0; i < cnt; ++i) { + float alpha = set[i].fAlpha; + ctm = viewMatrix; + if (set[i].fPreViewMatrix) { + ctm.preConcat(*set[i].fPreViewMatrix); + } + + GrQuad quad, srcQuad; + if (set[i].fDstClipQuad) { + quad = GrQuad::MakeFromSkQuad(set[i].fDstClipQuad, ctm); + + SkPoint srcPts[4]; + GrMapRectPoints(set[i].fDstRect, set[i].fSrcRect, set[i].fDstClipQuad, srcPts, 4); + srcQuad = GrQuad::MakeFromSkQuad(srcPts, SkMatrix::I()); + } else { + quad = GrQuad::MakeFromRect(set[i].fDstRect, ctm); + srcQuad = GrQuad(set[i].fSrcRect); + } + + const SkRect* domain = constraint == SkCanvas::kStrict_SrcRectConstraint + ? &set[i].fSrcRect : nullptr; + + auto op = Make(context, set[i].fProxyView, set[i].fSrcAlphaType, textureColorSpaceXform, + filter, {alpha, alpha, alpha, alpha}, saturate, blendMode, aaType, + set[i].fAAFlags, quad, srcQuad, domain); + rtc->addDrawOp(clip, std::move(op)); + } + return; + } + + // Ensure that the index buffer limits are lower than the proxy and quad count limits of + // the op's metadata so we don't need to worry about overflow. + SkASSERT(GrResourceProvider::MaxNumNonAAQuads() <= UINT16_MAX && + GrResourceProvider::MaxNumAAQuads() <= UINT16_MAX); + + // Second check if we can always just make a single op and avoid the extra iteration + // needed to clump things together. + if (cnt <= SkTMin(GrResourceProvider::MaxNumNonAAQuads(), + GrResourceProvider::MaxNumAAQuads())) { + auto op = TextureOp::Make(context, set, cnt, filter, saturate, aaType, + constraint, viewMatrix, std::move(textureColorSpaceXform)); + rtc->addDrawOp(clip, std::move(op)); + return; + } + + BatchSizeLimiter state(rtc, clip, context, cnt, filter, saturate, constraint, viewMatrix, std::move(textureColorSpaceXform)); -} -} // namespace GrTextureOp + // kNone and kMSAA never get altered + if (aaType == GrAAType::kNone || aaType == GrAAType::kMSAA) { + // Clump these into series of MaxNumNonAAQuads-sized GrTextureOps + while (state.numLeft() > 0) { + int clumpSize = SkTMin(state.numLeft(), GrResourceProvider::MaxNumNonAAQuads()); + + state.createOp(set, clumpSize, aaType); + } + } else { + // kCoverage can be downgraded to kNone. Note that the following is conservative. kCoverage + // can also get downgraded to kNone if all the quads are on integer coordinates and + // axis-aligned. + SkASSERT(aaType == GrAAType::kCoverage); + + while (state.numLeft() > 0) { + GrAAType runningAA = GrAAType::kNone; + bool clumped = false; + + for (int i = 0; i < state.numLeft(); ++i) { + int absIndex = state.baseIndex() + i; + + if (set[absIndex].fAAFlags != GrQuadAAFlags::kNone) { + + if (i >= GrResourceProvider::MaxNumAAQuads()) { + // Here we either need to boost the AA type to kCoverage, but doing so with + // all the accumulated quads would overflow, or we have a set of AA quads + // that has just gotten too large. In either case, calve off the existing + // quads as their own TextureOp. + state.createOp( + set, + runningAA == GrAAType::kNone ? i : GrResourceProvider::MaxNumAAQuads(), + runningAA); // maybe downgrading AA here + clumped = true; + break; + } + + runningAA = GrAAType::kCoverage; + } else if (runningAA == GrAAType::kNone) { + + if (i >= GrResourceProvider::MaxNumNonAAQuads()) { + // Here we've found a consistent batch of non-AA quads that has gotten too + // large. Calve it off as its own GrTextureOp. + state.createOp(set, GrResourceProvider::MaxNumNonAAQuads(), + GrAAType::kNone); // definitely downgrading AA here + clumped = true; + break; + } + } + } + + if (!clumped) { + // We ran through the above loop w/o hitting a limit. Spit out this last clump of + // quads and call it a day. + state.createOp(set, state.numLeft(), runningAA); // maybe downgrading AA here + } + } + } +} #if GR_TEST_UTILS #include "include/private/GrRecordingContext.h" @@ -808,10 +1265,16 @@ GR_DRAW_OP_TEST_DEFINE(TextureOp) { aaFlags |= random->nextBool() ? GrQuadAAFlags::kBottom : GrQuadAAFlags::kNone; bool useDomain = random->nextBool(); auto saturate = random->nextBool() ? GrTextureOp::Saturate::kYes : GrTextureOp::Saturate::kNo; - return GrTextureOp::Make(context, std::move(proxy), GrColorType::kRGBA_8888, - std::move(texXform), filter, color, saturate, SkBlendMode::kSrcOver, - aaType, aaFlags, GrQuad::MakeFromRect(rect, viewMatrix), - GrQuad(srcRect), useDomain ? &srcRect : nullptr); + GrSurfaceProxyView proxyView( + std::move(proxy), origin, + context->priv().caps()->getTextureSwizzle(format, GrColorType::kRGBA_8888)); + auto alphaType = static_cast( + random->nextRangeU(kUnknown_SkAlphaType + 1, kLastEnum_SkAlphaType)); + + return GrTextureOp::Make(context, std::move(proxyView), alphaType, std::move(texXform), filter, + color, saturate, SkBlendMode::kSrcOver, aaType, aaFlags, + GrQuad::MakeFromRect(rect, viewMatrix), GrQuad(srcRect), + useDomain ? &srcRect : nullptr); } #endif diff --git a/third_party/skia/src/gpu/ops/GrTextureOp.h b/third_party/skia/src/gpu/ops/GrTextureOp.h index da7a6b4eb191..0a8cd369c337 100644 --- a/third_party/skia/src/gpu/ops/GrTextureOp.h +++ b/third_party/skia/src/gpu/ops/GrTextureOp.h @@ -20,49 +20,61 @@ class GrTextureProxy; struct SkRect; class SkMatrix; -namespace GrTextureOp { +class GrTextureOp { +public: -/** - * Controls whether saturate() is called after the texture is color-converted to ensure all - * color values are in 0..1 range. - */ -enum class Saturate : bool { kNo = false, kYes = true }; + /** + * Controls whether saturate() is called after the texture is color-converted to ensure all + * color values are in 0..1 range. + */ + enum class Saturate : bool { kNo = false, kYes = true }; -/** - * Creates an op that draws a sub-quadrilateral of a texture. The passed color is modulated by the - * texture's color. 'deviceQuad' specifies the device-space coordinates to draw, using 'localQuad' - * to map into the proxy's texture space. If non-null, 'domain' represents the boundary for the - * strict src rect constraint. If GrAAType is kCoverage then AA is applied to the edges - * indicated by GrQuadAAFlags. Otherwise, GrQuadAAFlags is ignored. - * - * This is functionally very similar to GrFillRectOp::Make, except that the GrPaint has been - * deconstructed into the texture, filter, modulating color, and blend mode. When blend mode is - * src over, this will return a GrFillRectOp with a paint that samples the proxy. - */ -std::unique_ptr Make(GrRecordingContext*, - sk_sp, - GrColorType srcColorType, - sk_sp, - GrSamplerState::Filter, - const SkPMColor4f&, - Saturate, - SkBlendMode, - GrAAType, - GrQuadAAFlags, - const GrQuad& deviceQuad, - const GrQuad& localQuad, - const SkRect* domain = nullptr); + /** + * Creates an op that draws a sub-quadrilateral of a texture. The passed color is modulated by + * the texture's color. 'deviceQuad' specifies the device-space coordinates to draw, using + * 'localQuad' to map into the proxy's texture space. If non-null, 'domain' represents the + * boundary for the strict src rect constraint. If GrAAType is kCoverage then AA is applied to + * the edges indicated by GrQuadAAFlags. Otherwise, GrQuadAAFlags is ignored. + * + * This is functionally very similar to GrFillRectOp::Make, except that the GrPaint has been + * deconstructed into the texture, filter, modulating color, and blend mode. When blend mode is + * src over, this will return a GrFillRectOp with a paint that samples the proxy. + */ + static std::unique_ptr Make(GrRecordingContext*, + GrSurfaceProxyView, + SkAlphaType srcAlphaType, + sk_sp, + GrSamplerState::Filter, + const SkPMColor4f&, + Saturate, + SkBlendMode, + GrAAType, + GrQuadAAFlags, + const GrQuad& deviceQuad, + const GrQuad& localQuad, + const SkRect* domain = nullptr); + + // Automatically falls back to using one GrFillRectOp per entry if dynamic states are not + // supported, or if the blend mode is not src-over. + static void AddTextureSetOps(GrRenderTargetContext*, + const GrClip& clip, + GrRecordingContext*, + GrRenderTargetContext::TextureSetEntry[], + int cnt, + GrSamplerState::Filter, + Saturate, + SkBlendMode, + GrAAType, + SkCanvas::SrcRectConstraint, + const SkMatrix& viewMatrix, + sk_sp textureXform); + +#if GR_TEST_UTILS + static uint32_t ClassID(); +#endif -// Unlike the single-proxy factory, this only supports src-over blending. -std::unique_ptr MakeSet(GrRecordingContext*, - const GrRenderTargetContext::TextureSetEntry[], - int cnt, - GrSamplerState::Filter, - Saturate, - GrAAType, - SkCanvas::SrcRectConstraint, - const SkMatrix& viewMatrix, - sk_sp textureXform); +private: + class BatchSizeLimiter; +}; -} #endif // GrTextureOp_DEFINED diff --git a/third_party/skia/src/gpu/text/GrAtlasGlyphCache.cpp b/third_party/skia/src/gpu/text/GrAtlasGlyphCache.cpp deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/gpu/text/GrAtlasManager.cpp b/third_party/skia/src/gpu/text/GrAtlasManager.cpp index 8255c7c6f1e1..33be94d5e59b 100644 --- a/third_party/skia/src/gpu/text/GrAtlasManager.cpp +++ b/third_party/skia/src/gpu/text/GrAtlasManager.cpp @@ -94,8 +94,8 @@ static bool save_pixels(GrContext* context, GrSurfaceProxy* sProxy, GrColorType return false; } - SkImageInfo ii = SkImageInfo::Make(sProxy->width(), sProxy->height(), - kRGBA_8888_SkColorType, kPremul_SkAlphaType); + SkImageInfo ii = + SkImageInfo::Make(sProxy->dimensions(), kRGBA_8888_SkColorType, kPremul_SkAlphaType); SkBitmap bm; if (!bm.tryAllocPixels(ii)) { return false; @@ -154,7 +154,7 @@ void GrAtlasManager::dump(GrContext* context) const { } #endif -void GrAtlasManager::setAtlasSizesToMinimum_ForTesting() { +void GrAtlasManager::setAtlasDimensionsToMinimum_ForTesting() { // Delete any old atlases. // This should be safe to do as long as we are not in the middle of a flush. for (int i = 0; i < kMaskFormatCount; i++) { diff --git a/third_party/skia/src/gpu/text/GrAtlasManager.h b/third_party/skia/src/gpu/text/GrAtlasManager.h index 1799d8d6b161..9e4f1c7d86a7 100644 --- a/third_party/skia/src/gpu/text/GrAtlasManager.h +++ b/third_party/skia/src/gpu/text/GrAtlasManager.h @@ -115,7 +115,7 @@ class GrAtlasManager : public GrOnFlushCallbackObject { void dump(GrContext* context) const; #endif - void setAtlasSizesToMinimum_ForTesting(); + void setAtlasDimensionsToMinimum_ForTesting(); void setMaxPages_TestingOnly(uint32_t maxPages); private: diff --git a/third_party/skia/src/gpu/text/GrStrikeCache.cpp b/third_party/skia/src/gpu/text/GrStrikeCache.cpp index f445c65986a5..4a2cd29a05c2 100644 --- a/third_party/skia/src/gpu/text/GrStrikeCache.cpp +++ b/third_party/skia/src/gpu/text/GrStrikeCache.cpp @@ -11,8 +11,10 @@ #include "src/gpu/text/GrAtlasManager.h" #include "src/gpu/text/GrStrikeCache.h" +#include "src/core/SkArenaAlloc.h" #include "src/core/SkAutoMalloc.h" #include "src/core/SkDistanceFieldGen.h" +#include "src/core/SkStrikeSpec.h" GrStrikeCache::GrStrikeCache(const GrCaps* caps, size_t maxTextureBytes) : fPreserveStrike(nullptr) @@ -80,12 +82,12 @@ static void expand_bits(INT_TYPE* dst, } } -static bool get_packed_glyph_image(SkStrike* cache, SkGlyph* glyph, int width, +static bool get_packed_glyph_image(const SkGlyph* glyph, int width, int height, int dstRB, GrMaskFormat expectedMaskFormat, void* dst, const SkMasks& masks) { SkASSERT(glyph->width() == width); SkASSERT(glyph->height() == height); - const void* src = cache->prepareImage(glyph); + const void* src = glyph->image(); if (src == nullptr) { return false; } @@ -190,11 +192,11 @@ GrDrawOpAtlas::ErrorCode GrTextStrike::addGlyphToAtlas( GrStrikeCache* glyphCache, GrAtlasManager* fullAtlasManager, GrGlyph* glyph, - SkStrike* skStrikeCache, + SkBulkGlyphMetricsAndImages* metricsAndImages, GrMaskFormat expectedMaskFormat, bool isScaledGlyph) { SkASSERT(glyph); - SkASSERT(skStrikeCache); + SkASSERT(metricsAndImages); SkASSERT(fCache.find(glyph->fPackedID)); expectedMaskFormat = fullAtlasManager->resolveMaskFormat(expectedMaskFormat); @@ -215,13 +217,13 @@ GrDrawOpAtlas::ErrorCode GrTextStrike::addGlyphToAtlas( } SkAutoSMalloc<1024> storage(size); - SkGlyph* skGlyph = skStrikeCache->glyph(glyph->fPackedID); + const SkGlyph* skGlyph = metricsAndImages->glyph(glyph->fPackedID); void* dataPtr = storage.get(); if (addPad) { sk_bzero(dataPtr, size); dataPtr = (char*)(dataPtr) + rowBytes + bytesPerPixel; } - if (!get_packed_glyph_image(skStrikeCache, skGlyph, glyph->width(), glyph->height(), + if (!get_packed_glyph_image(skGlyph, glyph->width(), glyph->height(), rowBytes, expectedMaskFormat, dataPtr, glyphCache->getMasks())) { return GrDrawOpAtlas::ErrorCode::kError; @@ -242,3 +244,25 @@ GrDrawOpAtlas::ErrorCode GrTextStrike::addGlyphToAtlas( } return result; } + +GrGlyph* GrTextStrike::getGlyph(const SkGlyph& skGlyph) { + GrGlyph* grGlyph = fCache.find(skGlyph.getPackedID()); + if (grGlyph == nullptr) { + grGlyph = fAlloc.make(skGlyph); + fCache.add(grGlyph); + } + return grGlyph; +} + +GrGlyph* +GrTextStrike::getGlyph(SkPackedGlyphID packed, SkBulkGlyphMetricsAndImages* metricsAndImages) { + GrGlyph* grGlyph = fCache.find(packed); + if (grGlyph == nullptr) { + // We could return this to the caller, but in practice it adds code complexity for + // potentially little benefit(ie, if the glyph is not in our font cache, then its not + // in the atlas and we're going to be doing a texture upload anyways). + grGlyph = fAlloc.make(*metricsAndImages->glyph(packed)); + fCache.add(grGlyph); + } + return grGlyph; +} diff --git a/third_party/skia/src/gpu/text/GrStrikeCache.h b/third_party/skia/src/gpu/text/GrStrikeCache.h index 365e0a78686c..a0eaf7c22fca 100644 --- a/third_party/skia/src/gpu/text/GrStrikeCache.h +++ b/third_party/skia/src/gpu/text/GrStrikeCache.h @@ -9,15 +9,16 @@ #define GrStrikeCache_DEFINED #include "src/codec/SkMasks.h" -#include "src/core/SkArenaAlloc.h" -#include "src/core/SkStrike.h" +#include "src/core/SkDescriptor.h" #include "src/core/SkTDynamicHash.h" #include "src/gpu/GrDrawOpAtlas.h" #include "src/gpu/GrGlyph.h" + class GrAtlasManager; class GrGpu; class GrStrikeCache; +class SkBulkGlyphMetricsAndImages; /** * The GrTextStrike manages a pool of CPU backing memory for GrGlyphs. This backing memory @@ -30,30 +31,13 @@ class GrTextStrike : public SkNVRefCnt { public: GrTextStrike(const SkDescriptor& fontScalerKey); - GrGlyph* getGlyph(const SkGlyph& skGlyph) { - GrGlyph* grGlyph = fCache.find(skGlyph.getPackedID()); - if (grGlyph == nullptr) { - grGlyph = fAlloc.make(skGlyph); - fCache.add(grGlyph); - } - return grGlyph; - } + GrGlyph* getGlyph(const SkGlyph& skGlyph); // This variant of the above function is called by GrAtlasTextOp. At this point, it is possible // that the maskformat of the glyph differs from what we expect. In these cases we will just // draw a clear square. // skbug:4143 crbug:510931 - GrGlyph* getGlyph(SkPackedGlyphID packed, SkStrike* skStrike) { - GrGlyph* grGlyph = fCache.find(packed); - if (grGlyph == nullptr) { - // We could return this to the caller, but in practice it adds code complexity for - // potentially little benefit(ie, if the glyph is not in our font cache, then its not - // in the atlas and we're going to be doing a texture upload anyways). - grGlyph = fAlloc.make(*skStrike->glyph(packed)); - fCache.add(grGlyph); - } - return grGlyph; - } + GrGlyph* getGlyph(SkPackedGlyphID packed, SkBulkGlyphMetricsAndImages* metricsAndImages); // 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 @@ -62,7 +46,8 @@ class GrTextStrike : public SkNVRefCnt { // get the actual glyph image itself when we get the glyph metrics. GrDrawOpAtlas::ErrorCode addGlyphToAtlas(GrResourceProvider*, GrDeferredUploadTarget*, GrStrikeCache*, GrAtlasManager*, GrGlyph*, - SkStrike*, GrMaskFormat expectedMaskFormat, + SkBulkGlyphMetricsAndImages*, + GrMaskFormat expectedMaskFormat, bool isScaledGlyph); // testing diff --git a/third_party/skia/src/gpu/text/GrTextBlob.cpp b/third_party/skia/src/gpu/text/GrTextBlob.cpp index 095c6fa531c8..49191584d5f9 100644 --- a/third_party/skia/src/gpu/text/GrTextBlob.cpp +++ b/third_party/skia/src/gpu/text/GrTextBlob.cpp @@ -24,18 +24,30 @@ template static size_t sk_align(size_t s) { } sk_sp GrTextBlob::Make(int glyphCount, - int runCount, + GrStrikeCache* strikeCache, + const SkMatrix& viewMatrix, + SkPoint origin, GrColor color, - GrStrikeCache* strikeCache) { + bool forceWForDistanceFields) { + // Default to no perspective. Implies one of the following vertex formats: kColorTextVASize, + // kGrayTextVASize, kLCDTextVASize. + static_assert(kColorTextVASize <= kGrayTextVASize && kLCDTextVASize <= kGrayTextVASize); + size_t quadSize = kVerticesPerGlyph * kGrayTextVASize; + if (viewMatrix.hasPerspective() || forceWForDistanceFields) { + // Perspective. Implies one of the following vertex formats: kColorTextPerspectiveVASize, + // kGrayTextDFPerspectiveVASize. + static_assert(kColorTextPerspectiveVASize <= kGrayTextDFPerspectiveVASize); + quadSize = kVerticesPerGlyph * kGrayTextDFPerspectiveVASize; + } + // We allocate size for the GrTextBlob itself, plus size for the vertices array, // and size for the glyphIds array. - size_t verticesCount = glyphCount * kVerticesPerGlyph * kMaxVASize; + size_t verticesCount = glyphCount * quadSize; size_t blobStart = 0; - size_t vertex = sk_align (blobStart + sizeof(GrTextBlob) * 1); - size_t glyphs = sk_align (vertex + sizeof(char) * verticesCount); - size_t runs = sk_align(glyphs + sizeof(GrGlyph*) * glyphCount); - size_t size = (runs + sizeof(GrTextBlob::Run) * runCount); + size_t vertex = sk_align (blobStart + sizeof(GrTextBlob) * 1); + size_t glyphs = sk_align (vertex + sizeof(char) * verticesCount); + size_t size = (glyphs + sizeof(GrGlyph*) * glyphCount); void* allocation = ::operator new (size); @@ -43,36 +55,16 @@ sk_sp GrTextBlob::Make(int glyphCount, sk_bzero(allocation, size); } - sk_sp blob{new (allocation) GrTextBlob{strikeCache}}; - blob->fSize = size; + sk_sp blob{new (allocation) GrTextBlob{ + size, strikeCache, viewMatrix, origin, color, forceWForDistanceFields}}; // setup offsets for vertices / glyphs blob->fVertices = SkTAddOffset(blob.get(), vertex); - blob->fGlyphs = SkTAddOffset(blob.get(), glyphs); - blob->fRuns = SkTAddOffset(blob.get(), runs); + blob->fGlyphs = SkTAddOffset(blob.get(), glyphs); - // Initialize runs - for (int i = 0; i < runCount; i++) { - new (&blob->fRuns[i]) GrTextBlob::Run{blob.get(), color}; - } - blob->fRunCountLimit = runCount; return blob; } -void GrTextBlob::Run::setupFont(const SkStrikeSpec& strikeSpec) { - - if (fFallbackStrikeSpec != nullptr) { - *fFallbackStrikeSpec = strikeSpec; - } else { - fStrikeSpec = strikeSpec; - } -} - -void GrTextBlob::Run::appendPathGlyph(const SkPath& path, SkPoint position, - SkScalar scale, bool preTransformed) { - fPathGlyphs.push_back(PathGlyph(path, position.x(), position.y(), scale, preTransformed)); -} - bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosition, const SkMaskFilterBase::BlurRec& blurRec, const SkMatrix& viewMatrix, SkScalar x, SkScalar y) { @@ -110,11 +102,8 @@ bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosi // 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 viewmatrices and we can reuse in all cases - if (fInitialViewMatrix.cheapEqualTo(viewMatrix) && x == fInitialX && y == fInitialY) { - return false; - } - return true; + // Identical view matrices and we can reuse in all cases + return !(fInitialViewMatrix.cheapEqualTo(viewMatrix) && SkPoint{x, y} == fInitialOrigin); } if (this->hasBitmap()) { @@ -135,12 +124,12 @@ bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosi // already generated vertex coordinates to move them to the correct position. // Figure out the translation in view space given a translation in source space. SkScalar transX = viewMatrix.getTranslateX() + - viewMatrix.getScaleX() * (x - fInitialX) + - viewMatrix.getSkewX() * (y - fInitialY) - + viewMatrix.getScaleX() * (x - fInitialOrigin.x()) + + viewMatrix.getSkewX() * (y - fInitialOrigin.y()) - fInitialViewMatrix.getTranslateX(); SkScalar transY = viewMatrix.getTranslateY() + - viewMatrix.getSkewY() * (x - fInitialX) + - viewMatrix.getScaleY() * (y - fInitialY) - + viewMatrix.getSkewY() * (x - fInitialOrigin.x()) + + viewMatrix.getScaleY() * (y - fInitialOrigin.y()) - fInitialViewMatrix.getTranslateY(); if (!SkScalarIsInt(transX) || !SkScalarIsInt(transY)) { return true; @@ -163,7 +152,7 @@ bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosi } inline std::unique_ptr GrTextBlob::makeOp( - const SubRun& info, int glyphCount, uint16_t run, uint16_t subRun, + SubRun& info, int glyphCount, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, const SkIRect& clipRect, const SkPaint& paint, const SkPMColor4f& filteredColor, const SkSurfaceProps& props, const GrDistanceFieldAdjustTable* distanceAdjustTable, GrTextTarget* target) { @@ -186,8 +175,7 @@ inline std::unique_ptr GrTextBlob::makeOp( geometry.fViewMatrix = viewMatrix; geometry.fClipRect = clipRect; geometry.fBlob = SkRef(this); - geometry.fRun = run; - geometry.fSubRun = subRun; + geometry.fSubRunPtr = &info; geometry.fColor = info.maskFormat() == kARGB_GrMaskFormat ? SK_PMColor4fWHITE : filteredColor; geometry.fX = x; geometry.fY = y; @@ -220,103 +208,53 @@ void GrTextBlob::flush(GrTextTarget* target, const SkSurfaceProps& props, const SkPaint& paint, const SkPMColor4f& filteredColor, const GrClip& clip, const SkMatrix& viewMatrix, SkScalar x, SkScalar y) { - // GrTextBlob::makeOp only takes uint16_t values for run and subRun indices. - // Encountering something larger than this is highly unlikely, so we'll just not draw it. - int lastRun = SkTMin(fRunCountLimit, (1 << 16)) - 1; - // For each run in the GrTextBlob we're going to churn through all the glyphs. - // Each run is broken into a path part and a Mask / DFT / ARGB part. - for (int runIndex = 0; runIndex <= lastRun; runIndex++) { - - Run& run = fRuns[runIndex]; - - // first flush any path glyphs - if (run.fPathGlyphs.count()) { + for (auto& subRun : fSubRuns) { + if (subRun.drawAsPaths()) { SkPaint runPaint{paint}; - runPaint.setAntiAlias(run.fAntiAlias); - - for (int i = 0; i < run.fPathGlyphs.count(); i++) { - GrTextBlob::Run::PathGlyph& pathGlyph = run.fPathGlyphs[i]; - - SkMatrix ctm; - const SkPath* path = &pathGlyph.fPath; + runPaint.setAntiAlias(subRun.isAntiAliased()); + // If there are shaders, blurs or styles, the path must be scaled into source + // space independently of the CTM. This allows the CTM to be correct for the + // different effects. + GrStyle style(runPaint); + + bool scalePath = runPaint.getShader() + || style.applies() + || runPaint.getMaskFilter(); + + // The origin for the blob may have changed, so figure out the delta. + SkVector originShift = SkPoint{x, y} - fInitialOrigin; + + for (const auto& pathGlyph : subRun.fPaths) { + SkMatrix ctm{viewMatrix}; + SkMatrix pathMatrix = SkMatrix::MakeScale(subRun.fStrikeSpec.strikeToSourceRatio()); + // Shift the original glyph location in source space to the position of the new + // blob. + pathMatrix.postTranslate(originShift.x() + pathGlyph.fOrigin.x(), + originShift.y() + pathGlyph.fOrigin.y()); // TmpPath must be in the same scope as GrShape shape below. SkTLazy tmpPath; - - // The glyph positions and glyph outlines are either in device space or in source - // space based on fPreTransformed. - if (!pathGlyph.fPreTransformed) { - // Positions and outlines are in source space. - - ctm = viewMatrix; - - SkMatrix pathMatrix = SkMatrix::MakeScale(pathGlyph.fScale, pathGlyph.fScale); - - // The origin for the blob may have changed, so figure out the delta. - SkVector originShift = SkPoint{x, y} - SkPoint{fInitialX, fInitialY}; - - // Shift the original glyph location in source space to the position of the new - // blob. - pathMatrix.postTranslate(originShift.x() + pathGlyph.fX, - originShift.y() + pathGlyph.fY); - - // If there are shaders, blurs or styles, the path must be scaled into source - // space independently of the CTM. This allows the CTM to be correct for the - // different effects. - GrStyle style(runPaint); - bool scalePath = runPaint.getShader() - || style.applies() - || runPaint.getMaskFilter(); - if (!scalePath) { - // Scale can be applied to CTM -- no effects. - - ctm.preConcat(pathMatrix); - } else { - // Scale the outline into source space. - - // Transform the path form the normalized outline to source space. This - // way the CTM will remain the same so it can be used by the effects. - SkPath* sourceOutline = tmpPath.init(); - path->transform(pathMatrix, sourceOutline); - sourceOutline->setIsVolatile(true); - path = sourceOutline; - } - - + const SkPath* path = &pathGlyph.fPath; + if (!scalePath) { + // Scale can be applied to CTM -- no effects. + ctm.preConcat(pathMatrix); } else { - // Positions and outlines are in device space. - - SkPoint originalOrigin = {fInitialX, fInitialY}; - fInitialViewMatrix.mapPoints(&originalOrigin, 1); - - SkPoint newOrigin = {x, y}; - viewMatrix.mapPoints(&newOrigin, 1); - - // The origin shift in device space. - SkPoint originShift = newOrigin - originalOrigin; - - // Shift the original glyph location in device space to the position of the - // new blob. - ctm = SkMatrix::MakeTrans(originShift.x() + pathGlyph.fX, - originShift.y() + pathGlyph.fY); + // Scale the outline into source space. + + // Transform the path form the normalized outline to source space. This + // way the CTM will remain the same so it can be used by the effects. + SkPath* sourceOutline = tmpPath.init(); + path->transform(pathMatrix, sourceOutline); + sourceOutline->setIsVolatile(true); + path = sourceOutline; } // TODO: we are losing the mutability of the path here GrShape shape(*path, paint); - target->drawShape(clip, runPaint, ctm, shape); } - } - - // then flush each subrun, if any - if (!run.fInitialized) { - continue; - } - - int lastSubRun = SkTMin(run.fSubRunInfo.count(), 1 << 16) - 1; - for (int subRun = 0; subRun <= lastSubRun; subRun++) { - const SubRun& info = run.fSubRunInfo[subRun]; - int glyphCount = info.glyphCount(); + } else { + int glyphCount = subRun.glyphCount(); if (0 == glyphCount) { continue; } @@ -329,14 +267,13 @@ void GrTextBlob::flush(GrTextTarget* target, const SkSurfaceProps& props, 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 (!info.drawAsDistanceFields() && !info.needsTransform() && + if (!subRun.drawAsDistanceFields() && !subRun.needsTransform() && clip.isRRect(rtBounds, &clipRRect, &aa) && clipRRect.isRect() && GrAA::kNo == aa) { skipClip = true; // We only need to do clipping work if the subrun isn't contained by the clip SkRect subRunBounds; - this->computeSubRunBounds(&subRunBounds, runIndex, subRun, viewMatrix, x, y, - false); + this->computeSubRunBounds(&subRunBounds, subRun, viewMatrix, x, y, false); if (!clipRRect.getBounds().contains(subRunBounds)) { // If the subrun is completely outside, don't add an op for it if (!clipRRect.getBounds().intersects(subRunBounds)) { @@ -349,7 +286,7 @@ void GrTextBlob::flush(GrTextTarget* target, const SkSurfaceProps& props, } if (submitOp) { - auto op = this->makeOp(info, glyphCount, runIndex, subRun, viewMatrix, x, y, + auto op = this->makeOp(subRun, glyphCount, viewMatrix, x, y, clipRect, paint, filteredColor, props, distanceAdjustTable, target); if (op) { @@ -362,18 +299,17 @@ void GrTextBlob::flush(GrTextTarget* target, const SkSurfaceProps& props, } } } - } } std::unique_ptr GrTextBlob::test_makeOp( - int glyphCount, uint16_t run, uint16_t subRun, const SkMatrix& viewMatrix, + int glyphCount, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, const SkPaint& paint, const SkPMColor4f& filteredColor, const SkSurfaceProps& props, const GrDistanceFieldAdjustTable* distanceAdjustTable, GrTextTarget* target) { - const GrTextBlob::SubRun& info = fRuns[run].fSubRunInfo[subRun]; + GrTextBlob::SubRun& info = fSubRuns[0]; SkIRect emptyRect = SkIRect::MakeEmpty(); - return this->makeOp(info, glyphCount, run, subRun, viewMatrix, x, y, emptyRect, + return this->makeOp(info, glyphCount, viewMatrix, x, y, emptyRect, paint, filteredColor, props, distanceAdjustTable, target); } @@ -393,21 +329,11 @@ void GrTextBlob::AssertEqual(const GrTextBlob& l, const GrTextBlob& r) { SkASSERT_RELEASE(l.fMinMaxScale == r.fMinMaxScale); SkASSERT_RELEASE(l.fTextType == r.fTextType); - SkASSERT_RELEASE(l.fRunCountLimit == r.fRunCountLimit); - for (int i = 0; i < l.fRunCountLimit; i++) { - const Run& lRun = l.fRuns[i]; - const Run& rRun = r.fRuns[i]; - - SkASSERT_RELEASE(lRun.fStrikeSpec.descriptor() == rRun.fStrikeSpec.descriptor()); - - // color can be changed - //SkASSERT(lRun.fColor == rRun.fColor); - SkASSERT_RELEASE(lRun.fInitialized == rRun.fInitialized); - - SkASSERT_RELEASE(lRun.fSubRunInfo.count() == rRun.fSubRunInfo.count()); - for(int j = 0; j < lRun.fSubRunInfo.count(); j++) { - const SubRun& lSubRun = lRun.fSubRunInfo[j]; - const SubRun& rSubRun = rRun.fSubRunInfo[j]; + for(auto t : SkMakeZip(l.fSubRuns, r.fSubRuns)) { + const SubRun& lSubRun = std::get<0>(t); + const SubRun& rSubRun = std::get<1>(t); + SkASSERT(lSubRun.drawAsPaths() == rSubRun.drawAsPaths()); + if (!lSubRun.drawAsPaths()) { // TODO we can do this check, but we have to apply the VM to the old vertex bounds //SkASSERT_RELEASE(lSubRun.vertexBounds() == rSubRun.vertexBounds()); @@ -422,22 +348,72 @@ void GrTextBlob::AssertEqual(const GrTextBlob& l, const GrTextBlob& r) { } SkASSERT_RELEASE(lSubRun.vertexStartIndex() == rSubRun.vertexStartIndex()); - SkASSERT_RELEASE(lSubRun.vertexEndIndex() == rSubRun.vertexEndIndex()); SkASSERT_RELEASE(lSubRun.glyphStartIndex() == rSubRun.glyphStartIndex()); - SkASSERT_RELEASE(lSubRun.glyphEndIndex() == rSubRun.glyphEndIndex()); SkASSERT_RELEASE(lSubRun.maskFormat() == rSubRun.maskFormat()); SkASSERT_RELEASE(lSubRun.drawAsDistanceFields() == rSubRun.drawAsDistanceFields()); SkASSERT_RELEASE(lSubRun.hasUseLCDText() == rSubRun.hasUseLCDText()); + } else { + SkASSERT_RELEASE(lSubRun.fPaths.size() == rSubRun.fPaths.size()); + for(auto p : SkMakeZip(lSubRun.fPaths, rSubRun.fPaths)) { + const PathGlyph& lPath = std::get<0>(p); + const PathGlyph& rPath = std::get<1>(p); + SkASSERT_RELEASE(lPath.fPath == rPath.fPath); + // We can't assert that these have the same translations + } } + } +} - SkASSERT_RELEASE(lRun.fPathGlyphs.count() == rRun.fPathGlyphs.count()); - for (int i = 0; i < lRun.fPathGlyphs.count(); i++) { - const Run::PathGlyph& lPathGlyph = lRun.fPathGlyphs[i]; - const Run::PathGlyph& rPathGlyph = rRun.fPathGlyphs[i]; +static SkMatrix make_inverse(const SkMatrix& matrix) { + SkMatrix inverseMatrix; + if (!matrix.invert(&inverseMatrix)) { + inverseMatrix = SkMatrix::I(); + } + return inverseMatrix; +} - SkASSERT_RELEASE(lPathGlyph.fPath == rPathGlyph.fPath); - // We can't assert that these have the same translations - } +GrTextBlob::GrTextBlob(size_t size, + GrStrikeCache* strikeCache, + const SkMatrix& viewMatrix, + SkPoint origin, + GrColor color, + bool forceWForDistanceFields) + : fSize{size} + , fStrikeCache{strikeCache} + , fInitialViewMatrix{viewMatrix} + , fInitialViewMatrixInverse{make_inverse(viewMatrix)} + , fInitialOrigin{origin} + , fForceWForDistanceFields{forceWForDistanceFields} + , fColor{color} { } + +void GrTextBlob::computeSubRunBounds(SkRect* outBounds, const GrTextBlob::SubRun& subRun, + const SkMatrix& viewMatrix, SkScalar x, SkScalar y, + bool needsGlyphTransform) { + // We don't yet position distance field text on the cpu, so we have to map the vertex bounds + // into device space. + // We handle vertex bounds differently for distance field text and bitmap text because + // the vertex bounds of bitmap text are in device space. If we are flushing multiple runs + // from one blob then we are going to pay the price here of mapping the rect for each run. + *outBounds = subRun.vertexBounds(); + if (needsGlyphTransform) { + // Distance field text is positioned with the (X,Y) as part of the glyph position, + // and currently the view matrix is applied on the GPU + outBounds->offset(SkPoint{x, y} - fInitialOrigin); + viewMatrix.mapRect(outBounds); + } else { + // Bitmap text is fully positioned on the CPU, and offset by an (X,Y) translate in + // device space. + SkMatrix boundsMatrix = fInitialViewMatrixInverse; + + boundsMatrix.postTranslate(-fInitialOrigin.x(), -fInitialOrigin.y()); + + boundsMatrix.postTranslate(x, y); + + boundsMatrix.postConcat(viewMatrix); + boundsMatrix.mapRect(outBounds); + + // Due to floating point numerical inaccuracies, we have to round out here + outBounds->roundOut(outBounds); } } @@ -445,7 +421,7 @@ void GrTextBlob::SubRun::computeTranslation(const SkMatrix& viewMatrix, SkScalar x, SkScalar y, SkScalar* transX, SkScalar* transY) { // Don't use the matrix to translate on distance field for fallback subruns. - calculate_translation(!this->drawAsDistanceFields() && !this->isFallback(), viewMatrix, + calculate_translation(!this->drawAsDistanceFields() && !this->needsTransform(), viewMatrix, x, y, fCurrentViewMatrix, fX, fY, transX, transY); fCurrentViewMatrix = viewMatrix; fX = x; diff --git a/third_party/skia/src/gpu/text/GrTextBlob.h b/third_party/skia/src/gpu/text/GrTextBlob.h index ddea88d15fe5..51fda8f6d1ca 100644 --- a/third_party/skia/src/gpu/text/GrTextBlob.h +++ b/third_party/skia/src/gpu/text/GrTextBlob.h @@ -25,6 +25,7 @@ #include "src/gpu/text/GrTextTarget.h" class GrAtlasManager; +class GrAtlasTextOp; struct GrDistanceFieldAdjustTable; struct GrGlyph; @@ -33,6 +34,8 @@ class SkTextBlobRunIterator; // With this flag enabled, the GrTextContext will, as a sanity check, regenerate every blob // that comes in to verify the integrity of its cache +// This is of dubious value, and maybe should be removed. I checked it on 11/21/2019, and many +// tests failed. #define CACHE_SANITY_CHECK 0 /* @@ -45,38 +48,33 @@ class SkTextBlobRunIterator; * The only thing(aside from a memcopy) required to flush a GrTextBlob is to ensure that * the GrAtlas will not evict anything the Blob needs. * - * Note: This struct should really be named GrCachedAtasTextBlob, but that is too verbose. - * * *WARNING* If you add new fields to this struct, then you may need to to update AssertEqual */ class GrTextBlob : public SkNVRefCnt, public SkGlyphRunPainterInterface { - struct Run; public: + class SubRun; SK_DECLARE_INTERNAL_LLIST_INTERFACE(GrTextBlob); + using SubRunBufferSpec = std::tuple; class VertexRegenerator; void generateFromGlyphRunList(const GrShaderCaps& shaderCaps, const GrTextContext::Options& options, const SkPaint& paint, - SkScalerContextFlags scalerContextFlags, const SkMatrix& viewMatrix, const SkSurfaceProps& props, const SkGlyphRunList& glyphRunList, SkGlyphRunListPainter* glyphPainter); - static sk_sp Make( - int glyphCount, - int runCount, - GrColor color, - GrStrikeCache* strikeCache); + // Make an empty GrTextBlob, with all the invariants set to make the right decisions when + // adding SubRuns. + static sk_sp Make(int glyphCount, + GrStrikeCache* strikeCache, + const SkMatrix& viewMatrix, + SkPoint origin, + GrColor color, + bool forceWForDistanceFields); - /** - * We currently force regeneration of a blob if old or new matrix differ in having perspective. - * If we ever change that then the key must contain the perspectiveness when there are distance - * fields as perspective distance field use 3 component vertex positions and non-perspective - * uses 2. - */ struct Key { Key() { sk_bzero(this, sizeof(Key)); @@ -134,28 +132,16 @@ class GrTextBlob : public SkNVRefCnt, public SkGlyphRunPainterInterf void setHasDistanceField() { fTextType |= kHasDistanceField_TextType; } void setHasBitmap() { fTextType |= kHasBitmap_TextType; } - int runCountLimit() const { return fRunCountLimit; } - - Run* pushBackRun() { - SkASSERT(fRunCount < fRunCountLimit); - - // If there is more run, then connect up the subruns. - if (fRunCount > 0) { - SubRun& newRun = fRuns[fRunCount].fSubRunInfo.back(); - SubRun& lastRun = fRuns[fRunCount - 1].fSubRunInfo.back(); - newRun.setAsSuccessor(lastRun); - } - - fRunCount++; - return this->currentRun(); - } - void setMinAndMaxScale(SkScalar scaledMin, SkScalar scaledMax) { // we init fMaxMinScale and fMinMaxScale in the constructor fMaxMinScale = SkMaxScalar(scaledMin, fMaxMinScale); fMinMaxScale = SkMinScalar(scaledMax, fMinMaxScale); } + bool hasPerspective() const { + return fInitialViewMatrix.hasPerspective(); + } + static size_t GetVertexStride(GrMaskFormat maskFormat, bool hasWCoord) { switch (maskFormat) { case kA8_GrMaskFormat: @@ -176,38 +162,9 @@ class GrTextBlob : public SkNVRefCnt, public SkGlyphRunPainterInterf const SkPaint& paint, const SkPMColor4f& filteredColor, const GrClip& clip, const SkMatrix& viewMatrix, SkScalar x, SkScalar y); - void computeSubRunBounds(SkRect* outBounds, int runIndex, int subRunIndex, + void computeSubRunBounds(SkRect* outBounds, const SubRun& subRun, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, - bool needsGlyphTransform) { - // We don't yet position distance field text on the cpu, so we have to map the vertex bounds - // into device space. - // We handle vertex bounds differently for distance field text and bitmap text because - // the vertex bounds of bitmap text are in device space. If we are flushing multiple runs - // from one blob then we are going to pay the price here of mapping the rect for each run. - const Run& run = fRuns[runIndex]; - const SubRun& subRun = run.fSubRunInfo[subRunIndex]; - *outBounds = subRun.vertexBounds(); - if (needsGlyphTransform) { - // Distance field text is positioned with the (X,Y) as part of the glyph position, - // and currently the view matrix is applied on the GPU - outBounds->offset(x - fInitialX, y - fInitialY); - viewMatrix.mapRect(outBounds); - } else { - // Bitmap text is fully positioned on the CPU, and offset by an (X,Y) translate in - // device space. - SkMatrix boundsMatrix = fInitialViewMatrixInverse; - - boundsMatrix.postTranslate(-fInitialX, -fInitialY); - - boundsMatrix.postTranslate(x, y); - - boundsMatrix.postConcat(viewMatrix); - boundsMatrix.mapRect(outBounds); - - // Due to floating point numerical inaccuracies, we have to round out here - outBounds->roundOut(outBounds); - } - } + bool needsGlyphTransform); // position + local coord static const size_t kColorTextVASize = sizeof(SkPoint) + sizeof(SkIPoint16); @@ -221,70 +178,74 @@ class GrTextBlob : public SkNVRefCnt, public SkGlyphRunPainterInterf static void AssertEqual(const GrTextBlob&, const GrTextBlob&); + // This function will only be called when we are generating a blob from scratch. // The color here is the GrPaint color, and it is used to determine whether we // have to regenerate LCD text blobs. - // We use this color vs the SkPaint color because it has the colorfilter applied. - void initReusableBlob(SkColor luminanceColor, const SkMatrix& viewMatrix, - SkScalar x, SkScalar y) { + // We use this color vs the SkPaint color because it has the color filter applied. + void initReusableBlob(SkColor luminanceColor) { fLuminanceColor = luminanceColor; - this->setupViewMatrix(viewMatrix, x, y); - } - - void initThrowawayBlob(const SkMatrix& viewMatrix, SkScalar x, SkScalar y) { - this->setupViewMatrix(viewMatrix, x, y); } const Key& key() const { return fKey; } size_t size() const { return fSize; } - ~GrTextBlob() override { - for (int i = 0; i < fRunCountLimit; i++) { - fRuns[i].~Run(); - } - } + ~GrTextBlob() override { } //////////////////////////////////////////////////////////////////////////////////////////////// // Internal test methods - std::unique_ptr test_makeOp(int glyphCount, uint16_t run, uint16_t subRun, + std::unique_ptr test_makeOp(int glyphCount, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, const SkPaint& paint, const SkPMColor4f& filteredColor, const SkSurfaceProps&, const GrDistanceFieldAdjustTable*, GrTextTarget*); -private: - GrTextBlob(GrStrikeCache* strikeCache) : fStrikeCache{strikeCache} { } - - // This function will only be called when we are generating a blob from scratch. We record the - // initial view matrix and initial offsets(x,y), because we record vertex bounds relative to - // these numbers. When blobs are reused with new matrices, we need to return to model space so - // we can update the vertex bounds appropriately. - void setupViewMatrix(const SkMatrix& viewMatrix, SkScalar x, SkScalar y) { - fInitialViewMatrix = viewMatrix; - if (!viewMatrix.invert(&fInitialViewMatrixInverse)) { - fInitialViewMatrixInverse = SkMatrix::I(); - } - fInitialX = x; - fInitialY = y; +public: + // Any glyphs that can't be rendered with the base or override descriptor + // are rendered as paths + struct PathGlyph { + PathGlyph(const SkPath& path, SkPoint origin) + : fPath(path) + , fOrigin(origin) {} + SkPath fPath; + SkPoint fOrigin; + }; - // make sure all initial subruns have the correct VM and X/Y applied - for (int i = 0; i < fRunCountLimit; i++) { - fRuns[i].fSubRunInfo[0].init(fInitialViewMatrix, x, y); + enum SubRunType { + kDirectMask, + kTransformedMask, + kTransformedPath, + kTransformedSDFT + }; + + bool hasW(SubRunType type) const { + if (type == kTransformedSDFT) { + return this->hasPerspective() || fForceWForDistanceFields; + } else if (type == kTransformedMask || type == kTransformedPath) { + return this->hasPerspective(); } + + // The viewMatrix is implicitly SkMatrix::I when drawing kDirectMask, because it is not + // used. + return false; } + // Hold data to draw the different types of sub run. SubRuns are produced knowing all the + // glyphs that are included in them. class SubRun { public: - SubRun(Run* run, const SkStrikeSpec& strikeSpec, GrColor color) - : fColor{color} - , fRun{run} - , fStrikeSpec{strikeSpec} {} + // SubRun for masks + SubRun(SubRunType type, + GrTextBlob* textBlob, + const SkStrikeSpec& strikeSpec, + GrMaskFormat format, + const SubRunBufferSpec& bufferSpec, + sk_sp&& grStrike); - // When used with emplace_back, this constructs a SubRun from the last SubRun in an array. - //SubRun(SkSTArray<1, SubRun>* subRunList) - // : fColor{subRunList->fromBack(1).fColor} { } + // SubRun for paths + SubRun(GrTextBlob* textBlob, const SkStrikeSpec& strikeSpec); - void appendGlyph(GrGlyph* glyph, SkRect dstRect); + void appendGlyphs(const SkZip& drawables); // TODO when this object is more internal, drop the privacy void resetBulkUseToken() { fBulkUseToken.reset(); } @@ -296,28 +257,14 @@ class GrTextBlob : public SkNVRefCnt, public SkGlyphRunPainterInterf void setAtlasGeneration(uint64_t atlasGeneration) { fAtlasGeneration = atlasGeneration;} uint64_t atlasGeneration() const { return fAtlasGeneration; } - size_t byteCount() const { return fVertexEndIndex - fVertexStartIndex; } size_t vertexStartIndex() const { return fVertexStartIndex; } - size_t vertexEndIndex() const { return fVertexEndIndex; } - uint32_t glyphCount() const { return fGlyphEndIndex - fGlyphStartIndex; } uint32_t glyphStartIndex() const { return fGlyphStartIndex; } - uint32_t glyphEndIndex() const { return fGlyphEndIndex; } + void setColor(GrColor color) { fColor = color; } GrColor color() const { return fColor; } - void setMaskFormat(GrMaskFormat format) { fMaskFormat = format; } - GrMaskFormat maskFormat() const { return fMaskFormat; } - - void setAsSuccessor(const SubRun& prev) { - fGlyphStartIndex = prev.glyphEndIndex(); - fGlyphEndIndex = fGlyphStartIndex; - fVertexStartIndex = prev.vertexEndIndex(); - fVertexEndIndex = fVertexStartIndex; - - // copy over viewmatrix settings - this->init(prev.fCurrentViewMatrix, prev.fX, prev.fY); - } + GrMaskFormat maskFormat() const { return fMaskFormat; } const SkRect& vertexBounds() const { return fVertexBounds; } void joinGlyphBounds(const SkRect& glyphBounds) { @@ -334,247 +281,159 @@ class GrTextBlob : public SkNVRefCnt, public SkGlyphRunPainterInterf void computeTranslation(const SkMatrix& viewMatrix, SkScalar x, SkScalar y, SkScalar* transX, SkScalar* transY); + bool drawAsDistanceFields() const { return fType == kTransformedSDFT; } + bool drawAsPaths() const { return fType == kTransformedPath; } + bool needsTransform() const { + return fType == kTransformedPath + || fType == kTransformedMask + || fType == kTransformedSDFT; + } + bool hasW() const { + return fBlob->hasW(fType); + } + // df properties - void setDrawAsDistanceFields() { fFlags.drawAsSdf = true; } - bool drawAsDistanceFields() const { return fFlags.drawAsSdf; } void setUseLCDText(bool useLCDText) { fFlags.useLCDText = useLCDText; } bool hasUseLCDText() const { return fFlags.useLCDText; } void setAntiAliased(bool antiAliased) { fFlags.antiAliased = antiAliased; } bool isAntiAliased() const { return fFlags.antiAliased; } - void setHasWCoord(bool hasW) { fFlags.hasWCoord = hasW; } - bool hasWCoord() const { return fFlags.hasWCoord; } - void setNeedsTransform(bool needsTransform) { fFlags.needsTransform = needsTransform; } - bool needsTransform() const { return fFlags.needsTransform; } - void setFallback() { fFlags.argbFallback = true; } - bool isFallback() { return fFlags.argbFallback; } const SkStrikeSpec& strikeSpec() const { return fStrikeSpec; } - private: - GrDrawOpAtlas::BulkUseTokenUpdater fBulkUseToken; + const SubRunType fType; + GrTextBlob* const fBlob; + const GrMaskFormat fMaskFormat; + const uint32_t fGlyphStartIndex; + const uint32_t fGlyphEndIndex; + const size_t fVertexStartIndex; + const size_t fVertexEndIndex; + const SkStrikeSpec fStrikeSpec; sk_sp fStrike; - SkMatrix fCurrentViewMatrix; + struct { + bool useLCDText:1; + bool antiAliased:1; + } fFlags{false, false}; + GrColor fColor; + GrDrawOpAtlas::BulkUseTokenUpdater fBulkUseToken; SkRect fVertexBounds = SkRectPriv::MakeLargestInverted(); uint64_t fAtlasGeneration{GrDrawOpAtlas::kInvalidAtlasGeneration}; - size_t fVertexStartIndex{0}; - size_t fVertexEndIndex{0}; - uint32_t fGlyphStartIndex{0}; - uint32_t fGlyphEndIndex{0}; SkScalar fX; SkScalar fY; - GrColor fColor{GrColor_ILLEGAL}; - GrMaskFormat fMaskFormat{kA8_GrMaskFormat}; - struct { - bool drawAsSdf:1; - bool useLCDText:1; - bool antiAliased:1; - bool hasWCoord:1; - bool needsTransform:1; - bool argbFallback:1; - } fFlags{false, false, false, false, false, false}; - Run* const fRun; - const SkStrikeSpec& fStrikeSpec; - }; // SubRunInfo - - /* - * Each Run inside of the blob can have its texture coordinates regenerated if required. - * To determine if regeneration is necessary, fAtlasGeneration is used. If there have been - * any evictions inside of the atlas, then we will simply regenerate Runs. We could track - * this at a more fine grained level, but its not clear if this is worth it, as evictions - * should be fairly rare. - * - * One additional point, each run can contain glyphs with any of the three mask formats. - * We call these SubRuns. Because a subrun must be a contiguous range, we have to create - * a new subrun each time the mask format changes in a run. In theory, a run can have as - * many SubRuns as it has glyphs, ie if a run alternates between color emoji and A8. In - * practice, the vast majority of runs have only a single subrun. - * - * Finally, for runs where the entire thing is too large for the GrTextContext to - * handle, we have a bit to mark the run as flushable via rendering as paths or as scaled - * glyphs. It would be a bit expensive to figure out ahead of time whether or not a run - * can flush in this manner, so we always allocate vertices for the run, regardless of - * whether or not it is too large. The benefit of this strategy is that we can always reuse - * a blob allocation regardless of viewmatrix changes. We could store positions for these - * glyphs, however, it's not clear if this is a win because we'd still have to either go to the - * glyph cache to get the path at flush time, or hold onto the path in the cache, which - * would greatly increase the memory of these cached items. - */ - struct Run { - explicit Run(GrTextBlob* blob, GrColor color) - : fBlob{blob}, fColor{color} { - // To ensure we always have one subrun, we push back a fresh run here - fSubRunInfo.emplace_back(this, fStrikeSpec, color); - } - - // sets the last subrun of runIndex to use w values - void setSubRunHasW(bool hasWCoord) { - SubRun& subRun = this->fSubRunInfo.back(); - subRun.setHasWCoord(hasWCoord); - } - - // inits the override descriptor on the current run. All following subruns must use this - // descriptor - SubRun* initARGBFallback() { - fFallbackStrikeSpec.reset(new SkStrikeSpec{}); - // Push back a new subrun to fill and set the override descriptor - SubRun* subRun = this->pushBackSubRun(*fFallbackStrikeSpec, fColor); - subRun->setMaskFormat(kARGB_GrMaskFormat); - subRun->setFallback(); - return subRun; - } - - // Appends a glyph to the blob as a path only. - void appendPathGlyph( - const SkPath& path, SkPoint position, SkScalar scale, bool preTransformed); - - // Append a glyph to the sub run taking care to switch the glyph if needed. - void switchSubRunIfNeededAndAppendGlyph(GrGlyph* glyph, - const sk_sp& strike, - const SkRect& destRect, - bool needsTransform); - - // Used when the glyph in the cache has the CTM already applied, therefore no transform - // is needed during rendering. - void appendDeviceSpaceGlyph(const sk_sp& strike, - const SkGlyph& skGlyph, - SkPoint origin); - - // The glyph is oriented upright in the cache and needs to be transformed onto the screen. - void appendSourceSpaceGlyph(const sk_sp& strike, - const SkGlyph& skGlyph, - SkPoint origin, - SkScalar textScale); - - void setupFont(const SkStrikeSpec& strikeSpec); - - void setRunFontAntiAlias(bool aa) { - fAntiAlias = aa; - } - - // sets the last subrun of runIndex to use distance field text - void setSubRunHasDistanceFields(bool hasLCD, bool isAntiAlias, bool hasWCoord) { - SubRun& subRun = fSubRunInfo.back(); - subRun.setUseLCDText(hasLCD); - subRun.setAntiAliased(isAntiAlias); - subRun.setDrawAsDistanceFields(); - subRun.setHasWCoord(hasWCoord); - } - - SubRun* pushBackSubRun(const SkStrikeSpec& desc, GrColor color) { - // Forward glyph / vertex information to seed the new sub run - SubRun& newSubRun = fSubRunInfo.emplace_back(this, desc, color); - - const SubRun& prevSubRun = fSubRunInfo.fromBack(1); + SkMatrix fCurrentViewMatrix; + std::vector fPaths; + }; // SubRun + + SubRun* makeSubRun(SubRunType type, + const SkZip& drawables, + const SkStrikeSpec& strikeSpec, + GrMaskFormat format); + + void addSingleMaskFormat( + SubRunType type, + const SkZip& drawables, + const SkStrikeSpec& strikeSpec, + GrMaskFormat format); + + void addMultiMaskFormat( + SubRunType type, + const SkZip& drawables, + const SkStrikeSpec& strikeSpec); + + void addSDFT(const SkZip& drawables, + const SkStrikeSpec& strikeSpec, + const SkFont& runFont, + SkScalar minScale, + SkScalar maxScale); - // Forward glyph / vertex information to seed the new sub run - newSubRun.setAsSuccessor(prevSubRun); - return &newSubRun; - } +private: + GrTextBlob(size_t size, + GrStrikeCache* strikeCache, + const SkMatrix& viewMatrix, + SkPoint origin, + GrColor color, + bool forceWForDistanceFields); - // Any glyphs that can't be rendered with the base or override descriptor - // are rendered as paths - struct PathGlyph { - PathGlyph(const SkPath& path, SkScalar x, SkScalar y, SkScalar scale, bool preXformed) - : fPath(path) - , fX(x) - , fY(y) - , fScale(scale) - , fPreTransformed(preXformed) {} - SkPath fPath; - SkScalar fX; - SkScalar fY; - SkScalar fScale; - bool fPreTransformed; - }; - - SkSTArray<1, SubRun> fSubRunInfo; - SkStrikeSpec fStrikeSpec; - - // Distance field text cannot draw coloremoji, and so has to fall back. However, - // though the distance field text and the coloremoji may share the same run, they - // will have different descriptors. If fFallbackStrikeSpec is non-nullptr, then it - // will be used in place of the run's descriptor to regen texture coords - std::unique_ptr fFallbackStrikeSpec; - - SkTArray fPathGlyphs; - - bool fAntiAlias{false}; // needed mainly for rendering paths - bool fInitialized{false}; + struct StrokeInfo { + SkScalar fFrameWidth; + SkScalar fMiterLimit; + SkPaint::Join fJoin; + }; - GrTextBlob* const fBlob; - GrColor fColor; - }; // Run + enum TextType { + kHasDistanceField_TextType = 0x1, + kHasBitmap_TextType = 0x2, + }; std::unique_ptr makeOp( - const SubRun& info, int glyphCount, uint16_t run, uint16_t subRun, + SubRun& info, int glyphCount, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, const SkIRect& clipRect, const SkPaint& paint, const SkPMColor4f& filteredColor, const SkSurfaceProps&, const GrDistanceFieldAdjustTable*, GrTextTarget*); - // currentRun, startRun, and the process* calls are all used by the SkGlyphRunPainter, and - // live in SkGlyphRunPainter.cpp file. - Run* currentRun(); - - void startRun(const SkGlyphRun& glyphRun, bool useSDFT) override; - - void processDeviceMasks(SkSpan masks, + void processDeviceMasks(const SkZip& drawables, const SkStrikeSpec& strikeSpec) override; - void processSourcePaths(SkSpan paths, + void processSourcePaths(const SkZip& drawables, + const SkFont& runFont, const SkStrikeSpec& strikeSpec) override; - void processDevicePaths(SkSpan paths) override; - - void processSourceSDFT(SkSpan masks, + void processSourceSDFT(const SkZip& drawables, const SkStrikeSpec& strikeSpec, const SkFont& runFont, SkScalar minScale, - SkScalar maxScale, - bool hasWCoord) override; + SkScalar maxScale) override; - void processSourceFallback(SkSpan masks, - const SkStrikeSpec& strikeSpec, - bool hasW) override; + void processSourceMasks(const SkZip& drawables, + const SkStrikeSpec& strikeSpec) override; - void processDeviceFallback(SkSpan masks, - const SkStrikeSpec& strikeSpec) override; + // Overall size of this struct plus vertices and glyphs at the end. + const size_t fSize; - struct StrokeInfo { - SkScalar fFrameWidth; - SkScalar fMiterLimit; - SkPaint::Join fJoin; - }; + // Lifetime: The GrStrikeCache is owned by and has the same lifetime as the GrRecordingContext. + // The GrRecordingContext also owns the GrTextBlob cache which owns this GrTextBlob. + GrStrikeCache* const fStrikeCache; - enum TextType { - kHasDistanceField_TextType = 0x1, - kHasBitmap_TextType = 0x2, - }; + // The initial view matrix and its inverse. This is used for moving additional draws of this + // same text blob. We record the initial view matrix and initial offsets(x,y), because we + // record vertex bounds relative to these numbers. When blobs are reused with new matrices, + // we need to return to source space so we can update the vertex bounds appropriately. + const SkMatrix fInitialViewMatrix; + const SkMatrix fInitialViewMatrixInverse; + + // Initial position of this blob. Used for calculating position differences when reusing this + // 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; - // all glyph / vertex offsets are into these pools. + // Pool of bytes for vertex data. char* fVertices; + // How much (in bytes) of the vertex data is used while accumulating SubRuns. + size_t fVerticesCursor{0}; + // Pointers to every glyph that will be drawn. GrGlyph** fGlyphs; - Run* fRuns; + // Number of glyphs stored in fGlyphs while accumulating SubRuns. + uint32_t fGlyphsCursor{0}; + + // Assume one run per text blob. + SkSTArray<1, SubRun> fSubRuns; - // Lifetime: The GrStrikeCache is owned by and has the same lifetime as the GrRecordingContext. - // The GrRecordingContext also owns the GrTextBlob cache which owns this GrTextBlob. - GrStrikeCache* const fStrikeCache; SkMaskFilterBase::BlurRec fBlurRec; StrokeInfo fStrokeInfo; Key fKey; - SkMatrix fInitialViewMatrix; - SkMatrix fInitialViewMatrixInverse; - size_t fSize; SkColor fLuminanceColor; - SkScalar fInitialX; - SkScalar fInitialY; - // We can reuse distance field text, but only if the new viewmatrix would not result in + + // We can reuse distance field text, but only if the new view matrix would not result in // a mip change. Because there can be multiple runs in a blob, we track the overall // maximum minimum scale, and minimum maximum scale, we can support before we need to regen SkScalar fMaxMinScale{-SK_ScalarMax}; SkScalar fMinMaxScale{SK_ScalarMax}; - int fRunCount{0}; - int fRunCountLimit; + uint8_t fTextType{0}; }; @@ -593,10 +452,10 @@ class GrTextBlob::VertexRegenerator { * SkAutoGlyphCache is reused then it can save the cost of multiple detach/attach operations of * SkGlyphCache. */ - VertexRegenerator(GrResourceProvider*, GrTextBlob*, int runIdx, int subRunIdx, + VertexRegenerator(GrResourceProvider*, GrTextBlob*, + GrTextBlob::SubRun* subRun, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, GrColor color, - GrDeferredUploadTarget*, GrStrikeCache*, GrAtlasManager*, - SkExclusiveStrikePtr*); + GrDeferredUploadTarget*, GrStrikeCache*, GrAtlasManager*); struct Result { /** @@ -626,9 +485,9 @@ class GrTextBlob::VertexRegenerator { const SkMatrix& fViewMatrix; GrTextBlob* fBlob; GrDeferredUploadTarget* fUploadTarget; - GrStrikeCache* fGlyphCache; + GrStrikeCache* fGrStrikeCache; GrAtlasManager* fFullAtlasManager; - SkExclusiveStrikePtr* fLazyStrike; + SkTLazy fMetricsAndImages; SubRun* fSubRun; GrColor fColor; SkScalar fTransX; diff --git a/third_party/skia/src/gpu/text/GrTextBlobCache.h b/third_party/skia/src/gpu/text/GrTextBlobCache.h index 547911208555..1484cee52798 100644 --- a/third_party/skia/src/gpu/text/GrTextBlobCache.h +++ b/third_party/skia/src/gpu/text/GrTextBlobCache.h @@ -34,20 +34,29 @@ class GrTextBlobCache { ~GrTextBlobCache(); sk_sp makeBlob(const SkGlyphRunList& glyphRunList, + GrStrikeCache* strikeCache, + const SkMatrix& viewMatrix, GrColor color, - GrStrikeCache* strikeCache) { + bool forceW) { return GrTextBlob::Make( - glyphRunList.totalGlyphCount(), glyphRunList.size(), color, strikeCache); + glyphRunList.totalGlyphCount(), + strikeCache, + viewMatrix, + glyphRunList.origin(), + color, + forceW); } sk_sp makeCachedBlob(const SkGlyphRunList& glyphRunList, + GrStrikeCache* strikeCache, const GrTextBlob::Key& key, const SkMaskFilterBase::BlurRec& blurRec, - const SkPaint& paint, + const SkMatrix& viewMatrix, GrColor color, - GrStrikeCache* strikeCache) { - sk_sp cacheBlob(makeBlob(glyphRunList, color, strikeCache)); - cacheBlob->setupKey(key, blurRec, paint); + bool forceW) { + sk_sp cacheBlob( + this->makeBlob(glyphRunList, strikeCache, viewMatrix, color, forceW)); + cacheBlob->setupKey(key, blurRec, glyphRunList.paint()); this->add(cacheBlob); glyphRunList.temporaryShuntBlobNotifyAddedToCache(fUniqueID); return cacheBlob; diff --git a/third_party/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp b/third_party/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp index 976beaf3d4e3..f465dc3a008f 100644 --- a/third_party/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp +++ b/third_party/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp @@ -117,21 +117,19 @@ static void regen_texcoords(char* vertex, size_t vertexStride, const GrGlyph* gl GrTextBlob::VertexRegenerator::VertexRegenerator(GrResourceProvider* resourceProvider, GrTextBlob* blob, - int runIdx, int subRunIdx, + GrTextBlob::SubRun* subRun, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, GrColor color, GrDeferredUploadTarget* uploadTarget, - GrStrikeCache* glyphCache, - GrAtlasManager* fullAtlasManager, - SkExclusiveStrikePtr* lazyStrike) + GrStrikeCache* grStrikeCache, + GrAtlasManager* fullAtlasManager) : fResourceProvider(resourceProvider) , fViewMatrix(viewMatrix) , fBlob(blob) , fUploadTarget(uploadTarget) - , fGlyphCache(glyphCache) + , fGrStrikeCache(grStrikeCache) , fFullAtlasManager(fullAtlasManager) - , fLazyStrike(lazyStrike) - , fSubRun(&blob->fRuns[runIdx].fSubRunInfo[subRunIdx]) + , fSubRun(subRun) , fColor(color) { // Compute translation if any fSubRun->computeTranslation(fViewMatrix, x, y, &fTransX, &fTransY); @@ -160,25 +158,39 @@ bool GrTextBlob::VertexRegenerator::doRegen(GrTextBlob::VertexRegenerator::Resul bool regenPos, bool regenCol, bool regenTexCoords, bool regenGlyphs) { SkASSERT(!regenGlyphs || regenTexCoords); - sk_sp strike; if (regenTexCoords) { fSubRun->resetBulkUseToken(); const SkStrikeSpec& strikeSpec = fSubRun->strikeSpec(); - if (!*fLazyStrike || (*fLazyStrike)->getDescriptor() != strikeSpec.descriptor()) { - *fLazyStrike = - strikeSpec.findOrCreateExclusiveStrike(SkStrikeCache::GlobalStrikeCache()); + if (!fMetricsAndImages.isValid() + || fMetricsAndImages->descriptor() != strikeSpec.descriptor()) { + fMetricsAndImages.init(strikeSpec); } if (regenGlyphs) { - strike = strikeSpec.findOrCreateGrStrike(fGlyphCache); - } else { - strike = fSubRun->refStrike(); + // Take the glyphs from the old strike, and translate them a new strike. + sk_sp newStrike = strikeSpec.findOrCreateGrStrike(fGrStrikeCache); + + // Start this batch at the start of the subRun plus any glyphs that were previously + // processed. + size_t glyphStart = fSubRun->glyphStartIndex() + fCurrGlyph; + SkSpan glyphs{&(fBlob->fGlyphs[glyphStart]), + fSubRun->glyphCount() - fCurrGlyph}; + + // Convert old glyphs to newStrike. + for (auto& glyph : glyphs) { + SkPackedGlyphID id = glyph->fPackedID; + glyph = newStrike->getGlyph(id, fMetricsAndImages.get()); + SkASSERT(id == glyph->fPackedID); + } + + fSubRun->setStrike(newStrike); } } - bool hasW = fSubRun->hasWCoord(); + sk_sp grStrike = fSubRun->refStrike(); + bool hasW = fSubRun->hasW(); auto vertexStride = GetVertexStride(fSubRun->maskFormat(), hasW); char* currVertex = fBlob->fVertices + fSubRun->vertexStartIndex() + fCurrGlyph * kVerticesPerGlyph * vertexStride; @@ -188,23 +200,15 @@ bool GrTextBlob::VertexRegenerator::doRegen(GrTextBlob::VertexRegenerator::Resul GrGlyph* glyph = nullptr; if (regenTexCoords) { size_t glyphOffset = glyphIdx + fSubRun->glyphStartIndex(); - - if (regenGlyphs) { - // Get the id from the old glyph, and use the new strike to lookup - // the glyph. - SkPackedGlyphID id = fBlob->fGlyphs[glyphOffset]->fPackedID; - fBlob->fGlyphs[glyphOffset] = strike->getGlyph(id, fLazyStrike->get()); - SkASSERT(id == fBlob->fGlyphs[glyphOffset]->fPackedID); - } glyph = fBlob->fGlyphs[glyphOffset]; SkASSERT(glyph && glyph->fMaskFormat == fSubRun->maskFormat()); if (!fFullAtlasManager->hasGlyph(glyph)) { GrDrawOpAtlas::ErrorCode code; - code = strike->addGlyphToAtlas(fResourceProvider, fUploadTarget, fGlyphCache, - fFullAtlasManager, glyph, - fLazyStrike->get(), fSubRun->maskFormat(), - fSubRun->needsTransform()); + code = grStrike->addGlyphToAtlas(fResourceProvider, fUploadTarget, fGrStrikeCache, + fFullAtlasManager, glyph, + fMetricsAndImages.get(), fSubRun->maskFormat(), + fSubRun->needsTransform()); if (GrDrawOpAtlas::ErrorCode::kError == code) { // Something horrible has happened - drop the op return false; @@ -238,9 +242,6 @@ bool GrTextBlob::VertexRegenerator::doRegen(GrTextBlob::VertexRegenerator::Resul // We may have changed the color so update it here fSubRun->setColor(fColor); if (regenTexCoords) { - if (regenGlyphs) { - fSubRun->setStrike(std::move(strike)); - } fSubRun->setAtlasGeneration(fBrokenRun ? GrDrawOpAtlas::kInvalidAtlasGeneration : fFullAtlasManager->atlasGeneration(fSubRun->maskFormat())); @@ -268,7 +269,7 @@ bool GrTextBlob::VertexRegenerator::regenerate(GrTextBlob::VertexRegenerator::Re fRegenFlags & kRegenTex, fRegenFlags & kRegenGlyph); } else { - bool hasW = fSubRun->hasWCoord(); + bool hasW = fSubRun->hasW(); auto vertexStride = GetVertexStride(fSubRun->maskFormat(), hasW); result->fFinished = true; result->fGlyphsRegenerated = fSubRun->glyphCount() - fCurrGlyph; diff --git a/third_party/skia/src/gpu/text/GrTextContext.cpp b/third_party/skia/src/gpu/text/GrTextContext.cpp index 52558c6a21c1..f9ff2fb68d1c 100644 --- a/third_party/skia/src/gpu/text/GrTextContext.cpp +++ b/third_party/skia/src/gpu/text/GrTextContext.cpp @@ -32,10 +32,16 @@ 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; -#ifdef SK_BUILD_FOR_ANDROID +#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 @@ -167,10 +173,20 @@ SkFont GrTextContext::InitDistanceFieldFont(const SkFont& font, } 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); diff --git a/third_party/skia/src/gpu/vk/GrVkBuffer.cpp b/third_party/skia/src/gpu/vk/GrVkBuffer.cpp index 833dfdb5dcfa..53780adeb1af 100644 --- a/third_party/skia/src/gpu/vk/GrVkBuffer.cpp +++ b/third_party/skia/src/gpu/vk/GrVkBuffer.cpp @@ -19,7 +19,7 @@ #define VALIDATE() do {} while(false) #endif -const GrVkBuffer::Resource* GrVkBuffer::Create(const GrVkGpu* gpu, const Desc& desc) { +const GrVkBuffer::Resource* GrVkBuffer::Create(GrVkGpu* gpu, const Desc& desc) { SkASSERT(!gpu->protectedContext() || (gpu->protectedContext() == desc.fDynamic)); VkBuffer buffer; GrVkAlloc alloc; diff --git a/third_party/skia/src/gpu/vk/GrVkBuffer.h b/third_party/skia/src/gpu/vk/GrVkBuffer.h index e82613d0d236..625df99295d6 100644 --- a/third_party/skia/src/gpu/vk/GrVkBuffer.h +++ b/third_party/skia/src/gpu/vk/GrVkBuffer.h @@ -77,7 +77,7 @@ class GrVkBuffer : public SkNoncopyable { }; // convenience routine for raw buffer creation - static const Resource* Create(const GrVkGpu* gpu, + static const Resource* Create(GrVkGpu* gpu, const Desc& descriptor); GrVkBuffer(const Desc& desc, const GrVkBuffer::Resource* resource) diff --git a/third_party/skia/src/gpu/vk/GrVkBufferView.cpp b/third_party/skia/src/gpu/vk/GrVkBufferView.cpp deleted file mode 100644 index f4ed9ea82158..000000000000 --- a/third_party/skia/src/gpu/vk/GrVkBufferView.cpp +++ /dev/null @@ -1,38 +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 "src/gpu/vk/GrVkBufferView.h" -#include "src/gpu/vk/GrVkGpu.h" -#include "src/gpu/vk/GrVkUtil.h" - -const GrVkBufferView* GrVkBufferView::Create(const GrVkGpu* gpu, VkBuffer buffer, VkFormat format, - VkDeviceSize offset, VkDeviceSize range) { - VkBufferView bufferView; - - // Create the VkBufferView - VkBufferViewCreateInfo viewInfo; - memset(&viewInfo, 0, sizeof(VkBufferViewCreateInfo)); - viewInfo.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO; - viewInfo.pNext = nullptr; - viewInfo.flags = 0; - viewInfo.buffer = buffer; - viewInfo.format = format; - viewInfo.offset = offset; - viewInfo.range = range; - - VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateBufferView(gpu->device(), &viewInfo, - nullptr, &bufferView)); - if (err) { - return nullptr; - } - - return new GrVkBufferView(bufferView); -} - -void GrVkBufferView::freeGPUData(GrVkGpu* gpu) const { - GR_VK_CALL(gpu->vkInterface(), DestroyBufferView(gpu->device(), fBufferView, nullptr)); -} diff --git a/third_party/skia/src/gpu/vk/GrVkBufferView.h b/third_party/skia/src/gpu/vk/GrVkBufferView.h deleted file mode 100644 index e6adf6b9a946..000000000000 --- a/third_party/skia/src/gpu/vk/GrVkBufferView.h +++ /dev/null @@ -1,38 +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 GrVkBufferView_DEFINED -#define GrVkBufferView_DEFINED - -#include "include/gpu/GrTypes.h" -#include "include/gpu/vk/GrVkTypes.h" -#include "src/gpu/vk/GrVkResource.h" - -class GrVkBufferView : public GrVkResource { -public: - static const GrVkBufferView* Create(const GrVkGpu* gpu, VkBuffer buffer, VkFormat format, - VkDeviceSize offset, VkDeviceSize range); - - VkBufferView bufferView() const { return fBufferView; } - -#ifdef SK_TRACE_VK_RESOURCES - void dumpInfo() const override { - SkDebugf("GrVkBufferView: %d (%d refs)\n", fBufferView, this->getRefCnt()); - } -#endif - -private: - GrVkBufferView(VkBufferView bufferView) : INHERITED(), fBufferView(bufferView) {} - - void freeGPUData(GrVkGpu* gpu) const override; - - VkBufferView fBufferView; - - typedef GrVkResource INHERITED; -}; - -#endif diff --git a/third_party/skia/src/gpu/vk/GrVkCaps.cpp b/third_party/skia/src/gpu/vk/GrVkCaps.cpp index 36e2436a8548..90fbd4fd8f68 100644 --- a/third_party/skia/src/gpu/vk/GrVkCaps.cpp +++ b/third_party/skia/src/gpu/vk/GrVkCaps.cpp @@ -8,13 +8,17 @@ #include "include/gpu/GrBackendSurface.h" #include "include/gpu/vk/GrVkBackendContext.h" #include "include/gpu/vk/GrVkExtensions.h" +#include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrRenderTarget.h" #include "src/gpu/GrRenderTargetProxy.h" #include "src/gpu/GrShaderCaps.h" +#include "src/gpu/GrStencilSettings.h" #include "src/gpu/GrUtil.h" #include "src/gpu/SkGr.h" #include "src/gpu/vk/GrVkCaps.h" +#include "src/gpu/vk/GrVkGpu.h" #include "src/gpu/vk/GrVkInterface.h" +#include "src/gpu/vk/GrVkRenderTarget.h" #include "src/gpu/vk/GrVkTexture.h" #include "src/gpu/vk/GrVkUniformHandler.h" #include "src/gpu/vk/GrVkUtil.h" @@ -388,8 +392,7 @@ void GrVkCaps::init(const GrContextOptions& contextOptions, const GrVkInterface* this->applyDriverCorrectnessWorkarounds(properties); } - this->applyOptionsOverrides(contextOptions); - fShaderCaps->applyOptionsOverrides(contextOptions); + this->finishInitialization(contextOptions); } void GrVkCaps::applyDriverCorrectnessWorkarounds(const VkPhysicalDeviceProperties& properties) { @@ -442,6 +445,20 @@ void GrVkCaps::applyDriverCorrectnessWorkarounds(const VkPhysicalDevicePropertie // GrCaps workarounds //////////////////////////////////////////////////////////////////////////// + // The GTX660 bot experiences crashes and incorrect rendering with MSAA CCPR. Block this path + // renderer on non-mixed-sampled NVIDIA. + // NOTE: We may lose mixed samples support later if the context options suppress dual source + // blending, but that shouldn't be an issue because MSAA CCPR seems to work fine (even without + // mixed samples) on later NVIDIA hardware where mixed samples would be supported. + if ((kNvidia_VkVendor == properties.vendorID) && !fMixedSamplesSupport) { + fDriverBlacklistMSAACCPR = true; + } + +#ifdef SK_BUILD_FOR_ANDROID + // MSAA CCPR is slow on Android. http://skbug.com/9676 + fDriverBlacklistMSAACCPR = true; +#endif + if (kARM_VkVendor == properties.vendorID) { fInstanceAttribSupport = false; fAvoidWritePixelsFastPath = true; // bugs.skia.org/8064 @@ -459,29 +476,12 @@ void GrVkCaps::applyDriverCorrectnessWorkarounds(const VkPhysicalDevicePropertie if (kImagination_VkVendor == properties.vendorID) { fShaderCaps->fAtan2ImplementedAsAtanYOverX = true; } -} -int get_max_sample_count(VkSampleCountFlags flags) { - SkASSERT(flags & VK_SAMPLE_COUNT_1_BIT); - if (!(flags & VK_SAMPLE_COUNT_2_BIT)) { - return 0; - } - if (!(flags & VK_SAMPLE_COUNT_4_BIT)) { - return 2; - } - if (!(flags & VK_SAMPLE_COUNT_8_BIT)) { - return 4; - } - if (!(flags & VK_SAMPLE_COUNT_16_BIT)) { - return 8; - } - if (!(flags & VK_SAMPLE_COUNT_32_BIT)) { - return 16; - } - if (!(flags & VK_SAMPLE_COUNT_64_BIT)) { - return 32; + if (kQualcomm_VkVendor == properties.vendorID) { + // The sample mask round rect op draws nothing on Adreno for the srcmode gm. + // http://skbug.com/8921 + fShaderCaps->fCanOnlyUseSampleMaskWithStencil = true; } - return 64; } void GrVkCaps::initGrCaps(const GrVkInterface* vkInterface, @@ -497,6 +497,19 @@ void GrVkCaps::initGrCaps(const GrVkInterface* vkInterface, static const uint32_t kMaxVertexAttributes = 64; fMaxVertexAttributes = SkTMin(properties.limits.maxVertexInputAttributes, kMaxVertexAttributes); + if (properties.limits.standardSampleLocations) { + fSampleLocationsSupport = true; + } + + if (extensions.hasExtension(VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, 1)) { + // We "disable" multisample by colocating all samples at pixel center. + fMultisampleDisableSupport = true; + } + + if (extensions.hasExtension(VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME, 1)) { + fMixedSamplesSupport = true; + } + // We could actually query and get a max size for each config, however maxImageDimension2D will // give the minimum max size across all configs. So for simplicity we will use that for now. fMaxRenderTargetSize = SkTMin(properties.limits.maxImageDimension2D, (uint32_t)INT_MAX); @@ -563,7 +576,7 @@ void GrVkCaps::initShaderCaps(const VkPhysicalDeviceProperties& properties, // to be true with Vulkan as well. shaderCaps->fPreferFlatInterpolation = kQualcomm_VkVendor != properties.vendorID; - // GrShaderCaps + shaderCaps->fSampleMaskSupport = true; shaderCaps->fShaderDerivativeSupport = true; @@ -1187,12 +1200,8 @@ void GrVkCaps::FormatInfo::initSampleCounts(const GrVkInterface* interface, if (flags & VK_SAMPLE_COUNT_16_BIT) { fColorSampleCounts.push_back(16); } - if (flags & VK_SAMPLE_COUNT_32_BIT) { - fColorSampleCounts.push_back(32); - } - if (flags & VK_SAMPLE_COUNT_64_BIT) { - fColorSampleCounts.push_back(64); - } + // Standard sample locations are not defined for more than 16 samples, and we don't need more + // than 16. Omit 32 and 64. } void GrVkCaps::FormatInfo::init(const GrVkInterface* interface, @@ -1597,6 +1606,11 @@ static GrPixelConfig validate_image_info(VkFormat format, GrColorType ct, bool h case GrColorType::kAlpha_8xxx: case GrColorType::kAlpha_F32xxx: case GrColorType::kGray_8xxx: + case GrColorType::kRGB_888: + case GrColorType::kR_8: + case GrColorType::kR_16: + case GrColorType::kR_F16: + case GrColorType::kGray_F16: break; } @@ -1717,6 +1731,76 @@ int GrVkCaps::getFragmentUniformSet() const { return GrVkUniformHandler::kUniformBufferDescSet; } +void GrVkCaps::addExtraSamplerKey(GrProcessorKeyBuilder* b, + const GrSamplerState& samplerState, + const GrBackendFormat& format) const { + const GrVkYcbcrConversionInfo* ycbcrInfo = format.getVkYcbcrConversionInfo(); + if (!ycbcrInfo) { + return; + } + + GrVkSampler::Key key = GrVkSampler::GenerateKey(samplerState, *ycbcrInfo); + + size_t numInts = (sizeof(key) + 3) / 4; + + uint32_t* tmp = b->add32n(numInts); + + tmp[numInts - 1] = 0; + memcpy(tmp, &key, sizeof(key)); +} + +/** + * For Vulkan we want to cache the entire VkPipeline for reuse of draws. The Desc here holds all + * the information needed to differentiate one pipeline from another. + * + * The GrProgramDesc contains all the information need to create the actual shaders for the + * pipeline. + * + * For Vulkan we need to add to the GrProgramDesc to include the rest of the state on the + * pipline. This includes stencil settings, blending information, render pass format, draw face + * information, and primitive type. Note that some state is set dynamically on the pipeline for + * each draw and thus is not included in this descriptor. This includes the viewport, scissor, + * and blend constant. + */ +GrProgramDesc GrVkCaps::makeDesc(const GrRenderTarget* rt, const GrProgramInfo& programInfo) const { + GrProgramDesc desc; + if (!GrProgramDesc::Build(&desc, rt, programInfo, *this)) { + SkASSERT(!desc.isValid()); + return desc; + } + + GrProcessorKeyBuilder b(&desc.key()); + + // This will become part of the sheared off key used to persistently cache + // the SPIRV code. It needs to be added right after the base key so that, + // when the base-key is sheared off, the shearing code can include it in the + // reduced key (c.f. the +4s in the SkData::MakeWithCopy calls in + // GrVkPipelineStateBuilder.cpp). + b.add32(GrVkGpu::kShader_PersistentCacheKeyType); + + GrVkRenderTarget* vkRT = (GrVkRenderTarget*) rt; + // TODO: support failure in getSimpleRenderPass + SkASSERT(vkRT->getSimpleRenderPass()); + vkRT->getSimpleRenderPass()->genKey(&b); + + GrStencilSettings stencil = programInfo.nonGLStencilSettings(); + stencil.genKey(&b); + + programInfo.pipeline().genKey(&b, *this); + b.add32(programInfo.numRasterSamples()); + + // Vulkan requires the full primitive type as part of its key + b.add32((uint32_t)programInfo.primitiveType()); + + if (this->mixedSamplesSupport()) { + // Add "0" to indicate that coverage modulation will not be enabled, or the (non-zero) + // raster sample count if it will. + b.add32(!programInfo.isMixedSampled() ? 0 : programInfo.numRasterSamples()); + } + + return desc; +} + #if GR_TEST_UTILS std::vector GrVkCaps::getTestingCombinations() const { std::vector combos = { diff --git a/third_party/skia/src/gpu/vk/GrVkCaps.h b/third_party/skia/src/gpu/vk/GrVkCaps.h index 0b90035d60a1..38fb36756312 100644 --- a/third_party/skia/src/gpu/vk/GrVkCaps.h +++ b/third_party/skia/src/gpu/vk/GrVkCaps.h @@ -184,6 +184,12 @@ class GrVkCaps : public GrCaps { int getFragmentUniformBinding() const; int getFragmentUniformSet() const; + void addExtraSamplerKey(GrProcessorKeyBuilder*, + const GrSamplerState&, + const GrBackendFormat&) const override; + + GrProgramDesc makeDesc(const GrRenderTarget*, const GrProgramInfo&) const override; + #if GR_TEST_UTILS std::vector getTestingCombinations() const override; #endif diff --git a/third_party/skia/src/gpu/vk/GrVkCommandBuffer.cpp b/third_party/skia/src/gpu/vk/GrVkCommandBuffer.cpp index 5f95ccfe88e6..d28af1eb74e1 100644 --- a/third_party/skia/src/gpu/vk/GrVkCommandBuffer.cpp +++ b/third_party/skia/src/gpu/vk/GrVkCommandBuffer.cpp @@ -40,23 +40,15 @@ void GrVkCommandBuffer::invalidateState() { } } -void GrVkCommandBuffer::freeGPUData(GrVkGpu* gpu) const { +void GrVkCommandBuffer::freeGPUData(GrVkGpu* gpu, VkCommandPool cmdPool) const { TRACE_EVENT0("skia.gpu", TRACE_FUNC); SkASSERT(!fIsActive); - for (int i = 0; i < fTrackedResources.count(); ++i) { - fTrackedResources[i]->notifyRemovedFromCommandBuffer(); - fTrackedResources[i]->unref(gpu); - } - - for (int i = 0; i < fTrackedRecycledResources.count(); ++i) { - fTrackedRecycledResources[i]->notifyRemovedFromCommandBuffer(); - fTrackedRecycledResources[i]->recycle(const_cast(gpu)); - } + SkASSERT(!fTrackedResources.count()); + SkASSERT(!fTrackedRecycledResources.count()); + SkASSERT(cmdPool != VK_NULL_HANDLE); + SkASSERT(!this->isWrapped()); - if (!this->isWrapped()) { - GR_VK_CALL(gpu->vkInterface(), FreeCommandBuffers(gpu->device(), fCmdPool->vkCommandPool(), - 1, &fCmdBuffer)); - } + GR_VK_CALL(gpu->vkInterface(), FreeCommandBuffers(gpu->device(), cmdPool, 1, &fCmdBuffer)); this->onFreeGPUData(gpu); } @@ -376,27 +368,26 @@ GrVkPrimaryCommandBuffer::~GrVkPrimaryCommandBuffer() { SkASSERT(!fActiveRenderPass); } -GrVkPrimaryCommandBuffer* GrVkPrimaryCommandBuffer::Create(const GrVkGpu* gpu, - GrVkCommandPool* cmdPool) { +GrVkPrimaryCommandBuffer* GrVkPrimaryCommandBuffer::Create(GrVkGpu* gpu, + VkCommandPool cmdPool) { const VkCommandBufferAllocateInfo cmdInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // sType nullptr, // pNext - cmdPool->vkCommandPool(), // commandPool + cmdPool, // commandPool VK_COMMAND_BUFFER_LEVEL_PRIMARY, // level 1 // bufferCount }; VkCommandBuffer cmdBuffer; - VkResult err = GR_VK_CALL(gpu->vkInterface(), AllocateCommandBuffers(gpu->device(), - &cmdInfo, - &cmdBuffer)); + VkResult err; + GR_VK_CALL_RESULT(gpu, err, AllocateCommandBuffers(gpu->device(), &cmdInfo, &cmdBuffer)); if (err) { return nullptr; } - return new GrVkPrimaryCommandBuffer(cmdBuffer, cmdPool); + return new GrVkPrimaryCommandBuffer(cmdBuffer); } -void GrVkPrimaryCommandBuffer::begin(const GrVkGpu* gpu) { +void GrVkPrimaryCommandBuffer::begin(GrVkGpu* gpu) { SkASSERT(!fIsActive); VkCommandBufferBeginInfo cmdBufferBeginInfo; memset(&cmdBufferBeginInfo, 0, sizeof(VkCommandBufferBeginInfo)); @@ -405,8 +396,7 @@ void GrVkPrimaryCommandBuffer::begin(const GrVkGpu* gpu) { cmdBufferBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; cmdBufferBeginInfo.pInheritanceInfo = nullptr; - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), BeginCommandBuffer(fCmdBuffer, - &cmdBufferBeginInfo)); + GR_VK_CALL_ERRCHECK(gpu, BeginCommandBuffer(fCmdBuffer, &cmdBufferBeginInfo)); fIsActive = true; } @@ -416,21 +406,26 @@ void GrVkPrimaryCommandBuffer::end(GrVkGpu* gpu) { this->submitPipelineBarriers(gpu); - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), EndCommandBuffer(fCmdBuffer)); + GR_VK_CALL_ERRCHECK(gpu, EndCommandBuffer(fCmdBuffer)); this->invalidateState(); fIsActive = false; fHasWork = false; } -void GrVkPrimaryCommandBuffer::beginRenderPass(const GrVkGpu* gpu, +bool GrVkPrimaryCommandBuffer::beginRenderPass(GrVkGpu* gpu, const GrVkRenderPass* renderPass, const VkClearValue clearValues[], - const GrVkRenderTarget& target, + GrVkRenderTarget* target, const SkIRect& bounds, bool forSecondaryCB) { SkASSERT(fIsActive); SkASSERT(!fActiveRenderPass); - SkASSERT(renderPass->isCompatible(target)); + SkASSERT(renderPass->isCompatible(*target)); + + const GrVkFramebuffer* framebuffer = target->getFramebuffer(); + if (!framebuffer) { + return false; + } this->addingWork(gpu); @@ -443,7 +438,7 @@ void GrVkPrimaryCommandBuffer::beginRenderPass(const GrVkGpu* gpu, beginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; beginInfo.pNext = nullptr; beginInfo.renderPass = renderPass->vkRenderPass(); - beginInfo.framebuffer = target.framebuffer()->framebuffer(); + beginInfo.framebuffer = framebuffer->framebuffer(); beginInfo.renderArea = renderArea; beginInfo.clearValueCount = renderPass->clearValueCount(); beginInfo.pClearValues = clearValues; @@ -454,7 +449,8 @@ void GrVkPrimaryCommandBuffer::beginRenderPass(const GrVkGpu* gpu, GR_VK_CALL(gpu->vkInterface(), CmdBeginRenderPass(fCmdBuffer, &beginInfo, contents)); fActiveRenderPass = renderPass; this->addResource(renderPass); - target.addResources(*this); + target->addResources(*this); + return true; } void GrVkPrimaryCommandBuffer::endRenderPass(const GrVkGpu* gpu) { @@ -470,7 +466,6 @@ void GrVkPrimaryCommandBuffer::executeCommands(const GrVkGpu* gpu, // The Vulkan spec allows secondary command buffers to be executed on a primary command buffer // if the command pools both were created from were created with the same queue family. However, // we currently always create them from the same pool. - SkASSERT(buffer->commandPool() == fCmdPool); SkASSERT(fIsActive); SkASSERT(!buffer->fIsActive); SkASSERT(fActiveRenderPass); @@ -485,7 +480,7 @@ void GrVkPrimaryCommandBuffer::executeCommands(const GrVkGpu* gpu, this->invalidateState(); } -static void submit_to_queue(const GrVkInterface* interface, +static bool submit_to_queue(GrVkGpu* gpu, VkQueue queue, VkFence fence, uint32_t waitCount, @@ -515,13 +510,14 @@ static void submit_to_queue(const GrVkInterface* interface, submitInfo.pCommandBuffers = commandBuffers; submitInfo.signalSemaphoreCount = signalCount; submitInfo.pSignalSemaphores = signalSemaphores; - GR_VK_CALL_ERRCHECK(interface, QueueSubmit(queue, 1, &submitInfo, fence)); + VkResult result; + GR_VK_CALL_RESULT(gpu, result, QueueSubmit(queue, 1, &submitInfo, fence)); + return result == VK_SUCCESS; } -void GrVkPrimaryCommandBuffer::submitToQueue( - const GrVkGpu* gpu, +bool GrVkPrimaryCommandBuffer::submitToQueue( + GrVkGpu* gpu, VkQueue queue, - GrVkGpu::SyncQueue sync, SkTArray& signalSemaphores, SkTArray& waitSemaphores) { SkASSERT(!fIsActive); @@ -531,22 +527,29 @@ void GrVkPrimaryCommandBuffer::submitToQueue( VkFenceCreateInfo fenceInfo; memset(&fenceInfo, 0, sizeof(VkFenceCreateInfo)); fenceInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; - err = GR_VK_CALL(gpu->vkInterface(), CreateFence(gpu->device(), &fenceInfo, nullptr, - &fSubmitFence)); - SkASSERT(!err); + GR_VK_CALL_RESULT(gpu, err, CreateFence(gpu->device(), &fenceInfo, nullptr, + &fSubmitFence)); + if (err) { + fSubmitFence = VK_NULL_HANDLE; + return false; + } } else { - GR_VK_CALL(gpu->vkInterface(), ResetFences(gpu->device(), 1, &fSubmitFence)); + // This cannot return DEVICE_LOST so we assert we succeeded. + GR_VK_CALL_RESULT(gpu, err, ResetFences(gpu->device(), 1, &fSubmitFence)); + SkASSERT(err == VK_SUCCESS); } int signalCount = signalSemaphores.count(); int waitCount = waitSemaphores.count(); + bool submitted = false; + if (0 == signalCount && 0 == waitCount) { // This command buffer has no dependent semaphores so we can simply just submit it to the // queue with no worries. - submit_to_queue(gpu->vkInterface(), queue, fSubmitFence, 0, nullptr, nullptr, 1, - &fCmdBuffer, 0, nullptr, - gpu->protectedContext() ? GrProtected::kYes : GrProtected::kNo); + submitted = submit_to_queue( + gpu, queue, fSubmitFence, 0, nullptr, nullptr, 1, &fCmdBuffer, 0, nullptr, + gpu->protectedContext() ? GrProtected::kYes : GrProtected::kNo); } else { SkTArray vkSignalSems(signalCount); for (int i = 0; i < signalCount; ++i) { @@ -565,44 +568,45 @@ void GrVkPrimaryCommandBuffer::submitToQueue( vkWaitStages.push_back(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); } } - submit_to_queue(gpu->vkInterface(), queue, fSubmitFence, vkWaitSems.count(), - vkWaitSems.begin(), vkWaitStages.begin(), 1, &fCmdBuffer, - vkSignalSems.count(), vkSignalSems.begin(), - gpu->protectedContext() ? GrProtected::kYes : GrProtected::kNo); - for (int i = 0; i < signalCount; ++i) { - signalSemaphores[i]->markAsSignaled(); - } - for (int i = 0; i < waitCount; ++i) { - waitSemaphores[i]->markAsWaited(); + submitted = submit_to_queue(gpu, queue, fSubmitFence, vkWaitSems.count(), + vkWaitSems.begin(), vkWaitStages.begin(), 1, &fCmdBuffer, + vkSignalSems.count(), vkSignalSems.begin(), + gpu->protectedContext() ? GrProtected::kYes : GrProtected::kNo); + if (submitted) { + for (int i = 0; i < signalCount; ++i) { + signalSemaphores[i]->markAsSignaled(); + } + for (int i = 0; i < waitCount; ++i) { + waitSemaphores[i]->markAsWaited(); + } } } - if (GrVkGpu::kForce_SyncQueue == sync) { - err = GR_VK_CALL(gpu->vkInterface(), - WaitForFences(gpu->device(), 1, &fSubmitFence, true, UINT64_MAX)); - if (VK_TIMEOUT == err) { - SkDebugf("Fence failed to signal: %d\n", err); - SK_ABORT("failing"); - } - SkASSERT(!err); - - fFinishedProcs.reset(); - - // Destroy the fence + if (!submitted) { + // Destroy the fence or else we will try to wait forever for it to finish. GR_VK_CALL(gpu->vkInterface(), DestroyFence(gpu->device(), fSubmitFence, nullptr)); fSubmitFence = VK_NULL_HANDLE; + return false; } + return true; } -bool GrVkPrimaryCommandBuffer::finished(const GrVkGpu* gpu) { +void GrVkPrimaryCommandBuffer::forceSync(GrVkGpu* gpu) { + SkASSERT(fSubmitFence != VK_NULL_HANDLE); + GR_VK_CALL_ERRCHECK(gpu, WaitForFences(gpu->device(), 1, &fSubmitFence, true, UINT64_MAX)); +} + +bool GrVkPrimaryCommandBuffer::finished(GrVkGpu* gpu) { SkASSERT(!fIsActive); if (VK_NULL_HANDLE == fSubmitFence) { return true; } - VkResult err = GR_VK_CALL(gpu->vkInterface(), GetFenceStatus(gpu->device(), fSubmitFence)); + VkResult err; + GR_VK_CALL_RESULT_NOCHECK(gpu, err, GetFenceStatus(gpu->device(), fSubmitFence)); switch (err) { case VK_SUCCESS: + case VK_ERROR_DEVICE_LOST: return true; case VK_NOT_READY: @@ -610,11 +614,9 @@ bool GrVkPrimaryCommandBuffer::finished(const GrVkGpu* gpu) { default: SkDebugf("Error getting fence status: %d\n", err); - SK_ABORT("failing"); - break; + SK_ABORT("Got an invalid fence status"); + return false; } - - return false; } void GrVkPrimaryCommandBuffer::addFinishedProc(sk_sp finishedProc) { @@ -628,10 +630,9 @@ void GrVkPrimaryCommandBuffer::onReleaseResources(GrVkGpu* gpu) { fFinishedProcs.reset(); } -void GrVkPrimaryCommandBuffer::recycleSecondaryCommandBuffers(GrVkGpu* gpu) { +void GrVkPrimaryCommandBuffer::recycleSecondaryCommandBuffers(GrVkCommandPool* cmdPool) { for (int i = 0; i < fSecondaryCommandBuffers.count(); ++i) { - SkASSERT(fSecondaryCommandBuffers[i]->commandPool() == fCmdPool); - fSecondaryCommandBuffers[i].release()->recycle(gpu); + fSecondaryCommandBuffers[i].release()->recycle(cmdPool); } fSecondaryCommandBuffers.reset(); } @@ -848,9 +849,7 @@ void GrVkPrimaryCommandBuffer::onFreeGPUData(GrVkGpu* gpu) const { if (VK_NULL_HANDLE != fSubmitFence) { GR_VK_CALL(gpu->vkInterface(), DestroyFence(gpu->device(), fSubmitFence, nullptr)); } - for (const auto& buffer : fSecondaryCommandBuffers) { - buffer->freeGPUData(gpu); - } + SkASSERT(!fSecondaryCommandBuffers.count()); } void GrVkPrimaryCommandBuffer::onAbandonGPUData() const { @@ -864,7 +863,7 @@ void GrVkPrimaryCommandBuffer::onAbandonGPUData() const { // SecondaryCommandBuffer //////////////////////////////////////////////////////////////////////////////// -GrVkSecondaryCommandBuffer* GrVkSecondaryCommandBuffer::Create(const GrVkGpu* gpu, +GrVkSecondaryCommandBuffer* GrVkSecondaryCommandBuffer::Create(GrVkGpu* gpu, GrVkCommandPool* cmdPool) { SkASSERT(cmdPool); const VkCommandBufferAllocateInfo cmdInfo = { @@ -876,20 +875,19 @@ GrVkSecondaryCommandBuffer* GrVkSecondaryCommandBuffer::Create(const GrVkGpu* gp }; VkCommandBuffer cmdBuffer; - VkResult err = GR_VK_CALL(gpu->vkInterface(), AllocateCommandBuffers(gpu->device(), - &cmdInfo, - &cmdBuffer)); + VkResult err; + GR_VK_CALL_RESULT(gpu, err, AllocateCommandBuffers(gpu->device(), &cmdInfo, &cmdBuffer)); if (err) { return nullptr; } - return new GrVkSecondaryCommandBuffer(cmdBuffer, cmdPool); + return new GrVkSecondaryCommandBuffer(cmdBuffer, false); } GrVkSecondaryCommandBuffer* GrVkSecondaryCommandBuffer::Create(VkCommandBuffer cmdBuffer) { - return new GrVkSecondaryCommandBuffer(cmdBuffer, nullptr); + return new GrVkSecondaryCommandBuffer(cmdBuffer, true); } -void GrVkSecondaryCommandBuffer::begin(const GrVkGpu* gpu, const GrVkFramebuffer* framebuffer, +void GrVkSecondaryCommandBuffer::begin(GrVkGpu* gpu, const GrVkFramebuffer* framebuffer, const GrVkRenderPass* compatibleRenderPass) { SkASSERT(!fIsActive); SkASSERT(compatibleRenderPass); @@ -915,8 +913,7 @@ void GrVkSecondaryCommandBuffer::begin(const GrVkGpu* gpu, const GrVkFramebuffer VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; cmdBufferBeginInfo.pInheritanceInfo = &inheritanceInfo; - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), BeginCommandBuffer(fCmdBuffer, - &cmdBufferBeginInfo)); + GR_VK_CALL_ERRCHECK(gpu, BeginCommandBuffer(fCmdBuffer, &cmdBufferBeginInfo)); } fIsActive = true; } @@ -924,19 +921,18 @@ void GrVkSecondaryCommandBuffer::begin(const GrVkGpu* gpu, const GrVkFramebuffer void GrVkSecondaryCommandBuffer::end(GrVkGpu* gpu) { SkASSERT(fIsActive); if (!this->isWrapped()) { - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), EndCommandBuffer(fCmdBuffer)); + GR_VK_CALL_ERRCHECK(gpu, EndCommandBuffer(fCmdBuffer)); } this->invalidateState(); fIsActive = false; fHasWork = false; } -void GrVkSecondaryCommandBuffer::recycle(GrVkGpu* gpu) { +void GrVkSecondaryCommandBuffer::recycle(GrVkCommandPool* cmdPool) { if (this->isWrapped()) { - this->freeGPUData(gpu); delete this; } else { - fCmdPool->recycleSecondaryCommandBuffer(this); + cmdPool->recycleSecondaryCommandBuffer(this); } } diff --git a/third_party/skia/src/gpu/vk/GrVkCommandBuffer.h b/third_party/skia/src/gpu/vk/GrVkCommandBuffer.h index ec35c124f3c7..469c4b4077a8 100644 --- a/third_party/skia/src/gpu/vk/GrVkCommandBuffer.h +++ b/third_party/skia/src/gpu/vk/GrVkCommandBuffer.h @@ -62,8 +62,6 @@ class GrVkCommandBuffer { uint32_t dynamicOffsetCount, const uint32_t* dynamicOffsets); - GrVkCommandPool* commandPool() { return fCmdPool; } - void setViewport(const GrVkGpu* gpu, uint32_t firstViewport, uint32_t viewportCount, @@ -99,6 +97,7 @@ class GrVkCommandBuffer { // Add ref-counted resource that will be tracked and released when this command buffer finishes // execution void addResource(const GrVkResource* resource) { + SkASSERT(resource); resource->ref(); resource->notifyAddedToCommandBuffer(); fTrackedResources.append(1, &resource); @@ -114,25 +113,21 @@ class GrVkCommandBuffer { void releaseResources(GrVkGpu* gpu); - void freeGPUData(GrVkGpu* gpu) const; + void freeGPUData(GrVkGpu* gpu, VkCommandPool pool) const; void abandonGPUData() const; bool hasWork() const { return fHasWork; } protected: - GrVkCommandBuffer(VkCommandBuffer cmdBuffer, GrVkCommandPool* cmdPool, - const GrVkRenderPass* rp = nullptr) - : fIsActive(false) - , fActiveRenderPass(rp) - , fCmdBuffer(cmdBuffer) - , fCmdPool(cmdPool) - , fNumResets(0) { + GrVkCommandBuffer(VkCommandBuffer cmdBuffer, bool isWrapped = false) + : fCmdBuffer(cmdBuffer) + , fIsWrapped(isWrapped) { fTrackedResources.setReserve(kInitialTrackedResourcesCount); fTrackedRecycledResources.setReserve(kInitialTrackedResourcesCount); this->invalidateState(); } - bool isWrapped() const { return fCmdPool == nullptr; } + bool isWrapped() const { return fIsWrapped; } void addingWork(const GrVkGpu* gpu); @@ -143,20 +138,16 @@ class GrVkCommandBuffer { // Tracks whether we are in the middle of a command buffer begin/end calls and thus can add // new commands to the buffer; - bool fIsActive; + bool fIsActive = false; bool fHasWork = false; // Stores a pointer to the current active render pass (i.e. begin has been called but not // end). A nullptr means there is no active render pass. The GrVKCommandBuffer does not own // the render pass. - const GrVkRenderPass* fActiveRenderPass; + const GrVkRenderPass* fActiveRenderPass = nullptr; VkCommandBuffer fCmdBuffer; - // Raw pointer, not refcounted. The command pool controls the command buffer's lifespan, so - // it's guaranteed to outlive us. - GrVkCommandPool* fCmdPool; - private: static const int kInitialTrackedResourcesCount = 32; @@ -174,7 +165,7 @@ class GrVkCommandBuffer { // all arrays growing to the max size, after so many resets we'll do a full reset of the tracked // resource arrays. static const int kNumRewindResetsBeforeFullReset = 8; - int fNumResets; + int fNumResets = 0; // Cached values used for dynamic state updates VkViewport fCachedViewport; @@ -190,6 +181,8 @@ class GrVkCommandBuffer { bool fBarriersByRegion = false; VkPipelineStageFlags fSrcStageMask = 0; VkPipelineStageFlags fDstStageMask = 0; + + bool fIsWrapped; }; class GrVkSecondaryCommandBuffer; @@ -198,17 +191,17 @@ class GrVkPrimaryCommandBuffer : public GrVkCommandBuffer { public: ~GrVkPrimaryCommandBuffer() override; - static GrVkPrimaryCommandBuffer* Create(const GrVkGpu* gpu, GrVkCommandPool* cmdPool); + static GrVkPrimaryCommandBuffer* Create(GrVkGpu* gpu, VkCommandPool cmdPool); - void begin(const GrVkGpu* gpu); + void begin(GrVkGpu* gpu); void end(GrVkGpu* gpu); // Begins render pass on this command buffer. The framebuffer from GrVkRenderTarget will be used // in the render pass. - void beginRenderPass(const GrVkGpu* gpu, + bool beginRenderPass(GrVkGpu* gpu, const GrVkRenderPass* renderPass, const VkClearValue clearValues[], - const GrVkRenderTarget& target, + GrVkRenderTarget* target, const SkIRect& bounds, bool forSecondaryCB); void endRenderPass(const GrVkGpu* gpu); @@ -290,18 +283,21 @@ class GrVkPrimaryCommandBuffer : public GrVkCommandBuffer { uint32_t regionCount, const VkImageResolve* regions); - void submitToQueue(const GrVkGpu* gpu, VkQueue queue, GrVkGpu::SyncQueue sync, + bool submitToQueue(GrVkGpu* gpu, VkQueue queue, SkTArray& signalSemaphores, SkTArray& waitSemaphores); - bool finished(const GrVkGpu* gpu); + + void forceSync(GrVkGpu* gpu); + + bool finished(GrVkGpu* gpu); void addFinishedProc(sk_sp finishedProc); - void recycleSecondaryCommandBuffers(GrVkGpu* gpu); + void recycleSecondaryCommandBuffers(GrVkCommandPool* cmdPool); private: - explicit GrVkPrimaryCommandBuffer(VkCommandBuffer cmdBuffer, GrVkCommandPool* cmdPool) - : INHERITED(cmdBuffer, cmdPool) + explicit GrVkPrimaryCommandBuffer(VkCommandBuffer cmdBuffer) + : INHERITED(cmdBuffer) , fSubmitFence(VK_NULL_HANDLE) {} void onFreeGPUData(GrVkGpu* gpu) const override; @@ -319,26 +315,27 @@ class GrVkPrimaryCommandBuffer : public GrVkCommandBuffer { class GrVkSecondaryCommandBuffer : public GrVkCommandBuffer { public: - static GrVkSecondaryCommandBuffer* Create(const GrVkGpu* gpu, GrVkCommandPool* cmdPool); + static GrVkSecondaryCommandBuffer* Create(GrVkGpu* gpu, GrVkCommandPool* cmdPool); // Used for wrapping an external secondary command buffer. static GrVkSecondaryCommandBuffer* Create(VkCommandBuffer externalSecondaryCB); - void begin(const GrVkGpu* gpu, const GrVkFramebuffer* framebuffer, + void begin(GrVkGpu* gpu, const GrVkFramebuffer* framebuffer, const GrVkRenderPass* compatibleRenderPass); void end(GrVkGpu* gpu); - void recycle(GrVkGpu* gpu); + void recycle(GrVkCommandPool* cmdPool); VkCommandBuffer vkCommandBuffer() { return fCmdBuffer; } private: - explicit GrVkSecondaryCommandBuffer(VkCommandBuffer cmdBuffer, GrVkCommandPool* cmdPool) - : INHERITED(cmdBuffer, cmdPool) {} + explicit GrVkSecondaryCommandBuffer(VkCommandBuffer cmdBuffer, bool isWrapped) + : INHERITED(cmdBuffer, isWrapped) {} void onFreeGPUData(GrVkGpu* gpu) const override {} void onAbandonGPUData() const override {} + // Used for accessing fIsActive (on GrVkCommandBuffer) friend class GrVkPrimaryCommandBuffer; typedef GrVkCommandBuffer INHERITED; diff --git a/third_party/skia/src/gpu/vk/GrVkCommandPool.cpp b/third_party/skia/src/gpu/vk/GrVkCommandPool.cpp index 5dc5a94fdc0a..d8adbb54e501 100644 --- a/third_party/skia/src/gpu/vk/GrVkCommandPool.cpp +++ b/third_party/skia/src/gpu/vk/GrVkCommandPool.cpp @@ -11,7 +11,7 @@ #include "src/gpu/vk/GrVkCommandBuffer.h" #include "src/gpu/vk/GrVkGpu.h" -GrVkCommandPool* GrVkCommandPool::Create(const GrVkGpu* gpu) { +GrVkCommandPool* GrVkCommandPool::Create(GrVkGpu* gpu) { VkCommandPoolCreateFlags cmdPoolCreateFlags = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT | VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; @@ -25,16 +25,26 @@ GrVkCommandPool* GrVkCommandPool::Create(const GrVkGpu* gpu) { cmdPoolCreateFlags, // CmdPoolCreateFlags gpu->queueIndex(), // queueFamilyIndex }; + VkResult result; VkCommandPool pool; - GR_VK_CALL_ERRCHECK( - gpu->vkInterface(), - CreateCommandPool(gpu->device(), &cmdPoolInfo, nullptr, &pool)); - return new GrVkCommandPool(gpu, pool); + GR_VK_CALL_RESULT(gpu, result, CreateCommandPool(gpu->device(), &cmdPoolInfo, nullptr, &pool)); + if (result != VK_SUCCESS) { + return nullptr; + } + + GrVkPrimaryCommandBuffer* primaryCmdBuffer = GrVkPrimaryCommandBuffer::Create(gpu, pool); + if (!primaryCmdBuffer) { + GR_VK_CALL(gpu->vkInterface(), DestroyCommandPool(gpu->device(), pool, nullptr)); + return nullptr; + } + + return new GrVkCommandPool(gpu, pool, primaryCmdBuffer); } -GrVkCommandPool::GrVkCommandPool(const GrVkGpu* gpu, VkCommandPool commandPool) - : fCommandPool(commandPool) { - fPrimaryCommandBuffer.reset(GrVkPrimaryCommandBuffer::Create(gpu, this)); +GrVkCommandPool::GrVkCommandPool(GrVkGpu* gpu, VkCommandPool commandPool, + GrVkPrimaryCommandBuffer* primaryCmdBuffer) + : fCommandPool(commandPool) + , fPrimaryCommandBuffer(primaryCmdBuffer) { } std::unique_ptr GrVkCommandPool::findOrCreateSecondaryCommandBuffer( @@ -50,7 +60,6 @@ std::unique_ptr GrVkCommandPool::findOrCreateSeconda } void GrVkCommandPool::recycleSecondaryCommandBuffer(GrVkSecondaryCommandBuffer* buffer) { - SkASSERT(buffer->commandPool() == this); std::unique_ptr scb(buffer); fAvailableSecondaryBuffers.push_back(std::move(scb)); } @@ -62,14 +71,19 @@ void GrVkCommandPool::close() { void GrVkCommandPool::reset(GrVkGpu* gpu) { SkASSERT(!fOpen); fOpen = true; - fPrimaryCommandBuffer->recycleSecondaryCommandBuffers(gpu); - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), ResetCommandPool(gpu->device(), fCommandPool, 0)); + // We can't use the normal result macro calls here because we may call reset on a different + // thread and we can't be modifying the lost state on the GrVkGpu. We just call + // vkResetCommandPool and assume the "next" vulkan call will catch the lost device. + SkDEBUGCODE(VkResult result = )GR_VK_CALL(gpu->vkInterface(), + ResetCommandPool(gpu->device(), fCommandPool, 0)); + SkASSERT(result == VK_SUCCESS || result == VK_ERROR_DEVICE_LOST); } void GrVkCommandPool::releaseResources(GrVkGpu* gpu) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); SkASSERT(!fOpen); fPrimaryCommandBuffer->releaseResources(gpu); + fPrimaryCommandBuffer->recycleSecondaryCommandBuffers(this); } void GrVkCommandPool::abandonGPUData() const { @@ -80,9 +94,15 @@ void GrVkCommandPool::abandonGPUData() const { } void GrVkCommandPool::freeGPUData(GrVkGpu* gpu) const { - fPrimaryCommandBuffer->freeGPUData(gpu); + // TODO: having freeGPUData virtual on GrVkResource be const seems like a bad restriction since + // we are changing the internal objects of these classes when it is called. We should go back a + // revisit how much of a headache it would be to make this function non-const + GrVkCommandPool* nonConstThis = const_cast(this); + nonConstThis->close(); + nonConstThis->releaseResources(gpu); + fPrimaryCommandBuffer->freeGPUData(gpu, fCommandPool); for (const auto& buffer : fAvailableSecondaryBuffers) { - buffer->freeGPUData(gpu); + buffer->freeGPUData(gpu, fCommandPool); } if (fCommandPool != VK_NULL_HANDLE) { GR_VK_CALL(gpu->vkInterface(), diff --git a/third_party/skia/src/gpu/vk/GrVkCommandPool.h b/third_party/skia/src/gpu/vk/GrVkCommandPool.h index fd44d62e9443..c90302d22879 100644 --- a/third_party/skia/src/gpu/vk/GrVkCommandPool.h +++ b/third_party/skia/src/gpu/vk/GrVkCommandPool.h @@ -18,7 +18,7 @@ class GrVkGpu; class GrVkCommandPool : public GrVkResource { public: - static GrVkCommandPool* Create(const GrVkGpu* gpu); + static GrVkCommandPool* Create(GrVkGpu* gpu); VkCommandPool vkCommandPool() const { return fCommandPool; @@ -50,7 +50,7 @@ class GrVkCommandPool : public GrVkResource { private: GrVkCommandPool() = delete; - GrVkCommandPool(const GrVkGpu* gpu, VkCommandPool commandPool); + GrVkCommandPool(GrVkGpu* gpu, VkCommandPool commandPool, GrVkPrimaryCommandBuffer*); void abandonGPUData() const override; diff --git a/third_party/skia/src/gpu/vk/GrVkDescriptorPool.cpp b/third_party/skia/src/gpu/vk/GrVkDescriptorPool.cpp index 16350bd3c897..3d7d9cd1b2ff 100644 --- a/third_party/skia/src/gpu/vk/GrVkDescriptorPool.cpp +++ b/third_party/skia/src/gpu/vk/GrVkDescriptorPool.cpp @@ -11,10 +11,8 @@ #include "src/gpu/vk/GrVkGpu.h" -GrVkDescriptorPool::GrVkDescriptorPool(const GrVkGpu* gpu, VkDescriptorType type, uint32_t count) - : INHERITED() - , fType (type) - , fCount(count) { +GrVkDescriptorPool* GrVkDescriptorPool::Create(GrVkGpu* gpu, VkDescriptorType type, + uint32_t count) { VkDescriptorPoolSize poolSize; memset(&poolSize, 0, sizeof(VkDescriptorPoolSize)); poolSize.descriptorCount = count; @@ -30,20 +28,23 @@ GrVkDescriptorPool::GrVkDescriptorPool(const GrVkGpu* gpu, VkDescriptorType type createInfo.poolSizeCount = 1; createInfo.pPoolSizes = &poolSize; - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateDescriptorPool(gpu->device(), - &createInfo, - nullptr, - &fDescPool)); + VkDescriptorPool pool; + VkResult result; + GR_VK_CALL_RESULT(gpu, result, CreateDescriptorPool(gpu->device(), &createInfo, nullptr, + &pool)); + if (result != VK_SUCCESS) { + return nullptr; + } + return new GrVkDescriptorPool(pool, type, count); } +GrVkDescriptorPool::GrVkDescriptorPool(VkDescriptorPool pool, VkDescriptorType type, uint32_t count) + : INHERITED(), fType(type), fCount(count), fDescPool(pool) {} + bool GrVkDescriptorPool::isCompatible(VkDescriptorType type, uint32_t count) const { return fType == type && count <= fCount; } -void GrVkDescriptorPool::reset(const GrVkGpu* gpu) { - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), ResetDescriptorPool(gpu->device(), fDescPool, 0)); -} - void GrVkDescriptorPool::freeGPUData(GrVkGpu* gpu) const { // Destroying the VkDescriptorPool will automatically free and delete any VkDescriptorSets // allocated from the pool. diff --git a/third_party/skia/src/gpu/vk/GrVkDescriptorPool.h b/third_party/skia/src/gpu/vk/GrVkDescriptorPool.h index db90e61a093b..b1a199e4c4c3 100644 --- a/third_party/skia/src/gpu/vk/GrVkDescriptorPool.h +++ b/third_party/skia/src/gpu/vk/GrVkDescriptorPool.h @@ -20,12 +20,10 @@ class GrVkGpu; */ class GrVkDescriptorPool : public GrVkResource { public: - GrVkDescriptorPool(const GrVkGpu* gpu, VkDescriptorType type, uint32_t count); + static GrVkDescriptorPool* Create(GrVkGpu* gpu, VkDescriptorType type, uint32_t count); VkDescriptorPool descPool() const { return fDescPool; } - void reset(const GrVkGpu* gpu); - // Returns whether or not this descriptor pool could be used, assuming it gets fully reset and // not in use by another draw, to support the requested type and count. bool isCompatible(VkDescriptorType type, uint32_t count) const; @@ -38,6 +36,8 @@ class GrVkDescriptorPool : public GrVkResource { #endif private: + GrVkDescriptorPool(VkDescriptorPool pool, VkDescriptorType type, uint32_t count); + void freeGPUData(GrVkGpu* gpu) const override; VkDescriptorType fType; diff --git a/third_party/skia/src/gpu/vk/GrVkDescriptorSet.h b/third_party/skia/src/gpu/vk/GrVkDescriptorSet.h index d909511c4597..7405c0753694 100644 --- a/third_party/skia/src/gpu/vk/GrVkDescriptorSet.h +++ b/third_party/skia/src/gpu/vk/GrVkDescriptorSet.h @@ -23,7 +23,7 @@ class GrVkDescriptorSet : public GrVkRecycledResource { ~GrVkDescriptorSet() override {} - VkDescriptorSet descriptorSet() const { return fDescSet; } + const VkDescriptorSet* descriptorSet() const { return &fDescSet; } #ifdef SK_TRACE_VK_RESOURCES void dumpInfo() const override { diff --git a/third_party/skia/src/gpu/vk/GrVkDescriptorSetManager.cpp b/third_party/skia/src/gpu/vk/GrVkDescriptorSetManager.cpp index 5869ae6911d1..38b33a0ef6a2 100644 --- a/third_party/skia/src/gpu/vk/GrVkDescriptorSetManager.cpp +++ b/third_party/skia/src/gpu/vk/GrVkDescriptorSetManager.cpp @@ -23,10 +23,8 @@ GrVkDescriptorSetManager* GrVkDescriptorSetManager::CreateUniformManager(GrVkGpu stages |= kGeometry_GrShaderFlag; } visibilities.push_back(stages); - SkTArray samplers; - return new GrVkDescriptorSetManager(gpu, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, visibilities, - samplers); + return Create(gpu, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, visibilities, samplers); } GrVkDescriptorSetManager* GrVkDescriptorSetManager::CreateSamplerManager( @@ -38,7 +36,7 @@ GrVkDescriptorSetManager* GrVkDescriptorSetManager::CreateSamplerManager( visibilities.push_back(uniformHandler.samplerVisibility(i)); immutableSamplers.push_back(uniformHandler.immutableSampler(i)); } - return new GrVkDescriptorSetManager(gpu, type, visibilities, immutableSamplers); + return Create(gpu, type, visibilities, immutableSamplers); } GrVkDescriptorSetManager* GrVkDescriptorSetManager::CreateSamplerManager( @@ -48,14 +46,119 @@ GrVkDescriptorSetManager* GrVkDescriptorSetManager::CreateSamplerManager( for (int i = 0 ; i < visibilities.count(); ++i) { immutableSamplers.push_back(nullptr); } - return new GrVkDescriptorSetManager(gpu, type, visibilities, immutableSamplers); + return Create(gpu, type, visibilities, immutableSamplers); } -GrVkDescriptorSetManager::GrVkDescriptorSetManager( +VkShaderStageFlags visibility_to_vk_stage_flags(uint32_t visibility) { + VkShaderStageFlags flags = 0; + + if (visibility & kVertex_GrShaderFlag) { + flags |= VK_SHADER_STAGE_VERTEX_BIT; + } + if (visibility & kGeometry_GrShaderFlag) { + flags |= VK_SHADER_STAGE_GEOMETRY_BIT; + } + if (visibility & kFragment_GrShaderFlag) { + flags |= VK_SHADER_STAGE_FRAGMENT_BIT; + } + return flags; +} + +static bool get_layout_and_desc_count(GrVkGpu* gpu, + VkDescriptorType type, + const SkTArray& visibilities, + const SkTArray& immutableSamplers, + VkDescriptorSetLayout* descSetLayout, + uint32_t* descCountPerSet) { + if (VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER == type || + VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER == type) { + uint32_t numBindings = visibilities.count(); + std::unique_ptr dsSamplerBindings( + new VkDescriptorSetLayoutBinding[numBindings]); + for (uint32_t i = 0; i < numBindings; ++i) { + uint32_t visibility = visibilities[i]; + dsSamplerBindings[i].binding = i; + dsSamplerBindings[i].descriptorType = type; + dsSamplerBindings[i].descriptorCount = 1; + dsSamplerBindings[i].stageFlags = visibility_to_vk_stage_flags(visibility); + if (VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER == type) { + if (immutableSamplers[i]) { + dsSamplerBindings[i].pImmutableSamplers = immutableSamplers[i]->samplerPtr(); + } else { + dsSamplerBindings[i].pImmutableSamplers = nullptr; + } + } + } + + VkDescriptorSetLayoutCreateInfo dsSamplerLayoutCreateInfo; + memset(&dsSamplerLayoutCreateInfo, 0, sizeof(VkDescriptorSetLayoutCreateInfo)); + dsSamplerLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + dsSamplerLayoutCreateInfo.pNext = nullptr; + dsSamplerLayoutCreateInfo.flags = 0; + dsSamplerLayoutCreateInfo.bindingCount = numBindings; + // Setting to nullptr fixes an error in the param checker validation layer. Even though + // bindingCount is 0 (which is valid), it still tries to validate pBindings unless it is + // null. + dsSamplerLayoutCreateInfo.pBindings = numBindings ? dsSamplerBindings.get() : nullptr; + +#if defined(SK_ENABLE_SCOPED_LSAN_SUPPRESSIONS) + // skia:8713 + __lsan::ScopedDisabler lsanDisabler; +#endif + VkResult result; + GR_VK_CALL_RESULT(gpu, result, + CreateDescriptorSetLayout(gpu->device(), + &dsSamplerLayoutCreateInfo, + nullptr, + descSetLayout)); + if (result != VK_SUCCESS) { + return false; + } + + *descCountPerSet = visibilities.count(); + } else { + SkASSERT(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER == type); + static constexpr int kUniformDescPerSet = 1; + SkASSERT(kUniformDescPerSet == visibilities.count()); + // Create Uniform Buffer Descriptor + VkDescriptorSetLayoutBinding dsUniBinding; + memset(&dsUniBinding, 0, sizeof(dsUniBinding)); + dsUniBinding.binding = GrVkUniformHandler::kUniformBinding; + dsUniBinding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + dsUniBinding.descriptorCount = 1; + dsUniBinding.stageFlags = visibility_to_vk_stage_flags(visibilities[0]); + dsUniBinding.pImmutableSamplers = nullptr; + + VkDescriptorSetLayoutCreateInfo uniformLayoutCreateInfo; + memset(&uniformLayoutCreateInfo, 0, sizeof(VkDescriptorSetLayoutCreateInfo)); + uniformLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + uniformLayoutCreateInfo.pNext = nullptr; + uniformLayoutCreateInfo.flags = 0; + uniformLayoutCreateInfo.bindingCount = 1; + uniformLayoutCreateInfo.pBindings = &dsUniBinding; + +#if defined(SK_ENABLE_SCOPED_LSAN_SUPPRESSIONS) + // skia:8713 + __lsan::ScopedDisabler lsanDisabler; +#endif + VkResult result; + GR_VK_CALL_RESULT(gpu, result, CreateDescriptorSetLayout(gpu->device(), + &uniformLayoutCreateInfo, + nullptr, + descSetLayout)); + if (result != VK_SUCCESS) { + return false; + } + + *descCountPerSet = kUniformDescPerSet; + } + return true; +} + +GrVkDescriptorSetManager* GrVkDescriptorSetManager::Create( GrVkGpu* gpu, VkDescriptorType type, const SkTArray& visibilities, - const SkTArray& immutableSamplers) - : fPoolManager(type, gpu, visibilities, immutableSamplers) { + const SkTArray& immutableSamplers) { #ifdef SK_DEBUG if (type == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) { SkASSERT(visibilities.count() == immutableSamplers.count()); @@ -63,6 +166,22 @@ GrVkDescriptorSetManager::GrVkDescriptorSetManager( SkASSERT(immutableSamplers.count() == 0); } #endif + + VkDescriptorSetLayout descSetLayout; + uint32_t descCountPerSet; + if (!get_layout_and_desc_count(gpu, type, visibilities, immutableSamplers, &descSetLayout, + &descCountPerSet)) { + return nullptr; + } + return new GrVkDescriptorSetManager(gpu, type, descSetLayout, descCountPerSet, visibilities, + immutableSamplers); +} + +GrVkDescriptorSetManager::GrVkDescriptorSetManager( + GrVkGpu* gpu, VkDescriptorType type, VkDescriptorSetLayout descSetLayout, + uint32_t descCountPerSet, const SkTArray& visibilities, + const SkTArray& immutableSamplers) + : fPoolManager(descSetLayout, type, descCountPerSet) { for (int i = 0; i < visibilities.count(); ++i) { fBindingVisibilities.push_back(visibilities[i]); } @@ -84,7 +203,9 @@ const GrVkDescriptorSet* GrVkDescriptorSetManager::getDescriptorSet(GrVkGpu* gpu fFreeSets.removeShuffle(count - 1); } else { VkDescriptorSet vkDS; - fPoolManager.getNewDescriptorSet(gpu, &vkDS); + if (!fPoolManager.getNewDescriptorSet(gpu, &vkDS)) { + return nullptr; + } ds = new GrVkDescriptorSet(vkDS, fPoolManager.fPool, handle); } @@ -171,111 +292,19 @@ bool GrVkDescriptorSetManager::isCompatible(VkDescriptorType type, //////////////////////////////////////////////////////////////////////////////// -VkShaderStageFlags visibility_to_vk_stage_flags(uint32_t visibility) { - VkShaderStageFlags flags = 0; - - if (visibility & kVertex_GrShaderFlag) { - flags |= VK_SHADER_STAGE_VERTEX_BIT; - } - if (visibility & kGeometry_GrShaderFlag) { - flags |= VK_SHADER_STAGE_GEOMETRY_BIT; - } - if (visibility & kFragment_GrShaderFlag) { - flags |= VK_SHADER_STAGE_FRAGMENT_BIT; - } - return flags; -} - GrVkDescriptorSetManager::DescriptorPoolManager::DescriptorPoolManager( + VkDescriptorSetLayout layout, VkDescriptorType type, - GrVkGpu* gpu, - const SkTArray& visibilities, - const SkTArray& immutableSamplers) - : fDescType(type) + uint32_t descCountPerSet) + : fDescLayout(layout) + , fDescType(type) + , fDescCountPerSet(descCountPerSet) + , fMaxDescriptors(kStartNumDescriptors) , fCurrentDescriptorCount(0) , fPool(nullptr) { - - - if (VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER == type || - VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER == type) { - uint32_t numBindings = visibilities.count(); - std::unique_ptr dsSamplerBindings( - new VkDescriptorSetLayoutBinding[numBindings]); - for (uint32_t i = 0; i < numBindings; ++i) { - uint32_t visibility = visibilities[i]; - dsSamplerBindings[i].binding = i; - dsSamplerBindings[i].descriptorType = type; - dsSamplerBindings[i].descriptorCount = 1; - dsSamplerBindings[i].stageFlags = visibility_to_vk_stage_flags(visibility); - if (VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER == type) { - if (immutableSamplers[i]) { - dsSamplerBindings[i].pImmutableSamplers = immutableSamplers[i]->samplerPtr(); - } else { - dsSamplerBindings[i].pImmutableSamplers = nullptr; - } - } - } - - VkDescriptorSetLayoutCreateInfo dsSamplerLayoutCreateInfo; - memset(&dsSamplerLayoutCreateInfo, 0, sizeof(VkDescriptorSetLayoutCreateInfo)); - dsSamplerLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; - dsSamplerLayoutCreateInfo.pNext = nullptr; - dsSamplerLayoutCreateInfo.flags = 0; - dsSamplerLayoutCreateInfo.bindingCount = numBindings; - // Setting to nullptr fixes an error in the param checker validation layer. Even though - // bindingCount is 0 (which is valid), it still tries to validate pBindings unless it is - // null. - dsSamplerLayoutCreateInfo.pBindings = numBindings ? dsSamplerBindings.get() : nullptr; - -#if defined(SK_ENABLE_SCOPED_LSAN_SUPPRESSIONS) - // skia:8713 - __lsan::ScopedDisabler lsanDisabler; -#endif - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), - CreateDescriptorSetLayout(gpu->device(), - &dsSamplerLayoutCreateInfo, - nullptr, - &fDescLayout)); - fDescCountPerSet = visibilities.count(); - } else { - SkASSERT(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER == type); - GR_STATIC_ASSERT(1 == kUniformDescPerSet); - SkASSERT(kUniformDescPerSet == visibilities.count()); - // Create Uniform Buffer Descriptor - VkDescriptorSetLayoutBinding dsUniBinding; - memset(&dsUniBinding, 0, sizeof(dsUniBinding)); - dsUniBinding.binding = GrVkUniformHandler::kUniformBinding; - dsUniBinding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - dsUniBinding.descriptorCount = 1; - dsUniBinding.stageFlags = visibility_to_vk_stage_flags(visibilities[0]); - dsUniBinding.pImmutableSamplers = nullptr; - - VkDescriptorSetLayoutCreateInfo uniformLayoutCreateInfo; - memset(&uniformLayoutCreateInfo, 0, sizeof(VkDescriptorSetLayoutCreateInfo)); - uniformLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; - uniformLayoutCreateInfo.pNext = nullptr; - uniformLayoutCreateInfo.flags = 0; - uniformLayoutCreateInfo.bindingCount = 1; - uniformLayoutCreateInfo.pBindings = &dsUniBinding; - -#if defined(SK_ENABLE_SCOPED_LSAN_SUPPRESSIONS) - // skia:8713 - __lsan::ScopedDisabler lsanDisabler; -#endif - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateDescriptorSetLayout(gpu->device(), - &uniformLayoutCreateInfo, - nullptr, - &fDescLayout)); - fDescCountPerSet = kUniformDescPerSet; - } - - SkASSERT(fDescCountPerSet < kStartNumDescriptors); - fMaxDescriptors = kStartNumDescriptors; - SkASSERT(fMaxDescriptors > 0); - this->getNewPool(gpu); } -void GrVkDescriptorSetManager::DescriptorPoolManager::getNewPool(GrVkGpu* gpu) { +bool GrVkDescriptorSetManager::DescriptorPoolManager::getNewPool(GrVkGpu* gpu) { if (fPool) { fPool->unref(gpu); uint32_t newPoolSize = fMaxDescriptors + ((fMaxDescriptors + 1) >> 1); @@ -288,17 +317,19 @@ void GrVkDescriptorSetManager::DescriptorPoolManager::getNewPool(GrVkGpu* gpu) { } fPool = gpu->resourceProvider().findOrCreateCompatibleDescriptorPool(fDescType, fMaxDescriptors); - SkASSERT(fPool); + return SkToBool(fPool); } -void GrVkDescriptorSetManager::DescriptorPoolManager::getNewDescriptorSet(GrVkGpu* gpu, +bool GrVkDescriptorSetManager::DescriptorPoolManager::getNewDescriptorSet(GrVkGpu* gpu, VkDescriptorSet* ds) { if (!fMaxDescriptors) { - return; + return false; } fCurrentDescriptorCount += fDescCountPerSet; - if (fCurrentDescriptorCount > fMaxDescriptors) { - this->getNewPool(gpu); + if (!fPool || fCurrentDescriptorCount > fMaxDescriptors) { + if (!this->getNewPool(gpu) ) { + return false; + } fCurrentDescriptorCount = fDescCountPerSet; } @@ -309,9 +340,11 @@ void GrVkDescriptorSetManager::DescriptorPoolManager::getNewDescriptorSet(GrVkGp dsAllocateInfo.descriptorPool = fPool->descPool(); dsAllocateInfo.descriptorSetCount = 1; dsAllocateInfo.pSetLayouts = &fDescLayout; - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), AllocateDescriptorSets(gpu->device(), - &dsAllocateInfo, - ds)); + VkResult result; + GR_VK_CALL_RESULT(gpu, result, AllocateDescriptorSets(gpu->device(), + &dsAllocateInfo, + ds)); + return result == VK_SUCCESS; } void GrVkDescriptorSetManager::DescriptorPoolManager::freeGPUResources(GrVkGpu* gpu) { diff --git a/third_party/skia/src/gpu/vk/GrVkDescriptorSetManager.h b/third_party/skia/src/gpu/vk/GrVkDescriptorSetManager.h index 767ca33ec3af..e4faf06d2954 100644 --- a/third_party/skia/src/gpu/vk/GrVkDescriptorSetManager.h +++ b/third_party/skia/src/gpu/vk/GrVkDescriptorSetManager.h @@ -50,17 +50,15 @@ class GrVkDescriptorSetManager { private: struct DescriptorPoolManager { - DescriptorPoolManager(VkDescriptorType type, GrVkGpu* gpu, - const SkTArray& visibilities, - const SkTArray& immutableSamplers); - + DescriptorPoolManager(VkDescriptorSetLayout, VkDescriptorType type, + uint32_t descCountPerSet); ~DescriptorPoolManager() { SkASSERT(!fDescLayout); SkASSERT(!fPool); } - void getNewDescriptorSet(GrVkGpu* gpu, VkDescriptorSet* ds); + bool getNewDescriptorSet(GrVkGpu* gpu, VkDescriptorSet* ds); void freeGPUResources(GrVkGpu* gpu); void abandonGPUResources(); @@ -74,16 +72,20 @@ class GrVkDescriptorSetManager { private: enum { - kUniformDescPerSet = 1, kMaxDescriptors = 1024, kStartNumDescriptors = 16, // must be less than kMaxUniformDescriptors }; - void getNewPool(GrVkGpu* gpu); + bool getNewPool(GrVkGpu* gpu); }; + static GrVkDescriptorSetManager* Create(GrVkGpu* gpu, + VkDescriptorType, + const SkTArray& visibilities, + const SkTArray& immutableSamplers); + GrVkDescriptorSetManager(GrVkGpu* gpu, - VkDescriptorType, + VkDescriptorType, VkDescriptorSetLayout, uint32_t descCountPerSet, const SkTArray& visibilities, const SkTArray& immutableSamplers); diff --git a/third_party/skia/src/gpu/vk/GrVkFramebuffer.cpp b/third_party/skia/src/gpu/vk/GrVkFramebuffer.cpp index a06d792d94b6..f25699945562 100644 --- a/third_party/skia/src/gpu/vk/GrVkFramebuffer.cpp +++ b/third_party/skia/src/gpu/vk/GrVkFramebuffer.cpp @@ -40,10 +40,9 @@ GrVkFramebuffer* GrVkFramebuffer::Create(GrVkGpu* gpu, createInfo.layers = 1; VkFramebuffer framebuffer; - VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateFramebuffer(gpu->device(), - &createInfo, - nullptr, - &framebuffer)); + VkResult err; + GR_VK_CALL_RESULT(gpu, err, CreateFramebuffer(gpu->device(), &createInfo, nullptr, + &framebuffer)); if (err) { return nullptr; } diff --git a/third_party/skia/src/gpu/vk/GrVkGpu.cpp b/third_party/skia/src/gpu/vk/GrVkGpu.cpp index d9baea4d2566..7a256320dfa7 100644 --- a/third_party/skia/src/gpu/vk/GrVkGpu.cpp +++ b/third_party/skia/src/gpu/vk/GrVkGpu.cpp @@ -60,8 +60,7 @@ #endif #define VK_CALL(X) GR_VK_CALL(this->vkInterface(), X) -#define VK_CALL_RET(RET, X) GR_VK_CALL_RET(this->vkInterface(), RET, X) -#define VK_CALL_ERRCHECK(X) GR_VK_CALL_ERRCHECK(this->vkInterface(), X) +#define VK_CALL_RET(RET, X) GR_VK_CALL_RESULT(this, RET, X) sk_sp GrVkGpu::Make(const GrVkBackendContext& backendContext, const GrContextOptions& options, GrContext* context) { @@ -223,9 +222,11 @@ GrVkGpu::GrVkGpu(GrContext* context, const GrContextOptions& options, fResourceProvider.init(); fCmdPool = fResourceProvider.findOrCreateCommandPool(); - fCurrentCmdBuffer = fCmdPool->getPrimaryCommandBuffer(); - SkASSERT(fCurrentCmdBuffer); - fCurrentCmdBuffer->begin(this); + if (fCmdPool) { + fCurrentCmdBuffer = fCmdPool->getPrimaryCommandBuffer(); + SkASSERT(fCurrentCmdBuffer); + fCurrentCmdBuffer->begin(this); + } } void GrVkGpu::destroyResources() { @@ -323,16 +324,18 @@ GrOpsRenderPass* GrVkGpu::getOpsRenderPass( GrRenderTarget* rt, GrSurfaceOrigin origin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo, - const SkTArray& sampledProxies) { + const SkTArray& sampledProxies) { if (!fCachedOpsRenderPass) { fCachedOpsRenderPass.reset(new GrVkOpsRenderPass(this)); } - fCachedOpsRenderPass->set(rt, origin, bounds, colorInfo, stencilInfo, sampledProxies); + if (!fCachedOpsRenderPass->set(rt, origin, bounds, colorInfo, stencilInfo, sampledProxies)) { + return nullptr; + } return fCachedOpsRenderPass.get(); } -void GrVkGpu::submitCommandBuffer(SyncQueue sync, GrGpuFinishedProc finishedProc, +bool GrVkGpu::submitCommandBuffer(SyncQueue sync, GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); SkASSERT(fCurrentCmdBuffer); @@ -345,25 +348,41 @@ void GrVkGpu::submitCommandBuffer(SyncQueue sync, GrGpuFinishedProc finishedProc if (finishedProc) { fResourceProvider.addFinishedProcToActiveCommandBuffers(finishedProc, finishedContext); } - return; + return true; } fCurrentCmdBuffer->end(this); + SkASSERT(fCmdPool); fCmdPool->close(); - fCurrentCmdBuffer->submitToQueue(this, fQueue, sync, fSemaphoresToSignal, fSemaphoresToWaitOn); + bool didSubmit = fCurrentCmdBuffer->submitToQueue(this, fQueue, fSemaphoresToSignal, + fSemaphoresToWaitOn); + + if (didSubmit && sync == kForce_SyncQueue) { + fCurrentCmdBuffer->forceSync(this); + } if (finishedProc) { // Make sure this is called after closing the current command pool fResourceProvider.addFinishedProcToActiveCommandBuffers(finishedProc, finishedContext); } - // We must delete and drawables that have been waitint till submit for us to destroy. + // We must delete any drawables that had to wait until submit to destroy. fDrawables.reset(); - for (int i = 0; i < fSemaphoresToWaitOn.count(); ++i) { - fSemaphoresToWaitOn[i]->unref(this); + // If we didn't submit the command buffer then we did not wait on any semaphores. We will + // continue to hold onto these semaphores and wait on them during the next command buffer + // submission. + if (didSubmit) { + for (int i = 0; i < fSemaphoresToWaitOn.count(); ++i) { + fSemaphoresToWaitOn[i]->unref(this); + } + fSemaphoresToWaitOn.reset(); } - fSemaphoresToWaitOn.reset(); + + // Even if we did not submit the command buffer, we drop all the signal semaphores since we will + // not try to recover the work that wasn't submitted and instead just drop it all. The client + // will be notified that the semaphores were not submit so that they will not try to wait on + // them. for (int i = 0; i < fSemaphoresToSignal.count(); ++i) { fSemaphoresToSignal[i]->unref(this); } @@ -373,8 +392,11 @@ void GrVkGpu::submitCommandBuffer(SyncQueue sync, GrGpuFinishedProc finishedProc fCmdPool->unref(this); fResourceProvider.checkCommandBuffers(); fCmdPool = fResourceProvider.findOrCreateCommandPool(); - fCurrentCmdBuffer = fCmdPool->getPrimaryCommandBuffer(); - fCurrentCmdBuffer->begin(this); + if (fCmdPool) { + fCurrentCmdBuffer = fCmdPool->getPrimaryCommandBuffer(); + fCurrentCmdBuffer->begin(this); + } + return didSubmit; } /////////////////////////////////////////////////////////////////////////////// @@ -440,7 +462,9 @@ bool GrVkGpu::onWritePixels(GrSurface* surface, int left, int top, int width, in VK_ACCESS_HOST_WRITE_BIT, VK_PIPELINE_STAGE_HOST_BIT, false); - this->submitCommandBuffer(kForce_SyncQueue); + if (!this->submitCommandBuffer(kForce_SyncQueue)) { + return false; + } } success = this->uploadTexDataLinear(vkTex, left, top, width, height, srcColorType, texels[0].fPixels, texels[0].fRowBytes); @@ -1433,18 +1457,16 @@ bool GrVkGpu::onRegenerateMipMapLevels(GrTexture* tex) { GrStencilAttachment* GrVkGpu::createStencilAttachmentForRenderTarget( const GrRenderTarget* rt, int width, int height, int numStencilSamples) { - SkASSERT(numStencilSamples == rt->numSamples()); + SkASSERT(numStencilSamples == rt->numSamples() || this->caps()->mixedSamplesSupport()); SkASSERT(width >= rt->width()); SkASSERT(height >= rt->height()); - int samples = rt->numSamples(); - const GrVkCaps::StencilFormat& sFmt = this->vkCaps().preferredStencilFormat(); GrVkStencilAttachment* stencil(GrVkStencilAttachment::Create(this, width, height, - samples, + numStencilSamples, sFmt)); fStats.incStencilAttachmentCreates(); return stencil; @@ -1498,26 +1520,30 @@ static void set_image_layout(const GrVkInterface* vkInterface, VkCommandBuffer c barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; barrier.image = info->fImage; barrier.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, mipLevels, 0, 1}; - GR_VK_CALL(vkInterface, CmdPipelineBarrier( - cmdBuffer, - srcStageMask, - dstStageMask, - 0, - 0, nullptr, - 0, nullptr, - 1, &barrier)); + GR_VK_CALL(vkInterface, CmdPipelineBarrier(cmdBuffer, + srcStageMask, + dstStageMask, + 0, + 0, nullptr, + 0, nullptr, + 1, &barrier)); info->fImageLayout = newLayout; } -bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bool texturable, - bool renderable, GrMipMapped mipMapped, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrVkImageInfo* info, +bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, + SkISize dimensions, + bool texturable, + bool renderable, + const BackendTextureData* data, + int numMipLevels, + GrVkImageInfo* info, GrProtected isProtected) { + if (!fCmdPool) { + return false; + } SkASSERT(texturable || renderable); if (!texturable) { - SkASSERT(GrMipMapped::kNo == mipMapped); - SkASSERT(!srcData && !numMipLevels); + SkASSERT(!data && numMipLevels == 1); } // Compressed formats go through onCreateCompressedBackendTexture @@ -1545,21 +1571,12 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo usageFlags |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; } - // Figure out the number of mip levels. - uint32_t mipLevelCount = 1; - if (srcData) { - SkASSERT(numMipLevels > 0); - mipLevelCount = numMipLevels; - } else if (GrMipMapped::kYes == mipMapped) { - mipLevelCount = SkMipMap::ComputeLevelCount(w, h) + 1; - } - GrVkImage::ImageDesc imageDesc; imageDesc.fImageType = VK_IMAGE_TYPE_2D; imageDesc.fFormat = vkFormat; - imageDesc.fWidth = w; - imageDesc.fHeight = h; - imageDesc.fLevels = mipLevelCount; + imageDesc.fWidth = dimensions.width(); + imageDesc.fHeight = dimensions.height(); + imageDesc.fLevels = numMipLevels; imageDesc.fSamples = 1; imageDesc.fImageTiling = VK_IMAGE_TILING_OPTIMAL; imageDesc.fUsageFlags = usageFlags; @@ -1571,7 +1588,7 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo return false; } - if (!srcData && !color) { + if (!data) { return true; } @@ -1590,7 +1607,7 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo }; VkCommandBuffer cmdBuffer; - err = VK_CALL(AllocateCommandBuffers(fDevice, &cmdInfo, &cmdBuffer)); + VK_CALL_RET(err, AllocateCommandBuffers(fDevice, &cmdInfo, &cmdBuffer)); if (err) { GrVkImage::DestroyImageInfo(this, info); return false; @@ -1603,22 +1620,25 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo cmdBufferBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; cmdBufferBeginInfo.pInheritanceInfo = nullptr; - err = VK_CALL(BeginCommandBuffer(cmdBuffer, &cmdBufferBeginInfo)); - SkASSERT(!err); + VK_CALL_RET(err, BeginCommandBuffer(cmdBuffer, &cmdBufferBeginInfo)); + if (err) { + VK_CALL(FreeCommandBuffers(fDevice, fCmdPool->vkCommandPool(), 1, &cmdBuffer)); + GrVkImage::DestroyImageInfo(this, info); + return false; + } // Set image layout and add barrier set_image_layout(this->vkInterface(), cmdBuffer, info, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - mipLevelCount, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); + numMipLevels, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); - if (srcData) { + if (data->type() == BackendTextureData::Type::kPixmaps) { size_t bytesPerPixel = fVkCaps->bytesPerPixel(vkFormat); - SkASSERT(w && h); + SkASSERT(!dimensions.isEmpty()); - SkTArray individualMipOffsets(mipLevelCount); + SkTArray individualMipOffsets(numMipLevels); - size_t combinedBufferSize = GrComputeTightCombinedBufferSize(bytesPerPixel, w, h, - &individualMipOffsets, - mipLevelCount); + size_t combinedBufferSize = GrComputeTightCombinedBufferSize( + bytesPerPixel, dimensions, &individualMipOffsets, numMipLevels); VkBufferCreateInfo bufInfo; memset(&bufInfo, 0, sizeof(VkBufferCreateInfo)); @@ -1629,7 +1649,7 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo bufInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; bufInfo.queueFamilyIndexCount = 0; bufInfo.pQueueFamilyIndices = nullptr; - err = VK_CALL(CreateBuffer(fDevice, &bufInfo, nullptr, &buffer)); + VK_CALL_RET(err, CreateBuffer(fDevice, &bufInfo, nullptr, &buffer)); if (err) { GrVkImage::DestroyImageInfo(this, info); @@ -1648,7 +1668,7 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo } bool result = copy_src_data(this, bufferAlloc, vkFormat, individualMipOffsets, - srcData, numMipLevels); + data->pixmaps(), numMipLevels); if (!result) { GrVkImage::DestroyImageInfo(this, info); GrVkMemory::FreeBufferMemory(this, GrVkBuffer::kCopyRead_Type, bufferAlloc); @@ -1658,66 +1678,73 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo return false; } - SkTArray regions(mipLevelCount); + SkTArray regions(numMipLevels); - int currentWidth = w; - int currentHeight = h; - for (uint32_t currentMipLevel = 0; currentMipLevel < mipLevelCount; currentMipLevel++) { + SkISize levelDimensions = dimensions; + for (int i = 0; i < numMipLevels; ++i) { // Submit copy command VkBufferImageCopy& region = regions.push_back(); memset(®ion, 0, sizeof(VkBufferImageCopy)); - region.bufferOffset = individualMipOffsets[currentMipLevel]; - region.bufferRowLength = currentWidth; - region.bufferImageHeight = currentHeight; - region.imageSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, currentMipLevel, 0, 1}; + region.bufferOffset = individualMipOffsets[i]; + region.bufferRowLength = levelDimensions.width(); + region.bufferImageHeight = levelDimensions.height(); + region.imageSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, SkToU32(i), 0, 1}; region.imageOffset = {0, 0, 0}; - region.imageExtent = {(uint32_t)currentWidth, (uint32_t)currentHeight, 1}; - currentWidth = SkTMax(1, currentWidth / 2); - currentHeight = SkTMax(1, currentHeight / 2); + region.imageExtent = {SkToU32(levelDimensions.width()), + SkToU32(levelDimensions.height()), 1}; + + levelDimensions = {SkTMax(1, levelDimensions.width() /2), + SkTMax(1, levelDimensions.height()/2)}; } VK_CALL(CmdCopyBufferToImage(cmdBuffer, buffer, info->fImage, info->fImageLayout, regions.count(), regions.begin())); } else { - SkASSERT(color); + SkASSERT(data->type() == BackendTextureData::Type::kColor); VkClearColorValue vkColor; + SkColor4f color = data->color(); // If we ever support SINT or UINT formats this needs to be updated to use the int32 and // uint32 union members in those cases. - vkColor.float32[0] = color->fR; - vkColor.float32[1] = color->fG; - vkColor.float32[2] = color->fB; - vkColor.float32[3] = color->fA; + vkColor.float32[0] = color.fR; + vkColor.float32[1] = color.fG; + vkColor.float32[2] = color.fB; + vkColor.float32[3] = color.fA; VkImageSubresourceRange range; range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; range.baseArrayLayer = 0; range.baseMipLevel = 0; range.layerCount = 1; - range.levelCount = mipLevelCount; + range.levelCount = numMipLevels; VK_CALL(CmdClearColorImage(cmdBuffer, info->fImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &vkColor, 1, &range)); } - if (!srcData && renderable) { - SkASSERT(color); - + if (data->type() == BackendTextureData::Type::kColor && renderable) { // Change image layout to color-attachment-optimal since if we use this texture as a // borrowed texture within Ganesh we are probably going to render to it set_image_layout(this->vkInterface(), cmdBuffer, info, - VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, mipLevelCount, - VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | - VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, numMipLevels, + VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); } else if (texturable) { // Change image layout to shader read since if we use this texture as a borrowed // texture within Ganesh we require that its layout be set to that set_image_layout(this->vkInterface(), cmdBuffer, info, - VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, mipLevelCount, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, numMipLevels, VK_ACCESS_SHADER_READ_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); } // End CommandBuffer - err = VK_CALL(EndCommandBuffer(cmdBuffer)); - SkASSERT(!err); + VK_CALL_RET(err, EndCommandBuffer(cmdBuffer)); + if (err) { + GrVkImage::DestroyImageInfo(this, info); + if (buffer != VK_NULL_HANDLE) { // workaround for an older NVidia driver crash + GrVkMemory::FreeBufferMemory(this, GrVkBuffer::kCopyRead_Type, bufferAlloc); + VK_CALL(DestroyBuffer(fDevice, buffer, nullptr)); + } + VK_CALL(FreeCommandBuffers(fDevice, fCmdPool->vkCommandPool(), 1, &cmdBuffer)); + return false; + } // Create Fence for queue VkFenceCreateInfo fenceInfo; @@ -1727,8 +1754,16 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo fenceInfo.flags = 0; VkFence fence = VK_NULL_HANDLE; - err = VK_CALL(CreateFence(fDevice, &fenceInfo, nullptr, &fence)); - SkASSERT(!err); + VK_CALL_RET(err, CreateFence(fDevice, &fenceInfo, nullptr, &fence)); + if (err) { + GrVkImage::DestroyImageInfo(this, info); + if (buffer != VK_NULL_HANDLE) { // workaround for an older NVidia driver crash + GrVkMemory::FreeBufferMemory(this, GrVkBuffer::kCopyRead_Type, bufferAlloc); + VK_CALL(DestroyBuffer(fDevice, buffer, nullptr)); + } + VK_CALL(FreeCommandBuffers(fDevice, fCmdPool->vkCommandPool(), 1, &cmdBuffer)); + return false; + } VkProtectedSubmitInfo protectedSubmitInfo; if (fProtectedContext == GrProtected::kYes) { @@ -1749,11 +1784,12 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo submitInfo.pCommandBuffers = &cmdBuffer; submitInfo.signalSemaphoreCount = 0; submitInfo.pSignalSemaphores = nullptr; - err = VK_CALL(QueueSubmit(this->queue(), 1, &submitInfo, fence)); - SkASSERT(!err); + VK_CALL_RET(err, QueueSubmit(this->queue(), 1, &submitInfo, fence)); - err = VK_CALL(WaitForFences(this->device(), 1, &fence, VK_TRUE, UINT64_MAX)); - if (VK_TIMEOUT == err) { + if (!err) { + VK_CALL_RET(err, WaitForFences(this->device(), 1, &fence, VK_TRUE, UINT64_MAX)); + } + if (VK_SUCCESS != err) { GrVkImage::DestroyImageInfo(this, info); if (buffer != VK_NULL_HANDLE) { // workaround for an older NVidia driver crash GrVkMemory::FreeBufferMemory(this, GrVkBuffer::kCopyRead_Type, bufferAlloc); @@ -1761,10 +1797,14 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo } VK_CALL(FreeCommandBuffers(fDevice, fCmdPool->vkCommandPool(), 1, &cmdBuffer)); VK_CALL(DestroyFence(this->device(), fence, nullptr)); - SkDebugf("Fence failed to signal: %d\n", err); - SK_ABORT("failing"); + if (VK_TIMEOUT == err) { + SkDebugf("Fence failed to signal: %d\n", err); + SK_ABORT("failing"); + } else { + SkDebugf("Queue submit or fence wait failed: %d\n", err); + return false; + } } - SkASSERT(!err); // Clean up transfer resources if (buffer != VK_NULL_HANDLE) { // workaround for an older NVidia driver crash @@ -1777,21 +1817,16 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo return true; } -GrBackendTexture GrVkGpu::onCreateBackendTexture(int w, int h, +GrBackendTexture GrVkGpu::onCreateBackendTexture(SkISize dimensions, const GrBackendFormat& format, - GrMipMapped mipMapped, GrRenderable renderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrProtected isProtected) { + const BackendTextureData* data, + int numMipLevels, + GrProtected isProtected) { this->handleDirtyContext(); const GrVkCaps& caps = this->vkCaps(); - // GrGpu::createBackendTexture should've ensured these conditions - SkASSERT(w >= 1 && w <= caps.maxTextureSize() && h >= 1 && h <= caps.maxTextureSize()); - SkASSERT(GrGpu::MipMapsAreCorrect(w, h, mipMapped, srcData, numMipLevels)); - SkASSERT(mipMapped == GrMipMapped::kNo || caps.mipMapSupport()); - if (fProtectedContext != isProtected) { return GrBackendTexture(); } @@ -1814,14 +1849,67 @@ GrBackendTexture GrVkGpu::onCreateBackendTexture(int w, int h, } GrVkImageInfo info; - if (!this->createVkImageForBackendSurface(vkFormat, w, h, true, - GrRenderable::kYes == renderable, mipMapped, - srcData, numMipLevels, color, &info, isProtected)) { + if (!this->createVkImageForBackendSurface(vkFormat, dimensions, true, + GrRenderable::kYes == renderable, data, numMipLevels, + &info, isProtected)) { SkDebugf("Failed to create testing only image\n"); return GrBackendTexture(); } - return GrBackendTexture(w, h, info); + return GrBackendTexture(dimensions.width(), dimensions.height(), info); +} + +void GrVkGpu::querySampleLocations(GrRenderTarget* renderTarget, + SkTArray* sampleLocations) { + // In Vulkan, sampleLocationsSupport() means that the platform uses the standard sample + // locations defined by the spec. + SkASSERT(this->caps()->sampleLocationsSupport()); + static constexpr SkPoint kStandardSampleLocations_1[1] = { + {0.5f, 0.5f}}; + static constexpr SkPoint kStandardSampleLocations_2[2] = { + {0.75f, 0.75f}, {0.25f, 0.25f}}; + static constexpr SkPoint kStandardSampleLocations_4[4] = { + {0.375f, 0.125f}, {0.875f, 0.375f}, {0.125f, 0.625f}, {0.625f, 0.875f}}; + static constexpr SkPoint kStandardSampleLocations_8[8] = { + {0.5625f, 0.3125f}, {0.4375f, 0.6875f}, {0.8125f, 0.5625f}, {0.3125f, 0.1875f}, + {0.1875f, 0.8125f}, {0.0625f, 0.4375f}, {0.6875f, 0.9375f}, {0.9375f, 0.0625f}}; + static constexpr SkPoint kStandardSampleLocations_16[16] = { + {0.5625f, 0.5625f}, {0.4375f, 0.3125f}, {0.3125f, 0.625f}, {0.75f, 0.4375f}, + {0.1875f, 0.375f}, {0.625f, 0.8125f}, {0.8125f, 0.6875f}, {0.6875f, 0.1875f}, + {0.375f, 0.875f}, {0.5f, 0.0625f}, {0.25f, 0.125f}, {0.125f, 0.75f}, + {0.0f, 0.5f}, {0.9375f, 0.25f}, {0.875f, 0.9375f}, {0.0625f, 0.0f}}; + + int numSamples = renderTarget->numSamples(); + if (1 == numSamples) { + SkASSERT(this->caps()->mixedSamplesSupport()); + if (auto* stencil = renderTarget->renderTargetPriv().getStencilAttachment()) { + numSamples = stencil->numSamples(); + } + } + SkASSERT(numSamples > 1); + SkASSERT(!renderTarget->renderTargetPriv().getStencilAttachment() || + numSamples == renderTarget->renderTargetPriv().getStencilAttachment()->numSamples()); + + switch (numSamples) { + case 1: + sampleLocations->push_back_n(1, kStandardSampleLocations_1); + break; + case 2: + sampleLocations->push_back_n(2, kStandardSampleLocations_2); + break; + case 4: + sampleLocations->push_back_n(4, kStandardSampleLocations_4); + break; + case 8: + sampleLocations->push_back_n(8, kStandardSampleLocations_8); + break; + case 16: + sampleLocations->push_back_n(16, kStandardSampleLocations_16); + break; + default: + SK_ABORT("Invalid vulkan sample count."); + break; + } } void GrVkGpu::deleteBackendTexture(const GrBackendTexture& tex) { @@ -1866,8 +1954,7 @@ GrBackendRenderTarget GrVkGpu::createTestingOnlyBackendRenderTarget(int w, int h VkFormat vkFormat = this->vkCaps().getFormatFromColorType(ct); GrVkImageInfo info; - if (!this->createVkImageForBackendSurface(vkFormat, w, h, false, true, GrMipMapped::kNo, - nullptr, 0, &SkColors::kTransparent, &info, + if (!this->createVkImageForBackendSurface(vkFormat, {w, h}, false, true, nullptr, 1, &info, GrProtected::kNo)) { return {}; } @@ -1881,13 +1968,13 @@ void GrVkGpu::deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget& GrVkImageInfo info; if (rt.getVkImageInfo(&info)) { // something in the command buffer may still be using this, so force submit - this->submitCommandBuffer(kForce_SyncQueue); + SkAssertResult(this->submitCommandBuffer(kForce_SyncQueue)); GrVkImage::DestroyImageInfo(this, const_cast(&info)); } } void GrVkGpu::testingOnly_flushGpuAndSync() { - this->submitCommandBuffer(kForce_SyncQueue); + SkAssertResult(this->submitCommandBuffer(kForce_SyncQueue)); } #endif @@ -1925,7 +2012,7 @@ void GrVkGpu::addImageMemoryBarrier(const GrVkResource* resource, barrier); } -void GrVkGpu::onFinishFlush(GrSurfaceProxy* proxies[], int n, +bool GrVkGpu::onFinishFlush(GrSurfaceProxy* proxies[], int n, SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, const GrPrepareForExternalIORequests& externalRequests) { SkASSERT(n >= 0); @@ -1998,9 +2085,11 @@ void GrVkGpu::onFinishFlush(GrSurfaceProxy* proxies[], int n, } if (info.fFlags & kSyncCpu_GrFlushFlag) { - this->submitCommandBuffer(kForce_SyncQueue, info.fFinishedProc, info.fFinishedContext); + return this->submitCommandBuffer(kForce_SyncQueue, info.fFinishedProc, + info.fFinishedContext); } else { - this->submitCommandBuffer(kSkip_SyncQueue, info.fFinishedProc, info.fFinishedContext); + return this->submitCommandBuffer(kSkip_SyncQueue, info.fFinishedProc, + info.fFinishedContext); } } @@ -2341,7 +2430,9 @@ bool GrVkGpu::onReadPixels(GrSurface* surface, int left, int top, int width, int // We need to submit the current command buffer to the Queue and make sure it finishes before // we can copy the data out of the buffer. - this->submitCommandBuffer(kForce_SyncQueue); + if (!this->submitCommandBuffer(kForce_SyncQueue)) { + return false; + } void* mappedMemory = transferBuffer->map(); const GrVkAlloc& transAlloc = transferBuffer->alloc(); GrVkMemory::InvalidateMappedAlloc(this, transAlloc, 0, transAlloc.fSize); @@ -2401,7 +2492,7 @@ void adjust_bounds_to_granularity(SkIRect* dstBounds, const SkIRect& srcBounds, } } -void GrVkGpu::beginRenderPass(const GrVkRenderPass* renderPass, +bool GrVkGpu::beginRenderPass(const GrVkRenderPass* renderPass, const VkClearValue* colorClear, GrVkRenderTarget* target, GrSurfaceOrigin origin, const SkIRect& bounds, bool forSecondaryCB) { @@ -2434,8 +2525,8 @@ void GrVkGpu::beginRenderPass(const GrVkRenderPass* renderPass, clears[1].depthStencil.depth = 0.0f; clears[1].depthStencil.stencil = 0; - fCurrentCmdBuffer->beginRenderPass(this, renderPass, clears, *target, adjustedBounds, - forSecondaryCB); + return fCurrentCmdBuffer->beginRenderPass(this, renderPass, clears, target, adjustedBounds, + forSecondaryCB); } void GrVkGpu::endRenderPass(GrRenderTarget* target, GrSurfaceOrigin origin, @@ -2462,9 +2553,17 @@ GrFence SK_WARN_UNUSED_RESULT GrVkGpu::insertFence() { createInfo.pNext = nullptr; createInfo.flags = 0; VkFence fence = VK_NULL_HANDLE; + VkResult result; - VK_CALL_ERRCHECK(CreateFence(this->device(), &createInfo, nullptr, &fence)); - VK_CALL(QueueSubmit(this->queue(), 0, nullptr, fence)); + VK_CALL_RET(result, CreateFence(this->device(), &createInfo, nullptr, &fence)); + if (result != VK_SUCCESS) { + return 0; + } + VK_CALL_RET(result, QueueSubmit(this->queue(), 0, nullptr, fence)); + if (result != VK_SUCCESS) { + VK_CALL(DestroyFence(this->device(), fence, nullptr)); + return 0; + } GR_STATIC_ASSERT(sizeof(GrFence) >= sizeof(VkFence)); return (GrFence)fence; @@ -2473,7 +2572,8 @@ GrFence SK_WARN_UNUSED_RESULT GrVkGpu::insertFence() { bool GrVkGpu::waitFence(GrFence fence, uint64_t timeout) { SkASSERT(VK_NULL_HANDLE != (VkFence)fence); - VkResult result = VK_CALL(WaitForFences(this->device(), 1, (VkFence*)&fence, VK_TRUE, timeout)); + VkResult result; + VK_CALL_RET(result, WaitForFences(this->device(), 1, (VkFence*)&fence, VK_TRUE, timeout)); return (VK_SUCCESS == result); } @@ -2481,18 +2581,19 @@ void GrVkGpu::deleteFence(GrFence fence) const { VK_CALL(DestroyFence(this->device(), (VkFence)fence, nullptr)); } -sk_sp SK_WARN_UNUSED_RESULT GrVkGpu::makeSemaphore(bool isOwned) { +std::unique_ptr SK_WARN_UNUSED_RESULT GrVkGpu::makeSemaphore(bool isOwned) { return GrVkSemaphore::Make(this, isOwned); } -sk_sp GrVkGpu::wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) { +std::unique_ptr GrVkGpu::wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, + GrWrapOwnership ownership) { return GrVkSemaphore::MakeWrapped(this, semaphore.vkSemaphore(), wrapType, ownership); } -void GrVkGpu::insertSemaphore(sk_sp semaphore) { - GrVkSemaphore* vkSem = static_cast(semaphore.get()); +void GrVkGpu::insertSemaphore(GrSemaphore* semaphore) { + GrVkSemaphore* vkSem = static_cast(semaphore); GrVkSemaphore::Resource* resource = vkSem->getResource(); if (resource->shouldSignal()) { @@ -2501,8 +2602,8 @@ void GrVkGpu::insertSemaphore(sk_sp semaphore) { } } -void GrVkGpu::waitSemaphore(sk_sp semaphore) { - GrVkSemaphore* vkSem = static_cast(semaphore.get()); +void GrVkGpu::waitSemaphore(GrSemaphore* semaphore) { + GrVkSemaphore* vkSem = static_cast(semaphore); GrVkSemaphore::Resource* resource = vkSem->getResource(); if (resource->shouldWait()) { @@ -2511,7 +2612,7 @@ void GrVkGpu::waitSemaphore(sk_sp semaphore) { } } -sk_sp GrVkGpu::prepareTextureForCrossContextUsage(GrTexture* texture) { +std::unique_ptr GrVkGpu::prepareTextureForCrossContextUsage(GrTexture* texture) { SkASSERT(texture); GrVkTexture* vkTexture = static_cast(texture); vkTexture->setImageLayout(this, @@ -2519,6 +2620,9 @@ sk_sp GrVkGpu::prepareTextureForCrossContextUsage(GrTexture* textur VK_ACCESS_SHADER_READ_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, false); + // TODO: should we have a way to notify the caller that this has failed? Currently if the submit + // fails (caused by DEVICE_LOST) this will just cause us to fail the next use of the gpu. + // Eventually we will abandon the whole GPU if this fails. this->submitCommandBuffer(kSkip_SyncQueue); // The image layout change serves as a barrier, so no semaphore is needed. @@ -2533,24 +2637,6 @@ void GrVkGpu::addDrawable(std::unique_ptr drawable) fDrawables.emplace_back(std::move(drawable)); } -uint32_t GrVkGpu::getExtraSamplerKeyForProgram(const GrSamplerState& samplerState, - const GrBackendFormat& format) { - const GrVkYcbcrConversionInfo* ycbcrInfo = format.getVkYcbcrConversionInfo(); - SkASSERT(ycbcrInfo); - if (!ycbcrInfo->isValid()) { - return 0; - } - - const GrVkSampler* sampler = this->resourceProvider().findOrCreateCompatibleSampler( - samplerState, *ycbcrInfo); - - uint32_t result = sampler->uniqueID(); - - sampler->unref(this); - - return result; -} - void GrVkGpu::storeVkPipelineCacheData() { if (this->getContext()->priv().getPersistentCache()) { this->resourceProvider().storePipelineCacheData(); diff --git a/third_party/skia/src/gpu/vk/GrVkGpu.h b/third_party/skia/src/gpu/vk/GrVkGpu.h index cdbb31c6c276..5ecdd9ced6bc 100644 --- a/third_party/skia/src/gpu/vk/GrVkGpu.h +++ b/third_party/skia/src/gpu/vk/GrVkGpu.h @@ -48,6 +48,9 @@ class GrVkGpu : public GrGpu { const GrVkInterface* vkInterface() const { return fInterface.get(); } const GrVkCaps& vkCaps() const { return *fVkCaps; } + bool isDeviceLost() const { return fDeviceIsLost; } + void setDeviceLost() { fDeviceIsLost = true; } + GrVkMemoryAllocator* memoryAllocator() const { return fMemoryAllocator.get(); } VkPhysicalDevice physicalDevice() const { return fPhysicalDevice; } @@ -67,15 +70,7 @@ class GrVkGpu : public GrGpu { GrVkPrimaryCommandBuffer* currentCommandBuffer() { return fCurrentCmdBuffer; } - enum SyncQueue { - kForce_SyncQueue, - kSkip_SyncQueue - }; - - void querySampleLocations(GrRenderTarget*, SkTArray*) override { - SkASSERT(!this->caps()->sampleLocationsSupport()); - SK_ABORT("Sample locations not yet implemented for Vulkan."); - } + void querySampleLocations(GrRenderTarget*, SkTArray*) override; void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {} @@ -100,7 +95,7 @@ class GrVkGpu : public GrGpu { GrRenderTarget*, GrSurfaceOrigin, const SkIRect&, const GrOpsRenderPass::LoadAndStoreInfo&, const GrOpsRenderPass::StencilLoadAndStoreInfo&, - const SkTArray& sampledProxies) override; + const SkTArray& sampledProxies) override; void addBufferMemoryBarrier(const GrVkResource*, VkPipelineStageFlags srcStageMask, @@ -130,12 +125,11 @@ class GrVkGpu : public GrGpu { bool waitFence(GrFence, uint64_t timeout) override; void deleteFence(GrFence) const override; - sk_sp SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override; - sk_sp wrapBackendSemaphore(const GrBackendSemaphore& semaphore, - GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) override; - void insertSemaphore(sk_sp semaphore) override; - void waitSemaphore(sk_sp semaphore) override; + std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override; + std::unique_ptr wrapBackendSemaphore(const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType wrapType, GrWrapOwnership ownership) override; + void insertSemaphore(GrSemaphore* semaphore) override; + void waitSemaphore(GrSemaphore* semaphore) override; // These match the definitions in SkDrawable, from whence they came typedef void* SubmitContext; @@ -147,15 +141,12 @@ class GrVkGpu : public GrGpu { void checkFinishProcs() override { fResourceProvider.checkCommandBuffers(); } - sk_sp prepareTextureForCrossContextUsage(GrTexture*) override; + std::unique_ptr prepareTextureForCrossContextUsage(GrTexture*) override; void copyBuffer(GrVkBuffer* srcBuffer, GrVkBuffer* dstBuffer, VkDeviceSize srcOffset, VkDeviceSize dstOffset, VkDeviceSize size); bool updateBuffer(GrVkBuffer* buffer, const void* src, VkDeviceSize offset, VkDeviceSize size); - uint32_t getExtraSamplerKeyForProgram(const GrSamplerState&, - const GrBackendFormat& format) override; - enum PersistentCacheKeyType : uint32_t { kShader_PersistentCacheKeyType = 0, kPipelineCache_PersistentCacheKeyType = 1, @@ -163,13 +154,18 @@ class GrVkGpu : public GrGpu { void storeVkPipelineCacheData() override; - void beginRenderPass(const GrVkRenderPass*, + bool beginRenderPass(const GrVkRenderPass*, const VkClearValue* colorClear, GrVkRenderTarget*, GrSurfaceOrigin, const SkIRect& bounds, bool forSecondaryCB); void endRenderPass(GrRenderTarget* target, GrSurfaceOrigin origin, const SkIRect& bounds); private: + enum SyncQueue { + kForce_SyncQueue, + kSkip_SyncQueue + }; + GrVkGpu(GrContext*, const GrContextOptions&, const GrVkBackendContext&, sk_sp, uint32_t instanceVersion, uint32_t physicalDeviceVersion); @@ -177,10 +173,12 @@ class GrVkGpu : public GrGpu { void destroyResources(); - GrBackendTexture onCreateBackendTexture(int w, int h, const GrBackendFormat&, - GrMipMapped, GrRenderable, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrProtected) override; + GrBackendTexture onCreateBackendTexture(SkISize, + const GrBackendFormat&, + GrRenderable, + const BackendTextureData*, + int numMipLevels, + GrProtected) override; sk_sp onCreateTexture(const GrSurfaceDesc&, const GrBackendFormat& format, GrRenderable, @@ -231,7 +229,7 @@ class GrVkGpu : public GrGpu { bool onCopySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRect, const SkIPoint& dstPoint) override; - void onFinishFlush(GrSurfaceProxy*[], int, SkSurface::BackendSurfaceAccess access, + bool onFinishFlush(GrSurfaceProxy*[], int, SkSurface::BackendSurfaceAccess access, const GrFlushInfo&, const GrPrepareForExternalIORequests&) override; // Ends and submits the current command buffer to the queue and then creates a new command @@ -240,7 +238,7 @@ class GrVkGpu : public GrGpu { // fSemaphoreToSignal, we will add those signal semaphores to the submission of this command // buffer. If this GrVkGpu object has any semaphores in fSemaphoresToWaitOn, we will add those // wait semaphores to the submission of this command buffer. - void submitCommandBuffer(SyncQueue sync, GrGpuFinishedProc finishedProc = nullptr, + bool submitCommandBuffer(SyncQueue sync, GrGpuFinishedProc finishedProc = nullptr, GrGpuFinishedContext finishedContext = nullptr); void copySurfaceAsCopyImage(GrSurface* dst, GrSurface* src, GrVkImage* dstImage, @@ -263,15 +261,19 @@ class GrVkGpu : public GrGpu { void resolveImage(GrSurface* dst, GrVkRenderTarget* src, const SkIRect& srcRect, const SkIPoint& dstPoint); - bool createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bool texturable, - bool renderable, GrMipMapped mipMapped, - const SkPixmap srcData[], int numMipLevels, - const SkColor4f* color, GrVkImageInfo* info, - GrProtected isProtected); + bool createVkImageForBackendSurface(VkFormat, + SkISize, + bool texturable, + bool renderable, + const BackendTextureData*, + int numMipLevels, + GrVkImageInfo*, + GrProtected); sk_sp fInterface; sk_sp fMemoryAllocator; sk_sp fVkCaps; + bool fDeviceIsLost = false; VkInstance fInstance; VkPhysicalDevice fPhysicalDevice; diff --git a/third_party/skia/src/gpu/vk/GrVkImage.cpp b/third_party/skia/src/gpu/vk/GrVkImage.cpp index 2b05d00e4163..befb7d12fcee 100644 --- a/third_party/skia/src/gpu/vk/GrVkImage.cpp +++ b/third_party/skia/src/gpu/vk/GrVkImage.cpp @@ -152,7 +152,7 @@ void GrVkImage::setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout, this->updateImageLayout(newLayout); } -bool GrVkImage::InitImageInfo(const GrVkGpu* gpu, const ImageDesc& imageDesc, GrVkImageInfo* info) { +bool GrVkImage::InitImageInfo(GrVkGpu* gpu, const ImageDesc& imageDesc, GrVkImageInfo* info) { if (0 == imageDesc.fWidth || 0 == imageDesc.fHeight) { return false; } @@ -197,8 +197,11 @@ bool GrVkImage::InitImageInfo(const GrVkGpu* gpu, const ImageDesc& imageDesc, Gr initialLayout // initialLayout }; - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateImage(gpu->device(), &imageCreateInfo, nullptr, - &image)); + VkResult result; + GR_VK_CALL_RESULT(gpu, result, CreateImage(gpu->device(), &imageCreateInfo, nullptr, &image)); + if (result != VK_SUCCESS) { + return false; + } if (!GrVkMemory::AllocAndBindImageMemory(gpu, image, isLinear, &alloc)) { VK_CALL(gpu, DestroyImage(gpu->device(), image, nullptr)); diff --git a/third_party/skia/src/gpu/vk/GrVkImage.h b/third_party/skia/src/gpu/vk/GrVkImage.h index 8f448639c62c..69ef5fedfcf6 100644 --- a/third_party/skia/src/gpu/vk/GrVkImage.h +++ b/third_party/skia/src/gpu/vk/GrVkImage.h @@ -137,7 +137,7 @@ class GrVkImage : SkNoncopyable { , fIsProtected(GrProtected::kNo) {} }; - static bool InitImageInfo(const GrVkGpu* gpu, const ImageDesc& imageDesc, GrVkImageInfo*); + static bool InitImageInfo(GrVkGpu* gpu, const ImageDesc& imageDesc, GrVkImageInfo*); // Destroys the internal VkImage and VkDeviceMemory in the GrVkImageInfo static void DestroyImageInfo(const GrVkGpu* gpu, GrVkImageInfo*); diff --git a/third_party/skia/src/gpu/vk/GrVkImageView.cpp b/third_party/skia/src/gpu/vk/GrVkImageView.cpp index ce7b1c54589d..123da926665c 100644 --- a/third_party/skia/src/gpu/vk/GrVkImageView.cpp +++ b/third_party/skia/src/gpu/vk/GrVkImageView.cpp @@ -52,8 +52,8 @@ const GrVkImageView* GrVkImageView::Create(GrVkGpu* gpu, VkImage image, VkFormat viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_STENCIL_BIT; } - VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateImageView(gpu->device(), &viewInfo, - nullptr, &imageView)); + VkResult err; + GR_VK_CALL_RESULT(gpu, err, CreateImageView(gpu->device(), &viewInfo, nullptr, &imageView)); if (err) { return nullptr; } diff --git a/third_party/skia/src/gpu/vk/GrVkMemory.cpp b/third_party/skia/src/gpu/vk/GrVkMemory.cpp index ed14a643ec94..8e76ed6bde36 100644 --- a/third_party/skia/src/gpu/vk/GrVkMemory.cpp +++ b/third_party/skia/src/gpu/vk/GrVkMemory.cpp @@ -30,7 +30,7 @@ static BufferUsage get_buffer_usage(GrVkBuffer::Type type, bool dynamic) { SK_ABORT("Invalid GrVkBuffer::Type"); } -bool GrVkMemory::AllocAndBindBufferMemory(const GrVkGpu* gpu, +bool GrVkMemory::AllocAndBindBufferMemory(GrVkGpu* gpu, VkBuffer buffer, GrVkBuffer::Type type, bool dynamic, @@ -62,9 +62,9 @@ bool GrVkMemory::AllocAndBindBufferMemory(const GrVkGpu* gpu, allocator->getAllocInfo(memory, alloc); // Bind buffer - VkResult err = GR_VK_CALL(gpu->vkInterface(), BindBufferMemory(gpu->device(), buffer, - alloc->fMemory, - alloc->fOffset)); + VkResult err; + GR_VK_CALL_RESULT(gpu, err, BindBufferMemory(gpu->device(), buffer, alloc->fMemory, + alloc->fOffset)); if (err) { FreeBufferMemory(gpu, type, *alloc); return false; @@ -85,7 +85,7 @@ void GrVkMemory::FreeBufferMemory(const GrVkGpu* gpu, GrVkBuffer::Type type, const VkDeviceSize kMaxSmallImageSize = 256 * 1024; -bool GrVkMemory::AllocAndBindImageMemory(const GrVkGpu* gpu, +bool GrVkMemory::AllocAndBindImageMemory(GrVkGpu* gpu, VkImage image, bool linearTiling, GrVkAlloc* alloc) { @@ -114,8 +114,9 @@ bool GrVkMemory::AllocAndBindImageMemory(const GrVkGpu* gpu, allocator->getAllocInfo(memory, alloc); // Bind buffer - VkResult err = GR_VK_CALL(gpu->vkInterface(), BindImageMemory(gpu->device(), image, - alloc->fMemory, alloc->fOffset)); + VkResult err; + GR_VK_CALL_RESULT(gpu, err, BindImageMemory(gpu->device(), image, alloc->fMemory, + alloc->fOffset)); if (err) { FreeImageMemory(gpu, linearTiling, *alloc); return false; @@ -134,7 +135,7 @@ void GrVkMemory::FreeImageMemory(const GrVkGpu* gpu, bool linearTiling, } } -void* GrVkMemory::MapAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc) { +void* GrVkMemory::MapAlloc(GrVkGpu* gpu, const GrVkAlloc& alloc) { SkASSERT(GrVkAlloc::kMappable_Flag & alloc.fFlags); #ifdef SK_DEBUG if (alloc.fFlags & GrVkAlloc::kNoncoherent_Flag) { @@ -149,9 +150,9 @@ void* GrVkMemory::MapAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc) { } void* mapPtr; - VkResult err = GR_VK_CALL(gpu->vkInterface(), MapMemory(gpu->device(), alloc.fMemory, - alloc.fOffset, - alloc.fSize, 0, &mapPtr)); + VkResult err; + GR_VK_CALL_RESULT(gpu, err, MapMemory(gpu->device(), alloc.fMemory, alloc.fOffset, alloc.fSize, + 0, &mapPtr)); if (err) { mapPtr = nullptr; } diff --git a/third_party/skia/src/gpu/vk/GrVkMemory.h b/third_party/skia/src/gpu/vk/GrVkMemory.h index 7244da053c36..db2c0e660626 100644 --- a/third_party/skia/src/gpu/vk/GrVkMemory.h +++ b/third_party/skia/src/gpu/vk/GrVkMemory.h @@ -19,14 +19,14 @@ namespace GrVkMemory { * Allocates vulkan device memory and binds it to the gpu's device for the given object. * Returns true if allocation succeeded. */ - bool AllocAndBindBufferMemory(const GrVkGpu* gpu, + bool AllocAndBindBufferMemory(GrVkGpu* gpu, VkBuffer buffer, GrVkBuffer::Type type, bool dynamic, GrVkAlloc* alloc); void FreeBufferMemory(const GrVkGpu* gpu, GrVkBuffer::Type type, const GrVkAlloc& alloc); - bool AllocAndBindImageMemory(const GrVkGpu* gpu, + bool AllocAndBindImageMemory(GrVkGpu* gpu, VkImage image, bool linearTiling, GrVkAlloc* alloc); @@ -36,7 +36,7 @@ namespace GrVkMemory { // the hood, we may map more than the range of the GrVkAlloc (e.g. the entire VkDeviceMemory), // but the pointer returned will always be to the start of the GrVkAlloc. The caller should also // never assume more than the GrVkAlloc block has been mapped. - void* MapAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc); + void* MapAlloc(GrVkGpu* gpu, const GrVkAlloc& alloc); void UnmapAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc); // For the Flush and Invalidate calls, the offset should be relative to the GrVkAlloc. Thus this diff --git a/third_party/skia/src/gpu/vk/GrVkOpsRenderPass.cpp b/third_party/skia/src/gpu/vk/GrVkOpsRenderPass.cpp index c58c412409d9..a71c08a96b4b 100644 --- a/third_party/skia/src/gpu/vk/GrVkOpsRenderPass.cpp +++ b/third_party/skia/src/gpu/vk/GrVkOpsRenderPass.cpp @@ -1,9 +1,9 @@ /* -* Copyright 2016 Google Inc. -* -* Use of this source code is governed by a BSD-style license that can be -* found in the LICENSE file. -*/ + * Copyright 2016 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/vk/GrVkOpsRenderPass.h" @@ -60,7 +60,7 @@ void get_vk_load_store_ops(GrLoadOp loadOpIn, GrStoreOp storeOpIn, GrVkOpsRenderPass::GrVkOpsRenderPass(GrVkGpu* gpu) : fGpu(gpu) {} -void GrVkOpsRenderPass::init(const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, +bool GrVkOpsRenderPass::init(const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo, const SkPMColor4f& clearColor) { @@ -101,17 +101,20 @@ void GrVkOpsRenderPass::init(const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, false); } - const GrVkResourceProvider::CompatibleRPHandle& rpHandle = vkRT->compatibleRenderPassHandle(); + const GrVkResourceProvider::CompatibleRPHandle& rpHandle = + vkRT->compatibleRenderPassHandle(); if (rpHandle.isValid()) { fCurrentRenderPass = fGpu->resourceProvider().findRenderPass(rpHandle, vkColorOps, vkStencilOps); } else { - fCurrentRenderPass = fGpu->resourceProvider().findRenderPass(*vkRT, + fCurrentRenderPass = fGpu->resourceProvider().findRenderPass(vkRT, vkColorOps, vkStencilOps); } - SkASSERT(fCurrentRenderPass); + if (!fCurrentRenderPass) { + return false; + } VkClearValue vkClearColor; vkClearColor.color.float32[0] = clearColor[0]; @@ -120,15 +123,27 @@ void GrVkOpsRenderPass::init(const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, vkClearColor.color.float32[3] = clearColor[3]; if (!fGpu->vkCaps().preferPrimaryOverSecondaryCommandBuffers()) { + SkASSERT(fGpu->cmdPool()); fCurrentSecondaryCommandBuffer = fGpu->cmdPool()->findOrCreateSecondaryCommandBuffer(fGpu); - fCurrentSecondaryCommandBuffer->begin(fGpu, vkRT->framebuffer(), fCurrentRenderPass); + if (!fCurrentSecondaryCommandBuffer) { + fCurrentRenderPass = nullptr; + return false; + } + fCurrentSecondaryCommandBuffer->begin(fGpu, vkRT->getFramebuffer(), fCurrentRenderPass); } - fGpu->beginRenderPass(fCurrentRenderPass, &vkClearColor, vkRT, fOrigin, fBounds, - SkToBool(fCurrentSecondaryCommandBuffer)); + if (!fGpu->beginRenderPass(fCurrentRenderPass, &vkClearColor, vkRT, fOrigin, fBounds, + SkToBool(fCurrentSecondaryCommandBuffer))) { + if (fCurrentSecondaryCommandBuffer) { + fCurrentSecondaryCommandBuffer->end(fGpu); + } + fCurrentRenderPass = nullptr; + return false; + } + return true; } -void GrVkOpsRenderPass::initWrapped() { +bool GrVkOpsRenderPass::initWrapped() { GrVkRenderTarget* vkRT = static_cast(fRenderTarget); SkASSERT(vkRT->wrapsSecondaryCommandBuffer()); fCurrentRenderPass = vkRT->externalRenderPass(); @@ -137,7 +152,11 @@ void GrVkOpsRenderPass::initWrapped() { fCurrentSecondaryCommandBuffer.reset( GrVkSecondaryCommandBuffer::Create(vkRT->getExternalSecondaryCommandBuffer())); + if (!fCurrentSecondaryCommandBuffer) { + return false; + } fCurrentSecondaryCommandBuffer->begin(fGpu, nullptr, fCurrentRenderPass); + return true; } GrVkOpsRenderPass::~GrVkOpsRenderPass() { @@ -163,9 +182,18 @@ void GrVkOpsRenderPass::submit() { if (!fRenderTarget) { return; } + if (!fCurrentRenderPass) { + SkASSERT(fGpu->isDeviceLost()); + return; + } // We don't want to actually submit the secondary command buffer if it is wrapped. if (this->wrapsSecondaryCommandBuffer()) { + // We pass the ownership of the GrVkSecondaryCommandBuffer to the special wrapped + // GrVkRenderTarget since it's lifetime matches the lifetime we need to keep the + // GrVkResources on the GrVkSecondaryCommandBuffer alive. + static_cast(fRenderTarget)->addWrappedGrSecondaryCommandBuffer( + std::move(fCurrentSecondaryCommandBuffer)); return; } @@ -175,10 +203,10 @@ void GrVkOpsRenderPass::submit() { fGpu->endRenderPass(fRenderTarget, fOrigin, fBounds); } -void GrVkOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin, const SkIRect& bounds, +bool GrVkOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo& colorInfo, const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo, - const SkTArray& sampledProxies) { + const SkTArray& sampledProxies) { SkASSERT(!fRenderTarget); SkASSERT(fGpu == rt->getContext()->priv().getGpu()); @@ -190,6 +218,7 @@ void GrVkOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin, const Sk for (int i = 0; i < sampledProxies.count(); ++i) { if (sampledProxies[i]->isInstantiated()) { + SkASSERT(sampledProxies[i]->asTextureProxy()); GrVkTexture* vkTex = static_cast(sampledProxies[i]->peekTexture()); SkASSERT(vkTex); vkTex->setImageLayout( @@ -202,16 +231,18 @@ void GrVkOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin, const Sk fBounds = bounds; if (this->wrapsSecondaryCommandBuffer()) { - this->initWrapped(); - return; + return this->initWrapped(); } - this->init(colorInfo, stencilInfo, colorInfo.fClearColor); + return this->init(colorInfo, stencilInfo, colorInfo.fClearColor); } void GrVkOpsRenderPass::reset() { if (fCurrentSecondaryCommandBuffer) { - fCurrentSecondaryCommandBuffer.release()->recycle(fGpu); + // The active GrVkCommandPool on the GrVkGpu should still be the same pool we got the + // secondary command buffer from since we haven't submitted any work yet. + SkASSERT(fGpu->cmdPool()); + fCurrentSecondaryCommandBuffer.release()->recycle(fGpu->cmdPool()); } if (fCurrentRenderPass) { fCurrentRenderPass->unref(fGpu); @@ -238,6 +269,11 @@ void GrVkOpsRenderPass::insertEventMarker(const char* msg) { } void GrVkOpsRenderPass::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) { + if (!fCurrentRenderPass) { + SkASSERT(fGpu->isDeviceLost()); + return; + } + SkASSERT(!clip.hasWindowRectangles()); GrStencilAttachment* sb = fRenderTarget->renderTargetPriv().getStencilAttachment(); @@ -289,6 +325,11 @@ void GrVkOpsRenderPass::onClearStencilClip(const GrFixedClip& clip, bool insideS } void GrVkOpsRenderPass::onClear(const GrFixedClip& clip, const SkPMColor4f& color) { + if (!fCurrentRenderPass) { + SkASSERT(fGpu->isDeviceLost()); + return; + } + // parent class should never let us get here with no RT SkASSERT(!clip.hasWindowRectangles()); @@ -353,28 +394,44 @@ void GrVkOpsRenderPass::addAdditionalRenderPass(bool mustUseSecondaryCommandBuff vkColorOps, vkStencilOps); } else { - fCurrentRenderPass = fGpu->resourceProvider().findRenderPass(*vkRT, + fCurrentRenderPass = fGpu->resourceProvider().findRenderPass(vkRT, vkColorOps, vkStencilOps); } - SkASSERT(fCurrentRenderPass); + if (!fCurrentRenderPass) { + return; + } VkClearValue vkClearColor; memset(&vkClearColor, 0, sizeof(VkClearValue)); if (!fGpu->vkCaps().preferPrimaryOverSecondaryCommandBuffers() || mustUseSecondaryCommandBuffer) { + SkASSERT(fGpu->cmdPool()); fCurrentSecondaryCommandBuffer = fGpu->cmdPool()->findOrCreateSecondaryCommandBuffer(fGpu); - fCurrentSecondaryCommandBuffer->begin(fGpu, vkRT->framebuffer(), fCurrentRenderPass); + if (!fCurrentSecondaryCommandBuffer) { + fCurrentRenderPass = nullptr; + return; + } + fCurrentSecondaryCommandBuffer->begin(fGpu, vkRT->getFramebuffer(), fCurrentRenderPass); } // We use the same fBounds as the whole GrVkOpsRenderPass since we have no way of tracking the // bounds in GrOpsTask for parts before and after inline uploads separately. - fGpu->beginRenderPass(fCurrentRenderPass, &vkClearColor, vkRT, fOrigin, fBounds, - SkToBool(fCurrentSecondaryCommandBuffer)); + if (!fGpu->beginRenderPass(fCurrentRenderPass, &vkClearColor, vkRT, fOrigin, fBounds, + SkToBool(fCurrentSecondaryCommandBuffer))) { + if (fCurrentSecondaryCommandBuffer) { + fCurrentSecondaryCommandBuffer->end(fGpu); + } + fCurrentRenderPass = nullptr; + } } void GrVkOpsRenderPass::inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) { + if (!fCurrentRenderPass) { + SkASSERT(fGpu->isDeviceLost()); + return; + } if (fCurrentSecondaryCommandBuffer) { fCurrentSecondaryCommandBuffer->end(fGpu); fGpu->submitSecondaryCommandBuffer(std::move(fCurrentSecondaryCommandBuffer)); @@ -428,7 +485,6 @@ void GrVkOpsRenderPass::bindGeometry(const GrGpuBuffer* indexBuffer, GrVkPipelineState* GrVkOpsRenderPass::prepareDrawState( const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType, const SkIRect& renderPassScissorRect) { GrVkCommandBuffer* currentCB = this->currentCommandBuffer(); SkASSERT(fCurrentRenderPass); @@ -438,7 +494,6 @@ GrVkPipelineState* GrVkOpsRenderPass::prepareDrawState( GrVkPipelineState* pipelineState = fGpu->resourceProvider().findOrCreateCompatiblePipelineState(fRenderTarget, programInfo, - primitiveType, compatibleRenderPass); if (!pipelineState) { return pipelineState; @@ -447,17 +502,21 @@ GrVkPipelineState* GrVkOpsRenderPass::prepareDrawState( pipelineState->bindPipeline(fGpu, currentCB); // Both the 'programInfo' and this renderPass have an origin. Since they come from the - // same place (i.e., the target renderTargetProxy) that had best agree. + // same place (i.e., the target renderTargetProxy) they had best agree. SkASSERT(programInfo.origin() == fOrigin); - pipelineState->setAndBindUniforms(fGpu, fRenderTarget, programInfo, currentCB); + if (!pipelineState->setAndBindUniforms(fGpu, fRenderTarget, programInfo, currentCB)) { + return nullptr; + } // Check whether we need to bind textures between each GrMesh. If not we can bind them all now. if (!programInfo.hasDynamicPrimProcTextures()) { auto proxies = programInfo.hasFixedPrimProcTextures() ? programInfo.fixedPrimProcTextures() : nullptr; - pipelineState->setAndBindTextures(fGpu, programInfo.primProc(), programInfo.pipeline(), - proxies, currentCB); + if (!pipelineState->setAndBindTextures(fGpu, programInfo.primProc(), programInfo.pipeline(), + proxies, currentCB)) { + return nullptr; + } } if (!programInfo.pipeline().isScissorEnabled()) { @@ -493,6 +552,10 @@ void check_sampled_texture(GrTexture* tex, GrRenderTarget* rt, GrVkGpu* gpu) { void GrVkOpsRenderPass::onDraw(const GrProgramInfo& programInfo, const GrMesh meshes[], int meshCount, const SkRect& bounds) { + if (!fCurrentRenderPass) { + SkASSERT(fGpu->isDeviceLost()); + return; + } SkASSERT(meshCount); // guaranteed by GrOpsRenderPass::draw @@ -515,19 +578,16 @@ void GrVkOpsRenderPass::onDraw(const GrProgramInfo& programInfo, } } - GrFragmentProcessor::Iter iter(programInfo.pipeline()); - while (const GrFragmentProcessor* fp = iter.next()) { - for (int i = 0; i < fp->numTextureSamplers(); ++i) { - const GrFragmentProcessor::TextureSampler& sampler = fp->textureSampler(i); - check_sampled_texture(sampler.peekTexture(), fRenderTarget, fGpu); - } + GrFragmentProcessor::PipelineTextureSamplerRange textureSamplerRange(programInfo.pipeline()); + for (auto [sampler, fp] : textureSamplerRange) { + check_sampled_texture(sampler.peekTexture(), fRenderTarget, fGpu); } if (GrTexture* dstTexture = programInfo.pipeline().peekDstTexture()) { check_sampled_texture(dstTexture, fRenderTarget, fGpu); } // Both the 'programInfo' and this renderPass have an origin. Since they come from the - // same place (i.e., the target renderTargetProxy) that had best agree. + // same place (i.e., the target renderTargetProxy) they had best agree. SkASSERT(programInfo.origin() == fOrigin); #endif @@ -537,9 +597,7 @@ void GrVkOpsRenderPass::onDraw(const GrProgramInfo& programInfo, scissorRect.roundOut(&renderPassScissorRect); } - GrPrimitiveType primitiveType = meshes[0].primitiveType(); - GrVkPipelineState* pipelineState = this->prepareDrawState(programInfo, primitiveType, - renderPassScissorRect); + GrVkPipelineState* pipelineState = this->prepareDrawState(programInfo, renderPassScissorRect); if (!pipelineState) { return; } @@ -549,15 +607,8 @@ void GrVkOpsRenderPass::onDraw(const GrProgramInfo& programInfo, for (int i = 0; i < meshCount; ++i) { const GrMesh& mesh = meshes[i]; - if (mesh.primitiveType() != primitiveType) { - SkDEBUGCODE(pipelineState = nullptr); - primitiveType = mesh.primitiveType(); - pipelineState = this->prepareDrawState(programInfo, primitiveType, - renderPassScissorRect); - if (!pipelineState) { - return; - } - } + + SkASSERT(programInfo.primitiveType() == mesh.primitiveType()); if (hasDynamicScissors) { SkIRect combinedScissorRect; @@ -571,8 +622,15 @@ void GrVkOpsRenderPass::onDraw(const GrProgramInfo& programInfo, } if (hasDynamicTextures) { auto meshProxies = programInfo.dynamicPrimProcTextures(i); - pipelineState->setAndBindTextures(fGpu, programInfo.primProc(), programInfo.pipeline(), - meshProxies, this->currentCommandBuffer()); + if (!pipelineState->setAndBindTextures(fGpu, programInfo.primProc(), + programInfo.pipeline(), meshProxies, + this->currentCommandBuffer())) { + if (fGpu->isDeviceLost()) { + return; + } else { + continue; + } + } } SkASSERT(pipelineState); mesh.sendToGpu(this); @@ -623,6 +681,10 @@ void GrVkOpsRenderPass::sendIndexedInstancedMeshToGpu(GrPrimitiveType, //////////////////////////////////////////////////////////////////////////////// void GrVkOpsRenderPass::executeDrawable(std::unique_ptr drawable) { + if (!fCurrentRenderPass) { + SkASSERT(fGpu->isDeviceLost()); + return; + } GrVkRenderTarget* target = static_cast(fRenderTarget); GrVkImage* targetImage = target->msaaImage() ? target->msaaImage() : target; @@ -634,6 +696,11 @@ void GrVkOpsRenderPass::executeDrawable(std::unique_ptrendRenderPass(fRenderTarget, fOrigin, fBounds); this->addAdditionalRenderPass(true); + // We may have failed to start a new render pass + if (!fCurrentRenderPass) { + SkASSERT(fGpu->isDeviceLost()); + return; + } } SkASSERT(fCurrentSecondaryCommandBuffer); diff --git a/third_party/skia/src/gpu/vk/GrVkOpsRenderPass.h b/third_party/skia/src/gpu/vk/GrVkOpsRenderPass.h index 65d6b5b464c6..0e6a86e7f4e0 100644 --- a/third_party/skia/src/gpu/vk/GrVkOpsRenderPass.h +++ b/third_party/skia/src/gpu/vk/GrVkOpsRenderPass.h @@ -38,10 +38,10 @@ class GrVkOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl void executeDrawable(std::unique_ptr) override; - void set(GrRenderTarget*, GrSurfaceOrigin, const SkIRect& bounds, + bool set(GrRenderTarget*, GrSurfaceOrigin, const SkIRect& bounds, const GrOpsRenderPass::LoadAndStoreInfo&, const GrOpsRenderPass::StencilLoadAndStoreInfo&, - const SkTArray& sampledProxies); + const SkTArray& sampledProxies); void reset(); void submit(); @@ -51,13 +51,13 @@ class GrVkOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl #endif private: - void init(const GrOpsRenderPass::LoadAndStoreInfo&, + bool init(const GrOpsRenderPass::LoadAndStoreInfo&, const GrOpsRenderPass::StencilLoadAndStoreInfo&, const SkPMColor4f& clearColor); // Called instead of init when we are drawing to a render target that already wraps a secondary // command buffer. - void initWrapped(); + bool initWrapped(); bool wrapsSecondaryCommandBuffer() const; @@ -70,8 +70,7 @@ class GrVkOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl const GrGpuBuffer* vertexBuffer, const GrGpuBuffer* instanceBuffer); - GrVkPipelineState* prepareDrawState(const GrProgramInfo&, GrPrimitiveType, - const SkIRect& renderPassScissorRect); + GrVkPipelineState* prepareDrawState(const GrProgramInfo&, const SkIRect& renderPassScissorRect); void onDraw(const GrProgramInfo&, const GrMesh[], int meshCount, const SkRect& bounds) override; diff --git a/third_party/skia/src/gpu/vk/GrVkPipeline.cpp b/third_party/skia/src/gpu/vk/GrVkPipeline.cpp index 6868ff5babfe..d3ab9ef6d637 100644 --- a/third_party/skia/src/gpu/vk/GrVkPipeline.cpp +++ b/third_party/skia/src/gpu/vk/GrVkPipeline.cpp @@ -238,8 +238,11 @@ static void setup_stencil_op_state( } static void setup_depth_stencil_state( - const GrStencilSettings& stencilSettings, GrSurfaceOrigin origin, + const GrProgramInfo& programInfo, VkPipelineDepthStencilStateCreateInfo* stencilInfo) { + GrStencilSettings stencilSettings = programInfo.nonGLStencilSettings(); + GrSurfaceOrigin origin = programInfo.origin(); + memset(stencilInfo, 0, sizeof(VkPipelineDepthStencilStateCreateInfo)); stencilInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; stencilInfo->pNext = nullptr; @@ -252,11 +255,11 @@ static void setup_depth_stencil_state( stencilInfo->stencilTestEnable = !stencilSettings.isDisabled(); if (!stencilSettings.isDisabled()) { if (!stencilSettings.isTwoSided()) { - setup_stencil_op_state(&stencilInfo->front, stencilSettings.frontAndBack()); + setup_stencil_op_state(&stencilInfo->front, stencilSettings.singleSidedFace()); stencilInfo->back = stencilInfo->front; } else { - setup_stencil_op_state(&stencilInfo->front, stencilSettings.front(origin)); - setup_stencil_op_state(&stencilInfo->back, stencilSettings.back(origin)); + setup_stencil_op_state(&stencilInfo->front, stencilSettings.postOriginCCWFace(origin)); + setup_stencil_op_state(&stencilInfo->back, stencilSettings.postOriginCWFace(origin)); } } stencilInfo->minDepthBounds = 0.0f; @@ -285,7 +288,7 @@ static void setup_multisample_state(const GrProgramInfo& programInfo, multisampleInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; multisampleInfo->pNext = nullptr; multisampleInfo->flags = 0; - SkAssertResult(GrSampleCountToVkSampleCount(programInfo.numSamples(), + SkAssertResult(GrSampleCountToVkSampleCount(programInfo.numRasterSamples(), &multisampleInfo->rasterizationSamples)); multisampleInfo->sampleShadingEnable = VK_FALSE; multisampleInfo->minSampleShading = 0.0f; @@ -294,6 +297,42 @@ static void setup_multisample_state(const GrProgramInfo& programInfo, multisampleInfo->alphaToOneEnable = VK_FALSE; } +static void setup_all_sample_locations_at_pixel_center( + const GrProgramInfo& programInfo, + VkPipelineSampleLocationsStateCreateInfoEXT* sampleLocations) { + constexpr static VkSampleLocationEXT kCenteredSampleLocations[16] = { + {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, + {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}, {.5f,.5f}}; + memset(sampleLocations, 0, sizeof(VkPipelineSampleLocationsStateCreateInfoEXT)); + sampleLocations->sType = VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT; + sampleLocations->pNext = nullptr; + sampleLocations->sampleLocationsEnable = VK_TRUE; + sampleLocations->sampleLocationsInfo.sType = VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT; + sampleLocations->sampleLocationsInfo.pNext = nullptr; + SkAssertResult(GrSampleCountToVkSampleCount( + programInfo.numRasterSamples(), + &sampleLocations->sampleLocationsInfo.sampleLocationsPerPixel)); + sampleLocations->sampleLocationsInfo.sampleLocationGridSize.width = 1; + sampleLocations->sampleLocationsInfo.sampleLocationGridSize.height = 1; + SkASSERT(programInfo.numRasterSamples() < (int)SK_ARRAY_COUNT(kCenteredSampleLocations)); + sampleLocations->sampleLocationsInfo.sampleLocationsCount = std::min( + programInfo.numRasterSamples(), (int)SK_ARRAY_COUNT(kCenteredSampleLocations)); + sampleLocations->sampleLocationsInfo.pSampleLocations = kCenteredSampleLocations; +} + +static void setup_coverage_modulation_state( + VkPipelineCoverageModulationStateCreateInfoNV* coverageModulationInfo) { + memset(coverageModulationInfo, 0, sizeof(VkPipelineCoverageModulationStateCreateInfoNV)); + coverageModulationInfo->sType = + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV; + coverageModulationInfo->pNext = nullptr; + coverageModulationInfo->flags = 0; + coverageModulationInfo->coverageModulationMode = VK_COVERAGE_MODULATION_MODE_RGBA_NV; + coverageModulationInfo->coverageModulationTableEnable = false; + coverageModulationInfo->coverageModulationTableCount = 0; + coverageModulationInfo->pCoverageModulationTable = nullptr; +} + static VkBlendFactor blend_coeff_to_vk_blend(GrBlendCoeff coeff) { static const VkBlendFactor gTable[] = { VK_BLEND_FACTOR_ZERO, // kZero_GrBlendCoeff @@ -498,9 +537,8 @@ static void setup_dynamic_state(VkPipelineDynamicStateCreateInfo* dynamicInfo, GrVkPipeline* GrVkPipeline::Create( GrVkGpu* gpu, const GrProgramInfo& programInfo, - const GrStencilSettings& stencil, VkPipelineShaderStageCreateInfo* shaderStageInfo, int shaderStageCount, - GrPrimitiveType primitiveType, VkRenderPass compatibleRenderPass, VkPipelineLayout layout, + VkRenderPass compatibleRenderPass, VkPipelineLayout layout, VkPipelineCache cache) { VkPipelineVertexInputStateCreateInfo vertexInputInfo; SkSTArray<2, VkVertexInputBindingDescription, true> bindingDescs; @@ -512,10 +550,10 @@ GrVkPipeline* GrVkPipeline::Create( setup_vertex_input_state(programInfo.primProc(), &vertexInputInfo, &bindingDescs, pAttribs); VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo; - setup_input_assembly_state(primitiveType, &inputAssemblyInfo); + setup_input_assembly_state(programInfo.primitiveType(), &inputAssemblyInfo); VkPipelineDepthStencilStateCreateInfo depthStencilInfo; - setup_depth_stencil_state(stencil, programInfo.origin(), &depthStencilInfo); + setup_depth_stencil_state(programInfo, &depthStencilInfo); VkPipelineViewportStateCreateInfo viewportInfo; setup_viewport_scissor_state(&viewportInfo); @@ -523,6 +561,25 @@ GrVkPipeline* GrVkPipeline::Create( VkPipelineMultisampleStateCreateInfo multisampleInfo; setup_multisample_state(programInfo, gpu->caps(), &multisampleInfo); + VkPipelineSampleLocationsStateCreateInfoEXT sampleLocations; + if (gpu->caps()->multisampleDisableSupport()) { + if (programInfo.numRasterSamples() > 1 && !programInfo.pipeline().isHWAntialiasState()) { + setup_all_sample_locations_at_pixel_center(programInfo, &sampleLocations); + sampleLocations.pNext = multisampleInfo.pNext; + multisampleInfo.pNext = &sampleLocations; + } + } + + VkPipelineCoverageModulationStateCreateInfoNV coverageModulationInfo; + if (gpu->caps()->mixedSamplesSupport()) { + if (programInfo.isMixedSampled()) { + SkASSERT(gpu->caps()->mixedSamplesSupport()); + setup_coverage_modulation_state(&coverageModulationInfo); + coverageModulationInfo.pNext = multisampleInfo.pNext; + multisampleInfo.pNext = &coverageModulationInfo; + } + } + // We will only have one color attachment per pipeline. VkPipelineColorBlendAttachmentState attachmentStates[1]; VkPipelineColorBlendStateCreateInfo colorBlendInfo; @@ -564,10 +621,9 @@ GrVkPipeline* GrVkPipeline::Create( // skia:8712 __lsan::ScopedDisabler lsanDisabler; #endif - err = GR_VK_CALL(gpu->vkInterface(), CreateGraphicsPipelines(gpu->device(), - cache, 1, - &pipelineCreateInfo, - nullptr, &vkPipeline)); + GR_VK_CALL_RESULT(gpu, err, CreateGraphicsPipelines(gpu->device(), cache, 1, + &pipelineCreateInfo, nullptr, + &vkPipeline)); } if (err) { SkDebugf("Failed to create pipeline. Error: %d\n", err); diff --git a/third_party/skia/src/gpu/vk/GrVkPipeline.h b/third_party/skia/src/gpu/vk/GrVkPipeline.h index ce33a49d7265..34b835b5a8b5 100644 --- a/third_party/skia/src/gpu/vk/GrVkPipeline.h +++ b/third_party/skia/src/gpu/vk/GrVkPipeline.h @@ -26,10 +26,8 @@ class GrVkPipeline : public GrVkResource { public: static GrVkPipeline* Create(GrVkGpu*, const GrProgramInfo&, - const GrStencilSettings&, VkPipelineShaderStageCreateInfo* shaderStageInfo, int shaderStageCount, - GrPrimitiveType primitiveType, VkRenderPass compatibleRenderPass, VkPipelineLayout layout, VkPipelineCache cache); diff --git a/third_party/skia/src/gpu/vk/GrVkPipelineState.cpp b/third_party/skia/src/gpu/vk/GrVkPipelineState.cpp index b48f15550e72..7bcd342df59c 100644 --- a/third_party/skia/src/gpu/vk/GrVkPipelineState.cpp +++ b/third_party/skia/src/gpu/vk/GrVkPipelineState.cpp @@ -1,9 +1,9 @@ /* -* Copyright 2016 Google Inc. -* -* Use of this source code is governed by a BSD-style license that can be -* found in the LICENSE file. -*/ + * Copyright 2016 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 "src/core/SkMipMap.h" @@ -14,7 +14,6 @@ #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLGeometryProcessor.h" #include "src/gpu/glsl/GrGLSLXferProcessor.h" -#include "src/gpu/vk/GrVkBufferView.h" #include "src/gpu/vk/GrVkCommandBuffer.h" #include "src/gpu/vk/GrVkDescriptorPool.h" #include "src/gpu/vk/GrVkDescriptorSet.h" @@ -41,7 +40,6 @@ GrVkPipelineState::GrVkPipelineState( int fragmentProcessorCnt) : fPipeline(pipeline) , fUniformDescriptorSet(nullptr) - , fSamplerDescriptorSet(nullptr) , fSamplerDSHandle(samplerDSHandle) , fBuiltinUniformHandles(builtinUniformHandles) , fGeometryProcessor(std::move(geometryProcessor)) @@ -49,10 +47,6 @@ GrVkPipelineState::GrVkPipelineState( , fFragmentProcessors(std::move(fragmentProcessors)) , fFragmentProcessorCnt(fragmentProcessorCnt) , fDataManager(uniforms, uniformSize) { - fDescriptorSets[0] = VK_NULL_HANDLE; - fDescriptorSets[1] = VK_NULL_HANDLE; - fDescriptorSets[2] = VK_NULL_HANDLE; - fUniformBuffer.reset(GrVkUniformBuffer::Create(gpu, uniformSize)); fNumSamplers = samplers.count(); @@ -84,11 +78,6 @@ void GrVkPipelineState::freeGPUResources(GrVkGpu* gpu) { fUniformDescriptorSet->recycle(const_cast(gpu)); fUniformDescriptorSet = nullptr; } - - if (fSamplerDescriptorSet) { - fSamplerDescriptorSet->recycle(const_cast(gpu)); - fSamplerDescriptorSet = nullptr; - } } void GrVkPipelineState::abandonGPUResources() { @@ -106,31 +95,22 @@ void GrVkPipelineState::abandonGPUResources() { fUniformDescriptorSet->unrefAndAbandon(); fUniformDescriptorSet = nullptr; } - - if (fSamplerDescriptorSet) { - fSamplerDescriptorSet->unrefAndAbandon(); - fSamplerDescriptorSet = nullptr; - } } -void GrVkPipelineState::setAndBindUniforms(GrVkGpu* gpu, +bool GrVkPipelineState::setAndBindUniforms(GrVkGpu* gpu, const GrRenderTarget* renderTarget, const GrProgramInfo& programInfo, GrVkCommandBuffer* commandBuffer) { this->setRenderTargetState(renderTarget, programInfo.origin()); - fGeometryProcessor->setData(fDataManager, programInfo.primProc(), - GrFragmentProcessor::CoordTransformIter(programInfo.pipeline())); - GrFragmentProcessor::Iter iter(programInfo.pipeline()); + GrFragmentProcessor::PipelineCoordTransformRange transformRange(programInfo.pipeline()); + fGeometryProcessor->setData(fDataManager, programInfo.primProc(), transformRange); + GrFragmentProcessor::CIter fpIter(programInfo.pipeline()); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); - const GrFragmentProcessor* fp = iter.next(); - GrGLSLFragmentProcessor* glslFP = glslIter.next(); - while (fp && glslFP) { - glslFP->setData(fDataManager, *fp); - fp = iter.next(); - glslFP = glslIter.next(); + for (; fpIter && glslIter; ++fpIter, ++glslIter) { + glslIter->setData(fDataManager, *fpIter); } - SkASSERT(!fp && !glslFP); + SkASSERT(!fpIter && !glslIter); { SkIPoint offset; @@ -142,31 +122,31 @@ void GrVkPipelineState::setAndBindUniforms(GrVkGpu* gpu, // Get new descriptor set if (fUniformBuffer) { - int uniformDSIdx = GrVkUniformHandler::kUniformBufferDescSet; if (fDataManager.uploadUniformBuffers(gpu, fUniformBuffer.get()) || !fUniformDescriptorSet) { if (fUniformDescriptorSet) { fUniformDescriptorSet->recycle(gpu); } fUniformDescriptorSet = gpu->resourceProvider().getUniformDescriptorSet(); - fDescriptorSets[uniformDSIdx] = fUniformDescriptorSet->descriptorSet(); + if (!fUniformDescriptorSet) { + return false; + } this->writeUniformBuffers(gpu); } - commandBuffer->bindDescriptorSets(gpu, this, fPipeline->layout(), uniformDSIdx, 1, - &fDescriptorSets[uniformDSIdx], 0, nullptr); - if (fUniformDescriptorSet) { - commandBuffer->addRecycledResource(fUniformDescriptorSet); - } - if (fUniformBuffer) { - commandBuffer->addRecycledResource(fUniformBuffer->resource()); - } + static const int kUniformDSIdx = GrVkUniformHandler::kUniformBufferDescSet; + commandBuffer->bindDescriptorSets(gpu, this, fPipeline->layout(), kUniformDSIdx, 1, + fUniformDescriptorSet->descriptorSet(), 0, nullptr); + SkASSERT(fUniformDescriptorSet); + commandBuffer->addRecycledResource(fUniformDescriptorSet); + commandBuffer->addRecycledResource(fUniformBuffer->resource()); } + return true; } -void GrVkPipelineState::setAndBindTextures(GrVkGpu* gpu, +bool GrVkPipelineState::setAndBindTextures(GrVkGpu* gpu, const GrPrimitiveProcessor& primProc, const GrPipeline& pipeline, - const GrTextureProxy* const primProcTextures[], + const GrSurfaceProxy* const primProcTextures[], GrVkCommandBuffer* commandBuffer) { SkASSERT(primProcTextures || !primProc.numTextureSamplers()); @@ -177,44 +157,54 @@ void GrVkPipelineState::setAndBindTextures(GrVkGpu* gpu, SkAutoSTMalloc<8, SamplerBindings> samplerBindings(fNumSamplers); int currTextureBinding = 0; - fGeometryProcessor->setData(fDataManager, primProc, - GrFragmentProcessor::CoordTransformIter(pipeline)); 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}; } - GrFragmentProcessor::Iter iter(pipeline); + GrFragmentProcessor::CIter fpIter(pipeline); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); - const GrFragmentProcessor* fp = iter.next(); - GrGLSLFragmentProcessor* glslFP = glslIter.next(); - while (fp && glslFP) { - for (int i = 0; i < fp->numTextureSamplers(); ++i) { - const auto& sampler = fp->textureSampler(i); + 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())}; } - fp = iter.next(); - glslFP = glslIter.next(); } - SkASSERT(!fp && !glslFP); + SkASSERT(!fpIter && !glslIter); - if (GrTextureProxy* dstTextureProxy = pipeline.dstTextureProxy()) { + if (GrTexture* dstTexture = pipeline.peekDstTexture()) { samplerBindings[currTextureBinding++] = { - GrSamplerState::ClampNearest(), - static_cast(dstTextureProxy->peekTexture())}; + GrSamplerState::ClampNearest(), static_cast(dstTexture)}; } // Get new descriptor set SkASSERT(fNumSamplers == currTextureBinding); if (fNumSamplers) { - if (fSamplerDescriptorSet) { - fSamplerDescriptorSet->recycle(gpu); + static const int kSamplerDSIdx = GrVkUniformHandler::kSamplerDescSet; + + if (fNumSamplers == 1) { + auto texture = samplerBindings[0].fTexture; + const auto& samplerState = samplerBindings[0].fState; + const GrVkDescriptorSet* descriptorSet = texture->cachedSingleDescSet(samplerState); + if (descriptorSet) { + commandBuffer->addResource(texture->textureView()); + commandBuffer->addResource(texture->resource()); + commandBuffer->addRecycledResource(descriptorSet); + commandBuffer->bindDescriptorSets(gpu, this, fPipeline->layout(), kSamplerDSIdx, 1, + descriptorSet->descriptorSet(), 0, nullptr); + return true; + } + } + + const GrVkDescriptorSet* descriptorSet = + gpu->resourceProvider().getSamplerDescriptorSet(fSamplerDSHandle); + if (!descriptorSet) { + return false; } - fSamplerDescriptorSet = gpu->resourceProvider().getSamplerDescriptorSet(fSamplerDSHandle); - int samplerDSIdx = GrVkUniformHandler::kSamplerDescSet; - fDescriptorSets[samplerDSIdx] = fSamplerDescriptorSet->descriptorSet(); + for (int i = 0; i < fNumSamplers; ++i) { const GrSamplerState& state = samplerBindings[i].fState; GrVkTexture* texture = samplerBindings[i].fTexture; @@ -239,7 +229,7 @@ void GrVkPipelineState::setAndBindTextures(GrVkGpu* gpu, memset(&writeInfo, 0, sizeof(VkWriteDescriptorSet)); writeInfo.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; writeInfo.pNext = nullptr; - writeInfo.dstSet = fDescriptorSets[GrVkUniformHandler::kSamplerDescSet]; + writeInfo.dstSet = *descriptorSet->descriptorSet(); writeInfo.dstBinding = i; writeInfo.dstArrayElement = 0; writeInfo.descriptorCount = 1; @@ -257,11 +247,18 @@ void GrVkPipelineState::setAndBindTextures(GrVkGpu* gpu, commandBuffer->addResource(samplerBindings[i].fTexture->textureView()); commandBuffer->addResource(samplerBindings[i].fTexture->resource()); } + if (fNumSamplers == 1) { + const GrSamplerState& state = samplerBindings[0].fState; + GrVkTexture* texture = samplerBindings[0].fTexture; + texture->addDescriptorSetToCache(descriptorSet, state); + } - commandBuffer->bindDescriptorSets(gpu, this, fPipeline->layout(), samplerDSIdx, 1, - &fDescriptorSets[samplerDSIdx], 0, nullptr); - commandBuffer->addRecycledResource(fSamplerDescriptorSet); + commandBuffer->bindDescriptorSets(gpu, this, fPipeline->layout(), kSamplerDSIdx, 1, + descriptorSet->descriptorSet(), 0, nullptr); + commandBuffer->addRecycledResource(descriptorSet); + descriptorSet->recycle(gpu); } + return true; } void set_uniform_descriptor_writes(VkWriteDescriptorSet* descriptorWrite, @@ -294,10 +291,11 @@ void GrVkPipelineState::writeUniformBuffers(const GrVkGpu* gpu) { uint32_t writeCount = 0; if (fUniformBuffer.get()) { + SkASSERT(fUniformDescriptorSet); set_uniform_descriptor_writes(&descriptorWrites[writeCount], &bufferInfos[writeCount], fUniformBuffer.get(), - fDescriptorSets[GrVkUniformHandler::kUniformBufferDescSet]); + *fUniformDescriptorSet->descriptorSet()); ++writeCount; } @@ -318,12 +316,11 @@ void GrVkPipelineState::setRenderTargetState(const GrRenderTarget* rt, GrSurface } // set RT adjustment - SkISize size; - size.set(rt->width(), rt->height()); + SkISize dimensions = rt->dimensions(); SkASSERT(fBuiltinUniformHandles.fRTAdjustmentUni.isValid()); if (fRenderTargetState.fRenderTargetOrigin != origin || - fRenderTargetState.fRenderTargetSize != size) { - fRenderTargetState.fRenderTargetSize = size; + fRenderTargetState.fRenderTargetSize != dimensions) { + fRenderTargetState.fRenderTargetSize = dimensions; fRenderTargetState.fRenderTargetOrigin = origin; float rtAdjustmentVec[4]; diff --git a/third_party/skia/src/gpu/vk/GrVkPipelineState.h b/third_party/skia/src/gpu/vk/GrVkPipelineState.h index 331bb01f017b..8d973dfa1012 100644 --- a/third_party/skia/src/gpu/vk/GrVkPipelineState.h +++ b/third_party/skia/src/gpu/vk/GrVkPipelineState.h @@ -16,7 +16,6 @@ class GrPipeline; class GrStencilSettings; -class GrVkBufferView; class GrVkCommandBuffer; class GrVkDescriptorPool; class GrVkDescriptorSet; @@ -53,14 +52,14 @@ class GrVkPipelineState : public SkRefCnt { ~GrVkPipelineState(); - void setAndBindUniforms(GrVkGpu*, const GrRenderTarget*, const GrProgramInfo&, + bool setAndBindUniforms(GrVkGpu*, const GrRenderTarget*, const GrProgramInfo&, GrVkCommandBuffer*); /** * This must be called after setAndBindUniforms() since that function invalidates texture * bindings. */ - void setAndBindTextures(GrVkGpu*, const GrPrimitiveProcessor&, const GrPipeline&, - const GrTextureProxy* const primitiveProcessorTextures[], + bool setAndBindTextures(GrVkGpu*, const GrPrimitiveProcessor&, const GrPipeline&, + const GrSurfaceProxy* const primitiveProcessorTextures[], GrVkCommandBuffer*); void bindPipeline(const GrVkGpu* gpu, GrVkCommandBuffer* commandBuffer); @@ -116,19 +115,11 @@ class GrVkPipelineState : public SkRefCnt { // GrVkResources GrVkPipeline* fPipeline; - // The DescriptorSets need to survive until the gpu has finished all draws that use them. - // However, they will only be freed by the descriptor pool. Thus by simply keeping the - // descriptor pool alive through the draw, the descritor sets will also stay alive. Thus we do - // not need a GrVkResource versions of VkDescriptorSet. We hold on to these in the - // GrVkPipelineState since we update the descriptor sets and bind them at separate times; - VkDescriptorSet fDescriptorSets[3]; - const GrVkDescriptorSet* fUniformDescriptorSet; - const GrVkDescriptorSet* fSamplerDescriptorSet; const GrVkDescriptorSetManager::Handle fSamplerDSHandle; - SkSTArray<4, const GrVkSampler*> fImmutableSamplers; + SkSTArray<4, const GrVkSampler*> fImmutableSamplers; std::unique_ptr fUniformBuffer; diff --git a/third_party/skia/src/gpu/vk/GrVkPipelineStateBuilder.cpp b/third_party/skia/src/gpu/vk/GrVkPipelineStateBuilder.cpp index 4d595e7ecae6..41dca29d967b 100644 --- a/third_party/skia/src/gpu/vk/GrVkPipelineStateBuilder.cpp +++ b/third_party/skia/src/gpu/vk/GrVkPipelineStateBuilder.cpp @@ -6,6 +6,7 @@ */ #include "include/gpu/GrContext.h" +#include "src/gpu/GrAutoLocaleSetter.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrPersistentCacheUtils.h" #include "src/gpu/GrShaderCaps.h" @@ -23,10 +24,11 @@ GrVkPipelineState* GrVkPipelineStateBuilder::CreatePipelineState( GrVkGpu* gpu, GrRenderTarget* renderTarget, const GrProgramInfo& programInfo, - const GrStencilSettings& stencil, - GrPrimitiveType primitiveType, - Desc* desc, + GrProgramDesc* desc, VkRenderPass compatibleRenderPass) { + // ensure that we use "." as a decimal separator when creating SkSL code + GrAutoLocaleSetter als("C"); + // create a builder. This will be handed off to effects so they can use it to add // uniforms, varyings, textures, etc GrVkPipelineStateBuilder builder(gpu, renderTarget, programInfo, desc); @@ -35,7 +37,7 @@ GrVkPipelineState* GrVkPipelineStateBuilder::CreatePipelineState( return nullptr; } - return builder.finalize(stencil, primitiveType, compatibleRenderPass, desc); + return builder.finalize(compatibleRenderPass, desc); } GrVkPipelineStateBuilder::GrVkPipelineStateBuilder(GrVkGpu* gpu, @@ -64,7 +66,7 @@ bool GrVkPipelineStateBuilder::createVkShaderModule(VkShaderStageFlagBits stage, VkShaderModule* shaderModule, VkPipelineShaderStageCreateInfo* stageInfo, const SkSL::Program::Settings& settings, - Desc* desc, + GrProgramDesc* desc, SkSL::String* outSPIRV, SkSL::Program::Inputs* outInputs) { if (!GrCompileVkShaderModule(fGpu, sksl, stage, shaderModule, @@ -133,21 +135,22 @@ int GrVkPipelineStateBuilder::loadShadersFromCache(SkReader32* cached, void GrVkPipelineStateBuilder::storeShadersInCache(const SkSL::String shaders[], const SkSL::Program::Inputs inputs[], bool isSkSL) { - const Desc* desc = static_cast(this->desc()); // Here we shear off the Vk-specific portion of the Desc in order to create the // persistent key. This is bc Vk only caches the SPIRV code, not the fully compiled // program, and that only depends on the base GrProgramDesc data. - sk_sp key = SkData::MakeWithoutCopy(desc->asKey(), desc->shaderKeyLength()); + // The +4 is to include the kShader_PersistentCacheKeyType code the Vulkan backend adds + // to the key right after the base key. + sk_sp key = SkData::MakeWithoutCopy(this->desc()->asKey(), + this->desc()->initialKeyLength()+4); + sk_sp data = GrPersistentCacheUtils::PackCachedShaders(isSkSL ? kSKSL_Tag : kSPIRV_Tag, shaders, inputs, kGrShaderTypeCount); this->gpu()->getContext()->priv().getPersistentCache()->store(*key, *data); } -GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrStencilSettings& stencil, - GrPrimitiveType primitiveType, - VkRenderPass compatibleRenderPass, - Desc* desc) { +GrVkPipelineState* GrVkPipelineStateBuilder::finalize(VkRenderPass compatibleRenderPass, + GrProgramDesc* desc) { VkDescriptorSetLayout dsLayout[2]; VkPipelineLayout pipelineLayout; VkShaderModule shaderModules[kGrShaderTypeCount] = { VK_NULL_HANDLE, @@ -175,10 +178,12 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrStencilSettings& s layoutCreateInfo.pushConstantRangeCount = 0; layoutCreateInfo.pPushConstantRanges = nullptr; - GR_VK_CALL_ERRCHECK(fGpu->vkInterface(), CreatePipelineLayout(fGpu->device(), - &layoutCreateInfo, - nullptr, - &pipelineLayout)); + VkResult result; + GR_VK_CALL_RESULT(fGpu, result, CreatePipelineLayout(fGpu->device(), &layoutCreateInfo, nullptr, + &pipelineLayout)); + if (result != VK_SUCCESS) { + return nullptr; + } // We need to enable the following extensions so that the compiler can correctly make spir-v // from our glsl shaders. @@ -207,7 +212,9 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrStencilSettings& s // Here we shear off the Vk-specific portion of the Desc in order to create the // persistent key. This is bc Vk only caches the SPIRV code, not the fully compiled // program, and that only depends on the base GrProgramDesc data. - sk_sp key = SkData::MakeWithoutCopy(desc->asKey(), desc->shaderKeyLength()); + // The +4 is to include the kShader_PersistentCacheKeyType code the Vulkan backend adds + // to the key right after the base key. + sk_sp key = SkData::MakeWithoutCopy(desc->asKey(), desc->initialKeyLength()+4); cached = persistentCache->load(*key); if (cached) { reader.setMemory(cached->data(), cached->size()); @@ -291,8 +298,10 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrStencilSettings& s this->storeShadersInCache(shaders, inputs, isSkSL); } } - GrVkPipeline* pipeline = resourceProvider.createPipeline(fProgramInfo, stencil, - shaderStageInfo, numShaderStages, primitiveType, compatibleRenderPass, pipelineLayout); + + GrVkPipeline* pipeline = resourceProvider.createPipeline(fProgramInfo, shaderStageInfo, + numShaderStages, compatibleRenderPass, + pipelineLayout); for (int i = 0; i < kGrShaderTypeCount; ++i) { // This if check should not be needed since calling destroy on a VK_NULL_HANDLE is allowed. // However this is causing a crash in certain drivers (e.g. NVidia). @@ -320,34 +329,3 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrStencilSettings& s std::move(fFragmentProcessors), fFragmentProcessorCnt); } - -////////////////////////////////////////////////////////////////////////////// - -bool GrVkPipelineStateBuilder::Desc::Build(Desc* desc, - GrRenderTarget* renderTarget, - const GrProgramInfo& programInfo, - const GrStencilSettings& stencil, - GrPrimitiveType primitiveType, - GrVkGpu* gpu) { - if (!GrProgramDesc::Build(desc, renderTarget, programInfo, primitiveType, gpu)) { - return false; - } - - GrProcessorKeyBuilder b(&desc->key()); - - b.add32(GrVkGpu::kShader_PersistentCacheKeyType); - int keyLength = desc->key().count(); - SkASSERT(0 == (keyLength % 4)); - desc->fShaderKeyLength = SkToU32(keyLength); - - GrVkRenderTarget* vkRT = (GrVkRenderTarget*)renderTarget; - vkRT->simpleRenderPass()->genKey(&b); - - stencil.genKey(&b); - - b.add32(programInfo.pipeline().getBlendInfoKey()); - - b.add32((uint32_t)primitiveType); - - return true; -} diff --git a/third_party/skia/src/gpu/vk/GrVkPipelineStateBuilder.h b/third_party/skia/src/gpu/vk/GrVkPipelineStateBuilder.h index 0ba7fc50011e..b09b9392a784 100644 --- a/third_party/skia/src/gpu/vk/GrVkPipelineStateBuilder.h +++ b/third_party/skia/src/gpu/vk/GrVkPipelineStateBuilder.h @@ -10,63 +10,31 @@ #include "include/gpu/vk/GrVkTypes.h" #include "src/gpu/GrPipeline.h" -#include "src/gpu/GrProgramDesc.h" #include "src/gpu/glsl/GrGLSLProgramBuilder.h" #include "src/gpu/vk/GrVkPipelineState.h" #include "src/gpu/vk/GrVkUniformHandler.h" #include "src/gpu/vk/GrVkVaryingHandler.h" #include "src/sksl/SkSLCompiler.h" +class GrProgramDesc; class GrVkGpu; class GrVkRenderPass; class SkReader32; class GrVkPipelineStateBuilder : public GrGLSLProgramBuilder { public: - /** - * For Vulkan we want to cache the entire VkPipeline for reuse of draws. The Desc here holds all - * the information needed to differentiate one pipeline from another. - * - * The GrProgramDesc contains all the information need to create the actual shaders for the - * pipeline. + /** Generates a pipeline state. * - * For Vulkan we need to add to the GrProgramDesc to include the rest of the state on the - * pipline. This includes stencil settings, blending information, render pass format, draw face - * information, and primitive type. Note that some state is set dynamically on the pipeline for - * each draw and thus is not included in this descriptor. This includes the viewport, scissor, - * and blend constant. + * The GrVkPipelineState implements what is specified in the GrPipeline and GrPrimitiveProcessor + * as input. After successful generation, the builder result objects are available to be used. + * This function may modify the program key by setting the surface origin key to 0 (unspecified) + * if it turns out the program does not care about the surface origin. + * @return true if generation was successful. */ - class Desc : public GrProgramDesc { - public: - static bool Build(Desc*, - GrRenderTarget*, - const GrProgramInfo&, - const GrStencilSettings&, - GrPrimitiveType primitiveType, - GrVkGpu* gpu); - - size_t shaderKeyLength() const { return fShaderKeyLength; } - - private: - size_t fShaderKeyLength; - - typedef GrProgramDesc INHERITED; - }; - - /** Generates a pipeline state. - * - * The GrVkPipelineState implements what is specified in the GrPipeline and GrPrimitiveProcessor - * as input. After successful generation, the builder result objects are available to be used. - * This function may modify the program key by setting the surface origin key to 0 (unspecified) - * if it turns out the program does not care about the surface origin. - * @return true if generation was successful. - */ static GrVkPipelineState* CreatePipelineState(GrVkGpu*, GrRenderTarget*, const GrProgramInfo&, - const GrStencilSettings&, - GrPrimitiveType, - Desc*, + GrProgramDesc*, VkRenderPass compatibleRenderPass); const GrCaps* caps() const override; @@ -79,10 +47,7 @@ class GrVkPipelineStateBuilder : public GrGLSLProgramBuilder { private: GrVkPipelineStateBuilder(GrVkGpu*, GrRenderTarget*, const GrProgramInfo&, GrProgramDesc*); - GrVkPipelineState* finalize(const GrStencilSettings&, - GrPrimitiveType primitiveType, - VkRenderPass compatibleRenderPass, - Desc*); + GrVkPipelineState* finalize(VkRenderPass compatibleRenderPass, GrProgramDesc*); // returns number of shader stages int loadShadersFromCache(SkReader32* cached, VkShaderModule outShaderModules[], @@ -96,7 +61,7 @@ class GrVkPipelineStateBuilder : public GrGLSLProgramBuilder { VkShaderModule* shaderModule, VkPipelineShaderStageCreateInfo* stageInfo, const SkSL::Program::Settings& settings, - Desc* desc, + GrProgramDesc* desc, SkSL::String* outSPIRV, SkSL::Program::Inputs* outInputs); diff --git a/third_party/skia/src/gpu/vk/GrVkPipelineStateCache.cpp b/third_party/skia/src/gpu/vk/GrVkPipelineStateCache.cpp index da6a69f3f334..608164362a5a 100644 --- a/third_party/skia/src/gpu/vk/GrVkPipelineStateCache.cpp +++ b/third_party/skia/src/gpu/vk/GrVkPipelineStateCache.cpp @@ -79,25 +79,20 @@ void GrVkResourceProvider::PipelineStateCache::release() { GrVkPipelineState* GrVkResourceProvider::PipelineStateCache::refPipelineState( GrRenderTarget* renderTarget, const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType, VkRenderPass compatibleRenderPass) { #ifdef GR_PIPELINE_STATE_CACHE_STATS ++fTotalRequests; #endif - GrStencilSettings stencil; + +#ifdef SK_DEBUG if (programInfo.pipeline().isStencilEnabled()) { - // TODO: attach stencil and create settings during render target flush. SkASSERT(renderTarget->renderTargetPriv().getStencilAttachment()); - stencil.reset(*programInfo.pipeline().getUserStencil(), - programInfo.pipeline().hasStencilClip(), - renderTarget->renderTargetPriv().numStencilBits()); + SkASSERT(renderTarget->renderTargetPriv().numStencilBits() == 8); } +#endif - // TODO: can this be unified between GL, Vk and Mtl? - // Get GrVkProgramDesc - GrVkPipelineStateBuilder::Desc desc; - if (!GrVkPipelineStateBuilder::Desc::Build(&desc, renderTarget, programInfo, stencil, - primitiveType, fGpu)) { + GrProgramDesc desc = fGpu->caps()->makeDesc(renderTarget, programInfo); + if (!desc.isValid()) { GrCapsDebugf(fGpu->caps(), "Failed to build vk program descriptor!\n"); return nullptr; } @@ -108,8 +103,7 @@ GrVkPipelineState* GrVkResourceProvider::PipelineStateCache::refPipelineState( ++fCacheMisses; #endif GrVkPipelineState* pipelineState(GrVkPipelineStateBuilder::CreatePipelineState( - fGpu, renderTarget, programInfo, - stencil, primitiveType, &desc, compatibleRenderPass)); + fGpu, renderTarget, programInfo, &desc, compatibleRenderPass)); if (!pipelineState) { return nullptr; } diff --git a/third_party/skia/src/gpu/vk/GrVkRenderPass.cpp b/third_party/skia/src/gpu/vk/GrVkRenderPass.cpp index d73ae6149a1b..818b3b885c62 100644 --- a/third_party/skia/src/gpu/vk/GrVkRenderPass.cpp +++ b/third_party/skia/src/gpu/vk/GrVkRenderPass.cpp @@ -42,17 +42,34 @@ void setup_vk_attachment_description(VkAttachmentDescription* attachment, attachment->finalLayout = layout; } -void GrVkRenderPass::initSimple(const GrVkGpu* gpu, const GrVkRenderTarget& target) { +GrVkRenderPass* GrVkRenderPass::CreateSimple(GrVkGpu* gpu, const GrVkRenderTarget& target) { static const GrVkRenderPass::LoadStoreOps kBasicLoadStoreOps(VK_ATTACHMENT_LOAD_OP_LOAD, VK_ATTACHMENT_STORE_OP_STORE); - this->init(gpu, target, kBasicLoadStoreOps, kBasicLoadStoreOps); + AttachmentFlags attachmentFlags; + AttachmentsDescriptor attachmentsDescriptor; + // Get attachment information from render target. This includes which attachments the render + // target has (color, stencil) and the attachments format and sample count. + target.getAttachmentsDescriptor(&attachmentsDescriptor, &attachmentFlags); + return Create(gpu, attachmentFlags, attachmentsDescriptor, kBasicLoadStoreOps, + kBasicLoadStoreOps); +} + +GrVkRenderPass* GrVkRenderPass::Create(GrVkGpu* gpu, + const GrVkRenderPass& compatibleRenderPass, + const LoadStoreOps& colorOp, + const LoadStoreOps& stencilOp) { + AttachmentFlags attachmentFlags = compatibleRenderPass.fAttachmentFlags; + AttachmentsDescriptor attachmentsDescriptor = compatibleRenderPass.fAttachmentsDescriptor; + return Create(gpu, attachmentFlags, attachmentsDescriptor, colorOp, stencilOp); } -void GrVkRenderPass::init(const GrVkGpu* gpu, - const LoadStoreOps& colorOp, - const LoadStoreOps& stencilOp) { - uint32_t numAttachments = fAttachmentsDescriptor.fAttachmentCount; +GrVkRenderPass* GrVkRenderPass::Create(GrVkGpu* gpu, + AttachmentFlags attachmentFlags, + AttachmentsDescriptor& attachmentsDescriptor, + const LoadStoreOps& colorOp, + const LoadStoreOps& stencilOp) { + uint32_t numAttachments = attachmentsDescriptor.fAttachmentCount; // Attachment descriptions to be set on the render pass SkTArray attachments(numAttachments); attachments.reset(numAttachments); @@ -74,11 +91,13 @@ void GrVkRenderPass::init(const GrVkGpu* gpu, subpassDesc.pInputAttachments = nullptr; subpassDesc.pResolveAttachments = nullptr; - if (fAttachmentFlags & kColor_AttachmentFlag) { + uint32_t clearValueCount = 0; + + if (attachmentFlags & kColor_AttachmentFlag) { // set up color attachment - fAttachmentsDescriptor.fColor.fLoadStoreOps = colorOp; + attachmentsDescriptor.fColor.fLoadStoreOps = colorOp; setup_vk_attachment_description(&attachments[currentAttachment], - fAttachmentsDescriptor.fColor, + attachmentsDescriptor.fColor, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); // setup subpass use of attachment colorRef.attachment = currentAttachment++; @@ -86,7 +105,7 @@ void GrVkRenderPass::init(const GrVkGpu* gpu, subpassDesc.colorAttachmentCount = 1; if (VK_ATTACHMENT_LOAD_OP_CLEAR == colorOp.fLoadOp) { - fClearValueCount = colorRef.attachment + 1; + clearValueCount = colorRef.attachment + 1; } } else { // I don't think there should ever be a time where we don't have a color attachment @@ -97,17 +116,17 @@ void GrVkRenderPass::init(const GrVkGpu* gpu, } subpassDesc.pColorAttachments = &colorRef; - if (fAttachmentFlags & kStencil_AttachmentFlag) { + if (attachmentFlags & kStencil_AttachmentFlag) { // set up stencil attachment - fAttachmentsDescriptor.fStencil.fLoadStoreOps = stencilOp; + attachmentsDescriptor.fStencil.fLoadStoreOps = stencilOp; setup_vk_attachment_description(&attachments[currentAttachment], - fAttachmentsDescriptor.fStencil, + attachmentsDescriptor.fStencil, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); // setup subpass use of attachment stencilRef.attachment = currentAttachment++; stencilRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; if (VK_ATTACHMENT_LOAD_OP_CLEAR == stencilOp.fLoadOp) { - fClearValueCount = SkTMax(fClearValueCount, stencilRef.attachment + 1); + clearValueCount = SkTMax(clearValueCount, stencilRef.attachment + 1); } } else { stencilRef.attachment = VK_ATTACHMENT_UNUSED; @@ -133,34 +152,34 @@ void GrVkRenderPass::init(const GrVkGpu* gpu, createInfo.dependencyCount = 0; createInfo.pDependencies = nullptr; - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateRenderPass(gpu->device(), - &createInfo, - nullptr, - &fRenderPass)); + VkResult result; + VkRenderPass renderPass; + GR_VK_CALL_RESULT(gpu, result, CreateRenderPass(gpu->device(), + &createInfo, + nullptr, + &renderPass)); + if (result != VK_SUCCESS) { + return nullptr; + } + VkExtent2D granularity; // Get granularity for this render pass GR_VK_CALL(gpu->vkInterface(), GetRenderAreaGranularity(gpu->device(), - fRenderPass, - &fGranularity)); -} + renderPass, + &granularity)); -void GrVkRenderPass::init(const GrVkGpu* gpu, - const GrVkRenderPass& compatibleRenderPass, - const LoadStoreOps& colorOp, - const LoadStoreOps& stencilOp) { - fAttachmentFlags = compatibleRenderPass.fAttachmentFlags; - fAttachmentsDescriptor = compatibleRenderPass.fAttachmentsDescriptor; - this->init(gpu, colorOp, stencilOp); + return new GrVkRenderPass(renderPass, attachmentFlags, attachmentsDescriptor, granularity, + clearValueCount); } -void GrVkRenderPass::init(const GrVkGpu* gpu, - const GrVkRenderTarget& target, - const LoadStoreOps& colorOp, - const LoadStoreOps& stencilOp) { - // Get attachment information from render target. This includes which attachments the render - // target has (color, stencil) and the attachments format and sample count. - target.getAttachmentsDescriptor(&fAttachmentsDescriptor, &fAttachmentFlags); - this->init(gpu, colorOp, stencilOp); +GrVkRenderPass::GrVkRenderPass(VkRenderPass renderPass, AttachmentFlags flags, + const AttachmentsDescriptor& descriptor, + const VkExtent2D& granularity, uint32_t clearValueCount) + : fRenderPass(renderPass) + , fAttachmentFlags(flags) + , fAttachmentsDescriptor(descriptor) + , fGranularity(granularity) + , fClearValueCount(clearValueCount) { } void GrVkRenderPass::freeGPUData(GrVkGpu* gpu) const { diff --git a/third_party/skia/src/gpu/vk/GrVkRenderPass.h b/third_party/skia/src/gpu/vk/GrVkRenderPass.h index 725b1962cd4b..1474c7b7090a 100644 --- a/third_party/skia/src/gpu/vk/GrVkRenderPass.h +++ b/third_party/skia/src/gpu/vk/GrVkRenderPass.h @@ -18,17 +18,6 @@ class GrVkRenderTarget; class GrVkRenderPass : public GrVkResource { public: - GrVkRenderPass() : INHERITED(), fRenderPass(VK_NULL_HANDLE), fClearValueCount(0) {} - - // Used when importing an external render pass. In this case we have to explicitly be told the - // color attachment index - explicit GrVkRenderPass(VkRenderPass renderPass, uint32_t colorAttachmentIndex) - : INHERITED() - , fRenderPass(renderPass) - , fAttachmentFlags(kExternal_AttachmentFlag) - , fClearValueCount(0) - , fColorAttachmentIndex(colorAttachmentIndex) {} - struct LoadStoreOps { VkAttachmentLoadOp fLoadOp; VkAttachmentStoreOp fStoreOp; @@ -46,16 +35,20 @@ class GrVkRenderPass : public GrVkResource { } }; - void initSimple(const GrVkGpu* gpu, const GrVkRenderTarget& target); - void init(const GrVkGpu* gpu, - const GrVkRenderTarget& target, - const LoadStoreOps& colorOp, - const LoadStoreOps& stencilOp); + static GrVkRenderPass* CreateSimple(GrVkGpu* gpu, const GrVkRenderTarget& target); + static GrVkRenderPass* Create(GrVkGpu* gpu, + const GrVkRenderPass& compatibleRenderPass, + const LoadStoreOps& colorOp, + const LoadStoreOps& stencilOp); - void init(const GrVkGpu* gpu, - const GrVkRenderPass& compatibleRenderPass, - const LoadStoreOps& colorOp, - const LoadStoreOps& stencilOp); + // Used when importing an external render pass. In this case we have to explicitly be told the + // color attachment index + explicit GrVkRenderPass(VkRenderPass renderPass, uint32_t colorAttachmentIndex) + : INHERITED() + , fRenderPass(renderPass) + , fAttachmentFlags(kExternal_AttachmentFlag) + , fClearValueCount(0) + , fColorAttachmentIndex(colorAttachmentIndex) {} struct AttachmentsDescriptor { struct AttachmentDesc { @@ -132,11 +125,14 @@ class GrVkRenderPass : public GrVkResource { #endif private: - GrVkRenderPass(const GrVkRenderPass&); - - void init(const GrVkGpu* gpu, - const LoadStoreOps& colorOps, - const LoadStoreOps& stencilOps); + GrVkRenderPass(VkRenderPass, AttachmentFlags, const AttachmentsDescriptor&, + const VkExtent2D& granularity, uint32_t clearValueCount); + + static GrVkRenderPass* Create(GrVkGpu* gpu, + AttachmentFlags, + AttachmentsDescriptor&, + const LoadStoreOps& colorOps, + const LoadStoreOps& stencilOps); bool isCompatible(const AttachmentsDescriptor&, const AttachmentFlags&) const; diff --git a/third_party/skia/src/gpu/vk/GrVkRenderTarget.cpp b/third_party/skia/src/gpu/vk/GrVkRenderTarget.cpp index d7d53fb3b0d9..1494bca50baa 100644 --- a/third_party/skia/src/gpu/vk/GrVkRenderTarget.cpp +++ b/third_party/skia/src/gpu/vk/GrVkRenderTarget.cpp @@ -39,11 +39,10 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, , fMSAAImage(new GrVkImage(msaaInfo, std::move(msaaLayout), GrBackendObjectOwnership::kOwned)) , fResolveAttachmentView(resolveAttachmentView) - , fFramebuffer(nullptr) + , fCachedFramebuffer(nullptr) , fCachedSimpleRenderPass(nullptr) { SkASSERT(info.fProtected == msaaInfo.fProtected); SkASSERT(sampleCnt > 1); - this->createFramebuffer(gpu); this->registerWithCacheWrapped(GrWrapCacheable::kNo); } @@ -67,11 +66,10 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, , fMSAAImage( new GrVkImage(msaaInfo, std::move(msaaLayout), GrBackendObjectOwnership::kOwned)) , fResolveAttachmentView(resolveAttachmentView) - , fFramebuffer(nullptr) + , fCachedFramebuffer(nullptr) , fCachedSimpleRenderPass(nullptr) { SkASSERT(info.fProtected == msaaInfo.fProtected); SkASSERT(sampleCnt > 1); - this->createFramebuffer(gpu); } // We're virtually derived from GrSurface (via GrRenderTarget) so its @@ -87,9 +85,8 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, , fColorAttachmentView(colorAttachmentView) , fMSAAImage(nullptr) , fResolveAttachmentView(nullptr) - , fFramebuffer(nullptr) + , fCachedFramebuffer(nullptr) , fCachedSimpleRenderPass(nullptr) { - this->createFramebuffer(gpu); this->registerWithCacheWrapped(GrWrapCacheable::kNo); } @@ -107,9 +104,8 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, , fColorAttachmentView(colorAttachmentView) , fMSAAImage(nullptr) , fResolveAttachmentView(nullptr) - , fFramebuffer(nullptr) + , fCachedFramebuffer(nullptr) , fCachedSimpleRenderPass(nullptr) { - this->createFramebuffer(gpu); } GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, @@ -124,7 +120,7 @@ GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu, , fColorAttachmentView(nullptr) , fMSAAImage(nullptr) , fResolveAttachmentView(nullptr) - , fFramebuffer(nullptr) + , fCachedFramebuffer(nullptr) , fCachedSimpleRenderPass(renderPass) , fSecondaryCommandBuffer(secondaryCommandBuffer) { SkASSERT(fSecondaryCommandBuffer != VK_NULL_HANDLE); @@ -236,30 +232,57 @@ sk_sp GrVkRenderTarget::MakeSecondaryCBRenderTarget( bool GrVkRenderTarget::completeStencilAttachment() { SkASSERT(!this->wrapsSecondaryCommandBuffer()); - this->createFramebuffer(this->getVkGpu()); + // If we have a previous renderpass or framebuffer it will have been made without stencil, so + // we set it to null to trigger creating a new one the next time we need it. + if (fCachedSimpleRenderPass) { + fCachedSimpleRenderPass->unref(this->getVkGpu()); + fCachedSimpleRenderPass = nullptr; + } + if (fCachedFramebuffer) { + fCachedFramebuffer->unref(this->getVkGpu()); + fCachedFramebuffer = nullptr; + } + fCompatibleRPHandle = GrVkResourceProvider::CompatibleRPHandle(); return true; } -void GrVkRenderTarget::createFramebuffer(GrVkGpu* gpu) { - SkASSERT(!this->wrapsSecondaryCommandBuffer()); - if (fFramebuffer) { - fFramebuffer->unref(gpu); - } +const GrVkRenderPass* GrVkRenderTarget::getSimpleRenderPass() { if (fCachedSimpleRenderPass) { - fCachedSimpleRenderPass->unref(gpu); + return fCachedSimpleRenderPass; } + return this->createSimpleRenderPass(); +} + +const GrVkRenderPass* GrVkRenderTarget::createSimpleRenderPass() { + SkASSERT(!this->wrapsSecondaryCommandBuffer()); + SkASSERT(!fCachedSimpleRenderPass); - // Vulkan requires us to create a compatible renderpass before we can create our framebuffer, - // so we use this to get a (cached) basic renderpass, only for creation. fCachedSimpleRenderPass = - gpu->resourceProvider().findCompatibleRenderPass(*this, &fCompatibleRPHandle); + this->getVkGpu()->resourceProvider().findCompatibleRenderPass(*this, &fCompatibleRPHandle); + return fCachedSimpleRenderPass; +} +const GrVkFramebuffer* GrVkRenderTarget::getFramebuffer() { + if (fCachedFramebuffer) { + return fCachedFramebuffer; + } + return this->createFramebuffer(); +} + +const GrVkFramebuffer* GrVkRenderTarget::createFramebuffer() { + SkASSERT(!this->wrapsSecondaryCommandBuffer()); + SkASSERT(!fCachedFramebuffer); + + GrVkGpu* gpu = this->getVkGpu(); // Stencil attachment view is stored in the base RT stencil attachment const GrVkImageView* stencilView = this->stencilAttachmentView(); - fFramebuffer = GrVkFramebuffer::Create(gpu, this->width(), this->height(), - fCachedSimpleRenderPass, fColorAttachmentView, - stencilView); - SkASSERT(fFramebuffer); + const GrVkRenderPass* renderPass = this->getSimpleRenderPass(); + if (!renderPass) { + return nullptr; + } + fCachedFramebuffer = GrVkFramebuffer::Create(gpu, this->width(), this->height(), renderPass, + fColorAttachmentView, stencilView); + return fCachedFramebuffer; } void GrVkRenderTarget::getAttachmentsDescriptor( @@ -276,8 +299,13 @@ void GrVkRenderTarget::getAttachmentsDescriptor( const GrVkStencilAttachment* vkStencil = static_cast(stencil); desc->fStencil.fFormat = vkStencil->vkFormat(); desc->fStencil.fSamples = vkStencil->numSamples(); - // Currently in vulkan stencil and color attachments must all have same number of samples - SkASSERT(desc->fColor.fSamples == desc->fStencil.fSamples); +#ifdef SK_DEBUG + if (this->getVkGpu()->caps()->mixedSamplesSupport()) { + SkASSERT(desc->fStencil.fSamples >= desc->fColor.fSamples); + } else { + SkASSERT(desc->fStencil.fSamples == desc->fColor.fSamples); + } +#endif *attachmentFlags |= GrVkRenderPass::kStencil_AttachmentFlag; ++attachmentCount; } @@ -289,12 +317,12 @@ GrVkRenderTarget::~GrVkRenderTarget() { SkASSERT(!fMSAAImage); SkASSERT(!fResolveAttachmentView); SkASSERT(!fColorAttachmentView); - SkASSERT(!fFramebuffer); + SkASSERT(!fCachedFramebuffer); SkASSERT(!fCachedSimpleRenderPass); } -void GrVkRenderTarget::addResources(GrVkCommandBuffer& commandBuffer) const { - commandBuffer.addResource(this->framebuffer()); +void GrVkRenderTarget::addResources(GrVkCommandBuffer& commandBuffer) { + commandBuffer.addResource(this->getFramebuffer()); commandBuffer.addResource(this->colorAttachmentView()); commandBuffer.addResource(this->msaaImageResource() ? this->msaaImageResource() : this->resource()); @@ -320,14 +348,19 @@ void GrVkRenderTarget::releaseInternalObjects() { fColorAttachmentView->unref(gpu); fColorAttachmentView = nullptr; } - if (fFramebuffer) { - fFramebuffer->unref(gpu); - fFramebuffer = nullptr; + if (fCachedFramebuffer) { + fCachedFramebuffer->unref(gpu); + fCachedFramebuffer = nullptr; } if (fCachedSimpleRenderPass) { fCachedSimpleRenderPass->unref(gpu); fCachedSimpleRenderPass = nullptr; } + for (int i = 0; i < fGrSecondaryCommandBuffers.count(); ++i) { + SkASSERT(fGrSecondaryCommandBuffers[i]); + fGrSecondaryCommandBuffers[i]->releaseResources(gpu); + } + fGrSecondaryCommandBuffers.reset(); } void GrVkRenderTarget::abandonInternalObjects() { @@ -344,14 +377,19 @@ void GrVkRenderTarget::abandonInternalObjects() { fColorAttachmentView->unrefAndAbandon(); fColorAttachmentView = nullptr; } - if (fFramebuffer) { - fFramebuffer->unrefAndAbandon(); - fFramebuffer = nullptr; + if (fCachedFramebuffer) { + fCachedFramebuffer->unrefAndAbandon(); + fCachedFramebuffer = nullptr; } if (fCachedSimpleRenderPass) { fCachedSimpleRenderPass->unrefAndAbandon(); fCachedSimpleRenderPass = nullptr; } + for (int i = 0; i < fGrSecondaryCommandBuffers.count(); ++i) { + SkASSERT(fGrSecondaryCommandBuffers[i]); + fGrSecondaryCommandBuffers[i]->abandonGPUData(); + } + fGrSecondaryCommandBuffers.reset(); } void GrVkRenderTarget::onRelease() { diff --git a/third_party/skia/src/gpu/vk/GrVkRenderTarget.h b/third_party/skia/src/gpu/vk/GrVkRenderTarget.h index 09bb3d6a352b..0a4cdc339b32 100644 --- a/third_party/skia/src/gpu/vk/GrVkRenderTarget.h +++ b/third_party/skia/src/gpu/vk/GrVkRenderTarget.h @@ -13,14 +13,13 @@ #include "src/gpu/vk/GrVkImage.h" #include "include/gpu/vk/GrVkTypes.h" +#include "src/gpu/vk/GrVkCommandBuffer.h" #include "src/gpu/vk/GrVkRenderPass.h" #include "src/gpu/vk/GrVkResourceProvider.h" -class GrVkCommandBuffer; class GrVkFramebuffer; class GrVkGpu; class GrVkImageView; -class GrVkSecondaryCommandBuffer; class GrVkStencilAttachment; struct GrVkImageInfo; @@ -44,7 +43,7 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { GrBackendFormat backendFormat() const override { return this->getBackendFormat(); } - const GrVkFramebuffer* framebuffer() const { return fFramebuffer; } + const GrVkFramebuffer* getFramebuffer(); const GrVkImageView* colorAttachmentView() const { return fColorAttachmentView; } const GrVkResource* msaaImageResource() const { if (fMSAAImage) { @@ -57,9 +56,14 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { const GrVkResource* stencilImageResource() const; const GrVkImageView* stencilAttachmentView() const; - const GrVkRenderPass* simpleRenderPass() const { return fCachedSimpleRenderPass; } - GrVkResourceProvider::CompatibleRPHandle compatibleRenderPassHandle() const { + const GrVkRenderPass* getSimpleRenderPass(); + GrVkResourceProvider::CompatibleRPHandle compatibleRenderPassHandle() { SkASSERT(!this->wrapsSecondaryCommandBuffer()); + if (!fCompatibleRPHandle.isValid()) { + SkASSERT(!fCachedSimpleRenderPass); + this->createSimpleRenderPass(); + } + SkASSERT(fCompatibleRPHandle.isValid() == SkToBool(fCachedSimpleRenderPass)); return fCompatibleRPHandle; } const GrVkRenderPass* externalRenderPass() const { @@ -84,7 +88,11 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { void getAttachmentsDescriptor(GrVkRenderPass::AttachmentsDescriptor* desc, GrVkRenderPass::AttachmentFlags* flags) const; - void addResources(GrVkCommandBuffer& commandBuffer) const; + void addResources(GrVkCommandBuffer& commandBuffer); + + void addWrappedGrSecondaryCommandBuffer(std::unique_ptr cmdBuffer) { + fGrSecondaryCommandBuffers.push_back(std::move(cmdBuffer)); + } protected: GrVkRenderTarget(GrVkGpu* gpu, @@ -105,8 +113,6 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { const GrVkImageView* colorAttachmentView, GrBackendObjectOwnership); - GrVkGpu* getVkGpu() const; - void onAbandon() override; void onRelease() override; @@ -118,16 +124,10 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { numColorSamples += 1; } const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), numColorSamples, GrMipMapped::kNo); } - void createFramebuffer(GrVkGpu* gpu); - - const GrVkImageView* fColorAttachmentView; - std::unique_ptr fMSAAImage; - const GrVkImageView* fResolveAttachmentView; - private: GrVkRenderTarget(GrVkGpu* gpu, const GrSurfaceDesc& desc, @@ -153,6 +153,11 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { const GrVkRenderPass* renderPass, VkCommandBuffer secondaryCommandBuffer); + GrVkGpu* getVkGpu() const; + + const GrVkRenderPass* createSimpleRenderPass(); + const GrVkFramebuffer* createFramebuffer(); + bool completeStencilAttachment() override; // In Vulkan we call the release proc after we are finished with the underlying @@ -165,7 +170,11 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { void releaseInternalObjects(); void abandonInternalObjects(); - const GrVkFramebuffer* fFramebuffer; + const GrVkImageView* fColorAttachmentView; + std::unique_ptr fMSAAImage; + const GrVkImageView* fResolveAttachmentView; + + const GrVkFramebuffer* fCachedFramebuffer; // This is a cached pointer to a simple render pass. The render target should unref it // once it is done with it. @@ -177,6 +186,16 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { // VkCommandBuffer and not VK_NULL_HANDLE. In this case the render target will not be backed by // an actual VkImage and will thus be limited in terms of what it can be used for. VkCommandBuffer fSecondaryCommandBuffer = VK_NULL_HANDLE; + // When we wrap a secondary command buffer, we will record GrVkResources onto it which need to + // be kept alive till the command buffer gets submitted and the GPU has finished. However, in + // the wrapped case, we don't know when the command buffer gets submitted and when it is + // finished on the GPU since the client is in charge of that. However, we do require that the + // client keeps the GrVkSecondaryCBDrawContext alive and call releaseResources on it once the + // GPU is finished all the work. Thus we can use this to manage the lifetime of our + // GrVkSecondaryCommandBuffers. By storing them on the GrVkRenderTarget, which is owned by the + // SkGpuDevice on the GrVkSecondaryCBDrawContext, we assure that the GrVkResources held by the + // GrVkSecondaryCommandBuffer don't get deleted before they are allowed to. + SkTArray> fGrSecondaryCommandBuffers; }; #endif diff --git a/third_party/skia/src/gpu/vk/GrVkResource.h b/third_party/skia/src/gpu/vk/GrVkResource.h index 7b9949ba1b00..6bd44871c820 100644 --- a/third_party/skia/src/gpu/vk/GrVkResource.h +++ b/third_party/skia/src/gpu/vk/GrVkResource.h @@ -9,6 +9,7 @@ #define GrVkResource_DEFINED +#include "include/private/SkMutex.h" #include "include/private/SkTHash.h" #include "include/utils/SkRandom.h" #include @@ -56,15 +57,18 @@ class GrVkResource : SkNoncopyable { } void add(const GrVkResource* r) { + SkAutoMutexExclusive locked(fLock); fHashSet.add(r); } void remove(const GrVkResource* r) { + SkAutoMutexExclusive locked(fLock); fHashSet.remove(r); } private: - SkTHashSet fHashSet; + SkMutex fLock; + SkTHashSet fHashSet SK_GUARDED_BY(fLock); }; static std::atomic fKeyCounter; diff --git a/third_party/skia/src/gpu/vk/GrVkResourceProvider.cpp b/third_party/skia/src/gpu/vk/GrVkResourceProvider.cpp index 5f21dbd3fd7a..7d0158be8c3f 100644 --- a/third_party/skia/src/gpu/vk/GrVkResourceProvider.cpp +++ b/third_party/skia/src/gpu/vk/GrVkResourceProvider.cpp @@ -72,10 +72,10 @@ VkPipelineCache GrVkResourceProvider::pipelineCache() { createInfo.initialDataSize = 0; createInfo.pInitialData = nullptr; } - VkResult result = GR_VK_CALL(fGpu->vkInterface(), - CreatePipelineCache(fGpu->device(), &createInfo, nullptr, - &fPipelineCache)); - SkASSERT(VK_SUCCESS == result); + + VkResult result; + GR_VK_CALL_RESULT(fGpu, result, CreatePipelineCache(fGpu->device(), &createInfo, nullptr, + &fPipelineCache)); if (VK_SUCCESS != result) { fPipelineCache = VK_NULL_HANDLE; } @@ -92,15 +92,13 @@ void GrVkResourceProvider::init() { } GrVkPipeline* GrVkResourceProvider::createPipeline(const GrProgramInfo& programInfo, - const GrStencilSettings& stencil, VkPipelineShaderStageCreateInfo* shaderStageInfo, int shaderStageCount, - GrPrimitiveType primitiveType, VkRenderPass compatibleRenderPass, VkPipelineLayout layout) { - return GrVkPipeline::Create(fGpu, programInfo, stencil, shaderStageInfo, - shaderStageCount, primitiveType, compatibleRenderPass, - layout, this->pipelineCache()); + return GrVkPipeline::Create(fGpu, programInfo, shaderStageInfo, + shaderStageCount, compatibleRenderPass, layout, + this->pipelineCache()); } // To create framebuffers, we first need to create a simple RenderPass that is @@ -120,9 +118,11 @@ GrVkResourceProvider::findCompatibleRenderPass(const GrVkRenderTarget& target, } } - const GrVkRenderPass* renderPass = - fRenderPassArray.emplace_back(fGpu, target).getCompatibleRenderPass(); - renderPass->ref(); + GrVkRenderPass* renderPass = GrVkRenderPass::CreateSimple(fGpu, target); + if (!renderPass) { + return nullptr; + } + fRenderPassArray.emplace_back(renderPass); if (compatibleHandle) { *compatibleHandle = CompatibleRPHandle(fRenderPassArray.count() - 1); @@ -135,6 +135,7 @@ GrVkResourceProvider::findCompatibleRenderPass(const CompatibleRPHandle& compati SkASSERT(compatibleHandle.isValid() && compatibleHandle.toIndex() < fRenderPassArray.count()); int index = compatibleHandle.toIndex(); const GrVkRenderPass* renderPass = fRenderPassArray[index].getCompatibleRenderPass(); + SkASSERT(renderPass); renderPass->ref(); return renderPass; } @@ -160,18 +161,18 @@ const GrVkRenderPass* GrVkResourceProvider::findCompatibleExternalRenderPass( } const GrVkRenderPass* GrVkResourceProvider::findRenderPass( - const GrVkRenderTarget& target, + GrVkRenderTarget* target, const GrVkRenderPass::LoadStoreOps& colorOps, const GrVkRenderPass::LoadStoreOps& stencilOps, CompatibleRPHandle* compatibleHandle) { GrVkResourceProvider::CompatibleRPHandle tempRPHandle; GrVkResourceProvider::CompatibleRPHandle* pRPHandle = compatibleHandle ? compatibleHandle : &tempRPHandle; - *pRPHandle = target.compatibleRenderPassHandle(); + *pRPHandle = target->compatibleRenderPassHandle(); + if (!pRPHandle->isValid()) { + return nullptr; + } - // This will get us the handle to (and possible create) the compatible set for the specific - // GrVkRenderPass we are looking for. - this->findCompatibleRenderPass(target, compatibleHandle); return this->findRenderPass(*pRPHandle, colorOps, stencilOps); } @@ -184,13 +185,16 @@ GrVkResourceProvider::findRenderPass(const CompatibleRPHandle& compatibleHandle, const GrVkRenderPass* renderPass = compatibleSet.getRenderPass(fGpu, colorOps, stencilOps); + if (!renderPass) { + return nullptr; + } renderPass->ref(); return renderPass; } GrVkDescriptorPool* GrVkResourceProvider::findOrCreateCompatibleDescriptorPool( VkDescriptorType type, uint32_t count) { - return new GrVkDescriptorPool(fGpu, type, count); + return GrVkDescriptorPool::Create(fGpu, type, count); } GrVkSampler* GrVkResourceProvider::findOrCreateCompatibleSampler( @@ -227,10 +231,8 @@ GrVkSamplerYcbcrConversion* GrVkResourceProvider::findOrCreateCompatibleSamplerY GrVkPipelineState* GrVkResourceProvider::findOrCreateCompatiblePipelineState( GrRenderTarget* renderTarget, const GrProgramInfo& programInfo, - GrPrimitiveType primitiveType, VkRenderPass compatibleRenderPass) { - return fPipelineStateCache->refPipelineState(renderTarget, programInfo, - primitiveType, compatibleRenderPass); + return fPipelineStateCache->refPipelineState(renderTarget, programInfo, compatibleRenderPass); } void GrVkResourceProvider::getSamplerDescriptorSetHandle(VkDescriptorType type, @@ -311,6 +313,9 @@ GrVkCommandPool* GrVkResourceProvider::findOrCreateCommandPool() { fAvailableCommandPools.pop_back(); } else { result = GrVkCommandPool::Create(fGpu); + if (!result) { + return nullptr; + } } SkASSERT(result->unique()); SkDEBUGCODE( @@ -510,19 +515,24 @@ void GrVkResourceProvider::reset(GrVkCommandPool* pool) { } void GrVkResourceProvider::storePipelineCacheData() { + if (this->pipelineCache() == VK_NULL_HANDLE) { + return; + } size_t dataSize = 0; - VkResult result = GR_VK_CALL(fGpu->vkInterface(), GetPipelineCacheData(fGpu->device(), - this->pipelineCache(), - &dataSize, nullptr)); - SkASSERT(result == VK_SUCCESS); + VkResult result; + GR_VK_CALL_RESULT(fGpu, result, GetPipelineCacheData(fGpu->device(), this->pipelineCache(), + &dataSize, nullptr)); + if (result != VK_SUCCESS) { + return; + } std::unique_ptr data(new uint8_t[dataSize]); - result = GR_VK_CALL(fGpu->vkInterface(), GetPipelineCacheData(fGpu->device(), - this->pipelineCache(), - &dataSize, - (void*)data.get())); - SkASSERT(result == VK_SUCCESS); + GR_VK_CALL_RESULT(fGpu, result, GetPipelineCacheData(fGpu->device(), this->pipelineCache(), + &dataSize, (void*)data.get())); + if (result != VK_SUCCESS) { + return; + } uint32_t key = GrVkGpu::kPipelineCache_PersistentCacheKeyType; sk_sp keyData = SkData::MakeWithoutCopy(&key, sizeof(uint32_t)); @@ -533,16 +543,14 @@ void GrVkResourceProvider::storePipelineCacheData() { //////////////////////////////////////////////////////////////////////////////// -GrVkResourceProvider::CompatibleRenderPassSet::CompatibleRenderPassSet( - const GrVkGpu* gpu, - const GrVkRenderTarget& target) - : fLastReturnedIndex(0) { - fRenderPasses.emplace_back(new GrVkRenderPass()); - fRenderPasses[0]->initSimple(gpu, target); +GrVkResourceProvider::CompatibleRenderPassSet::CompatibleRenderPassSet(GrVkRenderPass* renderPass) + : fLastReturnedIndex(0) { + renderPass->ref(); + fRenderPasses.push_back(renderPass); } bool GrVkResourceProvider::CompatibleRenderPassSet::isCompatible( - const GrVkRenderTarget& target) const { + const GrVkRenderTarget& target) const { // The first GrVkRenderpass should always exists since we create the basic load store // render pass on create SkASSERT(fRenderPasses[0]); @@ -550,9 +558,9 @@ bool GrVkResourceProvider::CompatibleRenderPassSet::isCompatible( } GrVkRenderPass* GrVkResourceProvider::CompatibleRenderPassSet::getRenderPass( - const GrVkGpu* gpu, - const GrVkRenderPass::LoadStoreOps& colorOps, - const GrVkRenderPass::LoadStoreOps& stencilOps) { + GrVkGpu* gpu, + const GrVkRenderPass::LoadStoreOps& colorOps, + const GrVkRenderPass::LoadStoreOps& stencilOps) { for (int i = 0; i < fRenderPasses.count(); ++i) { int idx = (i + fLastReturnedIndex) % fRenderPasses.count(); if (fRenderPasses[idx]->equalLoadStoreOps(colorOps, stencilOps)) { @@ -560,8 +568,12 @@ GrVkRenderPass* GrVkResourceProvider::CompatibleRenderPassSet::getRenderPass( return fRenderPasses[idx]; } } - GrVkRenderPass* renderPass = fRenderPasses.emplace_back(new GrVkRenderPass()); - renderPass->init(gpu, *this->getCompatibleRenderPass(), colorOps, stencilOps); + GrVkRenderPass* renderPass = GrVkRenderPass::Create(gpu, *this->getCompatibleRenderPass(), + colorOps, stencilOps); + if (!renderPass) { + return nullptr; + } + fRenderPasses.push_back(renderPass); fLastReturnedIndex = fRenderPasses.count() - 1; return renderPass; } diff --git a/third_party/skia/src/gpu/vk/GrVkResourceProvider.h b/third_party/skia/src/gpu/vk/GrVkResourceProvider.h index 44755d7a010a..6cdbda83cde6 100644 --- a/third_party/skia/src/gpu/vk/GrVkResourceProvider.h +++ b/third_party/skia/src/gpu/vk/GrVkResourceProvider.h @@ -13,6 +13,7 @@ #include "src/core/SkLRUCache.h" #include "src/core/SkTDynamicHash.h" #include "src/core/SkTInternalLList.h" +#include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrResourceHandle.h" #include "src/gpu/vk/GrVkDescriptorPool.h" #include "src/gpu/vk/GrVkDescriptorSetManager.h" @@ -44,10 +45,8 @@ class GrVkResourceProvider { void init(); GrVkPipeline* createPipeline(const GrProgramInfo&, - const GrStencilSettings& stencil, VkPipelineShaderStageCreateInfo* shaderStageInfo, int shaderStageCount, - GrPrimitiveType primitiveType, VkRenderPass compatibleRenderPass, VkPipelineLayout layout); @@ -70,7 +69,7 @@ class GrVkResourceProvider { // refcount, and returns. The caller can optionally pass in a pointer to a CompatibleRPHandle. // If this is non null it will be set to a handle that can be used in the furutre to quickly // return a GrVkRenderPasses without the need inspecting a GrVkRenderTarget. - const GrVkRenderPass* findRenderPass(const GrVkRenderTarget& target, + const GrVkRenderPass* findRenderPass(GrVkRenderTarget* target, const GrVkRenderPass::LoadStoreOps& colorOps, const GrVkRenderPass::LoadStoreOps& stencilOps, CompatibleRPHandle* compatibleHandle = nullptr); @@ -113,7 +112,6 @@ class GrVkResourceProvider { GrVkPipelineState* findOrCreateCompatiblePipelineState( GrRenderTarget*, const GrProgramInfo&, - GrPrimitiveType, VkRenderPass compatibleRenderPass); void getSamplerDescriptorSetHandle(VkDescriptorType type, @@ -194,7 +192,6 @@ class GrVkResourceProvider { void release(); GrVkPipelineState* refPipelineState(GrRenderTarget*, const GrProgramInfo&, - GrPrimitiveType, VkRenderPass compatibleRenderPass); private: @@ -206,7 +203,7 @@ class GrVkResourceProvider { } }; - SkLRUCache, DescHash> fMap; + SkLRUCache, DescHash> fMap; GrVkGpu* fGpu; @@ -221,7 +218,7 @@ class GrVkResourceProvider { // This will always construct the basic load store render pass (all attachments load and // store their data) so that there is at least one compatible VkRenderPass that can be used // with this set. - CompatibleRenderPassSet(const GrVkGpu* gpu, const GrVkRenderTarget& target); + CompatibleRenderPassSet(GrVkRenderPass* renderPass); bool isCompatible(const GrVkRenderTarget& target) const; @@ -232,7 +229,7 @@ class GrVkResourceProvider { return fRenderPasses[0]; } - GrVkRenderPass* getRenderPass(const GrVkGpu* gpu, + GrVkRenderPass* getRenderPass(GrVkGpu* gpu, const GrVkRenderPass::LoadStoreOps& colorOps, const GrVkRenderPass::LoadStoreOps& stencilOps); diff --git a/third_party/skia/src/gpu/vk/GrVkSampler.cpp b/third_party/skia/src/gpu/vk/GrVkSampler.cpp index 5dc3544f0089..e83262dad855 100644 --- a/third_party/skia/src/gpu/vk/GrVkSampler.cpp +++ b/third_party/skia/src/gpu/vk/GrVkSampler.cpp @@ -102,10 +102,12 @@ GrVkSampler* GrVkSampler::Create(GrVkGpu* gpu, const GrSamplerState& samplerStat } VkSampler sampler; - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateSampler(gpu->device(), - &createInfo, - nullptr, - &sampler)); + VkResult result; + GR_VK_CALL_RESULT(gpu, result, CreateSampler(gpu->device(), &createInfo, nullptr, &sampler)); + if (result != VK_SUCCESS) { + ycbcrConversion->unref(gpu); + return nullptr; + } return new GrVkSampler(sampler, ycbcrConversion, GenerateKey(samplerState, ycbcrInfo)); } diff --git a/third_party/skia/src/gpu/vk/GrVkSamplerYcbcrConversion.cpp b/third_party/skia/src/gpu/vk/GrVkSamplerYcbcrConversion.cpp index f33f5216dc09..ec0c22dc62fe 100644 --- a/third_party/skia/src/gpu/vk/GrVkSamplerYcbcrConversion.cpp +++ b/third_party/skia/src/gpu/vk/GrVkSamplerYcbcrConversion.cpp @@ -10,7 +10,7 @@ #include "src/gpu/vk/GrVkGpu.h" GrVkSamplerYcbcrConversion* GrVkSamplerYcbcrConversion::Create( - const GrVkGpu* gpu, const GrVkYcbcrConversionInfo& info) { + GrVkGpu* gpu, const GrVkYcbcrConversionInfo& info) { if (!gpu->vkCaps().supportsYcbcrConversion()) { return nullptr; } @@ -71,9 +71,10 @@ GrVkSamplerYcbcrConversion* GrVkSamplerYcbcrConversion::Create( } VkSamplerYcbcrConversion conversion; - GR_VK_CALL(gpu->vkInterface(), CreateSamplerYcbcrConversion(gpu->device(), &ycbcrCreateInfo, + VkResult result; + GR_VK_CALL_RESULT(gpu, result, CreateSamplerYcbcrConversion(gpu->device(), &ycbcrCreateInfo, nullptr, &conversion)); - if (conversion == VK_NULL_HANDLE) { + if (result != VK_SUCCESS) { return nullptr; } diff --git a/third_party/skia/src/gpu/vk/GrVkSamplerYcbcrConversion.h b/third_party/skia/src/gpu/vk/GrVkSamplerYcbcrConversion.h index cf7a2c5995b4..5ec3b3d0bed2 100644 --- a/third_party/skia/src/gpu/vk/GrVkSamplerYcbcrConversion.h +++ b/third_party/skia/src/gpu/vk/GrVkSamplerYcbcrConversion.h @@ -17,7 +17,7 @@ class GrVkGpu; class GrVkSamplerYcbcrConversion : public GrVkResource { public: - static GrVkSamplerYcbcrConversion* Create(const GrVkGpu* gpu, const GrVkYcbcrConversionInfo&); + static GrVkSamplerYcbcrConversion* Create(GrVkGpu* gpu, const GrVkYcbcrConversionInfo&); VkSamplerYcbcrConversion ycbcrConversion() const { return fYcbcrConversion; } diff --git a/third_party/skia/src/gpu/vk/GrVkSecondaryCBDrawContext.h b/third_party/skia/src/gpu/vk/GrVkSecondaryCBDrawContext.h index b37f6a60934b..f56ae0acaeb7 100644 --- a/third_party/skia/src/gpu/vk/GrVkSecondaryCBDrawContext.h +++ b/third_party/skia/src/gpu/vk/GrVkSecondaryCBDrawContext.h @@ -55,7 +55,7 @@ class SkSurfaceProps; * GrVkSecondaryCBDrawContext, the client must call releaseResources() so that Skia can cleanup * any internal objects that were created for the draws into the secondary command buffer. */ -class SK_API GrVkSecondaryCBDrawContext : public SkRefCnt { +class SK_SPI GrVkSecondaryCBDrawContext : public SkRefCnt { public: static sk_sp Make(GrContext*, const SkImageInfo&, const GrVkDrawableInfo&, diff --git a/third_party/skia/src/gpu/vk/GrVkSemaphore.cpp b/third_party/skia/src/gpu/vk/GrVkSemaphore.cpp index dd7796ee88f4..191b6a3ce5d1 100644 --- a/third_party/skia/src/gpu/vk/GrVkSemaphore.cpp +++ b/third_party/skia/src/gpu/vk/GrVkSemaphore.cpp @@ -16,54 +16,47 @@ #undef CreateSemaphore #endif -sk_sp GrVkSemaphore::Make(GrVkGpu* gpu, bool isOwned) { +std::unique_ptr GrVkSemaphore::Make(GrVkGpu* gpu, bool isOwned) { VkSemaphoreCreateInfo createInfo; memset(&createInfo, 0, sizeof(VkSemaphoreCreateInfo)); createInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; createInfo.pNext = nullptr; createInfo.flags = 0; VkSemaphore semaphore = VK_NULL_HANDLE; - GR_VK_CALL_ERRCHECK(gpu->vkInterface(), - CreateSemaphore(gpu->device(), &createInfo, nullptr, &semaphore)); + VkResult result; + GR_VK_CALL_RESULT(gpu, result, CreateSemaphore(gpu->device(), &createInfo, nullptr, + &semaphore)); + if (result != VK_SUCCESS) { + return nullptr; + } - return sk_sp(new GrVkSemaphore(gpu, semaphore, false, false, isOwned)); + return std::unique_ptr(new GrVkSemaphore(gpu, semaphore, false, false, isOwned)); } -sk_sp GrVkSemaphore::MakeWrapped(GrVkGpu* gpu, - VkSemaphore semaphore, - WrapType wrapType, - GrWrapOwnership ownership) { +std::unique_ptr GrVkSemaphore::MakeWrapped(GrVkGpu* gpu, + VkSemaphore semaphore, + WrapType wrapType, + GrWrapOwnership ownership) { if (VK_NULL_HANDLE == semaphore) { return nullptr; } bool prohibitSignal = WrapType::kWillWait == wrapType; bool prohibitWait = WrapType::kWillSignal == wrapType; - return sk_sp(new GrVkSemaphore(gpu, semaphore, prohibitSignal, prohibitWait, - kBorrow_GrWrapOwnership != ownership)); + return std::unique_ptr(new GrVkSemaphore(gpu, semaphore, prohibitSignal, + prohibitWait, + kBorrow_GrWrapOwnership != ownership)); } GrVkSemaphore::GrVkSemaphore(GrVkGpu* gpu, VkSemaphore semaphore, bool prohibitSignal, bool prohibitWait, bool isOwned) - : INHERITED(gpu) { + : fGpu(gpu) { fResource = new Resource(semaphore, prohibitSignal, prohibitWait, isOwned); - isOwned ? this->registerWithCache(SkBudgeted::kNo) - : this->registerWithCacheWrapped(GrWrapCacheable::kNo); -} - -void GrVkSemaphore::onRelease() { - if (fResource) { - fResource->unref(static_cast(this->getGpu())); - fResource = nullptr; - } - INHERITED::onRelease(); } -void GrVkSemaphore::onAbandon() { +GrVkSemaphore::~GrVkSemaphore() { if (fResource) { - fResource->unrefAndAbandon(); - fResource = nullptr; + fResource->unref(fGpu); } - INHERITED::onAbandon(); } void GrVkSemaphore::Resource::freeGPUData(GrVkGpu* gpu) const { diff --git a/third_party/skia/src/gpu/vk/GrVkSemaphore.h b/third_party/skia/src/gpu/vk/GrVkSemaphore.h index 0c73aa119123..b18db6dfe217 100644 --- a/third_party/skia/src/gpu/vk/GrVkSemaphore.h +++ b/third_party/skia/src/gpu/vk/GrVkSemaphore.h @@ -19,14 +19,16 @@ class GrVkGpu; class GrVkSemaphore : public GrSemaphore { public: - static sk_sp Make(GrVkGpu* gpu, bool isOwned); + static std::unique_ptr Make(GrVkGpu* gpu, bool isOwned); using WrapType = GrResourceProvider::SemaphoreWrapType; - static sk_sp MakeWrapped(GrVkGpu* gpu, - VkSemaphore semaphore, - WrapType wrapType, - GrWrapOwnership); + static std::unique_ptr MakeWrapped(GrVkGpu* gpu, + VkSemaphore semaphore, + WrapType wrapType, + GrWrapOwnership); + + ~GrVkSemaphore() override; GrBackendSemaphore backendSemaphore() const override; @@ -57,6 +59,10 @@ class GrVkSemaphore : public GrSemaphore { fHasBeenSubmittedToQueueForWait = true; } + void setIsOwned() { + fIsOwned = true; + } + #ifdef SK_TRACE_VK_RESOURCES void dumpInfo() const override { SkDebugf("GrVkSemaphore: %d (%d refs)\n", fSemaphore, this->getRefCnt()); @@ -79,11 +85,14 @@ class GrVkSemaphore : public GrSemaphore { GrVkSemaphore(GrVkGpu* gpu, VkSemaphore semaphore, bool prohibitSignal, bool prohibitWait, bool isOwned); - void onRelease() override; - void onAbandon() override; + void setIsOwned() override { + fResource->setIsOwned(); + } Resource* fResource; + GrVkGpu* fGpu; + typedef GrSemaphore INHERITED; }; diff --git a/third_party/skia/src/gpu/vk/GrVkTexture.cpp b/third_party/skia/src/gpu/vk/GrVkTexture.cpp index e162b34b9980..1257c287fefd 100644 --- a/third_party/skia/src/gpu/vk/GrVkTexture.cpp +++ b/third_party/skia/src/gpu/vk/GrVkTexture.cpp @@ -8,6 +8,7 @@ #include "src/gpu/vk/GrVkTexture.h" #include "src/gpu/GrTexturePriv.h" +#include "src/gpu/vk/GrVkDescriptorSet.h" #include "src/gpu/vk/GrVkGpu.h" #include "src/gpu/vk/GrVkImageView.h" #include "src/gpu/vk/GrVkTextureRenderTarget.h" @@ -29,7 +30,8 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, , GrVkImage(info, std::move(layout), GrBackendObjectOwnership::kOwned) , INHERITED(gpu, {desc.fWidth, desc.fHeight}, desc.fConfig, info.fProtected, GrTextureType::k2D, mipMapsStatus) - , fTextureView(view) { + , fTextureView(view) + , fDescSetCache(kMaxCachedDescSets) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == info.fLevelCount)); // We don't support creating external GrVkTextures SkASSERT(!info.fYcbcrConversionInfo.isValid() || !info.fYcbcrConversionInfo.fExternalFormat); @@ -47,7 +49,8 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, const GrSurfaceDesc& desc, const GrVkImag , GrVkImage(info, std::move(layout), ownership) , INHERITED(gpu, {desc.fWidth, desc.fHeight}, desc.fConfig, info.fProtected, isExternal ? GrTextureType::kExternal : GrTextureType::k2D, mipMapsStatus) - , fTextureView(view) { + , fTextureView(view) + , fDescSetCache(kMaxCachedDescSets) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == info.fLevelCount)); if (ioType == kRead_GrIOType) { this->setReadOnly(); @@ -67,7 +70,8 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, , GrVkImage(info, layout, ownership) , INHERITED(gpu, {desc.fWidth, desc.fHeight}, desc.fConfig, info.fProtected, GrTextureType::k2D, mipMapsStatus) - , fTextureView(view) { + , fTextureView(view) + , fDescSetCache(kMaxCachedDescSets) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == info.fLevelCount)); // Since this ctor is only called from GrVkTextureRenderTarget, we can't have a ycbcr conversion // since we don't support that on render targets. @@ -147,11 +151,26 @@ void GrVkTexture::onRelease() { fTextureView = nullptr; } + fDescSetCache.reset(); + this->releaseImage(this->getVkGpu()); INHERITED::onRelease(); } +struct GrVkTexture::DescriptorCacheEntry { + DescriptorCacheEntry(const GrVkDescriptorSet* fDescSet, GrVkGpu* gpu) + : fDescriptorSet(fDescSet), fGpu(gpu) {} + ~DescriptorCacheEntry() { + if (fDescriptorSet) { + fDescriptorSet->recycle(fGpu); + } + } + + const GrVkDescriptorSet* fDescriptorSet; + GrVkGpu* fGpu; +}; + void GrVkTexture::onAbandon() { // We're about to be severed from our GrVkResource. If there are "finish" idle procs we have to // decide who will handle them. If the resource is still tied to a command buffer we let it @@ -166,6 +185,12 @@ void GrVkTexture::onAbandon() { fTextureView = nullptr; } + fDescSetCache.foreach ([](std::unique_ptr* entry) { + (*entry)->fDescriptorSet->unrefAndAbandon(); + (*entry)->fDescriptorSet = nullptr; + }); + fDescSetCache.reset(); + this->abandonImage(); INHERITED::onAbandon(); } @@ -250,3 +275,20 @@ void GrVkTexture::removeFinishIdleProcs() { SkASSERT(resourceIdx == resource->idleProcCnt()); fIdleProcs = procsToKeep; } + +const GrVkDescriptorSet* GrVkTexture::cachedSingleDescSet(const GrSamplerState& state) { + if (std::unique_ptr* e = fDescSetCache.find(state)) { + return (*e)->fDescriptorSet; + } + return nullptr; +} + +void GrVkTexture::addDescriptorSetToCache(const GrVkDescriptorSet* descSet, + const GrSamplerState& state) { + SkASSERT(!fDescSetCache.find(state)); + descSet->ref(); + fDescSetCache.insert(state, + std::unique_ptr( + new DescriptorCacheEntry(descSet, this->getVkGpu()))); +} + diff --git a/third_party/skia/src/gpu/vk/GrVkTexture.h b/third_party/skia/src/gpu/vk/GrVkTexture.h index 6d90826227f3..288b65c26bcf 100644 --- a/third_party/skia/src/gpu/vk/GrVkTexture.h +++ b/third_party/skia/src/gpu/vk/GrVkTexture.h @@ -10,8 +10,11 @@ #include "include/gpu/GrTexture.h" #include "include/gpu/vk/GrVkTypes.h" +#include "src/core/SkLRUCache.h" +#include "src/gpu/GrSamplerState.h" #include "src/gpu/vk/GrVkImage.h" +class GrVkDescriptorSet; class GrVkGpu; class GrVkImageView; struct GrVkImageInfo; @@ -41,6 +44,15 @@ class GrVkTexture : public GrTexture, public virtual GrVkImage { void addIdleProc(sk_sp, IdleState) override; void callIdleProcsOnBehalfOfResource(); + // For each GrVkTexture, there is a cache of GrVkDescriptorSets which only contain a single + // texture/sampler descriptor. If there is a cached descriptor set that matches the passed in + // GrSamplerState, then a pointer to it is returned. The ref count is not incremented on the + // returned pointer, thus the caller must call ref it if they wish to keep ownership of the + // GrVkDescriptorSet. + const GrVkDescriptorSet* cachedSingleDescSet(const GrSamplerState&); + + void addDescriptorSetToCache(const GrVkDescriptorSet*, const GrSamplerState&); + protected: GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, sk_sp, const GrVkImageView*, GrMipMapsStatus, GrBackendObjectOwnership); @@ -75,6 +87,16 @@ class GrVkTexture : public GrTexture, public virtual GrVkImage { const GrVkImageView* fTextureView; + struct SamplerHash { + uint32_t operator()(const GrSamplerState& state) const { + return GrSamplerState::GenerateKey(state); + } + }; + struct DescriptorCacheEntry; + SkLRUCache, SamplerHash> + fDescSetCache; + static constexpr int kMaxCachedDescSets = 8; + typedef GrTexture INHERITED; }; diff --git a/third_party/skia/src/gpu/vk/GrVkTextureRenderTarget.cpp b/third_party/skia/src/gpu/vk/GrVkTextureRenderTarget.cpp index d89822da3b51..556e3ea6c0b6 100644 --- a/third_party/skia/src/gpu/vk/GrVkTextureRenderTarget.cpp +++ b/third_party/skia/src/gpu/vk/GrVkTextureRenderTarget.cpp @@ -245,7 +245,7 @@ size_t GrVkTextureRenderTarget::onGpuMemorySize() const { ++numColorSamples; } const GrCaps& caps = *this->getGpu()->caps(); - return GrSurface::ComputeSize(caps, this->backendFormat(), this->width(), this->height(), + return GrSurface::ComputeSize(caps, this->backendFormat(), this->dimensions(), numColorSamples, // TODO: this still correct? this->texturePriv().mipMapped()); } diff --git a/third_party/skia/src/gpu/vk/GrVkUniformHandler.cpp b/third_party/skia/src/gpu/vk/GrVkUniformHandler.cpp index 6df62ce6a901..06bd9340e7f0 100644 --- a/third_party/skia/src/gpu/vk/GrVkUniformHandler.cpp +++ b/third_party/skia/src/gpu/vk/GrVkUniformHandler.cpp @@ -254,17 +254,19 @@ GrGLSLUniformHandler::UniformHandle GrVkUniformHandler::internalAddUniformArray( return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1); } -GrGLSLUniformHandler::SamplerHandle GrVkUniformHandler::addSampler(const GrTextureProxy* texture, +GrGLSLUniformHandler::SamplerHandle GrVkUniformHandler::addSampler(const GrSurfaceProxy* texture, const GrSamplerState& state, const GrSwizzle& swizzle, const char* name, const GrShaderCaps* shaderCaps) { SkASSERT(name && strlen(name)); + SkASSERT(texture->asTextureProxy()); + SkString mangleName; char prefix = 'u'; fProgramBuilder->nameVariable(&mangleName, prefix, name, true); - GrTextureType type = texture->textureType(); + GrTextureType type = texture->backendFormat().textureType(); UniformInfo& info = fSamplers.push_back(); info.fVariable.setType(GrSLCombinedSamplerTypeForTextureType(type)); diff --git a/third_party/skia/src/gpu/vk/GrVkUniformHandler.h b/third_party/skia/src/gpu/vk/GrVkUniformHandler.h index 76f82f03db20..33eaa0730528 100644 --- a/third_party/skia/src/gpu/vk/GrVkUniformHandler.h +++ b/third_party/skia/src/gpu/vk/GrVkUniformHandler.h @@ -77,7 +77,7 @@ class GrVkUniformHandler : public GrGLSLUniformHandler { fUniforms[u.toIndex()].fVisibility |= visibility; } - SamplerHandle addSampler(const GrTextureProxy*, + SamplerHandle addSampler(const GrSurfaceProxy*, const GrSamplerState&, const GrSwizzle&, const char* name, diff --git a/third_party/skia/src/gpu/vk/GrVkUtil.cpp b/third_party/skia/src/gpu/vk/GrVkUtil.cpp index a49dcea8aeb6..09ededc9708f 100644 --- a/third_party/skia/src/gpu/vk/GrVkUtil.cpp +++ b/third_party/skia/src/gpu/vk/GrVkUtil.cpp @@ -96,12 +96,6 @@ bool GrSampleCountToVkSampleCount(uint32_t samples, VkSampleCountFlagBits* vkSam case 16: *vkSamples = VK_SAMPLE_COUNT_16_BIT; return true; - case 32: - *vkSamples = VK_SAMPLE_COUNT_32_BIT; - return true; - case 64: - *vkSamples = VK_SAMPLE_COUNT_64_BIT; - return true; default: return false; } @@ -118,7 +112,7 @@ SkSL::Program::Kind vk_shader_stage_to_skiasl_kind(VkShaderStageFlagBits stage) return SkSL::Program::kFragment_Kind; } -bool GrCompileVkShaderModule(const GrVkGpu* gpu, +bool GrCompileVkShaderModule(GrVkGpu* gpu, const SkSL::String& shaderString, VkShaderStageFlagBits stage, VkShaderModule* shaderModule, @@ -144,7 +138,7 @@ bool GrCompileVkShaderModule(const GrVkGpu* gpu, return GrInstallVkShaderModule(gpu, *outSPIRV, stage, shaderModule, stageInfo); } -bool GrInstallVkShaderModule(const GrVkGpu* gpu, +bool GrInstallVkShaderModule(GrVkGpu* gpu, const SkSL::String& spirv, VkShaderStageFlagBits stage, VkShaderModule* shaderModule, @@ -157,10 +151,9 @@ bool GrInstallVkShaderModule(const GrVkGpu* gpu, moduleCreateInfo.codeSize = spirv.size(); moduleCreateInfo.pCode = (const uint32_t*)spirv.c_str(); - VkResult err = GR_VK_CALL(gpu->vkInterface(), CreateShaderModule(gpu->device(), - &moduleCreateInfo, - nullptr, - shaderModule)); + VkResult err; + GR_VK_CALL_RESULT(gpu, err, CreateShaderModule(gpu->device(), &moduleCreateInfo, nullptr, + shaderModule)); if (err) { return false; } diff --git a/third_party/skia/src/gpu/vk/GrVkUtil.h b/third_party/skia/src/gpu/vk/GrVkUtil.h index b34dfbca0c58..940d7c40b798 100644 --- a/third_party/skia/src/gpu/vk/GrVkUtil.h +++ b/third_party/skia/src/gpu/vk/GrVkUtil.h @@ -20,14 +20,32 @@ 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) + // same as GR_VK_CALL but checks for success -#ifdef SK_DEBUG -#define GR_VK_CALL_ERRCHECK(IFACE, X) \ - VkResult SK_MACRO_APPEND_LINE(ret) = GR_VK_CALL(IFACE, X); \ - SkASSERT(VK_SUCCESS == SK_MACRO_APPEND_LINE(ret)) -#else -#define GR_VK_CALL_ERRCHECK(IFACE, X) (void) GR_VK_CALL(IFACE, X) -#endif +#define GR_VK_CALL_ERRCHECK(GPU, X) \ + VkResult SK_MACRO_APPEND_LINE(ret); \ + GR_VK_CALL_RESULT(GPU, SK_MACRO_APPEND_LINE(ret), X) \ + bool GrVkFormatIsSupported(VkFormat); @@ -42,7 +60,7 @@ bool GrVkFormatColorTypePairIsValid(VkFormat, GrColorType); bool GrSampleCountToVkSampleCount(uint32_t samples, VkSampleCountFlagBits* vkSamples); -bool GrCompileVkShaderModule(const GrVkGpu* gpu, +bool GrCompileVkShaderModule(GrVkGpu* gpu, const SkSL::String& shaderString, VkShaderStageFlagBits stage, VkShaderModule* shaderModule, @@ -51,7 +69,7 @@ bool GrCompileVkShaderModule(const GrVkGpu* gpu, SkSL::String* outSPIRV, SkSL::Program::Inputs* outInputs); -bool GrInstallVkShaderModule(const GrVkGpu* gpu, +bool GrInstallVkShaderModule(GrVkGpu* gpu, const SkSL::String& spirv, VkShaderStageFlagBits stage, VkShaderModule* shaderModule, diff --git a/third_party/skia/src/image/SkImage_Gpu.cpp b/third_party/skia/src/image/SkImage_Gpu.cpp index 30254e5bb51a..675e92003e1d 100644 --- a/third_party/skia/src/image/SkImage_Gpu.cpp +++ b/third_party/skia/src/image/SkImage_Gpu.cpp @@ -56,7 +56,7 @@ static SkColorType proxy_color_type(GrTextureProxy* proxy) { SkImage_Gpu::SkImage_Gpu(sk_sp context, uint32_t uniqueID, SkAlphaType at, sk_sp proxy, sk_sp colorSpace) - : INHERITED(std::move(context), proxy->worstCaseWidth(), proxy->worstCaseHeight(), uniqueID, + : INHERITED(std::move(context), proxy->backingStoreDimensions(), uniqueID, proxy_color_type(proxy.get()), at, colorSpace) , fProxy(std::move(proxy)) {} @@ -93,8 +93,7 @@ sk_sp SkImage_Gpu::onMakeColorTypeAndColorSpace(GrRecordingContext* con GrPaint paint; paint.setPorterDuffXPFactory(SkBlendMode::kSrc); - paint.addColorTextureProcessor(std::move(proxy), SkColorTypeToGrColorType(this->colorType()), - SkMatrix::I()); + paint.addColorTextureProcessor(std::move(proxy), this->alphaType(), SkMatrix::I()); if (xform) { paint.addColorFragmentProcessor(std::move(xform)); } @@ -383,9 +382,8 @@ sk_sp SkImage::makeTextureImage(GrContext* context, GrMipMapped mipMapp if (GrMipMapped::kNo == mipMapped || proxy->mipMapped() == mipMapped) { return sk_ref_sp(const_cast(this)); } - GrTextureAdjuster adjuster(context, std::move(proxy), - SkColorTypeToGrColorType(this->colorType()), this->alphaType(), - this->uniqueID(), this->colorSpace()); + GrTextureAdjuster adjuster(context, std::move(proxy), this->imageInfo().colorInfo(), + this->uniqueID()); return create_image_from_producer(context, &adjuster, this->alphaType(), this->uniqueID(), mipMapped); } @@ -512,7 +510,7 @@ sk_sp SkImage::MakeCrossContextFromPixmap(GrContext* context, context->priv().flushSurface(proxy.get()); GrGpu* gpu = context->priv().getGpu(); - sk_sp sema = gpu->prepareTextureForCrossContextUsage(texture.get()); + std::unique_ptr sema = gpu->prepareTextureForCrossContextUsage(texture.get()); auto gen = GrBackendTextureImageGenerator::Make(std::move(texture), proxy->origin(), std::move(sema), pixmap->colorType(), diff --git a/third_party/skia/src/image/SkImage_GpuBase.cpp b/third_party/skia/src/image/SkImage_GpuBase.cpp index 58d0eb8617a2..6d849c9f3542 100644 --- a/third_party/skia/src/image/SkImage_GpuBase.cpp +++ b/third_party/skia/src/image/SkImage_GpuBase.cpp @@ -23,13 +23,11 @@ #include "src/image/SkImage_GpuBase.h" #include "src/image/SkReadPixelsRec.h" -SkImage_GpuBase::SkImage_GpuBase(sk_sp context, int width, int height, uint32_t uniqueID, +SkImage_GpuBase::SkImage_GpuBase(sk_sp context, SkISize size, uint32_t uniqueID, SkColorType ct, SkAlphaType at, sk_sp cs) - : INHERITED(SkImageInfo::Make(width, height, ct, at, std::move(cs)), uniqueID) + : INHERITED(SkImageInfo::Make(size, ct, at, std::move(cs)), uniqueID) , fContext(std::move(context)) {} -SkImage_GpuBase::~SkImage_GpuBase() {} - ////////////////////////////////////////////////////////////////////////////////////////////////// #if GR_TEST_UTILS @@ -117,11 +115,10 @@ sk_sp SkImage_GpuBase::onMakeSubset(GrRecordingContext* context, } sk_sp proxy = this->asTextureProxyRef(context); - GrColorType srcColorType = SkColorTypeToGrColorType(this->colorType()); - sk_sp copyProxy = GrSurfaceProxy::Copy( - context, proxy.get(), srcColorType, GrMipMapped::kNo, subset, SkBackingFit::kExact, - proxy->isBudgeted()); + sk_sp copyProxy = + GrSurfaceProxy::Copy(context, proxy.get(), GrMipMapped::kNo, subset, + SkBackingFit::kExact, proxy->isBudgeted()); if (!copyProxy) { return nullptr; @@ -167,8 +164,7 @@ sk_sp SkImage_GpuBase::asTextureProxyRef(GrRecordingContext* con } GrTextureAdjuster adjuster(fContext.get(), this->asTextureProxyRef(context), - SkColorTypeToGrColorType(this->colorType()), this->alphaType(), - this->uniqueID(), this->colorSpace()); + this->imageInfo().colorInfo(), this->uniqueID()); return adjuster.refTextureProxyForParams(params, scaleAdjust); } diff --git a/third_party/skia/src/image/SkImage_GpuBase.h b/third_party/skia/src/image/SkImage_GpuBase.h index c78f7993f4ce..f64633c5109b 100644 --- a/third_party/skia/src/image/SkImage_GpuBase.h +++ b/third_party/skia/src/image/SkImage_GpuBase.h @@ -20,10 +20,6 @@ class SkColorSpace; class SkImage_GpuBase : public SkImage_Base { public: - SkImage_GpuBase(sk_sp, int width, int height, uint32_t uniqueID, SkColorType, - SkAlphaType, sk_sp); - ~SkImage_GpuBase() override; - GrContext* context() const final { return fContext.get(); } bool getROPixels(SkBitmap*, CachingHint) const final; @@ -78,6 +74,9 @@ class SkImage_GpuBase : public SkImage_Base { using PromiseImageTextureDoneProc = SkDeferredDisplayListRecorder::PromiseImageTextureDoneProc; protected: + SkImage_GpuBase(sk_sp, SkISize size, uint32_t uniqueID, SkColorType, SkAlphaType, + sk_sp); + using PromiseImageApiVersion = SkDeferredDisplayListRecorder::PromiseImageApiVersion; // Helper for making a lazy proxy for a promise image. The PromiseDoneProc we be called, // if not null, immediately if this function fails. Othwerwise, it is installed in the diff --git a/third_party/skia/src/image/SkImage_GpuYUVA.cpp b/third_party/skia/src/image/SkImage_GpuYUVA.cpp index 03a7cacd70f7..3470f7e29064 100644 --- a/third_party/skia/src/image/SkImage_GpuYUVA.cpp +++ b/third_party/skia/src/image/SkImage_GpuYUVA.cpp @@ -29,12 +29,12 @@ static constexpr auto kAssumedColorType = kRGBA_8888_SkColorType; -SkImage_GpuYUVA::SkImage_GpuYUVA(sk_sp context, int width, int height, uint32_t uniqueID, +SkImage_GpuYUVA::SkImage_GpuYUVA(sk_sp context, SkISize size, uint32_t uniqueID, SkYUVColorSpace colorSpace, sk_sp proxies[], GrColorType proxyColorTypes[], int numProxies, const SkYUVAIndex yuvaIndices[4], GrSurfaceOrigin origin, sk_sp imageColorSpace) - : INHERITED(std::move(context), width, height, uniqueID, kAssumedColorType, + : INHERITED(std::move(context), size, uniqueID, kAssumedColorType, // If an alpha channel is present we always switch to kPremul. This is because, // although the planar data is always un-premul, the final interleaved RGB image // is/would-be premul. @@ -56,8 +56,7 @@ SkImage_GpuYUVA::SkImage_GpuYUVA(sk_sp context, int width, int height // For onMakeColorSpace() SkImage_GpuYUVA::SkImage_GpuYUVA(const SkImage_GpuYUVA* image, sk_sp targetCS) - : INHERITED(image->fContext, image->width(), image->height(), kNeedNewImageUniqueID, - kAssumedColorType, + : INHERITED(image->fContext, image->dimensions(), kNeedNewImageUniqueID, kAssumedColorType, // If an alpha channel is present we always switch to kPremul. This is because, // although the planar data is always un-premul, the final interleaved RGB image // is/would-be premul. @@ -84,8 +83,6 @@ SkImage_GpuYUVA::SkImage_GpuYUVA(const SkImage_GpuYUVA* image, sk_spfYUVAIndices, 4 * sizeof(SkYUVAIndex)); } -SkImage_GpuYUVA::~SkImage_GpuYUVA() {} - bool SkImage_GpuYUVA::setupMipmapsForPlanes(GrRecordingContext* context) const { // We shouldn't get here if the planes were already flattened to RGBA. SkASSERT(fProxies[0] && !fRGBProxy); @@ -213,10 +210,9 @@ sk_sp SkImage_GpuYUVA::onMakeColorTypeAndColorSpace(GrRecordingContext* } sk_sp SkImage_GpuYUVA::onReinterpretColorSpace(sk_sp newCS) const { - return sk_make_sp(fContext, this->width(), this->height(), - kNeedNewImageUniqueID, fYUVColorSpace, fProxies, - fProxyColorTypes, fNumProxies, fYUVAIndices, fOrigin, - std::move(newCS)); + return sk_make_sp(fContext, this->dimensions(), kNeedNewImageUniqueID, + fYUVColorSpace, fProxies, fProxyColorTypes, fNumProxies, + fYUVAIndices, fOrigin, std::move(newCS)); } ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -244,10 +240,9 @@ sk_sp SkImage::MakeFromYUVATextures(GrContext* ctx, yuvaTextures[i].getBackendFormat(), yuvaIndices[3].fIndex == i); } - return sk_make_sp(sk_ref_sp(ctx), imageSize.width(), imageSize.height(), - kNeedNewImageUniqueID, colorSpace, tempTextureProxies, - proxyColorTypes, numTextures, yuvaIndices, imageOrigin, - imageColorSpace); + return sk_make_sp(sk_ref_sp(ctx), imageSize, kNeedNewImageUniqueID, colorSpace, + tempTextureProxies, proxyColorTypes, numTextures, + yuvaIndices, imageOrigin, imageColorSpace); } sk_sp SkImage::MakeFromYUVAPixmaps( @@ -300,10 +295,9 @@ sk_sp SkImage::MakeFromYUVAPixmaps( proxyColorTypes[i] = SkColorTypeToGrColorType(bmp.colorType()); } - return sk_make_sp(sk_ref_sp(context), imageSize.width(), imageSize.height(), - kNeedNewImageUniqueID, yuvColorSpace, tempTextureProxies, - proxyColorTypes, numPixmaps, yuvaIndices, imageOrigin, - imageColorSpace); + return sk_make_sp(sk_ref_sp(context), imageSize, kNeedNewImageUniqueID, + yuvColorSpace, tempTextureProxies, proxyColorTypes, + numPixmaps, yuvaIndices, imageOrigin, imageColorSpace); } @@ -393,7 +387,7 @@ sk_sp SkImage_GpuYUVA::MakePromiseYUVATexture( proxyColorTypes[texIdx] = colorType; } - return sk_make_sp(sk_ref_sp(context), imageWidth, imageHeight, + return sk_make_sp(sk_ref_sp(context), SkISize{imageWidth, imageHeight}, kNeedNewImageUniqueID, yuvColorSpace, proxies, proxyColorTypes, numTextures, yuvaIndices, imageOrigin, std::move(imageColorSpace)); diff --git a/third_party/skia/src/image/SkImage_GpuYUVA.h b/third_party/skia/src/image/SkImage_GpuYUVA.h index eac04e4f25b2..6ed7d796ec9f 100644 --- a/third_party/skia/src/image/SkImage_GpuYUVA.h +++ b/third_party/skia/src/image/SkImage_GpuYUVA.h @@ -24,10 +24,9 @@ class SkImage_GpuYUVA : public SkImage_GpuBase { public: friend class GrYUVAImageTextureMaker; - SkImage_GpuYUVA(sk_sp, int width, int height, uint32_t uniqueID, SkYUVColorSpace, + SkImage_GpuYUVA(sk_sp, SkISize size, uint32_t uniqueID, SkYUVColorSpace, sk_sp proxies[], GrColorType proxyColorTypes[], int numProxies, const SkYUVAIndex[4], GrSurfaceOrigin, sk_sp); - ~SkImage_GpuYUVA() override; GrSemaphoresSubmitted onFlush(GrContext*, const GrFlushInfo&) override; diff --git a/third_party/skia/src/image/SkImage_Raster.cpp b/third_party/skia/src/image/SkImage_Raster.cpp index 5992af798db9..059ad77e0739 100644 --- a/third_party/skia/src/image/SkImage_Raster.cpp +++ b/third_party/skia/src/image/SkImage_Raster.cpp @@ -176,9 +176,8 @@ sk_sp SkImage_Raster::asTextureProxyRef(GrRecordingContext* cont uint32_t uniqueID; sk_sp tex = this->refPinnedTextureProxy(context, &uniqueID); if (tex) { - GrTextureAdjuster adjuster(context, fPinnedProxy, - SkColorTypeToGrColorType(fBitmap.colorType()), - fBitmap.alphaType(), fPinnedUniqueID, fBitmap.colorSpace()); + GrTextureAdjuster adjuster(context, fPinnedProxy, fBitmap.info().colorInfo(), + fPinnedUniqueID); return adjuster.refTextureProxyForParams(params, scaleAdjust); } diff --git a/third_party/skia/src/image/SkSurface.cpp b/third_party/skia/src/image/SkSurface.cpp index 624760875058..766313956d1f 100644 --- a/third_party/skia/src/image/SkSurface.cpp +++ b/third_party/skia/src/image/SkSurface.cpp @@ -361,60 +361,6 @@ bool SkSurface::readPixels(const SkBitmap& bitmap, int srcX, int srcY) { return bitmap.peekPixels(&pm) && this->readPixels(pm, srcX, srcY); } -// Stuff to keep the legacy async readback APIs working on top of the new implementation. -namespace { -struct BridgeContext { - SkSurface::ReadPixelsContext fClientContext; - SkSurface::LegacyReadPixelsCallback* fClientCallback; -}; -struct BridgeContextYUV420 { - SkSurface::ReadPixelsContext fClientContext; - SkSurface::LegacyReadPixelsCallbackYUV420* fClientCallback; -}; -} // anonymous namespace - -static void bridge_callback(SkSurface::ReadPixelsContext context, - std::unique_ptr result) { - auto bridgeContext = static_cast(context); - if (!result || result->count() != 1) { - bridgeContext->fClientCallback(bridgeContext->fClientContext, nullptr, 0); - } else { - bridgeContext->fClientCallback(bridgeContext->fClientContext, result->data(0), - result->rowBytes(0)); - } - delete bridgeContext; -} - -static void bridge_callback_yuv420(SkSurface::ReadPixelsContext context, - std::unique_ptr result) { - auto bridgeContext = static_cast(context); - if (!result || result->count() != 3) { - bridgeContext->fClientCallback(bridgeContext->fClientContext, nullptr, 0); - } else { - const void* data[] = {result->data(0), result->data(1), result->data(2)}; - size_t rowBytes[] = {result->rowBytes(0), result->rowBytes(1), result->rowBytes(2)}; - bridgeContext->fClientCallback(bridgeContext->fClientContext, data, rowBytes); - } - delete bridgeContext; -} - -void SkSurface::asyncRescaleAndReadPixels(const SkImageInfo& info, - const SkIRect& srcRect, - RescaleGamma rescaleGamma, - SkFilterQuality rescaleQuality, - LegacyReadPixelsCallback callback, - ReadPixelsContext context) { - if (!SkIRect::MakeWH(this->width(), this->height()).contains(srcRect) || - !SkImageInfoIsValid(info)) { - callback(context, nullptr, 0); - return; - } - - auto bridgeContext = new BridgeContext{context, callback}; - asSB(this)->onAsyncRescaleAndReadPixels(info, srcRect, rescaleGamma, rescaleQuality, - bridge_callback, bridgeContext); -} - void SkSurface::asyncRescaleAndReadPixels(const SkImageInfo& info, const SkIRect& srcRect, RescaleGamma rescaleGamma, @@ -430,29 +376,6 @@ void SkSurface::asyncRescaleAndReadPixels(const SkImageInfo& info, info, srcRect, rescaleGamma, rescaleQuality, callback, context); } -void SkSurface::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, - sk_sp dstColorSpace, - const SkIRect& srcRect, - int dstW, int dstH, - RescaleGamma rescaleGamma, - SkFilterQuality rescaleQuality, - LegacyReadPixelsCallbackYUV420 callback, - ReadPixelsContext context) { - if (!SkIRect::MakeWH(this->width(), this->height()).contains(srcRect) || (dstW & 0b1) || - (dstH & 0b1)) { - callback(context, nullptr, nullptr); - return; - } - auto bridgeContext = new BridgeContextYUV420{context, callback}; - asSB(this)->onAsyncRescaleAndReadPixelsYUV420(yuvColorSpace, - std::move(dstColorSpace), srcRect, - {dstW, dstH}, - rescaleGamma, - rescaleQuality, - bridge_callback_yuv420, - bridgeContext); -} - void SkSurface::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, sk_sp dstColorSpace, const SkIRect& srcRect, diff --git a/third_party/skia/src/image/SkSurface_Gpu.cpp b/third_party/skia/src/image/SkSurface_Gpu.cpp index 623c54eab02d..6eb3fda7fefa 100644 --- a/third_party/skia/src/image/SkSurface_Gpu.cpp +++ b/third_party/skia/src/image/SkSurface_Gpu.cpp @@ -104,16 +104,16 @@ sk_sp SkSurface_Gpu::onNewImageSnapshot(const SkIRect* subset) { sk_sp srcProxy = rtc->asTextureProxyRef(); if (subset) { - srcProxy = GrSurfaceProxy::Copy(ctx, rtc->asSurfaceProxy(), rtc->colorInfo().colorType(), - rtc->mipMapped(), *subset, SkBackingFit::kExact, budgeted); + srcProxy = GrSurfaceProxy::Copy(ctx, rtc->asSurfaceProxy(), rtc->mipMapped(), *subset, + SkBackingFit::kExact, budgeted); } else if (!srcProxy || rtc->priv().refsWrappedObjects()) { // If the original render target is a buffer originally created by the client, then we don't // want to ever retarget the SkSurface at another buffer we create. Force a copy now to avoid // copy-on-write. SkASSERT(rtc->origin() == rtc->asSurfaceProxy()->origin()); - srcProxy = GrSurfaceProxy::Copy(ctx, rtc->asSurfaceProxy(), rtc->colorInfo().colorType(), - rtc->mipMapped(), SkBackingFit::kExact, budgeted); + srcProxy = GrSurfaceProxy::Copy(ctx, rtc->asSurfaceProxy(), rtc->mipMapped(), + SkBackingFit::kExact, budgeted); } const SkImageInfo info = fDevice->imageInfo(); diff --git a/third_party/skia/src/image/SkSurface_GpuMtl.mm b/third_party/skia/src/image/SkSurface_GpuMtl.mm index dc410886f1b2..d3e42bd335de 100644 --- a/third_party/skia/src/image/SkSurface_GpuMtl.mm +++ b/third_party/skia/src/image/SkSurface_GpuMtl.mm @@ -5,13 +5,23 @@ * found in the LICENSE file. */ +#include "include/core/SkRefCnt.h" #include "include/core/SkSurface.h" #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContext.h" #include "include/gpu/mtl/GrMtlTypes.h" +#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrProxyProvider.h" +#include "src/gpu/GrRenderTargetContext.h" +#include "src/gpu/GrResourceProvider.h" +#include "src/gpu/GrResourceProviderPriv.h" +#include "src/image/SkSurface_Gpu.h" #if SK_SUPPORT_GPU +#include "include/gpu/GrSurface.h" +#include "src/gpu/mtl/GrMtlTextureRenderTarget.h" + #ifdef SK_METAL #import #import @@ -24,37 +34,78 @@ sk_sp colorSpace, const SkSurfaceProps* surfaceProps, GrMTLHandle* drawable) { - // TODO: Apple recommends grabbing the drawable (which we're implicitly doing here) - // for as little time as possible. I'm not sure it matters for our test apps, but - // you can get better throughput by doing any offscreen renders, texture uploads, or - // other non-dependant tasks first before grabbing the drawable. + GrProxyProvider* proxyProvider = context->priv().proxyProvider(); + const GrCaps* caps = context->priv().caps(); + CAMetalLayer* metalLayer = (__bridge CAMetalLayer*)layer; - id currentDrawable = [metalLayer nextDrawable]; - - GrMtlTextureInfo fbInfo; - fbInfo.fTexture.retain((__bridge const void*)(currentDrawable.texture)); - - CGSize size = [metalLayer drawableSize]; - sk_sp surface; - if (sampleCnt <= 1) { - GrBackendRenderTarget backendRT(size.width, - size.height, - sampleCnt, - fbInfo); - - surface = SkSurface::MakeFromBackendRenderTarget(context, backendRT, origin, colorType, - colorSpace, surfaceProps); - } else { - GrBackendTexture backendTexture(size.width, - size.height, - GrMipMapped::kNo, - fbInfo); - - surface = SkSurface::MakeFromBackendTexture(context, backendTexture, origin, sampleCnt, - colorType, colorSpace, surfaceProps); + GrBackendFormat backendFormat = GrBackendFormat::MakeMtl(metalLayer.pixelFormat); + + GrColorType grColorType = SkColorTypeToGrColorType(colorType); + + GrPixelConfig config = caps->getConfigFromBackendFormat(backendFormat, grColorType); + if (config == kUnknown_GrPixelConfig) { + return nullptr; } - *drawable = (__bridge_retained GrMTLHandle) currentDrawable; + GrSurfaceDesc desc; + desc.fWidth = metalLayer.drawableSize.width; + desc.fHeight = metalLayer.drawableSize.height; + desc.fConfig = config; + + GrProxyProvider::TextureInfo texInfo; + texInfo.fMipMapped = GrMipMapped::kNo; + texInfo.fTextureType = GrTextureType::k2D; + + sk_sp proxy = proxyProvider->createLazyRenderTargetProxy( + [layer, drawable, sampleCnt, config](GrResourceProvider* resourceProvider) { + CAMetalLayer* metalLayer = (__bridge CAMetalLayer*)layer; + id currentDrawable = [metalLayer nextDrawable]; + + GrSurfaceDesc desc; + desc.fWidth = metalLayer.drawableSize.width; + desc.fHeight = metalLayer.drawableSize.height; + desc.fConfig = config; + + GrMtlGpu* mtlGpu = (GrMtlGpu*) resourceProvider->priv().gpu(); + sk_sp surface; + if (metalLayer.framebufferOnly) { + surface = GrMtlRenderTarget::MakeWrappedRenderTarget( + mtlGpu, desc, sampleCnt, currentDrawable.texture); + } else { + surface = GrMtlTextureRenderTarget::MakeWrappedTextureRenderTarget( + mtlGpu, desc, sampleCnt, currentDrawable.texture, + GrWrapCacheable::kNo); + } + if (surface && sampleCnt > 1) { + surface->setRequiresManualMSAAResolve(); + } + + *drawable = (__bridge_retained GrMTLHandle) currentDrawable; + return GrSurfaceProxy::LazyCallbackResult(std::move(surface)); + }, + backendFormat, + desc, + sampleCnt, + origin, + sampleCnt > 1 ? GrInternalSurfaceFlags::kRequiresManualMSAAResolve + : GrInternalSurfaceFlags::kNone, + metalLayer.framebufferOnly ? nullptr : &texInfo, + GrMipMapsStatus::kNotAllocated, + SkBackingFit::kExact, + SkBudgeted::kYes, + GrProtected::kNo, + false, + GrSurfaceProxy::UseAllocator::kYes); + + auto c = context->priv().makeWrappedSurfaceContext(std::move(proxy), + grColorType, + kPremul_SkAlphaType, + colorSpace, + surfaceProps); + SkASSERT(c->asRenderTargetContext()); + std::unique_ptr rtc(c.release()->asRenderTargetContext()); + + sk_sp surface = SkSurface_Gpu::MakeWrappedRenderTarget(context, std::move(rtc)); return surface; } #endif diff --git a/third_party/skia/src/images/SkJPEGWriteUtility.h b/third_party/skia/src/images/SkJPEGWriteUtility.h index 356b08674b49..781e9dc66fbb 100644 --- a/third_party/skia/src/images/SkJPEGWriteUtility.h +++ b/third_party/skia/src/images/SkJPEGWriteUtility.h @@ -19,13 +19,13 @@ extern "C" { #include -void SK_API skjpeg_error_exit(j_common_ptr cinfo); +void skjpeg_error_exit(j_common_ptr cinfo); ///////////////////////////////////////////////////////////////////////////// /* Our destination struct for directing decompressed pixels to our stream * object. */ -struct SK_API skjpeg_destination_mgr : jpeg_destination_mgr { +struct SK_SPI skjpeg_destination_mgr : jpeg_destination_mgr { skjpeg_destination_mgr(SkWStream* stream); SkWStream* fStream; diff --git a/third_party/skia/src/jumper/SkJumper.cpp b/third_party/skia/src/jumper/SkJumper.cpp deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/jumper/SkJumper_stages.cpp b/third_party/skia/src/jumper/SkJumper_stages.cpp deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/jumper/SkJumper_vectors.h b/third_party/skia/src/jumper/SkJumper_vectors.h deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/opts/SkBitmapProcState_opts.h b/third_party/skia/src/opts/SkBitmapProcState_opts.h index 85313bf99df7..e1bd887c36e1 100644 --- a/third_party/skia/src/opts/SkBitmapProcState_opts.h +++ b/third_party/skia/src/opts/SkBitmapProcState_opts.h @@ -497,6 +497,40 @@ static void decode_packed_coordinates_and_weight(U32 packed, Out* v0, Out* v1, O #endif +#if defined(SK_ARM_HAS_NEON) + /*not static*/ inline + void S32_alpha_D32_filter_DXDY(const SkBitmapProcState& s, + const uint32_t* xy, int count, SkPMColor* colors) { + SkASSERT(count > 0 && colors != nullptr); + SkASSERT(s.fFilterQuality != kNone_SkFilterQuality); + SkASSERT(4 == s.fPixmap.info().bytesPerPixel()); + SkASSERT(s.fAlphaScale <= 256); + + auto src = (const char*)s.fPixmap.addr(); + size_t rb = s.fPixmap.rowBytes(); + + while (count --> 0) { + int y0, y1, wy, + x0, x1, wx; + decode_packed_coordinates_and_weight(*xy++, &y0, &y1, &wy); + decode_packed_coordinates_and_weight(*xy++, &x0, &x1, &wx); + + auto row0 = (const uint32_t*)(src + y0*rb), + row1 = (const uint32_t*)(src + y1*rb); + + filter_and_scale_by_alpha(wx, wy, + row0[x0], row0[x1], + row1[x0], row1[x1], + colors++, + s.fAlphaScale); + } + } +#else + // It's not yet clear whether it's worthwhile specializing for SSE2/SSSE3/AVX2. + constexpr static void (*S32_alpha_D32_filter_DXDY)(const SkBitmapProcState&, + const uint32_t*, int, SkPMColor*) = nullptr; +#endif + } // namespace SK_OPTS_NS #endif diff --git a/third_party/skia/src/opts/SkRasterPipeline_opts.h b/third_party/skia/src/opts/SkRasterPipeline_opts.h index 5a85acd1f864..692530828f6b 100644 --- a/third_party/skia/src/opts/SkRasterPipeline_opts.h +++ b/third_party/skia/src/opts/SkRasterPipeline_opts.h @@ -1675,6 +1675,10 @@ STAGE(unpremul, Ctx::None) { STAGE(force_opaque , Ctx::None) { a = 1; } STAGE(force_opaque_dst, Ctx::None) { da = 1; } +// Clamp x to [0,1], both sides inclusive (think, gradients). +// Even repeat and mirror funnel through a clamp to handle bad inputs like +Inf, NaN. +SI F clamp_01(F v) { return min(max(0, v), 1); } + STAGE(rgb_to_hsl, Ctx::None) { F mx = max(r, max(g,b)), mn = min(r, min(g,b)), @@ -1696,26 +1700,21 @@ STAGE(rgb_to_hsl, Ctx::None) { b = l; } STAGE(hsl_to_rgb, Ctx::None) { + // See GrRGBToHSLFilterEffect.fp + F h = r, s = g, - l = b; - - F q = l + if_then_else(l >= 0.5f, s - l*s, l*s), - p = 2.0f*l - q; + l = b, + c = (1.0f - abs_(2.0f * l - 1)) * s; - auto hue_to_rgb = [&](F t) { - t = fract(t); - - F r = p; - r = if_then_else(t >= 4/6.0f, r, p + (q-p)*(4.0f - 6.0f*t)); - r = if_then_else(t >= 3/6.0f, r, q); - r = if_then_else(t >= 1/6.0f, r, p + (q-p)*( 6.0f*t)); - return r; + auto hue_to_rgb = [&](F hue) { + F q = clamp_01(abs_(fract(hue) * 6.0f - 3.0f) - 1.0f); + return (q - 0.5f) * c + l; }; - r = if_then_else(s == 0, l, hue_to_rgb(h + (1/3.0f))); - g = if_then_else(s == 0, l, hue_to_rgb(h )); - b = if_then_else(s == 0, l, hue_to_rgb(h - (1/3.0f))); + r = hue_to_rgb(h + 0.0f/3.0f); + g = hue_to_rgb(h + 2.0f/3.0f); + b = hue_to_rgb(h + 1.0f/3.0f); } // Derive alpha's coverage from rgb coverage and the values of src and dst alpha. @@ -2331,10 +2330,6 @@ STAGE(repeat_y, const SkRasterPipeline_TileCtx* ctx) { g = exclusive_repeat(g, c STAGE(mirror_x, const SkRasterPipeline_TileCtx* ctx) { r = exclusive_mirror(r, ctx); } STAGE(mirror_y, const SkRasterPipeline_TileCtx* ctx) { g = exclusive_mirror(g, ctx); } -// Clamp x to [0,1], both sides inclusive (think, gradients). -// Even repeat and mirror funnel through a clamp to handle bad inputs like +Inf, NaN. -SI F clamp_01(F v) { return min(max(0, v), 1); } - STAGE( clamp_x_1, Ctx::None) { r = clamp_01(r); } STAGE(repeat_x_1, Ctx::None) { r = clamp_01(r - floor_(r)); } STAGE(mirror_x_1, Ctx::None) { r = clamp_01(abs_( (r-1.0f) - two(floor_((r-1.0f)*0.5f)) - 1.0f )); } diff --git a/third_party/skia/src/pathops/SkOpBuilder.cpp b/third_party/skia/src/pathops/SkOpBuilder.cpp index 9dac160495ef..8a9eccd38dd0 100644 --- a/third_party/skia/src/pathops/SkOpBuilder.cpp +++ b/third_party/skia/src/pathops/SkOpBuilder.cpp @@ -36,11 +36,11 @@ void SkOpBuilder::ReversePath(SkPath* path) { } bool SkOpBuilder::FixWinding(SkPath* path) { - SkPath::FillType fillType = path->getFillType(); - if (fillType == SkPath::kInverseEvenOdd_FillType) { - fillType = SkPath::kInverseWinding_FillType; - } else if (fillType == SkPath::kEvenOdd_FillType) { - fillType = SkPath::kWinding_FillType; + SkPathFillType fillType = path->getNewFillType(); + if (fillType == SkPathFillType::kInverseEvenOdd) { + fillType = SkPathFillType::kInverseWinding; + } else if (fillType == SkPathFillType::kEvenOdd) { + fillType = SkPathFillType::kWinding; } SkPathPriv::FirstDirection dir; if (one_contour(*path) && SkPathPriv::CheapComputeFirstDirection(*path, &dir)) { diff --git a/third_party/skia/src/pathops/SkOpEdgeBuilder.cpp b/third_party/skia/src/pathops/SkOpEdgeBuilder.cpp index 3efb0e03260e..7e97c03b5f7c 100644 --- a/third_party/skia/src/pathops/SkOpEdgeBuilder.cpp +++ b/third_party/skia/src/pathops/SkOpEdgeBuilder.cpp @@ -10,7 +10,7 @@ void SkOpEdgeBuilder::init() { fOperand = false; - fXorMask[0] = fXorMask[1] = (fPath->getFillType() & 1) ? kEvenOdd_PathOpsMask + fXorMask[0] = fXorMask[1] = ((int)fPath->getFillType() & 1) ? kEvenOdd_PathOpsMask : kWinding_PathOpsMask; fUnparseable = false; fSecondHalf = preFetch(); @@ -40,7 +40,7 @@ void SkOpEdgeBuilder::addOperand(const SkPath& path) { SkASSERT(fPathVerbs.count() > 0 && fPathVerbs.end()[-1] == SkPath::kDone_Verb); fPathVerbs.pop(); fPath = &path; - fXorMask[1] = (fPath->getFillType() & 1) ? kEvenOdd_PathOpsMask + fXorMask[1] = ((int)fPath->getFillType() & 1) ? kEvenOdd_PathOpsMask : kWinding_PathOpsMask; preFetch(); } diff --git a/third_party/skia/src/pathops/SkPathOpsAsWinding.cpp b/third_party/skia/src/pathops/SkPathOpsAsWinding.cpp index 80e52bee2a46..3f7050d0c0da 100644 --- a/third_party/skia/src/pathops/SkPathOpsAsWinding.cpp +++ b/third_party/skia/src/pathops/SkPathOpsAsWinding.cpp @@ -13,7 +13,7 @@ using std::vector; struct Contour { - enum class Direction { // SkPath::Direction doesn't have 'none' state + enum class Direction { // SkPathDirection doesn't have 'none' state kCCW = -1, kNone, kCW, @@ -367,23 +367,23 @@ class OpAsWinding { const SkPath& fPath; }; -static bool set_result_path(SkPath* result, const SkPath& path, SkPath::FillType fillType) { +static bool set_result_path(SkPath* result, const SkPath& path, SkPathFillType fillType) { *result = path; result->setFillType(fillType); return true; } -bool SK_API AsWinding(const SkPath& path, SkPath* result) { +bool AsWinding(const SkPath& path, SkPath* result) { if (!path.isFinite()) { return false; } - SkPath::FillType fillType = path.getFillType(); - if (fillType == SkPath::kWinding_FillType - || fillType == SkPath::kInverseWinding_FillType ) { + SkPathFillType fillType = path.getNewFillType(); + if (fillType == SkPathFillType::kWinding + || fillType == SkPathFillType::kInverseWinding ) { return set_result_path(result, path, fillType); } - fillType = path.isInverseFillType() ? SkPath::kInverseWinding_FillType : - SkPath::kWinding_FillType; + fillType = path.isInverseFillType() ? SkPathFillType::kInverseWinding : + SkPathFillType::kWinding; if (path.isEmpty() || path.isConvex()) { return set_result_path(result, path, fillType); } diff --git a/third_party/skia/src/pathops/SkPathOpsDebug.cpp b/third_party/skia/src/pathops/SkPathOpsDebug.cpp index 7ee44deb9d7b..b610e9bfb470 100644 --- a/third_party/skia/src/pathops/SkPathOpsDebug.cpp +++ b/third_party/skia/src/pathops/SkPathOpsDebug.cpp @@ -2901,10 +2901,10 @@ static void showPathContours(SkPath::RawIter& iter, const char* pathName) { } static const char* gFillTypeStr[] = { - "kWinding_FillType", - "kEvenOdd_FillType", - "kInverseWinding_FillType", - "kInverseEvenOdd_FillType" + "kWinding", + "kEvenOdd", + "kInverseWinding", + "kInverseEvenOdd" }; void SkPathOpsDebug::ShowOnePath(const SkPath& path, const char* name, bool includeDeclaration) { @@ -2914,25 +2914,25 @@ void SkPathOpsDebug::ShowOnePath(const SkPath& path, const char* name, bool incl int rectCount = path.isRectContours() ? path.rectContours(nullptr, nullptr) : 0; if (rectCount > 0) { SkTDArray rects; - SkTDArray directions; + SkTDArray directions; rects.setCount(rectCount); directions.setCount(rectCount); path.rectContours(rects.begin(), directions.begin()); for (int contour = 0; contour < rectCount; ++contour) { const SkRect& rect = rects[contour]; SkDebugf("path.addRect(%1.9g, %1.9g, %1.9g, %1.9g, %s);\n", rect.fLeft, rect.fTop, - rect.fRight, rect.fBottom, directions[contour] == SkPath::kCCW_Direction - ? "SkPath::kCCW_Direction" : "SkPath::kCW_Direction"); + rect.fRight, rect.fBottom, directions[contour] == SkPathDirection::kCCW + ? "SkPathDirection::kCCW" : "SkPathDirection::kCW"); } return; } #endif - SkPath::FillType fillType = path.getFillType(); - SkASSERT(fillType >= SkPath::kWinding_FillType && fillType <= SkPath::kInverseEvenOdd_FillType); + SkPathFillType fillType = path.getNewFillType(); + SkASSERT(fillType >= SkPathFillType::kWinding && fillType <= SkPathFillType::kInverseEvenOdd); if (includeDeclaration) { SkDebugf(" SkPath %s;\n", name); } - SkDebugf(" %s.setFillType(SkPath::%s);\n", name, gFillTypeStr[fillType]); + SkDebugf(" %s.setFillType(SkPath::%s);\n", name, gFillTypeStr[(int)fillType]); iter.setPath(path); showPathContours(iter, name); } diff --git a/third_party/skia/src/pathops/SkPathOpsOp.cpp b/third_party/skia/src/pathops/SkPathOpsOp.cpp index 825ae7b1977a..2c89f35b22bb 100644 --- a/third_party/skia/src/pathops/SkPathOpsOp.cpp +++ b/third_party/skia/src/pathops/SkPathOpsOp.cpp @@ -248,8 +248,8 @@ bool OpDebug(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result #endif op = gOpInverse[op][one.isInverseFillType()][two.isInverseFillType()]; bool inverseFill = gOutInverse[op][one.isInverseFillType()][two.isInverseFillType()]; - SkPath::FillType fillType = inverseFill ? SkPath::kInverseEvenOdd_FillType : - SkPath::kEvenOdd_FillType; + SkPathFillType fillType = inverseFill ? SkPathFillType::kInverseEvenOdd : + SkPathFillType::kEvenOdd; SkRect rect1, rect2; if (kIntersect_SkPathOp == op && one.isRect(&rect1) && two.isRect(&rect2)) { result->reset(); diff --git a/third_party/skia/src/pathops/SkPathOpsSimplify.cpp b/third_party/skia/src/pathops/SkPathOpsSimplify.cpp index f079b50a8dd8..6c522f430ae3 100644 --- a/third_party/skia/src/pathops/SkPathOpsSimplify.cpp +++ b/third_party/skia/src/pathops/SkPathOpsSimplify.cpp @@ -140,8 +140,8 @@ static bool bridgeXor(SkOpContourHead* contourList, SkPathWriter* writer) { bool SimplifyDebug(const SkPath& path, SkPath* result SkDEBUGPARAMS(bool skipAssert) SkDEBUGPARAMS(const char* testName)) { // returns 1 for evenodd, -1 for winding, regardless of inverse-ness - SkPath::FillType fillType = path.isInverseFillType() ? SkPath::kInverseEvenOdd_FillType - : SkPath::kEvenOdd_FillType; + SkPathFillType fillType = path.isInverseFillType() ? SkPathFillType::kInverseEvenOdd + : SkPathFillType::kEvenOdd; if (path.isConvex()) { if (result != &path) { *result = path; diff --git a/third_party/skia/src/pdf/SkPDFDevice.cpp b/third_party/skia/src/pdf/SkPDFDevice.cpp index 2ac998f7570d..7e885099ae76 100644 --- a/third_party/skia/src/pdf/SkPDFDevice.cpp +++ b/third_party/skia/src/pdf/SkPDFDevice.cpp @@ -157,19 +157,11 @@ static SkTCopyOnFirstWrite clean_paint(const SkPaint& srcPaint) { { paint.writable()->setBlendMode(SkBlendMode::kSrcOver); } - // If the paint has a color filter, apply the color filter to the shader or the - // paint color. Remove the color filter. - if (SkColorFilter* cf = paint->getColorFilter()) { - SkPaint* p = paint.writable(); - if (SkShader* shader = paint->getShader()) { - p->setShader(shader->makeWithColorFilter(paint->refColorFilter())); - } else { - SkColorSpace* dstCS = sk_srgb_singleton(); // don't know PDF's space, so use srgb - SkColor4f newColor = cf->filterColor4f(p->getColor4f(), sk_srgb_singleton(), dstCS); - p->setColor4f(newColor, dstCS); - } - p->setColorFilter(nullptr); + if (paint->getColorFilter()) { + // We assume here that PDFs all draw in sRGB. + SkPaintPriv::RemoveColorFilter(paint.writable(), sk_srgb_singleton()); } + SkASSERT(!paint->getColorFilter()); return paint; } @@ -225,7 +217,7 @@ class ScopedContentEntry { fDevice->setUpContentEntry(clipStack, matrix, paint, textScale, &fDstFormXObject); } ScopedContentEntry(SkPDFDevice* dev, const SkPaint& paint, SkScalar textScale = 0) - : ScopedContentEntry(dev, &dev->cs(), dev->ctm(), paint, textScale) {} + : ScopedContentEntry(dev, &dev->cs(), dev->localToDevice(), paint, textScale) {} ~ScopedContentEntry() { if (fContentStream) { @@ -321,7 +313,7 @@ void SkPDFDevice::drawAnnotation(const SkRect& rect, const char key[], SkData* v return; } if (!strcmp(SkAnnotationKeys::Define_Named_Dest_Key(), key)) { - SkPoint p = deviceOffset + this->ctm().mapXY(rect.x(), rect.y()); + SkPoint p = deviceOffset + this->localToDevice().mapXY(rect.x(), rect.y()); pageXform.mapPoints(&p, 1); auto pg = fDocument->currentPage(); fDocument->fNamedDestinations.push_back(SkPDFNamedDestination{sk_ref_sp(value), p, pg}); @@ -330,7 +322,7 @@ void SkPDFDevice::drawAnnotation(const SkRect& rect, const char key[], SkData* v } // Convert to path to handle non-90-degree rotations. SkPath path = to_path(rect); - path.transform(this->ctm(), &path); + path.transform(this->localToDevice(), &path); SkPath clip; (void)this->cs().asPath(&clip); Op(clip, path, kIntersect_SkPathOp, &path); @@ -351,7 +343,7 @@ void SkPDFDevice::drawAnnotation(const SkRect& rect, const char key[], SkData* v void SkPDFDevice::drawPaint(const SkPaint& srcPaint) { SkMatrix inverse; - if (!this->ctm().invert(&inverse)) { + if (!this->localToDevice().invert(&inverse)) { return; } SkRect bbox = this->cs().bounds(this->bounds()); @@ -388,7 +380,7 @@ void SkPDFDevice::drawPoints(SkCanvas::PointMode mode, // of multiple calls to setUpContentEntry it causes. if (paint->getPathEffect()) { draw_points(mode, count, points, *paint, - this->devClipBounds(), this->ctm(), this); + this->devClipBounds(), this->localToDevice(), this); return; } @@ -449,23 +441,23 @@ void SkPDFDevice::drawPoints(SkCanvas::PointMode mode, void SkPDFDevice::drawRect(const SkRect& rect, const SkPaint& paint) { SkRect r = rect; r.sort(); - this->internalDrawPath(this->cs(), this->ctm(), to_path(r), paint, true); + this->internalDrawPath(this->cs(), this->localToDevice(), to_path(r), paint, true); } void SkPDFDevice::drawRRect(const SkRRect& rrect, const SkPaint& paint) { SkPath path; path.addRRect(rrect); - this->internalDrawPath(this->cs(), this->ctm(), path, paint, true); + this->internalDrawPath(this->cs(), this->localToDevice(), path, paint, true); } void SkPDFDevice::drawOval(const SkRect& oval, const SkPaint& paint) { SkPath path; path.addOval(oval); - this->internalDrawPath(this->cs(), this->ctm(), path, paint, true); + this->internalDrawPath(this->cs(), this->localToDevice(), path, paint, true); } void SkPDFDevice::drawPath(const SkPath& path, const SkPaint& paint, bool pathIsMutable) { - this->internalDrawPath(this->cs(), this->ctm(), path, paint, pathIsMutable); + this->internalDrawPath(this->cs(), this->localToDevice(), path, paint, pathIsMutable); } void SkPDFDevice::internalDrawPathWithFilter(const SkClipStack& clipStack, @@ -514,7 +506,7 @@ void SkPDFDevice::internalDrawPathWithFilter(const SkClipStack& clipStack, maskDevice->makeFormXObjectFromDevice(dstMaskBounds, true), false, SkPDFGraphicState::kLuminosity_SMaskMode, fDocument), content.stream()); SkPDFUtils::AppendRectangle(SkRect::Make(dstMaskBounds), content.stream()); - SkPDFUtils::PaintPath(SkPaint::kFill_Style, path.getFillType(), content.stream()); + SkPDFUtils::PaintPath(SkPaint::kFill_Style, path.getNewFillType(), content.stream()); this->clearMaskOnGraphicState(content.stream()); } @@ -601,7 +593,7 @@ void SkPDFDevice::internalDrawPath(const SkClipStack& clipStack, paint->getStrokeCap() != SkPaint::kSquare_Cap); SkPDFUtils::EmitPath(*pathPtr, paint->getStyle(), consumeDegeratePathSegments, content.stream(), tolerance); - SkPDFUtils::PaintPath(paint->getStyle(), pathPtr->getFillType(), content.stream()); + SkPDFUtils::PaintPath(paint->getStyle(), pathPtr->getNewFillType(), content.stream()); } //////////////////////////////////////////////////////////////////////////////// @@ -613,7 +605,7 @@ void SkPDFDevice::drawImageRect(const SkImage* image, SkCanvas::SrcRectConstraint) { SkASSERT(image); this->internalDrawImageRect(SkKeyedImage(sk_ref_sp(const_cast(image))), - src, dst, paint, this->ctm()); + src, dst, paint, this->localToDevice()); } void SkPDFDevice::drawBitmapRect(const SkBitmap& bm, @@ -622,7 +614,7 @@ void SkPDFDevice::drawBitmapRect(const SkBitmap& bm, const SkPaint& paint, SkCanvas::SrcRectConstraint) { SkASSERT(!bm.drawsNothing()); - this->internalDrawImageRect(SkKeyedImage(bm), src, dst, paint, this->ctm()); + this->internalDrawImageRect(SkKeyedImage(bm), src, dst, paint, this->localToDevice()); } void SkPDFDevice::drawSprite(const SkBitmap& bm, int x, int y, const SkPaint& paint) { @@ -751,7 +743,7 @@ void SkPDFDevice::drawGlyphRunAsPath( } rec->fPos += 1; // move to the next glyph's position }, &rec); - this->internalDrawPath(this->cs(), this->ctm(), path, runPaint, true); + this->internalDrawPath(this->cs(), this->localToDevice(), path, runPaint, true); SkFont transparentFont = glyphRun.font(); transparentFont.setEmbolden(false); // Stop Recursion @@ -760,11 +752,9 @@ void SkPDFDevice::drawGlyphRunAsPath( SkPaint transparent; transparent.setColor(SK_ColorTRANSPARENT); - if (this->ctm().hasPerspective()) { - SkMatrix prevCTM = this->ctm(); - this->setCTM(SkMatrix::I()); + if (this->localToDevice().hasPerspective()) { + SkAutoDeviceTransformRestore adr(this, SkMatrix::I()); this->internalDrawGlyphRun(tmpGlyphRun, offset, transparent); - this->setCTM(prevCTM); } else { this->internalDrawGlyphRun(tmpGlyphRun, offset, transparent); } @@ -800,7 +790,7 @@ void SkPDFDevice::internalDrawGlyphRun( if (runPaint.getPathEffect() || runPaint.getMaskFilter() || glyphRunFont.isEmbolden() - || this->ctm().hasPerspective() + || this->localToDevice().hasPerspective() || SkPaint::kFill_Style != runPaint.getStyle()) { // Stroked Text doesn't work well with Type3 fonts. this->drawGlyphRunAsPath(glyphRun, offset, runPaint); @@ -916,7 +906,7 @@ void SkPDFDevice::internalDrawGlyphRun( // Do a glyph-by-glyph bounds-reject if positions are absolute. SkRect glyphBounds = get_glyph_bounds_device_space( glyphs[index], textScaleX, textScaleY, - xy + offset, this->ctm()); + xy + offset, this->localToDevice()); if (glyphBounds.isEmpty()) { if (!contains(clipStackBounds, {glyphBounds.x(), glyphBounds.y()})) { continue; @@ -1081,7 +1071,7 @@ bool SkPDFDevice::handleInversePath(const SkPath& origPath, // To be consistent with the raster output, hairline strokes // are rendered as non-inverted. modifiedPath.toggleInverseFillType(); - this->internalDrawPath(this->cs(), this->ctm(), modifiedPath, paint, true); + this->internalDrawPath(this->cs(), this->localToDevice(), modifiedPath, paint, true); return true; } } @@ -1089,7 +1079,7 @@ bool SkPDFDevice::handleInversePath(const SkPath& origPath, // Get bounds of clip in current transform space // (clip bounds are given in device space). SkMatrix transformInverse; - SkMatrix totalMatrix = this->ctm(); + SkMatrix totalMatrix = this->localToDevice(); if (!totalMatrix.invert(&transformInverse)) { return false; @@ -1106,7 +1096,7 @@ bool SkPDFDevice::handleInversePath(const SkPath& origPath, return false; } - this->internalDrawPath(this->cs(), this->ctm(), modifiedPath, noInversePaint, true); + this->internalDrawPath(this->cs(), this->localToDevice(), modifiedPath, noInversePaint, true); return true; } @@ -1571,14 +1561,14 @@ void SkPDFDevice::internalDrawImageRect(SkKeyedImage imageSubset, maskDevice->makeFormXObjectFromDevice(maskDeviceBounds, true), false, SkPDFGraphicState::kLuminosity_SMaskMode, fDocument), content.stream()); SkPDFUtils::AppendRectangle(SkRect::Make(this->size()), content.stream()); - SkPDFUtils::PaintPath(SkPaint::kFill_Style, SkPath::kWinding_FillType, content.stream()); + SkPDFUtils::PaintPath(SkPaint::kFill_Style, SkPathFillType::kWinding, content.stream()); this->clearMaskOnGraphicState(content.stream()); return; } if (paint->getMaskFilter()) { paint.writable()->setShader(imageSubset.image()->makeShader(&transform)); SkPath path = to_path(dst); // handles non-integral clipping. - this->internalDrawPath(this->cs(), this->ctm(), path, *paint, true); + this->internalDrawPath(this->cs(), this->localToDevice(), path, *paint, true); return; } transform.postConcat(ctm); @@ -1725,7 +1715,7 @@ void SkPDFDevice::drawSpecial(SkSpecialImage* srcImg, int x, int y, const SkPain SkImageFilter* filter = paint.getImageFilter(); if (filter) { SkIPoint offset = SkIPoint::Make(0, 0); - SkMatrix matrix = this->ctm(); + SkMatrix matrix = this->localToDevice(); matrix.postTranslate(SkIntToScalar(-x), SkIntToScalar(-y)); const SkIRect clipBounds = this->cs().bounds(this->bounds()).roundOut().makeOffset(-x, -y); diff --git a/third_party/skia/src/pdf/SkPDFFont.cpp b/third_party/skia/src/pdf/SkPDFFont.cpp index c0275236a61c..f1c0142d4df8 100644 --- a/third_party/skia/src/pdf/SkPDFFont.cpp +++ b/third_party/skia/src/pdf/SkPDFFont.cpp @@ -442,9 +442,9 @@ struct ImageAndOffset { sk_sp fImage; SkIPoint fOffset; }; -static ImageAndOffset to_image(SkGlyphID gid, SkStrike* cache) { - (void)cache->prepareImage(cache->glyph(gid)); - SkMask mask = cache->glyph(gid)->mask(); +static ImageAndOffset to_image(SkGlyphID gid, SkBulkGlyphMetricsAndImages* smallGlyphs) { + const SkGlyph* glyph = smallGlyphs->glyph(SkPackedGlyphID{gid}); + SkMask mask = glyph->mask(); if (!mask.fImage) { return {nullptr, {0, 0}}; } @@ -484,7 +484,7 @@ static ImageAndOffset to_image(SkGlyphID gid, SkStrike* cache) { static SkPDFIndirectReference type3_descriptor(SkPDFDocument* doc, const SkTypeface* typeface, - SkStrike* cache) { + SkScalar xHeight) { if (SkPDFIndirectReference* ptr = doc->fType3FontDescriptors.find(typeface->uniqueID())) { return *ptr; } @@ -500,7 +500,6 @@ static SkPDFIndirectReference type3_descriptor(SkPDFDocument* doc, // to "greatly help our workflow downstream". if (metrics->fCapHeight != 0) { descriptor.insertInt("CapHeight", metrics->fCapHeight); } if (metrics->fStemV != 0) { descriptor.insertInt("StemV", metrics->fStemV); } - SkScalar xHeight = cache->getFontMetrics().fXHeight; if (xHeight != 0) { descriptor.insertScalar("XHeight", xHeight); } @@ -544,11 +543,13 @@ static void emit_subset_type3(const SkPDFFont& pdfFont, SkPDFDocument* doc) { auto cache = strikeSpec.findOrCreateExclusiveStrike(); SkASSERT(cache); SkScalar emSize = (SkScalar)unitsPerEm; + SkScalar xHeight = cache->getFontMetrics().fXHeight; + SkBulkGlyphMetricsAndPaths metricsAndPaths(std::move(cache)); SkStrikeSpec strikeSpecSmall = kBitmapFontSize > 0 ? make_small_strike(*typeface) : strikeSpec; - auto smallCache = strikeSpecSmall.findOrCreateExclusiveStrike(); - SkASSERT(smallCache); + + SkBulkGlyphMetricsAndImages smallGlyphs(strikeSpecSmall); float bitmapScale = kBitmapFontSize > 0 ? emSize / kBitmapFontSize : 1.0f; SkPDFDict font("Font"); @@ -586,18 +587,18 @@ static void emit_subset_type3(const SkPDFFont& pdfFont, SkPDFDocument* doc) { characterName.set("g0"); } else { characterName.printf("g%X", gID); - SkGlyph* glyph = cache->glyph(gID); + const SkGlyph* glyph = metricsAndPaths.glyph(gID); advance = glyph->advanceX(); glyphBBox = glyph->iRect(); bbox.join(glyphBBox); - const SkPath* path = cache->preparePath(glyph); + const SkPath* path = glyph->path(); SkDynamicMemoryWStream content; if (path && !path->isEmpty()) { setGlyphWidthAndBoundingBox(glyph->advanceX(), glyphBBox, &content); SkPDFUtils::EmitPath(*path, SkPaint::kFill_Style, &content); - SkPDFUtils::PaintPath(SkPaint::kFill_Style, path->getFillType(), &content); + SkPDFUtils::PaintPath(SkPaint::kFill_Style, path->getNewFillType(), &content); } else { - auto pimg = to_image(gID, smallCache.get()); + auto pimg = to_image(gID, &smallGlyphs); if (!pimg.fImage) { setGlyphWidthAndBoundingBox(glyph->advanceX(), glyphBBox, &content); } else { @@ -658,7 +659,7 @@ static void emit_subset_type3(const SkPDFFont& pdfFont, SkPDFDocument* doc) { firstGlyphID, lastGlyphID); font.insertRef("ToUnicode", SkPDFStreamOut(nullptr, std::move(toUnicodeCmap), doc)); - font.insertRef("FontDescriptor", type3_descriptor(doc, typeface, cache.get())); + font.insertRef("FontDescriptor", type3_descriptor(doc, typeface, xHeight)); font.insertObject("Widths", std::move(widthArray)); font.insertObject("Encoding", std::move(encoding)); font.insertObject("CharProcs", std::move(charProcs)); diff --git a/third_party/skia/src/pdf/SkPDFGradientShader.cpp b/third_party/skia/src/pdf/SkPDFGradientShader.cpp index 919c07a543cb..ad2a65d71f50 100644 --- a/third_party/skia/src/pdf/SkPDFGradientShader.cpp +++ b/third_party/skia/src/pdf/SkPDFGradientShader.cpp @@ -780,7 +780,7 @@ static std::unique_ptr create_pattern_fill_content(int gsIndex, } SkPDFUtils::ApplyPattern(patternIndex, &content); SkPDFUtils::AppendRectangle(bounds, &content); - SkPDFUtils::PaintPath(SkPaint::kFill_Style, SkPath::kEvenOdd_FillType, &content); + SkPDFUtils::PaintPath(SkPaint::kFill_Style, SkPathFillType::kEvenOdd, &content); return content.detachAsStream(); } diff --git a/third_party/skia/src/pdf/SkPDFGraphicStackState.cpp b/third_party/skia/src/pdf/SkPDFGraphicStackState.cpp index a27170b70729..af2fa19d851a 100644 --- a/third_party/skia/src/pdf/SkPDFGraphicStackState.cpp +++ b/third_party/skia/src/pdf/SkPDFGraphicStackState.cpp @@ -104,10 +104,10 @@ static void apply_clip(const SkClipStack& stack, const SkRect& outerBounds, F fn static void append_clip_path(const SkPath& clipPath, SkWStream* wStream) { SkPDFUtils::EmitPath(clipPath, SkPaint::kFill_Style, wStream); - SkPath::FillType clipFill = clipPath.getFillType(); - NOT_IMPLEMENTED(clipFill == SkPath::kInverseEvenOdd_FillType, false); - NOT_IMPLEMENTED(clipFill == SkPath::kInverseWinding_FillType, false); - if (clipFill == SkPath::kEvenOdd_FillType) { + SkPathFillType clipFill = clipPath.getNewFillType(); + NOT_IMPLEMENTED(clipFill == SkPathFillType::kInverseEvenOdd, false); + NOT_IMPLEMENTED(clipFill == SkPathFillType::kInverseWinding, false); + if (clipFill == SkPathFillType::kEvenOdd) { wStream->writeText("W* n\n"); } else { wStream->writeText("W n\n"); diff --git a/third_party/skia/src/pdf/SkPDFMetadata.cpp b/third_party/skia/src/pdf/SkPDFMetadata.cpp index 582fc1e5b79d..21c3ed932e27 100644 --- a/third_party/skia/src/pdf/SkPDFMetadata.cpp +++ b/third_party/skia/src/pdf/SkPDFMetadata.cpp @@ -7,7 +7,6 @@ #include "src/pdf/SkPDFMetadata.h" -#include "include/core/SkMilestone.h" #include "include/private/SkTo.h" #include "src/core/SkMD5.h" #include "src/core/SkUtils.h" @@ -15,11 +14,6 @@ #include -#define SKPDF_STRING(X) SKPDF_STRING_IMPL(X) -#define SKPDF_STRING_IMPL(X) #X -#define SKPDF_PRODUCER "Skia/PDF m" SKPDF_STRING(SK_MILESTONE) -#define SKPDF_CUSTOM_PRODUCER_KEY "ProductionLibrary" - static constexpr SkTime::DateTime kZeroTime = {0, 0, 0, 0, 0, 0, 0, 0}; static bool operator!=(const SkTime::DateTime& u, const SkTime::DateTime& v) { @@ -108,10 +102,6 @@ static SkString to_utf16be(const char* src, size_t len) { static SkString convert(const SkString& s) { return utf8_is_pdfdocencoding(s.c_str(), s.size()) ? s : to_utf16be(s.c_str(), s.size()); } -static SkString convert(const char* src) { - size_t len = strlen(src); - return utf8_is_pdfdocencoding(src, len) ? SkString(src, len) : to_utf16be(src, len); -} namespace { static const struct { @@ -123,6 +113,7 @@ static const struct { {"Subject", &SkPDF::Metadata::fSubject}, {"Keywords", &SkPDF::Metadata::fKeywords}, {"Creator", &SkPDF::Metadata::fCreator}, + {"Producer", &SkPDF::Metadata::fProducer}, }; } // namespace @@ -135,12 +126,6 @@ std::unique_ptr SkPDFMetadata::MakeDocumentInformationDict( dict->insertString(keyValuePtr.key, convert(value)); } } - if (metadata.fProducer.isEmpty()) { - dict->insertString("Producer", convert(SKPDF_PRODUCER)); - } else { - dict->insertString("Producer", convert(metadata.fProducer)); - dict->insertString(SKPDF_CUSTOM_PRODUCER_KEY, convert(SKPDF_PRODUCER)); - } if (metadata.fCreation != kZeroTime) { dict->insertString("CreationDate", pdf_date(metadata.fCreation)); } @@ -283,10 +268,10 @@ const SkString escape_xml(const SkString& input, static const char kLt[] = "<"; for (size_t i = 0; i < input.size(); ++i) { if (input[i] == '&') { - strncpy(out, kAmp, strlen(kAmp)); + memcpy(out, kAmp, strlen(kAmp)); out += strlen(kAmp); } else if (input[i] == '<') { - strncpy(out, kLt, strlen(kLt)); + memcpy(out, kLt, strlen(kLt)); out += strlen(kLt); } else { *out++ = input[i]; @@ -375,15 +360,7 @@ SkPDFIndirectReference SkPDFMetadata::MakeXMPObject( "\n"); // TODO: in theory, keywords can be a list too. - SkString producer("" SKPDF_PRODUCER "\n"); - if (!metadata.fProducer.isEmpty()) { - // TODO: register a developer prefix to make - // a real XML tag. - producer = escape_xml( - metadata.fProducer, "", - "\n\n"); - } + SkString producer = escape_xml(metadata.fProducer, "", "\n"); SkString creator = escape_xml(metadata.fCreator, "", "\n"); diff --git a/third_party/skia/src/pdf/SkPDFUtils.cpp b/third_party/skia/src/pdf/SkPDFUtils.cpp index 9beedfb5ab62..f00362e765df 100644 --- a/third_party/skia/src/pdf/SkPDFUtils.cpp +++ b/third_party/skia/src/pdf/SkPDFUtils.cpp @@ -128,11 +128,11 @@ void SkPDFUtils::EmitPath(const SkPath& path, SkPaint::Style paintStyle, SkRect rect; bool isClosed; // Both closure and direction need to be checked. - SkPath::Direction direction; + SkPathDirection direction; if (path.isRect(&rect, &isClosed, &direction) && isClosed && - (SkPath::kCW_Direction == direction || - SkPath::kEvenOdd_FillType == path.getFillType())) + (SkPathDirection::kCW == direction || + SkPathFillType::kEvenOdd == path.getNewFillType())) { SkPDFUtils::AppendRectangle(rect, content); return; @@ -213,8 +213,7 @@ void SkPDFUtils::ClosePath(SkWStream* content) { content->writeText("h\n"); } -void SkPDFUtils::PaintPath(SkPaint::Style style, SkPath::FillType fill, - SkWStream* content) { +void SkPDFUtils::PaintPath(SkPaint::Style style, SkPathFillType fill, SkWStream* content) { if (style == SkPaint::kFill_Style) { content->writeText("f"); } else if (style == SkPaint::kStrokeAndFill_Style) { @@ -224,9 +223,9 @@ void SkPDFUtils::PaintPath(SkPaint::Style style, SkPath::FillType fill, } if (style != SkPaint::kStroke_Style) { - NOT_IMPLEMENTED(fill == SkPath::kInverseEvenOdd_FillType, false); - NOT_IMPLEMENTED(fill == SkPath::kInverseWinding_FillType, false); - if (fill == SkPath::kEvenOdd_FillType) { + NOT_IMPLEMENTED(fill == SkPathFillType::kInverseEvenOdd, false); + NOT_IMPLEMENTED(fill == SkPathFillType::kInverseWinding, false); + if (fill == SkPathFillType::kEvenOdd) { content->writeText("*"); } } @@ -234,8 +233,7 @@ void SkPDFUtils::PaintPath(SkPaint::Style style, SkPath::FillType fill, } void SkPDFUtils::StrokePath(SkWStream* content) { - SkPDFUtils::PaintPath( - SkPaint::kStroke_Style, SkPath::kWinding_FillType, content); + SkPDFUtils::PaintPath(SkPaint::kStroke_Style, SkPathFillType::kWinding, content); } void SkPDFUtils::ApplyGraphicState(int objectIndex, SkWStream* content) { diff --git a/third_party/skia/src/pdf/SkPDFUtils.h b/third_party/skia/src/pdf/SkPDFUtils.h index 90b1c572eb25..d4c98458f85f 100644 --- a/third_party/skia/src/pdf/SkPDFUtils.h +++ b/third_party/skia/src/pdf/SkPDFUtils.h @@ -58,8 +58,7 @@ inline void EmitPath(const SkPath& path, SkPaint::Style paintStyle, SkPDFUtils::EmitPath(path, paintStyle, true, content, tolerance); } void ClosePath(SkWStream* content); -void PaintPath(SkPaint::Style style, SkPath::FillType fill, - SkWStream* content); +void PaintPath(SkPaint::Style style, SkPathFillType fill, SkWStream* content); void StrokePath(SkWStream* content); void ApplyGraphicState(int objectIndex, SkWStream* content); void ApplyPattern(int objectIndex, SkWStream* content); diff --git a/third_party/skia/src/ports/SkFontHost_mac.cpp b/third_party/skia/src/ports/SkFontHost_mac.cpp index 947084ea754b..3a997ecd6ecc 100644 --- a/third_party/skia/src/ports/SkFontHost_mac.cpp +++ b/third_party/skia/src/ports/SkFontHost_mac.cpp @@ -386,13 +386,12 @@ static SmoothBehavior smooth_behavior() { CGBitmapContextCreate(&smoothBitmap, 16, 16, 8, 16*4, colorspace.get(), BITMAP_INFO_RGB)); - SkUniqueCFRef data( - CGDataProviderCreateWithData(nullptr, kSpiderSymbol_ttf, - SK_ARRAY_COUNT(kSpiderSymbol_ttf), nullptr)); - SkUniqueCFRef cgFont(CGFontCreateWithDataProvider(data.get())); - SkASSERT(cgFont); - SkUniqueCFRef ctFont( - CTFontCreateWithGraphicsFont(cgFont.get(), 16, nullptr, nullptr)); + 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); @@ -695,14 +694,20 @@ static SkFontStyle fontstyle_from_descriptor(CTFontDescriptorRef desc, bool from : SkFontStyle::kUpright_Slant); } +struct OpszVariation { + bool isSet = false; + double value = 0; +}; + class SkTypeface_Mac : public SkTypeface { public: SkTypeface_Mac(SkUniqueCFRef fontRef, SkUniqueCFRef resourceRef, - const SkFontStyle& fs, bool isFixedPitch, + const SkFontStyle& fs, bool isFixedPitch, OpszVariation opszVariation, std::unique_ptr providedData) : SkTypeface(fs, isFixedPitch) , fFontRef(std::move(fontRef)) , fOriginatingCFTypeRef(std::move(resourceRef)) + , fOpszVariation(opszVariation) , fHasColorGlyphs( SkToBool(CTFontGetSymbolicTraits(fFontRef.get()) & kCTFontColorGlyphsTrait)) , fStream(std::move(providedData)) @@ -713,6 +718,7 @@ class SkTypeface_Mac : public SkTypeface { SkUniqueCFRef fFontRef; SkUniqueCFRef fOriginatingCFTypeRef; + const OpszVariation fOpszVariation; const bool fHasColorGlyphs; protected: @@ -764,6 +770,7 @@ static bool find_by_CTFontRef(SkTypeface* cached, void* context) { /** Creates a typeface, searching the cache if isLocalStream is false. */ static sk_sp create_from_CTFontRef(SkUniqueCFRef font, SkUniqueCFRef resource, + OpszVariation opszVariation, std::unique_ptr providedData) { SkASSERT(font); const bool isFromStream(providedData); @@ -782,7 +789,8 @@ static sk_sp create_from_CTFontRef(SkUniqueCFRef font, bool isFixedPitch = SkToBool(traits & kCTFontMonoSpaceTrait); sk_sp face(new SkTypeface_Mac(std::move(font), std::move(resource), - style, isFixedPitch, std::move(providedData))); + style, isFixedPitch, opszVariation, + std::move(providedData))); if (!isFromStream) { SkTypefaceCache::Add(face); } @@ -796,7 +804,7 @@ static sk_sp create_from_desc(CTFontDescriptorRef desc) { return nullptr; } - return create_from_CTFontRef(std::move(ctFont), nullptr, nullptr); + return create_from_CTFontRef(std::move(ctFont), nullptr, OpszVariation(), nullptr); } static SkUniqueCFRef create_descriptor(const char familyName[], @@ -875,13 +883,14 @@ static sk_sp create_from_desc_and_style(CTFontDescriptorRef desc, } if (expected_traits != traits) { - SkUniqueCFRef ctNewFont(CTFontCreateCopyWithSymbolicTraits(ctFont.get(), 0, nullptr, expected_traits, expected_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), nullptr, nullptr); + return create_from_CTFontRef(std::move(ctFont), nullptr, OpszVariation(), nullptr); } /** Creates a typeface from a name, searching the cache. */ @@ -905,6 +914,7 @@ SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef font, CFTypeRef resource) { } return create_from_CTFontRef(SkUniqueCFRef(font), SkUniqueCFRef(resource), + OpszVariation(), nullptr).release(); } @@ -992,26 +1002,53 @@ class SkScalerContext_Mac : public SkScalerContext { 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 SkUniqueCFRef create_opsz_descriptor(double opsz) { + SkUniqueCFRef attr( + CFDictionaryCreateMutable(kCFAllocatorDefault, 1, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + SkUniqueCFRef opszValueNumber( + CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &opsz)); + // Avoid using kCTFontOpticalSizeAttribute directly + CFStringRef SkCTFontOpticalSizeAttribute = CFSTR("NSCTFontOpticalSizeAttribute"); + CFDictionarySetValue(attr.get(), SkCTFontOpticalSizeAttribute, opszValueNumber.get()); + return SkUniqueCFRef(CTFontDescriptorCreateWithAttributes(attr.get())); +} + // CTFontCreateCopyWithAttributes or CTFontCreateCopyWithSymbolicTraits cannot be used on 10.10 // and later, as they will return different underlying fonts depending on the size requested. // It is not possible to use descriptors with CTFontCreateWithFontDescriptor, since that does not // work with non-system fonts. As a result, create the strike specific CTFonts from the underlying // CGFont. static SkUniqueCFRef ctfont_create_exact_copy(CTFontRef baseFont, CGFloat textSize, - const CGAffineTransform* transform) + OpszVariation opsz) { SkUniqueCFRef baseCGFont(CTFontCopyGraphicsFont(baseFont, nullptr)); - // The last parameter (CTFontDescriptorRef attributes) *must* be nullptr. - // If non-nullptr then with fonts with variation axes, the copy will fail in + // The last parameter (CTFontDescriptorRef attributes) *must* not set variations. + // If it sets variations then with fonts with variation axes the copy will fail in // CGFontVariationFromDictCallback when it assumes kCGFontVariationAxisName is CFNumberRef // which it quite obviously is not. // Because we cannot setup the CTFont descriptor to match, the same restriction applies here // as other uses of CTFontCreateWithGraphicsFont which is that such CTFonts should not escape // the scaler context, since they aren't 'normal'. + + SkUniqueCFRef desc; + if (opsz.isSet) { + desc = create_opsz_descriptor(opsz.value); + } return SkUniqueCFRef( - CTFontCreateWithGraphicsFont(baseCGFont.get(), textSize, transform, nullptr)); + CTFontCreateWithGraphicsFont(baseCGFont.get(), textSize, nullptr, desc.get())); } SkScalerContext_Mac::SkScalerContext_Mac(sk_sp typeface, @@ -1044,7 +1081,8 @@ SkScalerContext_Mac::SkScalerContext_Mac(sk_sp typeface, // The transform contains everything except the requested text size. // Some properties, like 'trak', are based on the text size (before applying the matrix). CGFloat textSize = ScalarToCG(scale.y()); - fCTFont = ctfont_create_exact_copy(ctFont, textSize, nullptr); + fCTFont = ctfont_create_exact_copy(ctFont, textSize, + ((SkTypeface_Mac*)this->getTypeface())->fOpszVariation); fCGFont.reset(CTFontCopyGraphicsFont(fCTFont.get(), nullptr)); } @@ -1247,8 +1285,6 @@ void SkScalerContext_Mac::generateMetrics(SkGlyph* glyph) { glyph->fHeight = SkToU16(skIBounds.height()); } -#include "include/private/SkColorData.h" - static constexpr uint8_t sk_pow2_table(size_t i) { return SkToU8(((i * i + 128) / 255)); } @@ -1580,25 +1616,6 @@ void SkScalerContext_Mac::CTPathElement(void *info, const CGPathElement *element /////////////////////////////////////////////////////////////////////////////// -// Returns nullptr on failure -// Call must still manage its ownership of provider -static sk_sp create_from_dataProvider(SkUniqueCFRef provider, - std::unique_ptr providedData, - int ttcIndex) { - if (ttcIndex != 0) { - return nullptr; - } - SkUniqueCFRef cg(CGFontCreateWithDataProvider(provider.get())); - if (!cg) { - return nullptr; - } - SkUniqueCFRef ct(CTFontCreateWithGraphicsFont(cg.get(), 0, nullptr, nullptr)); - if (!ct) { - return nullptr; - } - return create_from_CTFontRef(std::move(ct), nullptr, std::move(providedData)); -} - // 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. @@ -1720,7 +1737,8 @@ static void CFStringToSkString(CFStringRef src, SkString* dst) { void SkTypeface_Mac::getGlyphToUnicodeMap(SkUnichar* dstArray) const { SkUniqueCFRef ctFont = - ctfont_create_exact_copy(fFontRef.get(), CTFontGetUnitsPerEm(fFontRef.get()), nullptr); + ctfont_create_exact_copy(fFontRef.get(), CTFontGetUnitsPerEm(fFontRef.get()), + fOpszVariation); CFIndex glyphCount = CTFontGetGlyphCount(ctFont.get()); populate_glyph_to_unicode(ctFont.get(), glyphCount, dstArray); } @@ -1728,7 +1746,8 @@ void SkTypeface_Mac::getGlyphToUnicodeMap(SkUnichar* dstArray) const { std::unique_ptr SkTypeface_Mac::onGetAdvancedMetrics() const { SkUniqueCFRef ctFont = - ctfont_create_exact_copy(fFontRef.get(), CTFontGetUnitsPerEm(fFontRef.get()), nullptr); + ctfont_create_exact_copy(fFontRef.get(), CTFontGetUnitsPerEm(fFontRef.get()), + fOpszVariation); std::unique_ptr info(new SkAdvancedTypefaceMetrics); @@ -2077,7 +2096,7 @@ std::unique_ptr SkTypeface_Mac::onMakeFontData() const { static SkUniqueCFRef ct_variation_from_cg_variation(CFDictionaryRef cgVariations, CFArrayRef ctAxes) { - SkUniqueCFRef ctVariations( + SkUniqueCFRef ctVariation( CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); @@ -2107,9 +2126,9 @@ static SkUniqueCFRef ct_variation_from_cg_variation(CFDictionar return nullptr; } - CFDictionaryAddValue(ctVariations.get(), axisTag, axisValue); + CFDictionaryAddValue(ctVariation.get(), axisTag, axisValue); } - return ctVariations; + return ctVariation; } int SkTypeface_Mac::onGetVariationDesignPosition( @@ -2131,8 +2150,8 @@ int SkTypeface_Mac::onGetVariationDesignPosition( // 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 ctVariations(CTFontCopyVariation(fFontRef.get())); - if (!ctVariations) { + 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)); @@ -2143,8 +2162,8 @@ int SkTypeface_Mac::onGetVariationDesignPosition( if (!cgVariations) { return -1; } - ctVariations = ct_variation_from_cg_variation(cgVariations.get(), ctAxes.get()); - if (!ctVariations) { + ctVariation = ct_variation_from_cg_variation(cgVariations.get(), ctAxes.get()); + if (!ctVariation) { return -1; } } @@ -2168,7 +2187,7 @@ int SkTypeface_Mac::onGetVariationDesignPosition( coordinates[i].axis = tagLong; CGFloat variationCGFloat; - CFTypeRef variationValue = CFDictionaryGetValue(ctVariations.get(), tagNumber); + CFTypeRef variationValue = CFDictionaryGetValue(ctVariation.get(), tagNumber); if (variationValue) { if (CFGetTypeID(variationValue) != CFNumberGetTypeID()) { return -1; @@ -2477,8 +2496,6 @@ static bool find_desc_str(CTFontDescriptorRef desc, CFStringRef name, SkString* return true; } -#include "include/core/SkFontMgr.h" - static inline int sqr(int value) { SkASSERT(SkAbs32(value) < 0x7FFF); // check for overflow return value * value; @@ -2650,7 +2667,8 @@ class SkFontMgr_Mac : public SkFontMgr { 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), nullptr, nullptr).release(); + return create_from_CTFontRef(std::move(fallbackFont), nullptr, + OpszVariation(), nullptr).release(); } SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember, @@ -2659,36 +2677,52 @@ class SkFontMgr_Mac : public SkFontMgr { } sk_sp onMakeFromData(sk_sp data, int ttcIndex) const override { - SkUniqueCFRef pr(SkCreateDataProviderFromData(data)); - if (!pr) { + if (ttcIndex != 0) { return nullptr; } - return create_from_dataProvider(std::move(pr), SkMemoryStream::Make(std::move(data)), - ttcIndex); + + SkUniqueCFRef ct = ctfont_from_skdata(data, ttcIndex); + if (!ct) { + return nullptr; + } + + return create_from_CTFontRef(std::move(ct), nullptr, OpszVariation(), + SkMemoryStream::Make(std::move(data))); } sk_sp onMakeFromStreamIndex(std::unique_ptr stream, int ttcIndex) const override { - SkUniqueCFRef pr(SkCreateDataProviderFromStream(stream->duplicate())); - if (!pr) { + 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_dataProvider(std::move(pr), std::move(stream), ttcIndex); + + return create_from_CTFontRef(std::move(ct), nullptr, OpszVariation(), std::move(stream)); } - /** Creates a dictionary suitable for setting the axes on a CGFont. */ - static SkUniqueCFRef copy_axes(CGFontRef cg, const SkFontArguments& args) { - // The CGFont variation data is keyed by name, but lacks the tag. - // The CTFont variation data is keyed by tag, and also has the name. - // We would like to work with CTFont variations, but creating a CTFont font with - // CTFont variation dictionary runs into bugs. So use the CTFont variation data - // to match names to tags to create the appropriate CGFont. - SkUniqueCFRef ct(CTFontCreateWithGraphicsFont(cg, 0, nullptr, nullptr)); - // 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(ct.get())); + 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 nullptr; + return CTFontVariation(); } CFIndex axisCount = CFArrayGetCount(ctAxes.get()); @@ -2702,26 +2736,18 @@ class SkFontMgr_Mac : public SkFontMgr { for (int i = 0; i < axisCount; ++i) { CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { - return nullptr; + return CTFontVariation(); } CFDictionaryRef axisInfoDict = static_cast(axisInfo); - // The assumption is that values produced by kCTFontVariationAxisNameKey and - // kCGFontVariationAxisName will always be equal. - // If they are ever not, seach the project history for "get_tag_for_name". - CFTypeRef axisName = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisNameKey); - if (!axisName || CFGetTypeID(axisName) != CFStringGetTypeID()) { - return nullptr; - } - CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { - return nullptr; + return CTFontVariation(); } CFNumberRef tagNumber = static_cast(tag); int64_t tagLong; if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { - return nullptr; + return CTFontVariation(); } // The variation axes can be set to any value, but cg will effectively pin them. @@ -2733,7 +2759,7 @@ class SkFontMgr_Mac : public SkFontMgr { !max || CFGetTypeID(max) != CFNumberGetTypeID() || !def || CFGetTypeID(def) != CFNumberGetTypeID()) { - return nullptr; + return CTFontVariation(); } CFNumberRef minNumber = static_cast(min); CFNumberRef maxNumber = static_cast(max); @@ -2745,7 +2771,7 @@ class SkFontMgr_Mac : public SkFontMgr { !CFNumberGetValue(maxNumber, kCFNumberDoubleType, &maxDouble) || !CFNumberGetValue(defNumber, kCFNumberDoubleType, &defDouble)) { - return nullptr; + return CTFontVariation(); } double value = defDouble; @@ -2755,58 +2781,129 @@ class SkFontMgr_Mac : public SkFontMgr { 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(), axisName, valueNumber.get()); + 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 dict; + return SkUniqueCFRef(CTFontCreateWithFontDescriptor(desc.get(), 0, nullptr)); } - sk_sp onMakeFromStreamArgs(std::unique_ptr s, - const SkFontArguments& args) const override { - if (args.getCollectionIndex() != 0) { + + 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; } - SkUniqueCFRef provider(SkCreateDataProviderFromStream(s->duplicate())); - if (!provider) { + + sk_sp data = skdata_from_skstreamasset(stream->duplicate()); + if (!data) { return nullptr; } - SkUniqueCFRef cg(CGFontCreateWithDataProvider(provider.get())); - if (!cg) { + SkUniqueCFRef ct = ctfont_from_skdata(std::move(data), ttcIndex); + if (!ct) { return nullptr; } - SkUniqueCFRef cgVariations = copy_axes(cg.get(), args); - // The CGFontRef returned by CGFontCreateCopyWithVariations when the passed CGFontRef was - // created from a data provider does not appear to have any ownership of the underlying - // data. The original CGFontRef must be kept alive until the copy will no longer be used. - SkUniqueCFRef cgVariant; - if (cgVariations) { - cgVariant.reset(CGFontCreateCopyWithVariations(cg.get(), cgVariations.get())); + 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 { - cgVariant.reset(cg.release()); + ctVariant.reset(ct.release()); } - - SkUniqueCFRef ct( - CTFontCreateWithGraphicsFont(cgVariant.get(), 0, nullptr, nullptr)); - if (!ct) { + if (!ctVariant) { return nullptr; } - return create_from_CTFontRef(std::move(ct), std::move(cg), std::move(s)); + + return create_from_CTFontRef(std::move(ctVariant), nullptr, ctVariation.opsz, + std::move(stream)); } - /** Creates a dictionary suitable for setting the axes on a CGFont. */ - static SkUniqueCFRef copy_axes(CGFontRef cg, SkFontData* fontData) { - SkUniqueCFRef cgAxes(CGFontCopyVariationAxes(cg)); - if (!cgAxes) { - return nullptr; + /** 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(cgAxes.get()); + CFIndex axisCount = CFArrayGetCount(ctAxes.get()); if (0 == axisCount || axisCount != fontData->getAxisCount()) { - return nullptr; + return CTFontVariation(); } SkUniqueCFRef dict( @@ -2815,25 +2912,31 @@ class SkFontMgr_Mac : public SkFontMgr { &kCFTypeDictionaryValueCallBacks)); for (int i = 0; i < fontData->getAxisCount(); ++i) { - CFTypeRef axisInfo = CFArrayGetValueAtIndex(cgAxes.get(), i); + CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { - return nullptr; + return CTFontVariation(); } CFDictionaryRef axisInfoDict = static_cast(axisInfo); - CFTypeRef axisName = CFDictionaryGetValue(axisInfoDict, kCGFontVariationAxisName); - if (!axisName || CFGetTypeID(axisName) != CFStringGetTypeID()) { - return nullptr; + 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, kCGFontVariationAxisMinValue); - CFTypeRef max = CFDictionaryGetValue(axisInfoDict, kCGFontVariationAxisMaxValue); + CFTypeRef min = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMinimumValueKey); + CFTypeRef max = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMaximumValueKey); if (!min || CFGetTypeID(min) != CFNumberGetTypeID() || !max || CFGetTypeID(max) != CFNumberGetTypeID()) { - return nullptr; + return CTFontVariation(); } CFNumberRef minNumber = static_cast(min); CFNumberRef maxNumber = static_cast(max); @@ -2842,54 +2945,71 @@ class SkFontMgr_Mac : public SkFontMgr { if (!CFNumberGetValue(minNumber, kCFNumberDoubleType, &minDouble) || !CFNumberGetValue(maxNumber, kCFNumberDoubleType, &maxDouble)) { - return nullptr; + 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(), axisName, valueNumber.get()); + CFDictionaryAddValue(dict.get(), tagNumber, valueNumber.get()); } - return dict; + return { SkUniqueCFRef(std::move(dict)), opsz }; } sk_sp onMakeFromFontData(std::unique_ptr fontData) const override { + // TODO: Use CTFontManagerCreateFontDescriptorsFromData when available. if (fontData->getIndex() != 0) { return nullptr; } - SkUniqueCFRef provider( - SkCreateDataProviderFromStream(fontData->getStream()->duplicate())); - if (!provider) { + + sk_sp data = skdata_from_skstreamasset(fontData->getStream()->duplicate()); + if (!data) { return nullptr; } - SkUniqueCFRef cg(CGFontCreateWithDataProvider(provider.get())); - if (!cg) { + SkUniqueCFRef ct = ctfont_from_skdata(std::move(data), fontData->getIndex()); + if (!ct) { return nullptr; } - SkUniqueCFRef cgVariations = copy_axes(cg.get(), fontData.get()); - // The CGFontRef returned by CGFontCreateCopyWithVariations when the passed CGFontRef was - // created from a data provider does not appear to have any ownership of the underlying - // data. The original CGFontRef must be kept alive until the copy will no longer be used. - SkUniqueCFRef cgVariant; - if (cgVariations) { - cgVariant.reset(CGFontCreateCopyWithVariations(cg.get(), cgVariations.get())); + 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 { - cgVariant.reset(cg.release()); + ctVariant.reset(ct.release()); } - - SkUniqueCFRef ct( - CTFontCreateWithGraphicsFont(cgVariant.get(), 0, nullptr, nullptr)); - if (!ct) { + if (!ctVariant) { return nullptr; } - return create_from_CTFontRef(std::move(ct), std::move(cg), fontData->detachStream()); + + return create_from_CTFontRef(std::move(ctVariant), nullptr, + ctVariation.opsz, fontData->detachStream()); } sk_sp onMakeFromFile(const char path[], int ttcIndex) const override { - SkUniqueCFRef pr(CGDataProviderCreateWithFilename(path)); - if (!pr) { + if (ttcIndex != 0) { return nullptr; } - return create_from_dataProvider(std::move(pr), SkFILEStream::Make(path), ttcIndex); + + 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 { diff --git a/third_party/skia/src/ports/SkOSFile_stdio.cpp b/third_party/skia/src/ports/SkOSFile_stdio.cpp index f870c5bfd278..0e74a1897018 100644 --- a/third_party/skia/src/ports/SkOSFile_stdio.cpp +++ b/third_party/skia/src/ports/SkOSFile_stdio.cpp @@ -72,7 +72,10 @@ FILE* sk_fopen(const char path[], SkFILE_Flags flags) { *p++ = 'r'; } if (flags & kWrite_SkFILE_Flag) { + SkASSERT(!(flags & kAppend_SkFILE_Flag)); *p++ = 'w'; + } else if (flags & kAppend_SkFILE_Flag) { + *p++ = 'a'; } *p = 'b'; diff --git a/third_party/skia/src/ports/SkTLS_pthread.cpp b/third_party/skia/src/ports/SkTLS_pthread.cpp index c96271b2a2f1..d017c51b6959 100644 --- a/third_party/skia/src/ports/SkTLS_pthread.cpp +++ b/third_party/skia/src/ports/SkTLS_pthread.cpp @@ -16,7 +16,7 @@ void* SkTLS::PlatformGetSpecific(bool forceCreateTheSlot) { // should we use forceCreateTheSlot to potentially just return nullptr if // we've never been called with forceCreateTheSlot==true ? static SkOnce once; - once(pthread_key_create, &gSkTLSKey, SkTLS::Destructor); + once([]{pthread_key_create(&gSkTLSKey, SkTLS::Destructor);}); return pthread_getspecific(gSkTLSKey); } diff --git a/third_party/skia/src/ports/SkTypeface_win_dw.h b/third_party/skia/src/ports/SkTypeface_win_dw.h index 72d86a238a2f..e09072703f94 100644 --- a/third_party/skia/src/ports/SkTypeface_win_dw.h +++ b/third_party/skia/src/ports/SkTypeface_win_dw.h @@ -68,6 +68,10 @@ class DWriteFontTypeface : public SkTypeface { if (!SUCCEEDED(fFactory->QueryInterface(&fFactory2))) { SkASSERT_RELEASE(nullptr == fFactory2.get()); } + + if (fDWriteFontFace1 && fDWriteFontFace1->IsMonospacedFont()) { + this->setIsFixedPitch(true); + } } public: diff --git a/third_party/skia/src/shaders/SkColorFilterShader.cpp b/third_party/skia/src/shaders/SkColorFilterShader.cpp index 50bb4236c9b1..3ab9098136bf 100644 --- a/third_party/skia/src/shaders/SkColorFilterShader.cpp +++ b/third_party/skia/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/SkRasterPipeline.h" #include "src/core/SkReadBuffer.h" #include "src/core/SkWriteBuffer.h" #include "src/shaders/SkColorFilterShader.h" @@ -16,9 +17,12 @@ #include "src/gpu/GrFragmentProcessor.h" #endif -SkColorFilterShader::SkColorFilterShader(sk_sp shader, sk_sp filter) +SkColorFilterShader::SkColorFilterShader(sk_sp shader, + float alpha, + sk_sp filter) : fShader(std::move(shader)) , fFilter(std::move(filter)) + , fAlpha (alpha) { SkASSERT(fShader); SkASSERT(fFilter); @@ -30,11 +34,18 @@ sk_sp SkColorFilterShader::CreateProc(SkReadBuffer& buffer) { if (!shader || !filter) { return nullptr; } - return sk_make_sp(shader, filter); + return sk_make_sp(shader, 1.0f, filter); +} + +bool SkColorFilterShader::isOpaque() const { + return fShader->isOpaque() + && fAlpha == 1.0f + && (fFilter->getFlags() & SkColorFilter::kAlphaUnchanged_Flag) != 0; } void SkColorFilterShader::flatten(SkWriteBuffer& buffer) const { buffer.writeFlattenable(fShader.get()); + SkASSERT(fAlpha == 1.0f); // Not exposed in public API SkShader::makeWithColorFilter(). buffer.writeFlattenable(fFilter.get()); } @@ -42,10 +53,40 @@ bool SkColorFilterShader::onAppendStages(const SkStageRec& rec) const { if (!as_SB(fShader)->appendStages(rec)) { return false; } + if (fAlpha != 1.0f) { + rec.fPipeline->append(SkRasterPipeline::scale_1_float, rec.fAlloc->make(fAlpha)); + } fFilter->appendStages(rec, fShader->isOpaque()); return true; } +bool SkColorFilterShader::onProgram(skvm::Builder* p, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const { + // Run the shader. + if (!as_SB(fShader)->program(p, dstCS, uniforms, x,y, r,g,b,a)) { + return false; + } + + // Scale that by alpha. + if (fAlpha != 1.0f) { + skvm::F32 A = p->uniformF(uniforms->pushF(fAlpha)); + *r = p->mul(*r, A); + *g = p->mul(*g, A); + *b = p->mul(*b, A); + *a = p->mul(*a, A); + } + + // Finally run that through the color filter. + if (!fFilter->program(p, dstCS, uniforms, r,g,b,a)) { + return false; + } + + return true; +} + #if SK_SUPPORT_GPU ///////////////////////////////////////////////////////////////////// @@ -58,6 +99,9 @@ std::unique_ptr SkColorFilterShader::asFragmentProcessor( 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; @@ -75,5 +119,5 @@ sk_sp SkShader::makeWithColorFilter(sk_sp filter) const if (!filter) { return sk_ref_sp(base); } - return sk_make_sp(sk_ref_sp(base), filter); + return sk_make_sp(sk_ref_sp(base), 1.0f, filter); } diff --git a/third_party/skia/src/shaders/SkColorFilterShader.h b/third_party/skia/src/shaders/SkColorFilterShader.h index bbe9f16132c4..8cc8a0b92b4d 100644 --- a/third_party/skia/src/shaders/SkColorFilterShader.h +++ b/third_party/skia/src/shaders/SkColorFilterShader.h @@ -15,21 +15,28 @@ class SkArenaAlloc; class SkColorFilterShader : public SkShaderBase { public: - SkColorFilterShader(sk_sp shader, sk_sp filter); + SkColorFilterShader(sk_sp shader, float alpha, sk_sp filter); #if SK_SUPPORT_GPU std::unique_ptr asFragmentProcessor(const GrFPArgs&) const override; #endif -protected: +private: + bool isOpaque() const override; void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; -private: + bool onProgram(skvm::Builder*, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const override; + SK_FLATTENABLE_HOOKS(SkColorFilterShader) sk_sp fShader; sk_sp fFilter; + float fAlpha; typedef SkShaderBase INHERITED; }; diff --git a/third_party/skia/src/shaders/SkColorShader.cpp b/third_party/skia/src/shaders/SkColorShader.cpp index 5d40c7b9df08..75668a8f7f46 100644 --- a/third_party/skia/src/shaders/SkColorShader.cpp +++ b/third_party/skia/src/shaders/SkColorShader.cpp @@ -90,6 +90,38 @@ bool SkColor4Shader::onAppendStages(const SkStageRec& rec) const { return true; } +static bool common_program(SkColor4f color, SkColorSpace* cs, + skvm::Builder* p, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) { + SkColorSpaceXformSteps( cs, kUnpremul_SkAlphaType, + dstCS, kPremul_SkAlphaType).apply(color.vec()); + + *r = p->uniformF(uniforms->pushF(color.fR)); + *g = p->uniformF(uniforms->pushF(color.fG)); + *b = p->uniformF(uniforms->pushF(color.fB)); + *a = p->uniformF(uniforms->pushF(color.fA)); + return true; +} + +bool SkColorShader::onProgram(skvm::Builder* p, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 /*x*/, skvm::F32 /*y*/, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const { + return common_program(SkColor4f::FromColor(fColor), sk_srgb_singleton(), + p, dstCS, uniforms, r,g,b,a); +} +bool SkColor4Shader::onProgram(skvm::Builder* p, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 /*x*/, skvm::F32 /*y*/, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const { + return common_program(fColor, fColorSpace.get(), + p, dstCS, uniforms, r,g,b,a); +} + #if SK_SUPPORT_GPU #include "src/gpu/GrColorInfo.h" diff --git a/third_party/skia/src/shaders/SkColorShader.h b/third_party/skia/src/shaders/SkColorShader.h index 4e152e3289dd..2d73ad2dbc41 100644 --- a/third_party/skia/src/shaders/SkColorShader.h +++ b/third_party/skia/src/shaders/SkColorShader.h @@ -44,6 +44,12 @@ class SkColorShader : public SkShaderBase { bool onAppendStages(const SkStageRec&) const override; + bool onProgram(skvm::Builder*, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const override; + SkColor fColor; }; @@ -64,6 +70,12 @@ class SkColor4Shader : public SkShaderBase { void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; + bool onProgram(skvm::Builder*, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const override; + sk_sp fColorSpace; const SkColor4f fColor; }; diff --git a/third_party/skia/src/shaders/SkImageShader.cpp b/third_party/skia/src/shaders/SkImageShader.cpp old mode 100644 new mode 100755 index 5bc13e587c79..4cebcb4c9d26 --- a/third_party/skia/src/shaders/SkImageShader.cpp +++ b/third_party/skia/src/shaders/SkImageShader.cpp @@ -9,6 +9,7 @@ #include "src/core/SkBitmapController.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkColorSpaceXformSteps.h" +#include "src/core/SkOpts.h" #include "src/core/SkRasterPipeline.h" #include "src/core/SkReadBuffer.h" #include "src/core/SkWriteBuffer.h" @@ -72,20 +73,24 @@ bool SkImageShader::isOpaque() const { #ifdef SK_ENABLE_LEGACY_SHADERCONTEXT static bool legacy_shader_can_handle(const SkMatrix& inv) { - if (!inv.isScaleTranslate()) { + if (inv.hasPerspective()) { + return false; + } + + // Scale+translate methods are always present, but affine might not be. + if (!SkOpts::S32_alpha_D32_filter_DXDY && !inv.isScaleTranslate()) { return false; } // legacy code uses SkFixed 32.32, so ensure the inverse doesn't map device coordinates // out of range. const SkScalar max_dev_coord = 32767.0f; - SkRect src; - SkAssertResult(inv.mapRect(&src, SkRect::MakeWH(max_dev_coord, max_dev_coord))); + const SkRect src = inv.mapRect(SkRect::MakeWH(max_dev_coord, max_dev_coord)); // take 1/4 of max signed 32bits so we have room to subtract local values const SkScalar max_fixed32dot32 = SK_MaxS32 * 0.25f; if (!SkRect::MakeLTRB(-max_fixed32dot32, -max_fixed32dot32, - max_fixed32dot32, max_fixed32dot32).contains(src)) { + +max_fixed32dot32, +max_fixed32dot32).contains(src)) { return false; } @@ -101,9 +106,11 @@ SkShaderBase::Context* SkImageShader::onMakeContext(const ContextRec& rec, if (fImage->colorType() != kN32_SkColorType) { return nullptr; } +#if !defined(SK_SUPPORT_LEGACY_TILED_BITMAPS) if (fTileModeX != fTileModeY) { return nullptr; } +#endif if (fTileModeX == SkTileMode::kDecal || fTileModeY == SkTileMode::kDecal) { return nullptr; } @@ -228,7 +235,7 @@ std::unique_ptr SkImageShader::asFragmentProcessor( return nullptr; } - GrColorType srcColorType = SkColorTypeToGrColorType(fImage->colorType()); + SkAlphaType srcAlphaType = fImage->alphaType(); lmInverse.postScale(scaleAdjust[0], scaleAdjust[1]); @@ -237,22 +244,21 @@ std::unique_ptr SkImageShader::asFragmentProcessor( // domainX and domainY will properly apply the decal effect with the texture domain used in // the bicubic filter if clamp to border was unsupported in hardware static constexpr auto kDir = GrBicubicEffect::Direction::kXY; - inner = GrBicubicEffect::Make(std::move(proxy), srcColorType, lmInverse, wrapModes, domainX, - domainY, kDir, fImage->alphaType()); + inner = GrBicubicEffect::Make(std::move(proxy), lmInverse, wrapModes, domainX, domainY, + kDir, srcAlphaType); } else { + auto dimensions = proxy->dimensions(); + inner = GrSimpleTextureEffect::Make(std::move(proxy), srcAlphaType, lmInverse, + samplerState); if (domainX != GrTextureDomain::kIgnore_Mode || domainY != GrTextureDomain::kIgnore_Mode) { - SkRect domain = GrTextureDomain::MakeTexelDomain( - SkIRect::MakeWH(proxy->width(), proxy->height()), - domainX, domainY); - inner = GrTextureDomainEffect::Make(std::move(proxy), srcColorType, lmInverse, domain, - domainX, domainY, samplerState); - } else { - inner = GrSimpleTextureEffect::Make(std::move(proxy), srcColorType, lmInverse, - samplerState); + SkRect domain = GrTextureDomain::MakeTexelDomain(SkIRect::MakeSize(dimensions), + domainX, domainY); + inner = GrDomainEffect::Make(std::move(inner), domain, domainX, domainY, + samplerState.filter()); } } - inner = GrColorSpaceXformEffect::Make(std::move(inner), fImage->colorSpace(), - fImage->alphaType(), args.fDstColorInfo->colorSpace()); + inner = GrColorSpaceXformEffect::Make(std::move(inner), fImage->colorSpace(), srcAlphaType, + args.fDstColorInfo->colorSpace()); bool isAlphaOnly = SkColorTypeIsAlphaOnly(fImage->colorType()); if (isAlphaOnly) { diff --git a/third_party/skia/src/shaders/SkLights.h b/third_party/skia/src/shaders/SkLights.h index f22d6bbadb33..7e2dedddf955 100644 --- a/third_party/skia/src/shaders/SkLights.h +++ b/third_party/skia/src/shaders/SkLights.h @@ -20,7 +20,7 @@ class SkWriteBuffer; SkLights encapsulates a set of directional, point and ambient lights for use with the SkLightingShader. */ -class SK_API SkLights : public SkRefCnt { +class SkLights : public SkRefCnt { public: class Light { public: diff --git a/third_party/skia/src/shaders/SkPerlinNoiseShader.cpp b/third_party/skia/src/shaders/SkPerlinNoiseShader.cpp index 812dc1694f20..46cf30cb82dc 100644 --- a/third_party/skia/src/shaders/SkPerlinNoiseShader.cpp +++ b/third_party/skia/src/shaders/SkPerlinNoiseShader.cpp @@ -738,7 +738,7 @@ 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.getMatrix(); } + const SkMatrix& matrix() const { return fCoordTransform.matrix(); } private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { @@ -1166,7 +1166,7 @@ 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.getMatrix(); } + const SkMatrix& matrix() const { return fCoordTransform.matrix(); } private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { diff --git a/third_party/skia/src/shaders/SkRTShader.h b/third_party/skia/src/shaders/SkRTShader.h index 57d69c324eda..55af34bcdf37 100644 --- a/third_party/skia/src/shaders/SkRTShader.h +++ b/third_party/skia/src/shaders/SkRTShader.h @@ -49,7 +49,7 @@ class SkRTShader : public SkShaderBase { typedef SkShaderBase INHERITED; }; -class SkRuntimeShaderFactory { +class SK_API SkRuntimeShaderFactory { public: SkRuntimeShaderFactory(SkString sksl, bool isOpaque); diff --git a/third_party/skia/src/shaders/SkShader.cpp b/third_party/skia/src/shaders/SkShader.cpp index 0095a9509c4e..7455488115be 100644 --- a/third_party/skia/src/shaders/SkShader.cpp +++ b/third_party/skia/src/shaders/SkShader.cpp @@ -111,7 +111,12 @@ SkShaderBase::Context::Context(const SkShaderBase& shader, const ContextRec& rec SkShaderBase::Context::~Context() {} bool SkShaderBase::ContextRec::isLegacyCompatible(SkColorSpace* shaderColorSpace) const { - return !SkColorSpaceXformSteps::Required(shaderColorSpace, fDstColorSpace); + // In legacy pipelines, shaders always produce premul (or opaque) and the destination is also + // always premul (or opaque). (And those "or opaque" caveats won't make any difference here.) + SkAlphaType shaderAT = kPremul_SkAlphaType, + dstAT = kPremul_SkAlphaType; + return 0 == SkColorSpaceXformSteps{shaderColorSpace, shaderAT, + fDstColorSpace, dstAT}.flags.mask(); } SkImage* SkShader::isAImage(SkMatrix* localMatrix, SkTileMode xy[2]) const { @@ -192,6 +197,32 @@ bool SkShaderBase::onAppendStages(const SkStageRec& rec) const { return false; } +bool SkShaderBase::program(skvm::Builder* p, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const { + // Force opaque alpha for all opaque shaders. + // + // This is primarily nice in that we usually have a 1.0f constant splat + // somewhere in the program anyway, and this will let us drop the work the + // shader notionally does to produce alpha, p->extract(...), etc. in favor + // of that simple hoistable splat. + // + // More subtly, it makes isOpaque() a parameter to all shader program + // generation, guaranteeing that is-opaque bit is mixed into the overall + // 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 (this->onProgram(p, dstCS, uniforms, x,y, r,g,b,a)) { + if (this->isOpaque()) { + *a = p->splat(1.0f); + } + return true; + } + return false; +} + /////////////////////////////////////////////////////////////////////////////////////////////////// sk_sp SkEmptyShader::CreateProc(SkReadBuffer&) { diff --git a/third_party/skia/src/shaders/SkShaderBase.h b/third_party/skia/src/shaders/SkShaderBase.h index e071e22db9df..4acc1efa8b81 100644 --- a/third_party/skia/src/shaders/SkShaderBase.h +++ b/third_party/skia/src/shaders/SkShaderBase.h @@ -15,6 +15,7 @@ #include "src/core/SkEffectPriv.h" #include "src/core/SkMask.h" #include "src/core/SkTLazy.h" +#include "src/core/SkVM.h" #if SK_SUPPORT_GPU #include "src/gpu/GrFPArgs.h" @@ -206,6 +207,20 @@ class SkShaderBase : public SkShader { return this->onAppendUpdatableStages(rec); } + bool program(skvm::Builder*, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const; + + virtual bool onProgram(skvm::Builder*, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, + skvm::F32 x, skvm::F32 y, + skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const { + return false; + } + protected: SkShaderBase(const SkMatrix* localMatrix = nullptr); diff --git a/third_party/skia/src/sksl/README b/third_party/skia/src/sksl/README index c1d7ae6b33ad..906fd8149847 100644 --- a/third_party/skia/src/sksl/README +++ b/third_party/skia/src/sksl/README @@ -24,7 +24,7 @@ Differences from GLSL the same as if and switch in all respects other than it being a compile-time error to use a non-constant expression as a test. * GLSL caps can be referenced via the syntax 'sk_Caps.', e.g. - sk_Caps.sampleVariablesSupport. The value will be a constant boolean or int, + sk_Caps.canUseAnyFunctionInShader. The value will be a constant boolean or int, as appropriate. As SkSL supports constant folding and branch elimination, this means that an 'if' statement which statically queries a cap will collapse down to the chosen branch, meaning that: diff --git a/third_party/skia/src/sksl/SkSLByteCodeGenerator.cpp b/third_party/skia/src/sksl/SkSLByteCodeGenerator.cpp index 560a3a76b8d7..e7c214bcfd66 100644 --- a/third_party/skia/src/sksl/SkSLByteCodeGenerator.cpp +++ b/third_party/skia/src/sksl/SkSLByteCodeGenerator.cpp @@ -1025,8 +1025,16 @@ void ByteCodeGenerator::writeIntrinsicCall(const FunctionCall& c) { } void ByteCodeGenerator::writeFunctionCall(const FunctionCall& f) { - // Builtins have simple signatures... - if (f.fFunction.fBuiltin) { + // Find the index of the function we're calling. We explicitly do not allow calls to functions + // before they're defined. This is an easy-to-understand rule that prevents recursion. + int idx = -1; + for (size_t i = 0; i < fFunctions.size(); ++i) { + if (f.fFunction.matches(fFunctions[i]->fDeclaration)) { + idx = i; + break; + } + } + if (idx == -1) { for (const auto& arg : f.fArguments) { this->writeExpression(*arg); } @@ -1034,18 +1042,11 @@ void ByteCodeGenerator::writeFunctionCall(const FunctionCall& f) { return; } - // Find the index of the function we're calling. We explicitly do not allow calls to functions - // before they're defined. This is an easy-to-understand rule that prevents recursion. - size_t idx; - for (idx = 0; idx < fFunctions.size(); ++idx) { - if (f.fFunction.matches(fFunctions[idx]->fDeclaration)) { - break; - } - } + if (idx > 255) { fErrors.error(f.fOffset, "Function count limit exceeded"); return; - } else if (idx >= fFunctions.size()) { + } else if (idx >= (int) fFunctions.size()) { fErrors.error(f.fOffset, "Call to undefined function"); return; } diff --git a/third_party/skia/src/sksl/SkSLCPPCodeGenerator.cpp b/third_party/skia/src/sksl/SkSLCPPCodeGenerator.cpp index b59810fa0e7c..f814778734a5 100644 --- a/third_party/skia/src/sksl/SkSLCPPCodeGenerator.cpp +++ b/third_party/skia/src/sksl/SkSLCPPCodeGenerator.cpp @@ -127,8 +127,7 @@ void CPPCodeGenerator::writeIndexExpression(const IndexExpression& i) { } int64_t index = ((IntLiteral&) *i.fIndex).fValue; String name = "sk_TransformedCoords2D_" + to_string(index); - fFormatArgs.push_back("_outer.computeLocalCoordsInVertexShader() ? " + name + - ".c_str() : \"_coords\""); + fFormatArgs.push_back(name + ".c_str()"); if (fWrittenTransformedCoords.find(index) == fWrittenTransformedCoords.end()) { addExtraEmitCodeLine("SkString " + name + " = fragBuilder->ensureCoords2D(args.fTransformedCoords[" + @@ -503,7 +502,7 @@ void CPPCodeGenerator::writeFunctionCall(const FunctionCall& c) { SkASSERT(c.fArguments[0]->fKind == Expression::kVariableReference_Kind); String sampler = this->getSamplerHandle(((VariableReference&) *c.fArguments[0]).fVariable); fFormatArgs.push_back("fragBuilder->getProgramBuilder()->samplerSwizzle(" + sampler + - ").c_str()"); + ").asString().c_str()"); } } diff --git a/third_party/skia/src/sksl/SkSLCompiler.cpp b/third_party/skia/src/sksl/SkSLCompiler.cpp index 2475702eb772..a359388c7ac4 100644 --- a/third_party/skia/src/sksl/SkSLCompiler.cpp +++ b/third_party/skia/src/sksl/SkSLCompiler.cpp @@ -28,6 +28,11 @@ #include "src/sksl/ir/SkSLUnresolvedFunction.h" #include "src/sksl/ir/SkSLVarDeclarations.h" +#if !defined(SKSL_STANDALONE) & SK_SUPPORT_GPU +#include "include/gpu/GrContextOptions.h" +#include "src/gpu/GrShaderCaps.h" +#endif + #ifdef SK_ENABLE_SPIRV_VALIDATION #include "spirv-tools/libspirv.hpp" #endif @@ -71,6 +76,36 @@ static const char* SKSL_PIPELINE_INCLUDE = namespace SkSL { +static void grab_intrinsics(std::vector>* src, + std::map, bool>>* target) { + for (auto& element : *src) { + switch (element->fKind) { + case ProgramElement::kFunction_Kind: { + FunctionDefinition& f = (FunctionDefinition&) *element; + StringFragment name = f.fDeclaration.fName; + SkASSERT(target->find(name) == target->end()); + (*target)[name] = std::make_pair(std::move(element), false); + break; + } + case ProgramElement::kEnum_Kind: { + Enum& e = (Enum&) *element; + StringFragment name = e.fTypeName; + SkASSERT(target->find(name) == target->end()); + (*target)[name] = std::make_pair(std::move(element), false); + break; + } + default: +#if defined(STARBOARD) + SbLogRaw("unsupported include file element\n"); +#else + printf("unsupported include file element\n"); +#endif // defined(STARBOARD) + SkASSERT(false); + } + } +} + + Compiler::Compiler(Flags flags) : fFlags(flags) , fContext(new Context()) @@ -227,9 +262,14 @@ Compiler::Compiler(Flags flags) *fContext->fSkArgs_Type, Variable::kGlobal_Storage); fIRGenerator->fSymbolTable->add(skArgsName, std::unique_ptr(skArgs)); - std::vector> ignored; + fIRGenerator->fIntrinsics = &fGPUIntrinsics; + std::vector> gpuIntrinsics; this->processIncludeFile(Program::kFragment_Kind, SKSL_GPU_INCLUDE, strlen(SKSL_GPU_INCLUDE), - symbols, &ignored, &fGpuSymbolTable); + symbols, &gpuIntrinsics, &fGpuSymbolTable); + grab_intrinsics(&gpuIntrinsics, &fGPUIntrinsics); + // need to hang on to the source so that FunctionDefinition.fSource pointers in this file + // remain valid + fGpuIncludeSource = std::move(fIRGenerator->fFile); this->processIncludeFile(Program::kVertex_Kind, SKSL_VERT_INCLUDE, strlen(SKSL_VERT_INCLUDE), fGpuSymbolTable, &fVertexInclude, &fVertexSymbolTable); this->processIncludeFile(Program::kFragment_Kind, SKSL_FRAG_INCLUDE, strlen(SKSL_FRAG_INCLUDE), @@ -239,9 +279,11 @@ Compiler::Compiler(Flags flags) this->processIncludeFile(Program::kPipelineStage_Kind, SKSL_PIPELINE_INCLUDE, strlen(SKSL_PIPELINE_INCLUDE), fGpuSymbolTable, &fPipelineInclude, &fPipelineSymbolTable); + std::vector> interpIntrinsics; this->processIncludeFile(Program::kGeneric_Kind, SKSL_INTERP_INCLUDE, strlen(SKSL_INTERP_INCLUDE), symbols, &fInterpreterInclude, &fInterpreterSymbolTable); + grab_intrinsics(&interpIntrinsics, &fInterpreterIntrinsics); } Compiler::~Compiler() { @@ -252,8 +294,17 @@ void Compiler::processIncludeFile(Program::Kind kind, const char* src, size_t le std::shared_ptr base, std::vector>* outElements, std::shared_ptr* outSymbolTable) { +#ifdef SK_DEBUG + String source(src, length); + fSource = &source; +#endif fIRGenerator->fSymbolTable = std::move(base); Program::Settings settings; +#if !defined(SKSL_STANDALONE) & SK_SUPPORT_GPU + GrContextOptions opts; + GrShaderCaps caps(opts); + settings.fCaps = ∩︀ +#endif fIRGenerator->start(&settings, nullptr); fIRGenerator->convertProgram(kind, src, length, *fTypes, outElements); if (this->fErrorCount) { @@ -262,6 +313,9 @@ void Compiler::processIncludeFile(Program::Kind kind, const char* src, size_t le SkASSERT(!fErrorCount); fIRGenerator->fSymbolTable->markAllFunctionsBuiltin(); *outSymbolTable = fIRGenerator->fSymbolTable; +#ifdef SK_DEBUG + fSource = nullptr; +#endif } // add the definition created by assigning to the lvalue to the definition set @@ -1294,7 +1348,8 @@ void Compiler::scanCFG(FunctionDefinition& f) { // check for missing return if (f.fDeclaration.fReturnType != *fContext->fVoid_Type) { if (cfg.fBlocks[cfg.fExit].fEntrances.size()) { - this->error(f.fOffset, String("function can exit without returning a value")); + this->error(f.fOffset, String("function '" + String(f.fDeclaration.fName) + + "' can exit without returning a value")); } } } @@ -1317,22 +1372,26 @@ std::unique_ptr Compiler::convertProgram(Program::Kind kind, String tex case Program::kVertex_Kind: inherited = &fVertexInclude; fIRGenerator->fSymbolTable = fVertexSymbolTable; + fIRGenerator->fIntrinsics = &fGPUIntrinsics; fIRGenerator->start(&settings, inherited); break; case Program::kFragment_Kind: inherited = &fFragmentInclude; fIRGenerator->fSymbolTable = fFragmentSymbolTable; + fIRGenerator->fIntrinsics = &fGPUIntrinsics; fIRGenerator->start(&settings, inherited); break; case Program::kGeometry_Kind: inherited = &fGeometryInclude; fIRGenerator->fSymbolTable = fGeometrySymbolTable; + fIRGenerator->fIntrinsics = &fGPUIntrinsics; fIRGenerator->start(&settings, inherited); break; case Program::kFragmentProcessor_Kind: inherited = nullptr; fIRGenerator->fSymbolTable = fGpuSymbolTable; fIRGenerator->start(&settings, nullptr); + fIRGenerator->fIntrinsics = &fGPUIntrinsics; fIRGenerator->convertProgram(kind, SKSL_FP_INCLUDE, strlen(SKSL_FP_INCLUDE), *fTypes, &elements); fIRGenerator->fSymbolTable->markAllFunctionsBuiltin(); @@ -1340,11 +1399,13 @@ std::unique_ptr Compiler::convertProgram(Program::Kind kind, String tex case Program::kPipelineStage_Kind: inherited = &fPipelineInclude; fIRGenerator->fSymbolTable = fPipelineSymbolTable; + fIRGenerator->fIntrinsics = &fGPUIntrinsics; fIRGenerator->start(&settings, inherited); break; case Program::kGeneric_Kind: inherited = &fInterpreterInclude; fIRGenerator->fSymbolTable = fInterpreterSymbolTable; + fIRGenerator->fIntrinsics = &fInterpreterIntrinsics; fIRGenerator->start(&settings, inherited); break; } diff --git a/third_party/skia/src/sksl/SkSLCompiler.h b/third_party/skia/src/sksl/SkSLCompiler.h index 7ef368d58ba3..a4b564e43ee2 100644 --- a/third_party/skia/src/sksl/SkSLCompiler.h +++ b/third_party/skia/src/sksl/SkSLCompiler.h @@ -8,9 +8,11 @@ #ifndef SKSL_COMPILER #define SKSL_COMPILER +#include #include #include #include +#include "src/sksl/SkSLASTFile.h" #include "src/sksl/SkSLCFGGenerator.h" #include "src/sksl/SkSLContext.h" #include "src/sksl/SkSLErrorReporter.h" @@ -36,6 +38,7 @@ #define SK_HEIGHT_BUILTIN 10012 #define SK_FRAGCOORD_BUILTIN 15 #define SK_CLOCKWISE_BUILTIN 17 +#define SK_SAMPLEMASK_BUILTIN 20 #define SK_VERTEXID_BUILTIN 42 #define SK_INSTANCEID_BUILTIN 43 #define SK_CLIPDISTANCE_BUILTIN 3 @@ -101,6 +104,7 @@ class SK_API Compiler : public ErrorReporter { SkString fName; std::vector fParameters; SkString fBody; + std::vector fFormatArgs; }; #endif @@ -212,6 +216,9 @@ class SK_API Compiler : public ErrorReporter { Position position(int offset); + std::map, bool>> fGPUIntrinsics; + std::map, bool>> fInterpreterIntrinsics; + std::unique_ptr fGpuIncludeSource; std::shared_ptr fGpuSymbolTable; std::vector> fVertexInclude; std::shared_ptr fVertexSymbolTable; diff --git a/third_party/skia/src/sksl/SkSLGLSLCodeGenerator.cpp b/third_party/skia/src/sksl/SkSLGLSLCodeGenerator.cpp index ed1f41152b45..ddd39eeb67e4 100644 --- a/third_party/skia/src/sksl/SkSLGLSLCodeGenerator.cpp +++ b/third_party/skia/src/sksl/SkSLGLSLCodeGenerator.cpp @@ -158,6 +158,8 @@ String GLSLCodeGenerator::getTypeName(const Type& type) { } break; } + case Type::kEnum_Kind: + return "int"; default: return type.name(); } @@ -801,6 +803,10 @@ void GLSLCodeGenerator::writeVariableReference(const VariableReference& ref) { case SK_CLOCKWISE_BUILTIN: this->write(fProgram.fSettings.fFlipY ? "(!gl_FrontFacing)" : "gl_FrontFacing"); break; + case SK_SAMPLEMASK_BUILTIN: + SkASSERT(fProgram.fSettings.fCaps->sampleMaskSupport()); + this->write("gl_SampleMask"); + break; case SK_VERTEXID_BUILTIN: this->write("gl_VertexID"); break; diff --git a/third_party/skia/src/sksl/SkSLHCodeGenerator.cpp b/third_party/skia/src/sksl/SkSLHCodeGenerator.cpp index 4b56937e44a5..c8fad2d14659 100644 --- a/third_party/skia/src/sksl/SkSLHCodeGenerator.cpp +++ b/third_party/skia/src/sksl/SkSLHCodeGenerator.cpp @@ -70,7 +70,7 @@ Layout::CType HCodeGenerator::ParameterCType(const Context& context, const Type& } else if (type == *context.fFloat4x4_Type || type == *context.fHalf4x4_Type) { return Layout::CType::kSkMatrix44; } else if (type.kind() == Type::kSampler_Kind) { - return Layout::CType::kGrTextureProxy; + return Layout::CType::kGrSurfaceProxy; } else if (type == *context.fFragmentProcessor_Type) { return Layout::CType::kGrFragmentProcessor; } @@ -286,7 +286,7 @@ void HCodeGenerator::writeConstructor() { this->writef(" %s_index = this->numChildProcessors();", FieldName(String(param->fName).c_str()).c_str()); if (fSectionAndParameterHelper.hasCoordOverrides(*param)) { - this->writef(" %s->setComputeLocalCoordsInVertexShader(false);", + this->writef(" %s->setSampledWithExplicitCoords(true);", String(param->fName).c_str()); } this->writef(" this->registerChildProcessor(std::move(%s));", diff --git a/third_party/skia/src/sksl/SkSLIRGenerator.cpp b/third_party/skia/src/sksl/SkSLIRGenerator.cpp index 9b71c17ffdbd..51572352d155 100644 --- a/third_party/skia/src/sksl/SkSLIRGenerator.cpp +++ b/third_party/skia/src/sksl/SkSLIRGenerator.cpp @@ -36,6 +36,7 @@ #include "src/sksl/ir/SkSLIntLiteral.h" #include "src/sksl/ir/SkSLInterfaceBlock.h" #include "src/sksl/ir/SkSLLayout.h" +#include "src/sksl/ir/SkSLNop.h" #include "src/sksl/ir/SkSLNullLiteral.h" #include "src/sksl/ir/SkSLPostfixExpression.h" #include "src/sksl/ir/SkSLPrefixExpression.h" @@ -126,7 +127,6 @@ static void fill_caps(const SKSL_CAPS_CLASS& caps, CAP(fbFetchNeedsCustomOutput); CAP(flatInterpolationSupport); CAP(noperspectiveInterpolationSupport); - CAP(sampleVariablesSupport); CAP(externalTextureSupport); CAP(mustEnableAdvBlendEqs); CAP(mustEnableSpecificAdvBlendEqs); @@ -169,6 +169,10 @@ void IRGenerator::start(const Program::Settings* settings, } } } + SkASSERT(fIntrinsics); + for (auto& pair : *fIntrinsics) { + pair.second.second = false; + } } std::unique_ptr IRGenerator::convertExtension(int offset, StringFragment name) { @@ -833,7 +837,7 @@ void IRGenerator::convertFunction(const ASTNode& f) { return; } } - if (other->fDefined) { + if (other->fDefined && !other->fBuiltin) { fErrors.error(f.fOffset, "duplicate definition of " + other->description()); } @@ -893,8 +897,10 @@ void IRGenerator::convertFunction(const ASTNode& f) { if (Program::kVertex_Kind == fKind && fd.fName == "main" && fRTAdjust) { body->fStatements.insert(body->fStatements.end(), this->getNormalizeSkPositionCode()); } - fProgramElements->push_back(std::unique_ptr( - new FunctionDefinition(f.fOffset, *decl, std::move(body)))); + std::unique_ptr result(new FunctionDefinition(f.fOffset, *decl, + std::move(body))); + result->fSource = &f; + fProgramElements->push_back(std::move(result)); } } @@ -1748,6 +1754,16 @@ std::unique_ptr IRGenerator::convertTernaryExpression(const ASTNode& std::unique_ptr IRGenerator::call(int offset, const FunctionDeclaration& function, std::vector> arguments) { + if (function.fBuiltin) { + auto found = fIntrinsics->find(function.fName); + if (found != fIntrinsics->end() && !found->second.second) { + found->second.second = true; + const FunctionDeclaration* old = fCurrentFunction; + fCurrentFunction = nullptr; + this->convertFunction(*((FunctionDefinition&) *found->second.first).fSource); + fCurrentFunction = old; + } + } if (function.fParameters.size() != arguments.size()) { String msg = "call to '" + function.fName + "' expected " + to_string((uint64_t) function.fParameters.size()) + @@ -2246,10 +2262,23 @@ std::unique_ptr IRGenerator::convertTypeField(int offset, const Type fSymbolTable = ((Enum&) *e).fSymbols; result = convertIdentifier(ASTNode(&fFile->fNodes, offset, ASTNode::Kind::kIdentifier, field)); + SkASSERT(result->fKind == Expression::kVariableReference_Kind); + const Variable& v = ((VariableReference&) *result).fVariable; + SkASSERT(v.fInitialValue); + SkASSERT(v.fInitialValue->fKind == Expression::kIntLiteral_Kind); + result.reset(new IntLiteral(offset, ((IntLiteral&) *v.fInitialValue).fValue, &type)); fSymbolTable = old; + break; } } if (!result) { + auto found = fIntrinsics->find(type.fName); + if (found != fIntrinsics->end()) { + SkASSERT(!found->second.second); + found->second.second = true; + fProgramElements->push_back(found->second.first->clone()); + return this->convertTypeField(offset, type, field); + } fErrors.error(offset, "type '" + type.fName + "' does not have a field named '" + field + "'"); } diff --git a/third_party/skia/src/sksl/SkSLIRGenerator.h b/third_party/skia/src/sksl/SkSLIRGenerator.h index 20a556f4e3ec..a0884445f432 100644 --- a/third_party/skia/src/sksl/SkSLIRGenerator.h +++ b/third_party/skia/src/sksl/SkSLIRGenerator.h @@ -8,6 +8,8 @@ #ifndef SKSL_IRGENERATOR #define SKSL_IRGENERATOR +#include + #include "src/sksl/SkSLASTFile.h" #include "src/sksl/SkSLASTNode.h" #include "src/sksl/SkSLErrorReporter.h" @@ -143,6 +145,7 @@ class IRGenerator { std::unique_ptr applyInvocationIDWorkaround(std::unique_ptr main); // returns a statement which converts sk_Position from device to normalized coordinates std::unique_ptr getNormalizeSkPositionCode(); + void removeSampleMask(std::vector>* out); void checkValid(const Expression& expr); void setRefKind(const Expression& expr, VariableReference::RefKind kind); @@ -154,6 +157,9 @@ class IRGenerator { std::unordered_map fCapsMap; std::shared_ptr fRootSymbolTable; std::shared_ptr fSymbolTable; + // Symbols which have definitions in the include files. The bool tells us whether this + // intrinsic has been included already. + std::map, bool>>* fIntrinsics = nullptr; // holds extra temp variable declarations needed for the current function std::vector> fExtraVars; int fLoopLevel; diff --git a/third_party/skia/src/sksl/SkSLPipelineStageCodeGenerator.cpp b/third_party/skia/src/sksl/SkSLPipelineStageCodeGenerator.cpp index dde55f64d11e..aae626323dd7 100644 --- a/third_party/skia/src/sksl/SkSLPipelineStageCodeGenerator.cpp +++ b/third_party/skia/src/sksl/SkSLPipelineStageCodeGenerator.cpp @@ -215,6 +215,10 @@ static GrSLType glsltype(const Context& context, const Type& type) { return GrSLType::kFloat2_GrSLType; } else if (type == *context.fHalf2_Type) { return GrSLType::kHalf2_GrSLType; + } else if (type == *context.fFloat3_Type) { + return GrSLType::kFloat3_GrSLType; + } else if (type == *context.fHalf3_Type) { + return GrSLType::kHalf3_GrSLType; } else if (type == *context.fFloat4_Type) { return GrSLType::kFloat4_GrSLType; } else if (type == *context.fHalf4_Type) { @@ -262,6 +266,7 @@ void PipelineStageCodeGenerator::writeFunction(const FunctionDefinition& f) { } fOut = oldOut; result.fBody = buffer.str(); + result.fFormatArgs = std::move(*fFormatArgs); fFunctions->push_back(result); } } diff --git a/third_party/skia/src/sksl/SkSLSPIRVCodeGenerator.cpp b/third_party/skia/src/sksl/SkSLSPIRVCodeGenerator.cpp index b7ffd1c7de29..858d8ca7cf67 100644 --- a/third_party/skia/src/sksl/SkSLSPIRVCodeGenerator.cpp +++ b/third_party/skia/src/sksl/SkSLSPIRVCodeGenerator.cpp @@ -2713,6 +2713,22 @@ void SPIRVCodeGenerator::writePrecisionModifier(Precision precision, SpvId id) { } } +bool is_dead(const Variable& var) { + if (var.fReadCount || var.fWriteCount) { + return false; + } + // not entirely sure what the rules are for when it's safe to elide interface variables, but it + // causes various problems to elide some of them even when dead. But it also causes problems + // *not* to elide sk_SampleMask when it's not being used. + if (!(var.fModifiers.fFlags & (Modifiers::kIn_Flag | + Modifiers::kOut_Flag | + Modifiers::kUniform_Flag | + Modifiers::kBuffer_Flag))) { + return true; + } + return var.fModifiers.fLayout.fBuiltin == SK_SAMPLEMASK_BUILTIN; +} + #define BUILTIN_IGNORE 9999 void SPIRVCodeGenerator::writeGlobalVars(Program::Kind kind, const VarDeclarations& decl, OutputStream& out) { @@ -2725,10 +2741,10 @@ void SPIRVCodeGenerator::writeGlobalVars(Program::Kind kind, const VarDeclaratio // These haven't been implemented in our SPIR-V generator yet and we only currently use them // in the OpenGL backend. SkASSERT(!(var->fModifiers.fFlags & (Modifiers::kReadOnly_Flag | - Modifiers::kWriteOnly_Flag | - Modifiers::kCoherent_Flag | - Modifiers::kVolatile_Flag | - Modifiers::kRestrict_Flag))); + Modifiers::kWriteOnly_Flag | + Modifiers::kCoherent_Flag | + Modifiers::kVolatile_Flag | + Modifiers::kRestrict_Flag))); if (var->fModifiers.fLayout.fBuiltin == BUILTIN_IGNORE) { continue; } @@ -2737,13 +2753,7 @@ void SPIRVCodeGenerator::writeGlobalVars(Program::Kind kind, const VarDeclaratio SkASSERT(!fProgram.fSettings.fFragColorIsInOut); continue; } - if (!var->fReadCount && !var->fWriteCount && - !(var->fModifiers.fFlags & (Modifiers::kIn_Flag | - Modifiers::kOut_Flag | - Modifiers::kUniform_Flag | - Modifiers::kBuffer_Flag))) { - // variable is dead and not an input / output var (the Vulkan debug layers complain if - // we elide an interface var, even if it's dead) + if (is_dead(*var)) { continue; } SpvStorageClass_ storageClass; @@ -3161,7 +3171,8 @@ void SPIRVCodeGenerator::writeInstructions(const Program& program, OutputStream& SpvId id = this->writeInterfaceBlock(intf); if (((intf.fVariable.fModifiers.fFlags & Modifiers::kIn_Flag) || (intf.fVariable.fModifiers.fFlags & Modifiers::kOut_Flag)) && - intf.fVariable.fModifiers.fLayout.fBuiltin == -1) { + intf.fVariable.fModifiers.fLayout.fBuiltin == -1 && + !is_dead(intf.fVariable)) { interfaceVars.insert(id); } } @@ -3190,7 +3201,7 @@ void SPIRVCodeGenerator::writeInstructions(const Program& program, OutputStream& const Variable* var = entry.first; if (var->fStorage == Variable::kGlobal_Storage && ((var->fModifiers.fFlags & Modifiers::kIn_Flag) || - (var->fModifiers.fFlags & Modifiers::kOut_Flag))) { + (var->fModifiers.fFlags & Modifiers::kOut_Flag)) && !is_dead(*var)) { interfaceVars.insert(entry.second); } } diff --git a/third_party/skia/src/sksl/SkSLUtil.h b/third_party/skia/src/sksl/SkSLUtil.h index 96657120bac0..7713d6dc934d 100644 --- a/third_party/skia/src/sksl/SkSLUtil.h +++ b/third_party/skia/src/sksl/SkSLUtil.h @@ -96,7 +96,7 @@ class StandaloneShaderCaps { return true; } - bool sampleVariablesSupport() const { + bool sampleMaskSupport() const { return true; } @@ -377,6 +377,12 @@ class ShaderCapsFactory { result->fRemovePowWithConstantExponent = true; return result; } + + static sk_sp SampleMaskSupport() { + sk_sp result = Default(); + result->fSampleMaskSupport = true; + return result; + } }; #endif diff --git a/third_party/skia/src/sksl/ir/SkSLFunctionDefinition.h b/third_party/skia/src/sksl/ir/SkSLFunctionDefinition.h index 7344373bdf1a..511a0f8c2006 100644 --- a/third_party/skia/src/sksl/ir/SkSLFunctionDefinition.h +++ b/third_party/skia/src/sksl/ir/SkSLFunctionDefinition.h @@ -14,6 +14,8 @@ namespace SkSL { +struct ASTNode; + /** * A function definition (a declaration plus an associated block of code). */ @@ -35,6 +37,11 @@ struct FunctionDefinition : public ProgramElement { const FunctionDeclaration& fDeclaration; std::unique_ptr fBody; + // This pointer may be null, and even when non-null is not guaranteed to remain valid for the + // entire lifespan of this object. The parse tree's lifespan is normally controlled by + // IRGenerator, so the IRGenerator being destroyed or being used to compile another file will + // invalidate this pointer. + const ASTNode* fSource = nullptr; typedef ProgramElement INHERITED; }; diff --git a/third_party/skia/src/sksl/ir/SkSLIntLiteral.h b/third_party/skia/src/sksl/ir/SkSLIntLiteral.h index a95875c3ea32..fa45978663d0 100644 --- a/third_party/skia/src/sksl/ir/SkSLIntLiteral.h +++ b/third_party/skia/src/sksl/ir/SkSLIntLiteral.h @@ -45,7 +45,8 @@ struct IntLiteral : public Expression { } int coercionCost(const Type& target) const override { - if (target.isSigned() || target.isUnsigned() || target.isFloat()) { + if (target.isSigned() || target.isUnsigned() || target.isFloat() || + target.kind() == Type::kEnum_Kind) { return 0; } return INHERITED::coercionCost(target); diff --git a/third_party/skia/src/sksl/ir/SkSLLayout.h b/third_party/skia/src/sksl/ir/SkSLLayout.h index 143aff3d8f47..24c74319f70e 100644 --- a/third_party/skia/src/sksl/ir/SkSLLayout.h +++ b/third_party/skia/src/sksl/ir/SkSLLayout.h @@ -82,6 +82,9 @@ struct Layout { kDefault, kBool, kFloat, + kFloat2, + kFloat3, + kFloat4, kInt32, kSkRect, kSkIRect, @@ -92,7 +95,7 @@ struct Layout { kSkIPoint, kSkMatrix, kSkMatrix44, - kGrTextureProxy, + kGrSurfaceProxy, kGrFragmentProcessor, }; @@ -174,8 +177,8 @@ struct Layout { return "SkMatrix"; case CType::kSkMatrix44: return "SkMatrix44"; - case CType::kGrTextureProxy: - return "sk_sp"; + case CType::kGrSurfaceProxy: + return "sk_sp"; case CType::kGrFragmentProcessor: return "std::unique_ptr"; default: diff --git a/third_party/skia/src/sksl/ir/SkSLSymbolTable.cpp b/third_party/skia/src/sksl/ir/SkSLSymbolTable.cpp index 08bd6c2a651f..ed2cb4d565b0 100644 --- a/third_party/skia/src/sksl/ir/SkSLSymbolTable.cpp +++ b/third_party/skia/src/sksl/ir/SkSLSymbolTable.cpp @@ -110,9 +110,7 @@ void SymbolTable::markAllFunctionsBuiltin() { for (const auto& pair : fSymbols) { switch (pair.second->fKind) { case Symbol::kFunctionDeclaration_Kind: - if (!((FunctionDeclaration&)*pair.second).fDefined) { - ((FunctionDeclaration&)*pair.second).fBuiltin = true; - } + ((FunctionDeclaration&)*pair.second).fBuiltin = true; break; case Symbol::kUnresolvedFunction_Kind: for (auto& f : ((UnresolvedFunction&) *pair.second).fFunctions) { diff --git a/third_party/skia/src/sksl/lex.layout.c b/third_party/skia/src/sksl/lex.layout.c deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/sksl/lex.sksl.c b/third_party/skia/src/sksl/lex.sksl.c deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/skia/src/sksl/sksl_fp.inc b/third_party/skia/src/sksl/sksl_fp.inc index 0608230302bf..645ec762437d 100644 --- a/third_party/skia/src/sksl/sksl_fp.inc +++ b/third_party/skia/src/sksl/sksl_fp.inc @@ -4,6 +4,7 @@ STRINGIFY( layout(builtin=15) in float4 sk_FragCoord; layout(builtin=3) float sk_ClipDistance[1]; +layout(builtin=20) out int sk_SampleMask[1]; // 9999 is a temporary value that causes us to ignore these declarations beyond // adding them to the symbol table. This works fine in GLSL (where they do not @@ -12,8 +13,6 @@ layout(builtin=3) float sk_ClipDistance[1]; layout(builtin=9999) float4 gl_LastFragData[1]; layout(builtin=9999) half4 gl_LastFragColor; layout(builtin=9999) half4 gl_LastFragColorARM; -layout(builtin=9999) int gl_SampleMaskIn[1]; -layout(builtin=9999) out int gl_SampleMask[1]; layout(builtin=9999) half4 gl_SecondaryFragColorEXT; layout(builtin=10003) half4 sk_InColor; diff --git a/third_party/skia/src/sksl/sksl_frag.inc b/third_party/skia/src/sksl/sksl_frag.inc index 5bc5f55dce71..72b41772abc6 100644 --- a/third_party/skia/src/sksl/sksl_frag.inc +++ b/third_party/skia/src/sksl/sksl_frag.inc @@ -6,13 +6,12 @@ STRINGIFY( layout(builtin=15) in float4 sk_FragCoord; layout(builtin=17) in bool sk_Clockwise; // Similar to gl_FrontFacing, but defined in device space. layout(builtin=3) float sk_ClipDistance[1]; +layout(builtin=20) out int sk_SampleMask[1]; // 9999 is a temporary value that causes us to ignore these declarations beyond // adding them to the symbol table. This works fine in GLSL (where they do not // require any further handling) but will fail in SPIR-V. We'll have a better // solution for this soon. -layout(builtin=9999) int gl_SampleMaskIn[1]; -layout(builtin=9999) out int gl_SampleMask[1]; layout(builtin=9999) out half4 gl_SecondaryFragColorEXT; layout(location=0,index=0,builtin=10001) out half4 sk_FragColor; diff --git a/third_party/skia/src/svg/SkSVGDevice.cpp b/third_party/skia/src/svg/SkSVGDevice.cpp index 85e0b1bbd316..cb84960476ee 100644 --- a/third_party/skia/src/svg/SkSVGDevice.cpp +++ b/third_party/skia/src/svg/SkSVGDevice.cpp @@ -231,7 +231,7 @@ struct SkSVGDevice::MxCp { const SkClipStack* fClipStack; MxCp(const SkMatrix* mx, const SkClipStack* cs) : fMatrix(mx), fClipStack(cs) {} - MxCp(SkSVGDevice* device) : fMatrix(&device->ctm()), fClipStack(&device->cs()) {} + MxCp(SkSVGDevice* device) : fMatrix(&device->localToDevice()), fClipStack(&device->cs()) {} }; class SkSVGDevice::AutoElement : ::SkNoncopyable { @@ -728,7 +728,7 @@ void SkSVGDevice::syncClipStack(const SkClipStack& cs) { const auto& p = e->getDeviceSpacePath(); AutoElement path("path", fWriter); path.addPathAttributes(p); - if (p.getFillType() == SkPath::kEvenOdd_FillType) { + if (p.getNewFillType() == SkPathFillType::kEvenOdd) { path.addAttribute("clip-rule", "evenodd"); } } break; @@ -764,7 +764,7 @@ void SkSVGDevice::drawAnnotation(const SkRect& rect, const char key[], SkData* v if (!strcmp(SkAnnotationKeys::URL_Key(), key) || !strcmp(SkAnnotationKeys::Link_Named_Dest_Key(), key)) { this->cs().save(); - this->cs().clipRect(rect, this->ctm(), kIntersect_SkClipOp, true); + this->cs().clipRect(rect, this->localToDevice(), kIntersect_SkClipOp, true); SkRect transformedRect = this->cs().bounds(this->getGlobalBounds()); this->cs().restore(); if (transformedRect.isEmpty()) { @@ -852,7 +852,7 @@ void SkSVGDevice::drawPath(const SkPath& path, const SkPaint& paint, bool pathIs elem.addPathAttributes(path); // TODO: inverse fill types? - if (path.getFillType() == SkPath::kEvenOdd_FillType) { + if (path.getNewFillType() == SkPathFillType::kEvenOdd) { elem.addAttribute("fill-rule", "evenodd"); } } @@ -910,14 +910,14 @@ void SkSVGDevice::drawBitmapRect(const SkBitmap& bm, const SkRect* srcOrNull, SkClipStack::AutoRestore ar(cs, false); if (srcOrNull && *srcOrNull != SkRect::Make(bm.bounds())) { cs->save(); - cs->clipRect(dst, this->ctm(), kIntersect_SkClipOp, paint.isAntiAlias()); + cs->clipRect(dst, this->localToDevice(), kIntersect_SkClipOp, paint.isAntiAlias()); } SkMatrix adjustedMatrix; adjustedMatrix.setRectToRect(srcOrNull ? *srcOrNull : SkRect::Make(bm.bounds()), dst, SkMatrix::kFill_ScaleToFit); - adjustedMatrix.postConcat(this->ctm()); + adjustedMatrix.postConcat(this->localToDevice()); drawBitmapCommon(MxCp(&adjustedMatrix, cs), bm, paint); } diff --git a/third_party/skia/src/utils/SkDashPath.cpp b/third_party/skia/src/utils/SkDashPath.cpp index 92e4bdbda8df..f94df30b3edb 100644 --- a/third_party/skia/src/utils/SkDashPath.cpp +++ b/third_party/skia/src/utils/SkDashPath.cpp @@ -425,7 +425,7 @@ bool SkDashPath::InternalFilter(SkPath* dst, const SkPath& src, SkStrokeRec* rec } while (meas.nextContour()); if (segCount > 1) { - dst->setConvexity(SkPath::kConcave_Convexity); + dst->setConvexityType(SkPathConvexityType::kConcave); } return true; diff --git a/third_party/skia/src/utils/SkLua.cpp b/third_party/skia/src/utils/SkLua.cpp index 03318bb28283..c634d5b03f5d 100644 --- a/third_party/skia/src/utils/SkLua.cpp +++ b/third_party/skia/src/utils/SkLua.cpp @@ -1248,22 +1248,22 @@ static int lpath_getBounds(lua_State* L) { return 1; } -static const char* fill_type_to_str(SkPath::FillType fill) { +static const char* fill_type_to_str(SkPathFillType fill) { switch (fill) { - case SkPath::kEvenOdd_FillType: + case SkPathFillType::kEvenOdd: return "even-odd"; - case SkPath::kWinding_FillType: + case SkPathFillType::kWinding: return "winding"; - case SkPath::kInverseEvenOdd_FillType: + case SkPathFillType::kInverseEvenOdd: return "inverse-even-odd"; - case SkPath::kInverseWinding_FillType: + case SkPathFillType::kInverseWinding: return "inverse-winding"; } return "unknown"; } static int lpath_getFillType(lua_State* L) { - SkPath::FillType fill = get_obj(L, 1)->getFillType(); + SkPathFillType fill = get_obj(L, 1)->getNewFillType(); SkLua(L).pushString(fill_type_to_str(fill)); return 1; } @@ -1310,7 +1310,7 @@ static int lpath_getSegmentTypes(lua_State* L) { } static int lpath_isConvex(lua_State* L) { - bool isConvex = SkPath::kConvex_Convexity == get_obj(L, 1)->getConvexity(); + bool isConvex = get_obj(L, 1)->isConvex(); SkLua(L).pushBool(isConvex); return 1; } diff --git a/third_party/skia/src/utils/SkMultiPictureDocument.h b/third_party/skia/src/utils/SkMultiPictureDocument.h index b6d7be842984..3c4924b9c83c 100644 --- a/third_party/skia/src/utils/SkMultiPictureDocument.h +++ b/third_party/skia/src/utils/SkMultiPictureDocument.h @@ -19,7 +19,7 @@ class SkStreamSeekable; /** * Writes into a file format that is similar to SkPicture::serialize() */ -SK_API sk_sp SkMakeMultiPictureDocument(SkWStream* dst, const SkSerialProcs* = nullptr); +SK_SPI sk_sp SkMakeMultiPictureDocument(SkWStream* dst, const SkSerialProcs* = nullptr); struct SkDocumentPage { sk_sp fPicture; @@ -29,14 +29,14 @@ struct SkDocumentPage { /** * Returns the number of pages in the SkMultiPictureDocument. */ -SK_API int SkMultiPictureDocumentReadPageCount(SkStreamSeekable* src); +SK_SPI int SkMultiPictureDocumentReadPageCount(SkStreamSeekable* src); /** * Read the SkMultiPictureDocument into the provided array of pages. * dstArrayCount must equal SkMultiPictureDocumentReadPageCount(). * Return false on error. */ -SK_API bool SkMultiPictureDocumentRead(SkStreamSeekable* src, +SK_SPI bool SkMultiPictureDocumentRead(SkStreamSeekable* src, SkDocumentPage* dstArray, int dstArrayCount, const SkDeserialProcs* = nullptr); diff --git a/third_party/skia/src/utils/SkParsePath.cpp b/third_party/skia/src/utils/SkParsePath.cpp index 8c9469b98fa6..688daae33b17 100644 --- a/third_party/skia/src/utils/SkParsePath.cpp +++ b/third_party/skia/src/utils/SkParsePath.cpp @@ -175,7 +175,7 @@ bool SkParsePath::FromSVGString(const char data[], SkPath* result) { && (data = skip_sep(data)) && (data = find_points(data, &points[0], 1, relative, &c))) { path.arcTo(radii, angle, (SkPath::ArcSize) SkToBool(largeArc), - (SkPath::Direction) !SkToBool(sweep), points[0]); + (SkPathDirection) !SkToBool(sweep), points[0]); path.getLastPt(&c); } } break; diff --git a/third_party/skia/src/utils/SkPatchUtils.h b/third_party/skia/src/utils/SkPatchUtils.h index 41b491241f63..dc2870a874ac 100644 --- a/third_party/skia/src/utils/SkPatchUtils.h +++ b/third_party/skia/src/utils/SkPatchUtils.h @@ -14,7 +14,7 @@ class SkColorSpace; -class SK_API SkPatchUtils { +class SkPatchUtils { public: // Enums for control points based on the order specified in the constructor (clockwise). diff --git a/third_party/skia/src/utils/SkShadowUtils.cpp b/third_party/skia/src/utils/SkShadowUtils.cpp index 1b47af552374..f40854cd77f1 100644 --- a/third_party/skia/src/utils/SkShadowUtils.cpp +++ b/third_party/skia/src/utils/SkShadowUtils.cpp @@ -571,10 +571,11 @@ void SkBaseDevice::drawShadow(const SkPath& path, const SkDrawShadowRec& rec) { // For perspective shadows we've already computed the shadow in world space, // and we can't translate it without changing it. Otherwise we concat the // change in translation from the cached version. - SkAutoDeviceCTMRestore adr( - this, - hasPerspective ? SkMatrix::I() - : SkMatrix::Concat(this->ctm(), SkMatrix::MakeTrans(tx, ty))); + SkAutoDeviceTransformRestore adr( + this, + hasPerspective ? SkMatrix::I() + : SkMatrix::Concat(this->localToDevice(), + SkMatrix::MakeTrans(tx, ty))); this->drawVertices(vertices, nullptr, 0, mode, paint); } }; @@ -583,8 +584,8 @@ void SkBaseDevice::drawShadow(const SkPath& path, const SkDrawShadowRec& rec) { return; } - SkMatrix viewMatrix = this->ctm(); - SkAutoDeviceCTMRestore adr(this, SkMatrix::I()); + SkMatrix viewMatrix = this->localToDevice(); + SkAutoDeviceTransformRestore adr(this, SkMatrix::I()); ShadowedPath shadowedPath(&path, &viewMatrix); @@ -752,7 +753,7 @@ void SkBaseDevice::drawShadow(const SkPath& path, const SkDrawShadowRec& rec) { &shadowMatrix, &radius)) { return; } - SkAutoDeviceCTMRestore adr(this, shadowMatrix); + SkAutoDeviceTransformRestore adr(this, shadowMatrix); SkPaint paint; paint.setColor(rec.fSpotColor); diff --git a/third_party/skia/src/utils/SkUTF.h b/third_party/skia/src/utils/SkUTF.h index 385102aadb0d..676ce4a76f67 100644 --- a/third_party/skia/src/utils/SkUTF.h +++ b/third_party/skia/src/utils/SkUTF.h @@ -3,6 +3,7 @@ #ifndef SkUTF_DEFINED #define SkUTF_DEFINED +#include "include/core/SkTypes.h" #include #include @@ -13,39 +14,39 @@ namespace SkUTF { /** Given a sequence of UTF-8 bytes, return the number of unicode codepoints. If the sequence is invalid UTF-8, return -1. */ -int CountUTF8(const char* utf8, size_t byteLength); +SK_SPI int CountUTF8(const char* utf8, size_t byteLength); /** Given a sequence of aligned UTF-16 characters in machine-endian form, return the number of unicode codepoints. If the sequence is invalid UTF-16, return -1. */ -int CountUTF16(const uint16_t* utf16, size_t byteLength); +SK_SPI int CountUTF16(const uint16_t* utf16, size_t byteLength); /** Given a sequence of aligned UTF-32 characters in machine-endian form, return the number of unicode codepoints. If the sequence is invalid UTF-32, return -1. */ -int CountUTF32(const int32_t* utf32, size_t byteLength); +SK_SPI int CountUTF32(const int32_t* utf32, size_t byteLength); /** Given a sequence of UTF-8 bytes, return the first unicode codepoint. The pointer will be incremented to point at the next codepoint's start. If invalid UTF-8 is encountered, set *ptr to end and return -1. */ -SkUnichar NextUTF8(const char** ptr, const char* end); +SK_SPI SkUnichar NextUTF8(const char** ptr, const char* end); /** Given a sequence of aligned UTF-16 characters in machine-endian form, return the first unicode codepoint. The pointer will be incremented to point at the next codepoint's start. If invalid UTF-16 is encountered, set *ptr to end and return -1. */ -SkUnichar NextUTF16(const uint16_t** ptr, const uint16_t* end); +SK_SPI SkUnichar NextUTF16(const uint16_t** ptr, const uint16_t* end); /** Given a sequence of aligned UTF-32 characters in machine-endian form, return the first unicode codepoint. The pointer will be incremented to point at the next codepoint's start. If invalid UTF-32 is encountered, set *ptr to end and return -1. */ -SkUnichar NextUTF32(const int32_t** ptr, const int32_t* end); +SK_SPI SkUnichar NextUTF32(const int32_t** ptr, const int32_t* end); constexpr unsigned kMaxBytesInUTF8Sequence = 4; @@ -54,14 +55,14 @@ constexpr unsigned kMaxBytesInUTF8Sequence = 4; is null, simply return the number of bytes that would be used. For invalid unicode codepoints, return 0. */ -size_t ToUTF8(SkUnichar uni, char utf8[kMaxBytesInUTF8Sequence] = nullptr); +SK_SPI size_t ToUTF8(SkUnichar uni, char utf8[kMaxBytesInUTF8Sequence] = nullptr); /** Convert the unicode codepoint into UTF-16. If `utf16` is non-null, place the result in that array. Return the number of UTF-16 code units in the result (1 or 2). If `utf16` is null, simply return the number of code units that would be used. For invalid unicode codepoints, return 0. */ -size_t ToUTF16(SkUnichar uni, uint16_t utf16[2] = nullptr); +SK_SPI size_t ToUTF16(SkUnichar uni, uint16_t utf16[2] = nullptr); } // namespace SkUTF diff --git a/third_party/skia/src/utils/mac/SkStream_mac.cpp b/third_party/skia/src/utils/mac/SkStream_mac.cpp index 30f8e1eddc4e..b299fced492a 100644 --- a/third_party/skia/src/utils/mac/SkStream_mac.cpp +++ b/third_party/skia/src/utils/mac/SkStream_mac.cpp @@ -5,79 +5,4 @@ * found in the LICENSE file. */ -#include "include/core/SkTypes.h" - -#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) - -#include "include/core/SkStream.h" -#include "include/private/SkMalloc.h" -#include "include/utils/mac/SkCGUtils.h" - -// These are used by CGDataProviderCreateWithData - -static void unref_proc(void* info, const void* addr, size_t size) { - SkASSERT(info); - ((SkRefCnt*)info)->unref(); -} - -static void delete_stream_proc(void* info, const void* addr, size_t size) { - SkASSERT(info); - SkStream* stream = (SkStream*)info; - SkASSERT(stream->getMemoryBase() == addr); - SkASSERT(stream->getLength() == size); - delete stream; -} - -// These are used by CGDataProviderSequentialCallbacks - -static size_t get_bytes_proc(void* info, void* buffer, size_t bytes) { - SkASSERT(info); - return ((SkStream*)info)->read(buffer, bytes); -} - -static off_t skip_forward_proc(void* info, off_t bytes) { - return ((SkStream*)info)->skip((size_t) bytes); -} - -static void rewind_proc(void* info) { - SkASSERT(info); - ((SkStream*)info)->rewind(); -} - -// Used when info is an SkStream. -static void release_info_proc(void* info) { - SkASSERT(info); - delete (SkStream*)info; -} - -CGDataProviderRef SkCreateDataProviderFromStream(std::unique_ptr stream) { - // TODO: Replace with SkStream::getData() when that is added. Then we only - // have one version of CGDataProviderCreateWithData (i.e. same release proc) - const void* addr = stream->getMemoryBase(); - if (addr) { - // special-case when the stream is just a block of ram - size_t size = stream->getLength(); - return CGDataProviderCreateWithData(stream.release(), addr, size, delete_stream_proc); - } - - CGDataProviderSequentialCallbacks rec; - sk_bzero(&rec, sizeof(rec)); - rec.version = 0; - rec.getBytes = get_bytes_proc; - rec.skipForward = skip_forward_proc; - rec.rewind = rewind_proc; - rec.releaseInfo = release_info_proc; - return CGDataProviderCreateSequential(stream.release(), &rec); -} - -/////////////////////////////////////////////////////////////////////////////// - -#include "include/core/SkData.h" - -CGDataProviderRef SkCreateDataProviderFromData(sk_sp data) { - const void* addr = data->data(); - size_t size = data->size(); - return CGDataProviderCreateWithData(data.release(), addr, size, unref_proc); -} - -#endif//defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) +// Remove file after it is removed from downstream builds. diff --git a/third_party/skia/src/utils/win/SkDWriteGeometrySink.cpp b/third_party/skia/src/utils/win/SkDWriteGeometrySink.cpp index 65da6ae47647..3979a1383ada 100644 --- a/third_party/skia/src/utils/win/SkDWriteGeometrySink.cpp +++ b/third_party/skia/src/utils/win/SkDWriteGeometrySink.cpp @@ -49,10 +49,10 @@ SK_STDMETHODIMP_(ULONG) SkDWriteGeometrySink::Release(void) { SK_STDMETHODIMP_(void) SkDWriteGeometrySink::SetFillMode(D2D1_FILL_MODE fillMode) { switch (fillMode) { case D2D1_FILL_MODE_ALTERNATE: - fPath->setFillType(SkPath::kEvenOdd_FillType); + fPath->setFillType(SkPathFillType::kEvenOdd); break; case D2D1_FILL_MODE_WINDING: - fPath->setFillType(SkPath::kWinding_FillType); + fPath->setFillType(SkPathFillType::kWinding); break; default: SkDEBUGFAIL("Unknown D2D1_FILL_MODE."); diff --git a/third_party/skia/src/xps/SkXPSDevice.cpp b/third_party/skia/src/xps/SkXPSDevice.cpp index cebf60d56477..b789651bd7b8 100644 --- a/third_party/skia/src/xps/SkXPSDevice.cpp +++ b/third_party/skia/src/xps/SkXPSDevice.cpp @@ -1179,10 +1179,10 @@ void SkXPSDevice::internalDrawRect(const SkRect& r, } //Path the rect if we can't optimize it. - if (rect_must_be_pathed(paint, this->ctm())) { + if (rect_must_be_pathed(paint, this->localToDevice())) { SkPath tmp; tmp.addRect(r); - tmp.setFillType(SkPath::kWinding_FillType); + tmp.setFillType(SkPathFillType::kWinding); this->drawPath(tmp, paint, true); return; } @@ -1204,13 +1204,13 @@ void SkXPSDevice::internalDrawRect(const SkRect& r, //Set the brushes. BOOL fill = FALSE; BOOL stroke = FALSE; - HRV(this->shadePath(shadedPath.get(), paint, this->ctm(), &fill, &stroke)); + HRV(this->shadePath(shadedPath.get(), paint, this->localToDevice(), &fill, &stroke)); bool xpsTransformsPath = true; //Transform the geometry. if (transformRect && xpsTransformsPath) { SkTScopedComPtr xpsTransform; - HRV(this->createXpsTransform(this->ctm(), &xpsTransform)); + HRV(this->createXpsTransform(this->localToDevice(), &xpsTransform)); if (xpsTransform.get()) { HRVM(shadedGeometry->SetTransformLocal(xpsTransform.get()), "Could not set transform for rect."); @@ -1229,7 +1229,7 @@ void SkXPSDevice::internalDrawRect(const SkRect& r, { r.fRight, r.fTop }, }; if (!xpsTransformsPath && transformRect) { - this->ctm().mapPoints(points, SK_ARRAY_COUNT(points)); + this->localToDevice().mapPoints(points, SK_ARRAY_COUNT(points)); } HRV(this->createXpsQuad(points, stroke, fill, &rectFigure)); } @@ -1495,7 +1495,7 @@ void SkXPSDevice::drawPath(const SkPath& platonicPath, || paint->getStyle() != SkPaint::kFill_Style; //Apply pre-path matrix [Platonic-path -> Skeletal-path]. - SkMatrix matrix = this->ctm(); + SkMatrix matrix = this->localToDevice(); SkPath* skeletalPath = const_cast(&platonicPath); //Apply path effect [Skeletal-path -> Fillable-path]. @@ -1545,7 +1545,7 @@ void SkXPSDevice::drawPath(const SkPath& platonicPath, BOOL stroke; HRV(this->shadePath(shadedPath.get(), *paint, - this->ctm(), + this->localToDevice(), &fill, &stroke)); @@ -1607,14 +1607,14 @@ void SkXPSDevice::drawPath(const SkPath& platonicPath, //Set the fill rule. SkPath* xpsCompatiblePath = fillablePath; XPS_FILL_RULE xpsFillRule; - switch (fillablePath->getFillType()) { - case SkPath::kWinding_FillType: + switch (fillablePath->getNewFillType()) { + case SkPathFillType::kWinding: xpsFillRule = XPS_FILL_RULE_NONZERO; break; - case SkPath::kEvenOdd_FillType: + case SkPathFillType::kEvenOdd: xpsFillRule = XPS_FILL_RULE_EVENODD; break; - case SkPath::kInverseWinding_FillType: { + case SkPathFillType::kInverseWinding: { //[Fillable-path (inverse winding) -> XPS-path (inverse even odd)] if (!pathIsMutable) { xpsCompatiblePath = &modifiedPath; @@ -1626,7 +1626,7 @@ void SkXPSDevice::drawPath(const SkPath& platonicPath, } } // The xpsCompatiblePath is now inverse even odd, so fall through. - case SkPath::kInverseEvenOdd_FillType: { + case SkPathFillType::kInverseEvenOdd: { const SkRect universe = SkRect::MakeLTRB( 0, 0, this->fCurrentCanvasSize.fWidth, @@ -1898,7 +1898,8 @@ void SkXPSDevice::drawGlyphRunList(const SkGlyphRunList& glyphRunList) { } TypefaceUse* typeface; - if (FAILED(CreateTypefaceUse(font, &typeface)) || text_must_be_pathed(paint, this->ctm())) { + if (FAILED(CreateTypefaceUse(font, &typeface)) || + text_must_be_pathed(paint, this->localToDevice())) { SkPath path; //TODO: make this work, Draw currently does not handle as well. //paint.getTextPath(text, byteLength, x, y, &path); @@ -1937,7 +1938,7 @@ void SkXPSDevice::drawGlyphRunList(const SkGlyphRunList& glyphRunList) { &origin, SkScalarToFLOAT(font.getSize()), XPS_STYLE_SIMULATION_NONE, - this->ctm(), + this->localToDevice(), paint)); } } diff --git a/third_party/skia/src/xps/SkXPSDevice.h b/third_party/skia/src/xps/SkXPSDevice.h index f37bb2bcaf60..7dcfc656d7c9 100644 --- a/third_party/skia/src/xps/SkXPSDevice.h +++ b/third_party/skia/src/xps/SkXPSDevice.h @@ -40,8 +40,8 @@ class SkGlyphRunList; */ class SkXPSDevice : public SkClipStackDevice { public: - SK_API SkXPSDevice(SkISize); - SK_API ~SkXPSDevice() override; + SK_SPI SkXPSDevice(SkISize); + SK_SPI ~SkXPSDevice() override; bool beginPortfolio(SkWStream* outputStream, IXpsOMObjectFactory*); /** diff --git a/third_party/skia/tests/BackendAllocationTest.cpp b/third_party/skia/tests/BackendAllocationTest.cpp index ada040de8c5f..34aee51db2e2 100644 --- a/third_party/skia/tests/BackendAllocationTest.cpp +++ b/third_party/skia/tests/BackendAllocationTest.cpp @@ -171,16 +171,11 @@ static void check_solid_pixmap(skiatest::Reporter* reporter, diffs[0], diffs[1], diffs[2], diffs[3]); }); - check_solid_pixels(expected, actual, tols, error); + CheckSolidPixels(expected, actual, tols, error); } // What would raster do? static SkColor4f get_expected_color(SkColor4f orig, SkColorType ct) { - if (ct == kGray_8_SkColorType) { - // Prevent the premul raster graciously applies in this case - orig.fA = 1.0; - } - SkAlphaType at = SkColorTypeIsAlwaysOpaque(ct) ? kOpaque_SkAlphaType : kPremul_SkAlphaType; @@ -657,14 +652,6 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ColorTypeBackendAllocationTest, reporter, ctx } { - // GL has difficulties reading back from these combinations. In particular, - // reading back kGray_8 is a mess. - if (GrBackendApi::kOpenGL == context->backend()) { - if (kAlpha_8_SkColorType == combo.fColorType || - kGray_8_SkColorType == combo.fColorType) { - continue; - } - } auto createWithColorMtd = [colorType](GrContext* context, const SkColor4f& color, @@ -687,42 +674,43 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ColorTypeBackendAllocationTest, reporter, ctx return result; }; - + // 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 (colorType == kGray_8_SkColorType) { + color = {color.fR * color.fA, + color.fG * color.fA, + color.fB * color.fA, + 1.f}; + } test_color_init(context, reporter, createWithColorMtd, - SkColorTypeToGrColorType(colorType), - combo.fColor, mipMapped, renderable); + SkColorTypeToGrColorType(colorType), color, mipMapped, + renderable); } - // Gray_8 is problematic. In the colorInit tests there is ambiguity when - // mapping from format to colorType (since R8 or A8 could be either Alpha_8 - // or Gray_8). To compensate for this ambiguity we feed in colors with - // R==G==B==A. If we actually do know the colorType (as is the case - // in the SkPixmap case, there is no ambiguity but the two test expectations - // now collide. - // For now, skip the SkPixmap tests. The real answer is to plumb the - // SkColorType down further in the color-init case. - if (colorType != kGray_8_SkColorType) { - auto createWithSrcDataMtd = [](GrContext* context, - const SkPixmap srcData[], - int numLevels, - GrRenderable renderable) { - SkASSERT(srcData && numLevels); - auto result = context->createBackendTexture(srcData, numLevels, - renderable, GrProtected::kNo); - check_vk_layout(result, VkLayout::kReadOnlyOptimal); + auto createWithSrcDataMtd = [](GrContext* context, + const SkPixmap srcData[], + int numLevels, + GrRenderable renderable) { + SkASSERT(srcData && numLevels); + auto result = context->createBackendTexture(srcData, numLevels, renderable, + GrProtected::kNo); + check_vk_layout(result, VkLayout::kReadOnlyOptimal); #ifdef SK_DEBUG - { - auto format = context->defaultBackendFormat(srcData[0].colorType(), - renderable); - SkASSERT(format == result.getBackendFormat()); - } + { + auto format = + context->defaultBackendFormat(srcData[0].colorType(), renderable); + SkASSERT(format == result.getBackendFormat()); + } #endif - return result; - }; + return result; + }; - test_pixmap_init(context, reporter, createWithSrcDataMtd, colorType, - mipMapped, renderable); - } + test_pixmap_init(context, reporter, createWithSrcDataMtd, colorType, mipMapped, + renderable); } } } @@ -792,12 +780,10 @@ DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GLBackendAllocationTest, reporter, ctxInfo) { } if (GrColorType::kBGRA_8888 == combo.fColorType) { + // We allow using a GL_RGBA8 texture as BGRA on desktop GL but not ES. if (GR_GL_RGBA8 == combo.fFormat && kGL_GrGLStandard != standard) { continue; } - if (GR_GL_BGRA8 == combo.fFormat && kGL_GrGLStandard == standard) { - continue; - } } for (auto mipMapped : { GrMipMapped::kNo, GrMipMapped::kYes }) { @@ -827,25 +813,53 @@ DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GLBackendAllocationTest, reporter, ctxInfo) { } { - // GL has difficulties reading back from these combinations - if (GrColorType::kAlpha_8 == combo.fColorType) { - continue; - } - if (GrRenderable::kYes != renderable) { - 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 createWithColorMtd = [format](GrContext* context, - const SkColor4f& color, - GrMipMapped mipMapped, - GrRenderable renderable) { - return context->createBackendTexture(32, 32, format, color, + auto createWithColorMtd = [format, swizzle](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); }; + // 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, combo.fColor, mipMapped, renderable); + test_color_init(context, reporter, createWithColorMtd, combo.fColorType, color, + mipMapped, renderable); } } } diff --git a/third_party/skia/tests/BulkRectTest.cpp b/third_party/skia/tests/BulkRectTest.cpp new file mode 100644 index 000000000000..f81c97baf7ca --- /dev/null +++ b/third_party/skia/tests/BulkRectTest.cpp @@ -0,0 +1,226 @@ +/* + * 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/core/SkBlendModePriv.h" +#include "src/gpu/GrClip.h" +#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrRenderTargetContext.h" +#include "src/gpu/ops/GrFillRectOp.h" +#include "src/gpu/ops/GrTextureOp.h" +#include "tests/Test.h" + +static std::unique_ptr new_RTC(GrContext* context) { + return context->priv().makeDeferredRenderTargetContext(SkBackingFit::kExact, 128, 128, + GrColorType::kRGBA_8888, nullptr); +} + +sk_sp create_proxy(GrContext* context) { + GrSurfaceDesc desc; + desc.fConfig = kRGBA_8888_GrPixelConfig; + desc.fWidth = 128; + desc.fHeight = 128; + + const GrBackendFormat format = context->priv().caps()->getDefaultBackendFormat( + GrColorType::kRGBA_8888, + GrRenderable::kYes); + + return context->priv().proxyProvider()->createProxy( + format, desc, GrRenderable::kYes, 1, kTopLeft_GrSurfaceOrigin, GrMipMapped::kNo, + SkBackingFit::kExact, SkBudgeted::kNo, GrProtected::kNo, GrInternalSurfaceFlags::kNone); +} + +typedef GrQuadAAFlags (*PerQuadAAFunc)(int i); + +typedef void (*BulkRectTest)(skiatest::Reporter* reporter, GrContext* context, + PerQuadAAFunc perQuadAA, GrAAType overallAA, SkBlendMode blendMode, + int requestedTotNumQuads, int expectedNumOps); + +//------------------------------------------------------------------------------------------------- +static void bulk_fill_rect_create_test(skiatest::Reporter* reporter, GrContext* context, + PerQuadAAFunc perQuadAA, GrAAType overallAA, + SkBlendMode blendMode, + int requestedTotNumQuads, int expectedNumOps) { + + std::unique_ptr rtc = new_RTC(context); + + auto quads = new GrRenderTargetContext::QuadSetEntry[requestedTotNumQuads]; + + for (int i = 0; i < requestedTotNumQuads; ++i) { + quads[i].fRect = SkRect::MakeWH(100.5f, 100.5f); // prevent the int non-AA optimization + quads[i].fColor = SK_PMColor4fWHITE; + quads[i].fLocalMatrix = SkMatrix::I(); + quads[i].fAAFlags = perQuadAA(i); + } + + GrPaint paint; + paint.setXPFactory(SkBlendMode_AsXPFactory(blendMode)); + GrFillRectOp::AddFillRectOps(rtc.get(), GrNoClip(), context, std::move(paint), overallAA, + SkMatrix::I(), quads, requestedTotNumQuads); + + GrOpsTask* opsTask = rtc->testingOnly_PeekLastOpsTask(); + int actualNumOps = opsTask->numOpChains(); + + int actualTotNumQuads = 0; + + for (int i = 0; i < actualNumOps; ++i) { + const GrOp* tmp = opsTask->getChain(i); + REPORTER_ASSERT(reporter, tmp->classID() == GrFillRectOp::ClassID()); + REPORTER_ASSERT(reporter, tmp->isChainTail()); + actualTotNumQuads += ((GrDrawOp*) tmp)->numQuads(); + } + + REPORTER_ASSERT(reporter, expectedNumOps == actualNumOps); + REPORTER_ASSERT(reporter, requestedTotNumQuads == actualTotNumQuads); + + context->flush(); + + delete[] quads; +} + +//------------------------------------------------------------------------------------------------- +static void bulk_texture_rect_create_test(skiatest::Reporter* reporter, GrContext* context, + PerQuadAAFunc perQuadAA, GrAAType overallAA, + SkBlendMode blendMode, + int requestedTotNumQuads, int expectedNumOps) { + + std::unique_ptr rtc = new_RTC(context); + + sk_sp proxyA = create_proxy(context); + sk_sp proxyB = create_proxy(context); + GrSurfaceProxyView proxyViewA(std::move(proxyA), kTopLeft_GrSurfaceOrigin, GrSwizzle::RGBA()); + GrSurfaceProxyView proxyViewB(std::move(proxyB), kTopLeft_GrSurfaceOrigin, GrSwizzle::RGBA()); + + auto set = new GrRenderTargetContext::TextureSetEntry[requestedTotNumQuads]; + + for (int i = 0; i < requestedTotNumQuads; ++i) { + // Alternate between two proxies to prevent op merging if the batch API was forced to submit + // one op at a time (to work, this does require that all fDstRects overlap). + set[i].fProxyView = i % 2 == 0 ? proxyViewA : proxyViewB; + set[i].fSrcAlphaType = kPremul_SkAlphaType; + set[i].fSrcRect = SkRect::MakeWH(100.0f, 100.0f); + set[i].fDstRect = SkRect::MakeWH(100.5f, 100.5f); // prevent the int non-AA optimization + set[i].fDstClipQuad = nullptr; + set[i].fPreViewMatrix = nullptr; + set[i].fAlpha = 1.0f; + set[i].fAAFlags = perQuadAA(i); + } + + GrTextureOp::AddTextureSetOps(rtc.get(), GrNoClip(), context, set, requestedTotNumQuads, + GrSamplerState::Filter::kNearest, + GrTextureOp::Saturate::kYes, + blendMode, + overallAA, + SkCanvas::kStrict_SrcRectConstraint, + SkMatrix::I(), nullptr); + + GrOpsTask* opsTask = rtc->testingOnly_PeekLastOpsTask(); + int actualNumOps = opsTask->numOpChains(); + + int actualTotNumQuads = 0; + + if (blendMode != SkBlendMode::kSrcOver || + !context->priv().caps()->dynamicStateArrayGeometryProcessorTextureSupport()) { + // In either of these two cases, GrTextureOp creates one op per quad instead. Since + // each entry alternates proxies but overlaps geometrically, this will prevent the ops + // from being merged back into fewer ops. + expectedNumOps = requestedTotNumQuads; + } + uint32_t expectedOpID = blendMode == SkBlendMode::kSrcOver ? GrTextureOp::ClassID() + : GrFillRectOp::ClassID(); + for (int i = 0; i < actualNumOps; ++i) { + const GrOp* tmp = opsTask->getChain(i); + REPORTER_ASSERT(reporter, tmp->classID() == expectedOpID); + REPORTER_ASSERT(reporter, tmp->isChainTail()); + actualTotNumQuads += ((GrDrawOp*) tmp)->numQuads(); + } + + REPORTER_ASSERT(reporter, expectedNumOps == actualNumOps); + REPORTER_ASSERT(reporter, requestedTotNumQuads == actualTotNumQuads); + + context->flush(); + + delete[] set; +} + +//------------------------------------------------------------------------------------------------- +static void run_test(GrContext* context, skiatest::Reporter* reporter, BulkRectTest test) { + // This is the simple case where there is no AA at all. We expect 2 non-AA clumps of quads. + { + auto noAA = [](int i) -> GrQuadAAFlags { + return GrQuadAAFlags::kNone; + }; + + static const int kNumExpectedOps = 2; + + test(reporter, context, noAA, GrAAType::kNone, SkBlendMode::kSrcOver, + 2*GrResourceProvider::MaxNumNonAAQuads(), kNumExpectedOps); + } + + // This is the same as the above case except the overall AA is kCoverage. However, since + // the per-quad AA is still none, all the quads should be downgraded to non-AA. + { + auto noAA = [](int i) -> GrQuadAAFlags { + return GrQuadAAFlags::kNone; + }; + + static const int kNumExpectedOps = 2; + + test(reporter, context, noAA, GrAAType::kCoverage, SkBlendMode::kSrcOver, + 2*GrResourceProvider::MaxNumNonAAQuads(), kNumExpectedOps); + } + + // This case has an overall AA of kCoverage but the per-quad AA alternates. + // We should end up with several aa-sized clumps + { + auto alternateAA = [](int i) -> GrQuadAAFlags { + return (i % 2) ? GrQuadAAFlags::kAll : GrQuadAAFlags::kNone; + }; + + int numExpectedOps = 2*GrResourceProvider::MaxNumNonAAQuads() / + GrResourceProvider::MaxNumAAQuads(); + + test(reporter, context, alternateAA, GrAAType::kCoverage, SkBlendMode::kSrcOver, + 2*GrResourceProvider::MaxNumNonAAQuads(), numExpectedOps); + } + + // In this case we have a run of MaxNumAAQuads non-AA quads and then AA quads. This + // exercises the case where we have a clump of quads that can't be upgraded to AA bc of + // its size. We expect one clump of non-AA quads followed by one clump of AA quads. + { + auto runOfNonAA = [](int i) -> GrQuadAAFlags { + return (i < GrResourceProvider::MaxNumAAQuads()) ? GrQuadAAFlags::kNone + : GrQuadAAFlags::kAll; + }; + + static const int kNumExpectedOps = 2; + + test(reporter, context, runOfNonAA, GrAAType::kCoverage, SkBlendMode::kSrcOver, + 2*GrResourceProvider::MaxNumAAQuads(), kNumExpectedOps); + } + + // In this case we use a blend mode other than src-over, which hits the GrFillRectOp fallback + // code path for GrTextureOp. We pass in the expected results if batching was successful, to + // that bulk_fill_rect_create_test batches on all modes; bulk_texture_rect_create_test is + // responsible for revising its expectations. + { + auto fixedAA = [](int i) -> GrQuadAAFlags { + return GrQuadAAFlags::kAll; + }; + + static const int kNumExpectedOps = 2; + + test(reporter, context, fixedAA, GrAAType::kCoverage, SkBlendMode::kSrcATop, + 2*GrResourceProvider::MaxNumAAQuads(), kNumExpectedOps); + } +} + +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(BulkFillRectTest, reporter, ctxInfo) { + run_test(ctxInfo.grContext(), reporter, bulk_fill_rect_create_test); +} + +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(BulkTextureRectTest, reporter, ctxInfo) { + run_test(ctxInfo.grContext(), reporter, bulk_texture_rect_create_test); +} diff --git a/third_party/skia/tests/ClipCubicTest.cpp b/third_party/skia/tests/ClipCubicTest.cpp index 5b8bb1fb6481..5da7e6ab30fc 100644 --- a/third_party/skia/tests/ClipCubicTest.cpp +++ b/third_party/skia/tests/ClipCubicTest.cpp @@ -177,7 +177,6 @@ DEF_TEST(test_fuzz_crbug_698714, reporter) { SkPaint paint; paint.setAntiAlias(true); SkPath path; - path.setFillType(SkPath::kWinding_FillType); path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0,0 path.lineTo(SkBits2Float(0x43434343), SkBits2Float(0x43430143)); //195.263f, 195.005f path.lineTo(SkBits2Float(0x43434343), SkBits2Float(0x43434343)); //195.263f, 195.263f diff --git a/third_party/skia/tests/ClipStackTest.cpp b/third_party/skia/tests/ClipStackTest.cpp index 435c86eec7df..21f57fbd7b1e 100644 --- a/third_party/skia/tests/ClipStackTest.cpp +++ b/third_party/skia/tests/ClipStackTest.cpp @@ -288,10 +288,10 @@ static void test_bounds(skiatest::Reporter* reporter, bool doInvA = SkToBool(invBits & 1); bool doInvB = SkToBool(invBits & 2); - pathA.setFillType(doInvA ? SkPath::kInverseEvenOdd_FillType : - SkPath::kEvenOdd_FillType); - pathB.setFillType(doInvB ? SkPath::kInverseEvenOdd_FillType : - SkPath::kEvenOdd_FillType); + pathA.setFillType(doInvA ? SkPathFillType::kInverseEvenOdd : + SkPathFillType::kEvenOdd); + pathB.setFillType(doInvB ? SkPathFillType::kInverseEvenOdd : + SkPathFillType::kEvenOdd); switch (primType) { case SkClipStack::Element::DeviceSpaceType::kEmpty: @@ -362,10 +362,10 @@ static void test_isWideOpen(skiatest::Reporter* reporter) { SkPath clipA, clipB; clipA.addRoundRect(rectA, SkIntToScalar(5), SkIntToScalar(5)); - clipA.setFillType(SkPath::kInverseEvenOdd_FillType); + clipA.setFillType(SkPathFillType::kInverseEvenOdd); clipB.addRoundRect(rectB, SkIntToScalar(5), SkIntToScalar(5)); - clipB.setFillType(SkPath::kInverseEvenOdd_FillType); + clipB.setFillType(SkPathFillType::kInverseEvenOdd); stack.clipPath(clipA, SkMatrix::I(), kReplace_SkClipOp, false); stack.clipPath(clipB, SkMatrix::I(), kUnion_SkClipOp, false); @@ -856,7 +856,7 @@ static void test_invfill_diff_bug(skiatest::Reporter* reporter) { SkPath path; path.addRect({30, 10, 40, 20}); - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); stack.clipPath(path, SkMatrix::I(), kDifference_SkClipOp, false); REPORTER_ASSERT(reporter, SkClipStack::kEmptyGenID == stack.getTopmostGenID()); @@ -893,7 +893,7 @@ static void add_round_rect(const SkRect& rect, bool invert, SkClipOp op, SkClipS if (invert) { SkPath path; path.addRoundRect(rect, rx, ry); - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); stack->clipPath(path, SkMatrix::I(), op, doAA); } else { SkRRect rrect; @@ -907,7 +907,7 @@ static void add_rect(const SkRect& rect, bool invert, SkClipOp op, SkClipStack* if (invert) { SkPath path; path.addRect(rect); - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); stack->clipPath(path, SkMatrix::I(), op, doAA); } else { stack->clipRect(rect, SkMatrix::I(), op, doAA); @@ -919,7 +919,7 @@ static void add_oval(const SkRect& rect, bool invert, SkClipOp op, SkClipStack* SkPath path; path.addOval(rect); if (invert) { - path.setFillType(SkPath::kInverseWinding_FillType); + path.setFillType(SkPathFillType::kInverseWinding); } stack->clipPath(path, SkMatrix::I(), op, doAA); }; @@ -1534,7 +1534,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ClipMaskCache, reporter, ctxInfo) { SkPath path; path.addCircle(10, 10, 8); path.addCircle(15, 15, 8); - path.setFillType(SkPath::kEvenOdd_FillType); + path.setFillType(SkPathFillType::kEvenOdd); static const char* kTag = GrClipStackClip::kMaskTestTag; GrResourceCache* cache = context->priv().getResourceCache(); diff --git a/third_party/skia/tests/CodecPartialTest.cpp b/third_party/skia/tests/CodecPartialTest.cpp index 0ff5435e13cc..62b744de0378 100644 --- a/third_party/skia/tests/CodecPartialTest.cpp +++ b/third_party/skia/tests/CodecPartialTest.cpp @@ -170,6 +170,34 @@ DEF_TEST(Codec_partialWuffs, r) { } } +DEF_TEST(Codec_frameCountUpdatesInIncrementalDecode, r) { + sk_sp file = GetResourceAsData("images/colorTables.gif"); + size_t fileSize = file->size(); + REPORTER_ASSERT(r, fileSize == 2829); + std::unique_ptr fullCodec(SkCodec::MakeFromData(file)); + REPORTER_ASSERT(r, fullCodec->getFrameCount() == 2); + const SkImageInfo info = standardize_info(fullCodec.get()); + + static const size_t n = 1000; + HaltingStream* stream = new HaltingStream(file, n); + // Note that we cheat and hold on to a pointer to stream, though it is owned by + // partialCodec. + auto partialCodec = SkCodec::MakeFromStream(std::unique_ptr(stream)); + REPORTER_ASSERT(r, partialCodec->getFrameCount() == 1); + + SkBitmap bitmap; + bitmap.allocPixels(info); + REPORTER_ASSERT(r, SkCodec::kSuccess == + partialCodec->startIncrementalDecode( + info, bitmap.getPixels(), bitmap.rowBytes())); + REPORTER_ASSERT(r, SkCodec::kIncompleteInput == + partialCodec->incrementalDecode()); + + REPORTER_ASSERT(r, partialCodec->getFrameCount() == 1); + stream->addNewData(fileSize - n); + REPORTER_ASSERT(r, partialCodec->getFrameCount() == 2); +} + // Verify that when decoding an animated gif byte by byte we report the correct // fRequiredFrame as soon as getFrameInfo reports the frame. DEF_TEST(Codec_requiredFrame, r) { diff --git a/third_party/skia/tests/ColorSpaceTest.cpp b/third_party/skia/tests/ColorSpaceTest.cpp index 24a05f62526a..f2a3ea7c05a0 100644 --- a/third_party/skia/tests/ColorSpaceTest.cpp +++ b/third_party/skia/tests/ColorSpaceTest.cpp @@ -334,3 +334,17 @@ DEF_TEST(ColorSpace_skcms_sRGB_exact, r) { REPORTER_ASSERT(r, 0 == memcmp(&profile, skcms_sRGB_profile(), sizeof(skcms_ICCProfile))); } + +DEF_TEST(ColorSpace_classifyUnderflow, r) { + // crbug.com/1016183 + skcms_TransferFunction fn; + fn.a = 1.0f; + fn.b = 0.0f; + fn.c = 0.0f; + fn.d = 0.0f; + fn.e = 0.0f; + fn.f = 0.0f; + fn.g = INT_MIN; + sk_sp bad = SkColorSpace::MakeRGB(fn, SkNamedGamut::kSRGB); + REPORTER_ASSERT(r, bad == nullptr); +} diff --git a/third_party/skia/tests/CopySurfaceTest.cpp b/third_party/skia/tests/CopySurfaceTest.cpp index 11f173e124aa..c4c9af71d24d 100644 --- a/third_party/skia/tests/CopySurfaceTest.cpp +++ b/third_party/skia/tests/CopySurfaceTest.cpp @@ -78,11 +78,11 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { for (auto dstPoint : kDstPoints) { for (auto ii: kImageInfos) { auto src = sk_gpu_test::MakeTextureProxyFromData( - context, sRenderable, kW, kH, ii.colorType(), - ii.alphaType(), sOrigin, srcPixels.get(), kRowBytes); + context, sRenderable, sOrigin, ii, srcPixels.get(), + kRowBytes); auto dst = sk_gpu_test::MakeTextureProxyFromData( - context, dRenderable, kW, kH, ii.colorType(), - ii.alphaType(), dOrigin, dstPixels.get(), kRowBytes); + context, dRenderable, dOrigin, ii, dstPixels.get(), + kRowBytes); // Should always work if the color type is RGBA, but may not work // for BGRA @@ -116,7 +116,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { } else if (dRenderable == GrRenderable::kYes) { SkASSERT(dstContext->asRenderTargetContext()); result = dstContext->asRenderTargetContext()->blitTexture( - src.get(), grColorType, srcRect, dstPoint); + src.get(), srcRect, dstPoint); } bool expectedResult = true; diff --git a/third_party/skia/tests/DefaultPathRendererTest.cpp b/third_party/skia/tests/DefaultPathRendererTest.cpp index 7b5f9032c03b..40a85786ff98 100644 --- a/third_party/skia/tests/DefaultPathRendererTest.cpp +++ b/third_party/skia/tests/DefaultPathRendererTest.cpp @@ -52,11 +52,11 @@ static SkBitmap read_back(GrRenderTargetContext* rtc, int width, int height) { return bm; } -static SkPath make_path(const SkRect& outer, int inset, SkPath::FillType fill) { +static SkPath make_path(const SkRect& outer, int inset, SkPathFillType fill) { SkPath p; - p.addRect(outer, SkPath::kCW_Direction); - p.addRect(outer.makeInset(inset, inset), SkPath::kCCW_Direction); + p.addRect(outer, SkPathDirection::kCW); + p.addRect(outer.makeInset(inset, inset), SkPathDirection::kCCW); p.setFillType(fill); return p; } @@ -77,9 +77,9 @@ static const int kPad = 3; static void run_test(GrContext* ctx, skiatest::Reporter* reporter) { SkPath invPath = make_path(SkRect::MakeXYWH(0, 0, kBigSize, kBigSize), - kBigSize/2-1, SkPath::kInverseWinding_FillType); + kBigSize/2-1, SkPathFillType::kInverseWinding); SkPath path = make_path(SkRect::MakeXYWH(0, 0, kBigSize, kBigSize), - kPad, SkPath::kWinding_FillType); + kPad, SkPathFillType::kWinding); GrStyle style(SkStrokeRec::kFill_InitStyle); diff --git a/third_party/skia/tests/DeferredDisplayListTest.cpp b/third_party/skia/tests/DeferredDisplayListTest.cpp index 4886bb19fbc2..d31fcb6781d3 100644 --- a/third_party/skia/tests/DeferredDisplayListTest.cpp +++ b/third_party/skia/tests/DeferredDisplayListTest.cpp @@ -188,6 +188,7 @@ class SurfaceParameters { ? GrMipMapped::kNo : GrMipMapped(fShouldCreateMipMaps); +#ifdef SK_GL if (fUsesGLFBO0) { if (GrBackendApi::kOpenGL != context->backend()) { return nullptr; @@ -210,6 +211,7 @@ class SurfaceParameters { SkASSERT(result->isCompatible(c)); return result; } +#endif *backend = context->createBackendTexture(fWidth, fHeight, fColorType, SkColors::kTransparent, @@ -880,8 +882,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSkSurfaceFlush, reporter, ctxInfo) { GrBackendTexture backendTexture; - if (!create_backend_texture(context, &backendTexture, ii, SkColors::kCyan, - GrMipMapped::kNo, GrRenderable::kNo)) { + if (!CreateBackendTexture(context, &backendTexture, ii, SkColors::kCyan, GrMipMapped::kNo, + GrRenderable::kNo)) { REPORTER_ASSERT(reporter, false); return; } @@ -940,7 +942,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSkSurfaceFlush, reporter, ctxInfo) { REPORTER_ASSERT(reporter, fulfillInfo.fTex->unique()); fulfillInfo.fTex.reset(); - delete_backend_texture(context, backendTexture); + DeleteBackendTexture(context, backendTexture); } //////////////////////////////////////////////////////////////////////////////// @@ -998,6 +1000,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLMultipleDDLs, reporter, ctxInfo) { } } +#ifdef SK_GL //////////////////////////////////////////////////////////////////////////////// // Check that the texture-specific flags (i.e., for external & rectangle textures) work // for promise images. As such, this is a GL-only test. @@ -1043,6 +1046,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(DDLTextureFlagsTest, reporter, ctxInfo) { } } } +#endif // SK_GL //////////////////////////////////////////////////////////////////////////////// // Test colorType and pixelConfig compatibility. diff --git a/third_party/skia/tests/DescriptorTest.cpp b/third_party/skia/tests/DescriptorTest.cpp index 866b1fb7f175..837a37f0d2f6 100644 --- a/third_party/skia/tests/DescriptorTest.cpp +++ b/third_party/skia/tests/DescriptorTest.cpp @@ -15,6 +15,7 @@ class SkDescriptorTestHelper { public: static void SetLength(SkDescriptor* desc, size_t length) { desc->fLength = length; } + static void SetCount(SkDescriptor* desc, uint32_t count) { desc->fCount = count; } }; DEF_TEST(Descriptor_empty, r) { @@ -94,7 +95,6 @@ DEF_TEST(Descriptor_invalid_length, r) { auto desc = SkDescriptor::Alloc(size); desc->init(); - SkScalerContextRec rec; desc->addEntry(kEffects_SkDescriptorTag, effect_size, nullptr); SkDescriptorTestHelper::SetLength(desc.get(), size); @@ -103,3 +103,36 @@ DEF_TEST(Descriptor_invalid_length, r) { SkDescriptorTestHelper::SetLength(desc.get(), size + effect_size); REPORTER_ASSERT(r, desc->isValid()); } + +DEF_TEST(Descriptor_entry_too_big, r) { + const size_t size = sizeof(SkDescriptor) + sizeof(SkDescriptor::Entry) + 4; + // Must be less than fLength, but big enough to be bigger then fLength when added. + const size_t effect_size = sizeof(SkDescriptor) + sizeof(SkDescriptor::Entry); + + auto desc = SkDescriptor::Alloc(size); + desc->init(); + + desc->addEntry(kEffects_SkDescriptorTag, effect_size, nullptr); + + SkDescriptorTestHelper::SetLength(desc.get(), size); + SkDescriptorTestHelper::SetCount(desc.get(), 2); + REPORTER_ASSERT(r, !desc->isValid()); + + SkDescriptorTestHelper::SetLength(desc.get(), size); + SkDescriptorTestHelper::SetCount(desc.get(), 1); + REPORTER_ASSERT(r, !desc->isValid()); +} + +DEF_TEST(Descriptor_entry_over_end, r) { + auto desc = SkDescriptor::Alloc(36); + desc->init(); + + // Make the start of the Entry be in the SkDescriptor, but the second half falls out side the + // SkDescriptor. So: 12 (for descriptor) + 8 (for entry) + 12 (for entry length) = 32. An + // An Entry is 8 bytes, so 4 bytes are < 36 and 4 bytes > 36. + desc->addEntry(kEffects_SkDescriptorTag, 12, nullptr); + + SkDescriptorTestHelper::SetLength(desc.get(), 36); + SkDescriptorTestHelper::SetCount(desc.get(), 2); + REPORTER_ASSERT(r, !desc->isValid()); +} diff --git a/third_party/skia/tests/DrawOpAtlasTest.cpp b/third_party/skia/tests/DrawOpAtlasTest.cpp index ec6068c4b60c..826d53dffc7f 100644 --- a/third_party/skia/tests/DrawOpAtlasTest.cpp +++ b/third_party/skia/tests/DrawOpAtlasTest.cpp @@ -211,10 +211,13 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrAtlasTextOpPreparation, reporter, ctxInfo) TestingUploadTarget uploadTarget; GrOpFlushState flushState(gpu, resourceProvider, uploadTarget.writeableTokenTracker()); + + GrSurfaceProxyView surfaceView = rtc->outputSurfaceView(); GrOpFlushState::OpArgs opArgs(op.get(), - rtc->asRenderTargetProxy(), + &surfaceView, nullptr, - GrXferProcessor::DstProxy(nullptr, SkIPoint::Make(0, 0))); + GrXferProcessor::DstProxyView(GrSurfaceProxyView(), + SkIPoint::Make(0, 0))); // Cripple the atlas manager so it can't allocate any pages. This will force a failure // in the preparation of the text op diff --git a/third_party/skia/tests/EGLImageTest.cpp b/third_party/skia/tests/EGLImageTest.cpp index c7bc11204dd7..80497c0840d6 100644 --- a/third_party/skia/tests/EGLImageTest.cpp +++ b/third_party/skia/tests/EGLImageTest.cpp @@ -21,6 +21,8 @@ #include "tools/gpu/GrContextFactory.h" #include "tools/gpu/gl/GLTestContext.h" +#ifdef SK_GL + using sk_gpu_test::GLTestContext; static void cleanup(GLTestContext* glctx0, GrGLuint texID0, GLTestContext* glctx1, @@ -185,15 +187,17 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(EGLImageTest, reporter, ctxInfo) { } } - test_read_pixels(reporter, surfaceContext.get(), pixels.get(), "EGLImageTest-read"); + TestReadPixels(reporter, surfaceContext.get(), pixels.get(), "EGLImageTest-read"); // We should not be able to write to a EXTERNAL texture - test_write_pixels(reporter, surfaceContext.get(), false, "EGLImageTest-write"); + TestWritePixels(reporter, surfaceContext.get(), false, "EGLImageTest-write"); // Only test RT-config // TODO: why do we always need to draw to copy from an external texture? - test_copy_from_surface(reporter, context0, surfaceContext->asSurfaceProxy(), - GrColorType::kRGBA_8888, pixels.get(), "EGLImageTest-copy"); + TestCopyFromSurface(reporter, context0, surfaceContext->asSurfaceProxy(), + GrColorType::kRGBA_8888, pixels.get(), "EGLImageTest-copy"); cleanup(glCtx0, externalTexture.fID, glCtx1.get(), context1, &backendTexture1, image); } + +#endif // SK_GL diff --git a/third_party/skia/tests/EmptyPathTest.cpp b/third_party/skia/tests/EmptyPathTest.cpp index 8212fc4ac79d..06c3cea7523f 100644 --- a/third_party/skia/tests/EmptyPathTest.cpp +++ b/third_party/skia/tests/EmptyPathTest.cpp @@ -126,11 +126,11 @@ static void test_emptydrawing(skiatest::Reporter* reporter) { static void (*gMakeProc[])(SkPath*) = { make_empty, make_M, make_MM, make_MZM, make_L, make_Q, make_C }; - static SkPath::FillType gFills[] = { - SkPath::kWinding_FillType, - SkPath::kEvenOdd_FillType, - SkPath::kInverseWinding_FillType, - SkPath::kInverseEvenOdd_FillType + static SkPathFillType gFills[] = { + SkPathFillType::kWinding, + SkPathFillType::kEvenOdd, + SkPathFillType::kInverseWinding, + SkPathFillType::kInverseEvenOdd }; for (int doClose = 0; doClose < 2; ++doClose) { for (size_t i = 0; i < SK_ARRAY_COUNT(gMakeProc); ++i) { diff --git a/third_party/skia/tests/ExtendedSkColorTypeTests.cpp b/third_party/skia/tests/ExtendedSkColorTypeTests.cpp index ce06ec279c43..be5e90a360e7 100644 --- a/third_party/skia/tests/ExtendedSkColorTypeTests.cpp +++ b/third_party/skia/tests/ExtendedSkColorTypeTests.cpp @@ -167,7 +167,7 @@ static void compare_pixmaps(skiatest::Reporter* reporter, diffs[0], diffs[1], diffs[2], diffs[3]); }); - compare_pixels(expected, actual, tols, error); + ComparePixels(expected, actual, tols, error); } static void gpu_tests(GrContext* context, skiatest::Reporter* reporter, const TestCase& test) { diff --git a/third_party/skia/tests/FillPathTest.cpp b/third_party/skia/tests/FillPathTest.cpp index f6e1c5e584f7..04bcb01fa9e6 100644 --- a/third_party/skia/tests/FillPathTest.cpp +++ b/third_party/skia/tests/FillPathTest.cpp @@ -41,7 +41,7 @@ DEF_TEST(FillPathInverse, reporter) { .quadTo(SkIntToScalar(width/2), SkIntToScalar(height), SkIntToScalar(width), 0.0f) .close() - .setFillType(SkPath::kInverseWinding_FillType); + .setFillType(SkPathFillType::kInverseWinding); SkScan::FillPath(path, clip, &blitter); REPORTER_ASSERT(reporter, blitter.m_blitCount == expected_lines); diff --git a/third_party/skia/tests/FloatingPointTextureTest.cpp b/third_party/skia/tests/FloatingPointTextureTest.cpp index c6cc5dfb5a68..3645b3086015 100644 --- a/third_party/skia/tests/FloatingPointTextureTest.cpp +++ b/third_party/skia/tests/FloatingPointTextureTest.cpp @@ -47,9 +47,10 @@ void runFPTest(skiatest::Reporter* reporter, GrContext* context, T min, T max, T } for (auto origin : {kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin}) { - auto fpProxy = sk_gpu_test::MakeTextureProxyFromData(context, GrRenderable::kYes, DEV_W, - DEV_H, colorType, kPremul_SkAlphaType, - origin, controlPixelData.begin(), 0); + auto fpProxy = sk_gpu_test::MakeTextureProxyFromData( + context, GrRenderable::kYes, origin, + {colorType, kPremul_SkAlphaType, nullptr, DEV_W, DEV_H}, + controlPixelData.begin(), 0); // Floating point textures are NOT supported everywhere if (!fpProxy) { continue; diff --git a/third_party/skia/tests/FontTest.cpp b/third_party/skia/tests/FontTest.cpp new file mode 100644 index 000000000000..1ae8aa8c3a75 --- /dev/null +++ b/third_party/skia/tests/FontTest.cpp @@ -0,0 +1,83 @@ +/* + * Copyright 2019 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/SkFont.h" +#include "src/core/SkAutoMalloc.h" +#include "src/core/SkFontPriv.h" +#include "src/core/SkReadBuffer.h" +#include "src/core/SkWriteBuffer.h" +#include "tests/Test.h" + +static SkFont serialize_deserialize(const SkFont& font, skiatest::Reporter* reporter) { + SkBinaryWriteBuffer wb; + SkFontPriv::Flatten(font, wb); + + size_t size = wb.bytesWritten(); + SkAutoMalloc storage(size); + wb.writeToMemory(storage.get()); + + SkReadBuffer rb(storage.get(), size); + + SkFont clone; + REPORTER_ASSERT(reporter, SkFontPriv::Unflatten(&clone, rb)); + return clone; +} + +enum { + kForceAutoHinting = 1 << 0, + kEmbeddedBitmaps = 1 << 1, + kSubpixel = 1 << 2, + kLinearMetrics = 1 << 3, + kEmbolden = 1 << 4, + kBaselineSnap = 1 << 5, + + kAllBits = 0x3F, +}; + +static void apply_flags(SkFont* font, unsigned flags) { + font->setForceAutoHinting(SkToBool(flags & kForceAutoHinting)); + font->setEmbeddedBitmaps( SkToBool(flags & kEmbeddedBitmaps)); + font->setSubpixel( SkToBool(flags & kSubpixel)); + font->setLinearMetrics( SkToBool(flags & kLinearMetrics)); + font->setEmbolden( SkToBool(flags & kEmbolden)); + font->setBaselineSnap( SkToBool(flags & kBaselineSnap)); +} + +DEF_TEST(Font_flatten, reporter) { + const float sizes[] = {0, 0.001f, 1, 10, 10.001f, 100, 100000, 100000.01f}; + const float scales[] = {-5, -1, 0, 1, 5}; + const float skews[] = {-5, -1, 0, 1, 5}; + const SkFont::Edging edges[] = { + SkFont::Edging::kAlias, SkFont::Edging::kAntiAlias, SkFont::Edging::kSubpixelAntiAlias + }; + const SkFontHinting hints[] = { + SkFontHinting::kNone, SkFontHinting::kSlight, SkFontHinting::kNormal, SkFontHinting::kFull + }; + + SkFont font; + for (float size : sizes) { + font.setSize(size); + for (float scale : scales) { + font.setScaleX(scale); + for (float skew : skews) { + font.setSkewX(skew); + for (auto edge : edges) { + font.setEdging(edge); + for (auto hint : hints) { + font.setHinting(hint); + for (unsigned flags = 0; flags <= kAllBits; ++flags) { + apply_flags(&font, flags); + + SkFont clone = serialize_deserialize(font, reporter); + REPORTER_ASSERT(reporter, font == clone); + } + } + } + } + } + } +} diff --git a/third_party/skia/tests/GpuDrawPathTest.cpp b/third_party/skia/tests/GpuDrawPathTest.cpp index 22fecd7a5838..5431aaa39cec 100644 --- a/third_party/skia/tests/GpuDrawPathTest.cpp +++ b/third_party/skia/tests/GpuDrawPathTest.cpp @@ -65,8 +65,8 @@ static void test_drawSameRectOvals(skiatest::Reporter*, SkCanvas* canvas) { SkPath oval1, oval2; const SkRect rect = SkRect::MakeWH(100, 50); - oval1.addOval(rect, SkPath::kCW_Direction); - oval2.addOval(rect, SkPath::kCCW_Direction); + oval1.addOval(rect, SkPathDirection::kCW); + oval2.addOval(rect, SkPathDirection::kCCW); fill_and_stroke(canvas, oval1, oval2, nullptr); diff --git a/third_party/skia/tests/GrGLExtensionsTest.cpp b/third_party/skia/tests/GrGLExtensionsTest.cpp index 480e624a258d..4c957062029a 100644 --- a/third_party/skia/tests/GrGLExtensionsTest.cpp +++ b/third_party/skia/tests/GrGLExtensionsTest.cpp @@ -11,6 +11,8 @@ #include "src/gpu/gl/GrGLDefines.h" #include "tests/Test.h" +#ifdef SK_GL + const GrGLubyte* simpleGetString(GrGLenum name) { return (const GrGLubyte*)(name == GR_GL_VERSION ? "3.0" : ""); } @@ -46,3 +48,5 @@ DEF_TEST(GrGLExtensionsTest_remove, reporter) { REPORTER_ASSERT(reporter, ext.remove("test_extension_1")); REPORTER_ASSERT(reporter, !ext.has("test_extension_1")); } + +#endif // SK_GL diff --git a/third_party/skia/tests/GrMeshTest.cpp b/third_party/skia/tests/GrMeshTest.cpp index d45aa7f9bc48..b2338e55bb00 100644 --- a/third_party/skia/tests/GrMeshTest.cpp +++ b/third_party/skia/tests/GrMeshTest.cpp @@ -62,7 +62,7 @@ class DrawMeshHelper { sk_sp fIndexBuffer; sk_sp fInstBuffer; - void drawMesh(const GrMesh& mesh); + void drawMesh(const GrMesh& mesh, GrPrimitiveType); private: GrOpFlushState* fState; @@ -162,7 +162,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) { GrMesh mesh(GrPrimitiveType::kTriangles); mesh.setNonIndexedNonInstanced(kBoxCountX * 6); mesh.setVertexData(helper->fVertBuffer, y * kBoxCountX * 6); - helper->drawMesh(mesh); + helper->drawMesh(mesh, GrPrimitiveType::kTriangles); } }); @@ -187,7 +187,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) { baseRepetition * 4, (baseRepetition + repetitionCount) * 4 - 1, GrPrimitiveRestart::kNo); mesh.setVertexData(helper->fVertBuffer, (i - baseRepetition) * 4); - helper->drawMesh(mesh); + helper->drawMesh(mesh, GrPrimitiveType::kTriangles); baseRepetition = (baseRepetition + 1) % 3; i += repetitionCount; @@ -209,7 +209,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) { mesh.setIndexedPatterned(helper->fIndexBuffer, 6, 4, kBoxCountX, kIndexPatternRepeatCount); mesh.setVertexData(helper->fVertBuffer, y * kBoxCountX * 4); - helper->drawMesh(mesh); + helper->drawMesh(mesh, GrPrimitiveType::kTriangles); } }); @@ -236,8 +236,10 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) { // null vertex buffer. setIndexedInstanced intentionally does not support a // base index. for (int y = 0; y < kBoxCountY; ++y) { - GrMesh mesh(indexed ? GrPrimitiveType::kTriangles - : GrPrimitiveType::kTriangleStrip); + + GrPrimitiveType primitiveType = indexed ? GrPrimitiveType::kTriangles + : GrPrimitiveType::kTriangleStrip; + GrMesh mesh(primitiveType); if (indexed) { VALIDATE(helper->fIndexBuffer); mesh.setIndexedInstanced(helper->fIndexBuffer, 6, helper->fInstBuffer, @@ -264,7 +266,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) { mesh.setVertexData(helper->fVertBuffer2, 2); break; } - helper->drawMesh(mesh); + helper->drawMesh(mesh, primitiveType); } }); } @@ -319,6 +321,27 @@ class GrMeshTestOp : public GrDrawOp { class GrMeshTestProcessor : public GrGeometryProcessor { public: + static GrGeometryProcessor* Make(SkArenaAlloc* arena, bool instanced, bool hasVertexBuffer) { + return arena->make(instanced, hasVertexBuffer); + } + + const char* name() const override { return "GrMeshTestProcessor"; } + + const Attribute& inColor() const { + return fVertexColor.isInitialized() ? fVertexColor : fInstanceColor; + } + + void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const final { + b->add32(fInstanceLocation.isInitialized()); + b->add32(fVertexPosition.isInitialized()); + } + + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const final; + +private: + friend class GLSLMeshTestProcessor; + friend class ::SkArenaAlloc; // for access to ctor + GrMeshTestProcessor(bool instanced, bool hasVertexBuffer) : INHERITED(kGrMeshTestProcessor_ClassID) { if (instanced) { @@ -336,33 +359,18 @@ class GrMeshTestProcessor : public GrGeometryProcessor { } } - const char* name() const override { return "GrMeshTest Processor"; } - - const Attribute& inColor() const { - return fVertexColor.isInitialized() ? fVertexColor : fInstanceColor; - } - - void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const final { - b->add32(fInstanceLocation.isInitialized()); - b->add32(fVertexPosition.isInitialized()); - } - - GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const final; - -private: Attribute fVertexPosition; Attribute fVertexColor; Attribute fInstanceLocation; Attribute fInstanceColor; - friend class GLSLMeshTestProcessor; typedef GrGeometryProcessor INHERITED; }; class GLSLMeshTestProcessor : public GrGLSLGeometryProcessor { void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - FPCoordTransformIter&& transformIter) final {} + const CoordTransformRange& transformIter) final {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) final { const GrMeshTestProcessor& mp = args.fGP.cast(); @@ -408,15 +416,19 @@ sk_sp DrawMeshHelper::getIndexBuffer() { kIndexPattern, 6, kIndexPatternRepeatCount, 4, gIndexBufferKey); } -void DrawMeshHelper::drawMesh(const GrMesh& mesh) { +void DrawMeshHelper::drawMesh(const GrMesh& mesh, GrPrimitiveType primitiveType) { GrPipeline pipeline(GrScissorTest::kDisabled, SkBlendMode::kSrc, GrSwizzle::RGBA()); - GrMeshTestProcessor mtp(mesh.isInstanced(), mesh.hasVertexData()); - GrProgramInfo programInfo(fState->drawOpArgs().numSamples(), - fState->drawOpArgs().origin(), - pipeline, + GrGeometryProcessor* mtp = GrMeshTestProcessor::Make(fState->allocator(), + mesh.isInstanced(), mesh.hasVertexData()); + + GrProgramInfo programInfo(fState->proxy()->numSamples(), + fState->proxy()->numStencilSamples(), + fState->proxy()->backendFormat(), + fState->view()->origin(), + &pipeline, mtp, - nullptr, nullptr, 0); + nullptr, nullptr, 0, primitiveType); fState->opsRenderPass()->draw(programInfo, &mesh, 1, SkRect::MakeIWH(kImageWidth, kImageHeight)); diff --git a/third_party/skia/tests/GrMipMappedTest.cpp b/third_party/skia/tests/GrMipMappedTest.cpp index 6bb6afdf1fe9..d911dbb2ca5e 100644 --- a/third_party/skia/tests/GrMipMappedTest.cpp +++ b/third_party/skia/tests/GrMipMappedTest.cpp @@ -340,7 +340,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(Gr1x1TextureMipMappedTest, reporter, ctxInfo) // Create a new render target and draw 'mipmapProxy' into it using the provided 'filter'. static std::unique_ptr draw_mipmap_into_new_render_target( GrDrawingManager* drawingManager, GrProxyProvider* proxyProvider, GrColorType colorType, - sk_sp mipmapProxy, GrSamplerState::Filter filter) { + SkAlphaType alphaType, sk_sp mipmapProxy, GrSamplerState::Filter filter) { GrSurfaceDesc desc; desc.fWidth = 1; desc.fHeight = 1; @@ -350,9 +350,10 @@ static std::unique_ptr draw_mipmap_into_new_render_target GrMipMapped::kNo, SkBackingFit::kApprox, SkBudgeted::kYes, GrProtected::kNo); auto rtc = drawingManager->makeRenderTargetContext( std::move(renderTarget), colorType, nullptr, nullptr, true); - rtc->drawTexture(GrNoClip(), mipmapProxy, colorType, filter, SkBlendMode::kSrcOver, + rtc->drawTexture(GrNoClip(), mipmapProxy, colorType, alphaType, filter, SkBlendMode::kSrcOver, {1,1,1,1}, SkRect::MakeWH(4, 4), SkRect::MakeWH(1,1), GrAA::kYes, - GrQuadAAFlags::kAll, SkCanvas::kFast_SrcRectConstraint, SkMatrix::I(), nullptr); + GrQuadAAFlags::kAll, SkCanvas::kFast_SrcRectConstraint, SkMatrix::I(), + nullptr); return rtc; } @@ -380,6 +381,7 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { kRGBA_8888_SkColorType, GrRenderable::kYes); GrPixelConfig config = kRGBA_8888_GrPixelConfig; GrColorType colorType = GrColorType::kRGBA_8888; + SkAlphaType alphaType = kPremul_SkAlphaType; GrDrawingManager* drawingManager = context->priv().drawingManager(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); @@ -410,8 +412,8 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { REPORTER_ASSERT(reporter, !mipmapProxy->mipMapsAreDirty()); // Draw the dirty mipmap texture into a render target. - auto rtc1 = draw_mipmap_into_new_render_target( - drawingManager, proxyProvider, colorType, mipmapProxy, Filter::kMipMap); + auto rtc1 = draw_mipmap_into_new_render_target(drawingManager, proxyProvider, colorType, + alphaType, mipmapProxy, Filter::kMipMap); // Mipmaps should have gotten marked dirty during makeClosed, then marked clean again as // soon as a GrTextureResolveRenderTask was inserted. The way we know they were resolved is @@ -424,8 +426,8 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { REPORTER_ASSERT(reporter, !mipmapProxy->mipMapsAreDirty()); // Draw the now-clean mipmap texture into a second target. - auto rtc2 = draw_mipmap_into_new_render_target( - drawingManager, proxyProvider, colorType, mipmapProxy, Filter::kMipMap); + auto rtc2 = draw_mipmap_into_new_render_target(drawingManager, proxyProvider, colorType, + alphaType, mipmapProxy, Filter::kMipMap); // Make sure the mipmap texture still has the same regen task. REPORTER_ASSERT(reporter, mipmapProxy->getLastRenderTask() == initialMipmapRegenTask); @@ -451,8 +453,8 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { REPORTER_ASSERT(reporter, !mipmapProxy->mipMapsAreDirty()); // Draw the dirty mipmap texture into a render target, but don't do mipmap filtering. - rtc1 = draw_mipmap_into_new_render_target( - drawingManager, proxyProvider, colorType, mipmapProxy, Filter::kBilerp); + rtc1 = draw_mipmap_into_new_render_target(drawingManager, proxyProvider, colorType, + alphaType, mipmapProxy, Filter::kBilerp); // Mipmaps should have gotten marked dirty during makeClosed() when adding the dependency. // Since the last draw did not use mips, they will not have been regenerated and should @@ -464,8 +466,8 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { mipmapRTC->testingOnly_PeekLastOpsTask() == mipmapProxy->getLastRenderTask()); // Draw the stil-dirty mipmap texture into a second target with mipmap filtering. - rtc2 = draw_mipmap_into_new_render_target( - drawingManager, proxyProvider, colorType, mipmapProxy, Filter::kMipMap); + rtc2 = draw_mipmap_into_new_render_target(drawingManager, proxyProvider, colorType, + alphaType, mipmapProxy, Filter::kMipMap); // Make sure the mipmap texture now has a new last render task that regenerates the mips, // and that the mipmaps are now clean. diff --git a/third_party/skia/tests/GrPipelineDynamicStateTest.cpp b/third_party/skia/tests/GrPipelineDynamicStateTest.cpp index 485aa14aa611..9ab35f060490 100644 --- a/third_party/skia/tests/GrPipelineDynamicStateTest.cpp +++ b/third_party/skia/tests/GrPipelineDynamicStateTest.cpp @@ -60,9 +60,8 @@ struct Vertex { class GrPipelineDynamicStateTestProcessor : public GrGeometryProcessor { public: - GrPipelineDynamicStateTestProcessor() - : INHERITED(kGrPipelineDynamicStateTestProcessor_ClassID) { - this->setVertexAttributes(kAttributes, SK_ARRAY_COUNT(kAttributes)); + static GrGeometryProcessor* Make(SkArenaAlloc* arena) { + return arena->make(); } const char* name() const override { return "GrPipelineDynamicStateTest Processor"; } @@ -75,6 +74,13 @@ class GrPipelineDynamicStateTestProcessor : public GrGeometryProcessor { const Attribute& inColor() const { return kAttributes[1]; } private: + friend class ::SkArenaAlloc; // for access to ctor + + GrPipelineDynamicStateTestProcessor() + : INHERITED(kGrPipelineDynamicStateTestProcessor_ClassID) { + this->setVertexAttributes(kAttributes, SK_ARRAY_COUNT(kAttributes)); + } + static constexpr Attribute kAttributes[] = { {"vertex", kFloat2_GrVertexAttribType, kHalf2_GrSLType}, {"color", kUByte4_norm_GrVertexAttribType, kHalf4_GrSLType}, @@ -87,7 +93,7 @@ constexpr GrPrimitiveProcessor::Attribute GrPipelineDynamicStateTestProcessor::k class GLSLPipelineDynamicStateTestProcessor : public GrGLSLGeometryProcessor { void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - FPCoordTransformIter&& transformIter) final {} + const CoordTransformRange&) final {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) final { const GrPipelineDynamicStateTestProcessor& mp = @@ -153,14 +159,16 @@ class GrPipelineDynamicStateTestOp : public GrDrawOp { GrPipeline::DynamicStateArrays dynamicState; dynamicState.fScissorRects = kDynamicScissors; - GrPipelineDynamicStateTestProcessor primProc; + auto geomProc = GrPipelineDynamicStateTestProcessor::Make(flushState->allocator()); - GrProgramInfo programInfo(flushState->drawOpArgs().numSamples(), - flushState->drawOpArgs().origin(), - pipeline, - primProc, + GrProgramInfo programInfo(flushState->proxy()->numSamples(), + flushState->proxy()->numStencilSamples(), + flushState->proxy()->backendFormat(), + flushState->view()->origin(), + &pipeline, + geomProc, nullptr, - &dynamicState, 0); + &dynamicState, 0, GrPrimitiveType::kTriangleStrip); flushState->opsRenderPass()->draw(programInfo, meshes.begin(), 4, SkRect::MakeIWH(kScreenSize, kScreenSize)); diff --git a/third_party/skia/tests/GrPorterDuffTest.cpp b/third_party/skia/tests/GrPorterDuffTest.cpp index 533ff0f98884..a5756bf11629 100644 --- a/third_party/skia/tests/GrPorterDuffTest.cpp +++ b/third_party/skia/tests/GrPorterDuffTest.cpp @@ -997,12 +997,14 @@ DEF_GPUTEST(PorterDuffNoDualSourceBlending, reporter, options) { ctx->createBackendTexture(100, 100, kRGBA_8888_SkColorType, SkColors::kTransparent, GrMipMapped::kNo, GrRenderable::kNo, GrProtected::kNo); - GrXferProcessor::DstProxy fakeDstProxy; + GrXferProcessor::DstProxyView fakeDstProxyView; { sk_sp proxy = proxyProvider->wrapBackendTexture( backendTex, GrColorType::kRGBA_8888, kTopLeft_GrSurfaceOrigin, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, kRead_GrIOType); - fakeDstProxy.setProxy(std::move(proxy)); + GrSwizzle swizzle = caps.getTextureSwizzle(backendTex.getBackendFormat(), + GrColorType::kRGBA_8888); + fakeDstProxyView.setProxyView({std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle}); } static const GrProcessorAnalysisColor colorInputs[] = { diff --git a/third_party/skia/tests/GrQuadBufferTest.cpp b/third_party/skia/tests/GrQuadBufferTest.cpp index 928438f52988..c6ba08fb6ff7 100644 --- a/third_party/skia/tests/GrQuadBufferTest.cpp +++ b/third_party/skia/tests/GrQuadBufferTest.cpp @@ -112,16 +112,17 @@ TEST(Append) { auto iter = buffer.iterator(); while(iter.next()) { // Each entry always has the device quad - assert_quad_eq(r, expectedDeviceQuads[i], iter.deviceQuad()); + assert_quad_eq(r, expectedDeviceQuads[i], *iter.deviceQuad()); assert_metadata_eq(r, {2 * i, 3.f * i}, iter.metadata()); if (i % 2 == 0) { // Confirm local quads included on even entries ASSERT(iter.isLocalValid()); - assert_quad_eq(r, expectedLocalQuads[i], iter.localQuad()); + assert_quad_eq(r, expectedLocalQuads[i], *iter.localQuad()); } else { // Should not have locals ASSERT(!iter.isLocalValid()); + ASSERT(!iter.localQuad()); } i++; @@ -161,25 +162,27 @@ TEST(Concat) { while(iter.next()) { if (i < kQuadCount) { // First half should match original buffer1 - assert_quad_eq(r, quadsA[i], iter.deviceQuad()); + assert_quad_eq(r, quadsA[i], *iter.deviceQuad()); assert_metadata_eq(r, {i, 2.f * i}, iter.metadata()); if (i % 2 == 0) { ASSERT(iter.isLocalValid()); - assert_quad_eq(r, quadsB[i], iter.localQuad()); + assert_quad_eq(r, quadsB[i], *iter.localQuad()); } else { ASSERT(!iter.isLocalValid()); + ASSERT(!iter.localQuad()); } } else { // Second half should match buffer2 int j = i - kQuadCount; - assert_quad_eq(r, quadsB[j], iter.deviceQuad()); + assert_quad_eq(r, quadsB[j], *iter.deviceQuad()); assert_metadata_eq(r, {2 * j, 0.5f * j}, iter.metadata()); if (j % 2 == 0) { ASSERT(!iter.isLocalValid()); + ASSERT(!iter.localQuad()); } else { ASSERT(iter.isLocalValid()); - assert_quad_eq(r, quadsA[j], iter.localQuad()); + assert_quad_eq(r, quadsA[j], *iter.localQuad()); } } @@ -221,12 +224,13 @@ TEST(Metadata) { assert_metadata_eq(r, {2 * i, 0.5f * i}, iter.metadata()); // Quad coordinates are unchanged - assert_quad_eq(r, quad, iter.deviceQuad()); + assert_quad_eq(r, quad, *iter.deviceQuad()); if (i % 2 == 0) { ASSERT(iter.isLocalValid()); - assert_quad_eq(r, quad, iter.localQuad()); + assert_quad_eq(r, quad, *iter.localQuad()); } else { ASSERT(!iter.isLocalValid()); + ASSERT(!iter.localQuad()); } i++; } diff --git a/third_party/skia/tests/GrShapeTest.cpp b/third_party/skia/tests/GrShapeTest.cpp index 548bd0423f11..01bb54022ec7 100644 --- a/third_party/skia/tests/GrShapeTest.cpp +++ b/third_party/skia/tests/GrShapeTest.cpp @@ -119,7 +119,7 @@ static void check_equivalence(skiatest::Reporter* r, const GrShape& a, const GrS // The asRRect() output params are all initialized just to silence compiler warnings about // uninitialized variables. SkRRect rrectA = SkRRect::MakeEmpty(), rrectB = SkRRect::MakeEmpty(); - SkPath::Direction dirA = SkPath::kCW_Direction, dirB = SkPath::kCW_Direction; + SkPathDirection dirA = SkPathDirection::kCW, dirB = SkPathDirection::kCW; unsigned startA = ~0U, startB = ~0U; bool invertedA = true, invertedB = true; @@ -145,8 +145,8 @@ static void check_equivalence(skiatest::Reporter* r, const GrShape& a, const GrS ignoreInversenessDifference = (canDropInverse1 != canDropInverse2); } bool ignoreWindingVsEvenOdd = false; - if (SkPath::ConvertToNonInverseFillType(pathA.getFillType()) != - SkPath::ConvertToNonInverseFillType(pathB.getFillType())) { + if (SkPathFillType_ConvertToNonInverse(pathA.getNewFillType()) != + SkPathFillType_ConvertToNonInverse(pathB.getNewFillType())) { bool aCanChange = can_interchange_winding_and_even_odd_fill(a); bool bCanChange = can_interchange_winding_and_even_odd_fill(b); if (aCanChange != bCanChange) { @@ -163,14 +163,14 @@ static void check_equivalence(skiatest::Reporter* r, const GrShape& a, const GrS REPORTER_ASSERT(r, a.inverseFilled() == pA.isInverseFillType()); REPORTER_ASSERT(r, b.inverseFilled() == pB.isInverseFillType()); if (ignoreInversenessDifference) { - pA.setFillType(SkPath::ConvertToNonInverseFillType(pathA.getFillType())); - pB.setFillType(SkPath::ConvertToNonInverseFillType(pathB.getFillType())); + pA.setFillType(SkPathFillType_ConvertToNonInverse(pathA.getNewFillType())); + pB.setFillType(SkPathFillType_ConvertToNonInverse(pathB.getNewFillType())); } if (ignoreWindingVsEvenOdd) { - pA.setFillType(pA.isInverseFillType() ? SkPath::kInverseEvenOdd_FillType - : SkPath::kEvenOdd_FillType); - pB.setFillType(pB.isInverseFillType() ? SkPath::kInverseEvenOdd_FillType - : SkPath::kEvenOdd_FillType); + pA.setFillType(pA.isInverseFillType() ? SkPathFillType::kInverseEvenOdd + : SkPathFillType::kEvenOdd); + pB.setFillType(pB.isInverseFillType() ? SkPathFillType::kInverseEvenOdd + : SkPathFillType::kEvenOdd); } if (!ignoreInversenessDifference && !ignoreWindingVsEvenOdd) { REPORTER_ASSERT(r, keyA == keyB); @@ -425,11 +425,11 @@ class PathGeo : public Geo { PathGeo(const SkPath& path, Invert invert) : fPath(path) { SkASSERT(!path.isInverseFillType()); if (Invert::kYes == invert) { - if (fPath.getFillType() == SkPath::kEvenOdd_FillType) { - fPath.setFillType(SkPath::kInverseEvenOdd_FillType); + if (fPath.getNewFillType() == SkPathFillType::kEvenOdd) { + fPath.setFillType(SkPathFillType::kInverseEvenOdd); } else { - SkASSERT(fPath.getFillType() == SkPath::kWinding_FillType); - fPath.setFillType(SkPath::kInverseWinding_FillType); + SkASSERT(fPath.getNewFillType() == SkPathFillType::kWinding); + fPath.setFillType(SkPathFillType::kInverseWinding); } } } @@ -457,7 +457,7 @@ class PathGeo : public Geo { } SkRect rect; unsigned start; - SkPath::Direction dir; + SkPathDirection dir; if (SkPathPriv::IsSimpleClosedRect(fPath, &rect, &dir, &start)) { return RectGeo(rect).strokeAndFillIsConvertedToFill(paint); } @@ -572,7 +572,7 @@ class TestCase { } // The bounds API explicitly calls out that it does not consider inverseness. SkPath p = path; - p.setFillType(SkPath::ConvertToNonInverseFillType(path.getFillType())); + p.setFillType(SkPathFillType_ConvertToNonInverse(path.getNewFillType())); REPORTER_ASSERT(r, test_bounds_by_rasterizing(p, bounds)); } @@ -1577,7 +1577,7 @@ DEF_TEST(GrShape_empty_shape, reporter) { dashAndStrokeEmptyRRectCase.compare(reporter, fillEmptyCase, TestCase::kAllSame_ComparisonExpecation); - static constexpr SkPath::Direction kDir = SkPath::kCCW_Direction; + static constexpr SkPathDirection kDir = SkPathDirection::kCCW; static constexpr int kStart = 0; TestCase fillInvertedEmptyRRectCase(reporter, emptyRRect, kDir, kStart, true, GrStyle(fill)); @@ -1646,21 +1646,21 @@ void test_rrect(skiatest::Reporter* r, const SkRRect& rrect) { static constexpr Style kStyleCnt = static_cast