From 765ac9dc58ec6372b7312555ea3ec2b675d40fbd Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Tue, 14 May 2024 11:10:12 +0200 Subject: [PATCH] - refreshed patches - rebased clean source --- 0001-Add-PPC64-support-for-boringssl.patch | 67 -- ...-party-boringssl-add-generated-files.patch | 44 +- HACK-debian-clang-disable-skia-musttail.patch | 13 - chromium-121-v8-c++20-p1.patch | 171 ---- chromium-123-v8-c++20.patch | 733 ----------------- chromium-125-el-NativeValueTraits-p1.patch | 739 ++++++++++++++++++ chromium-125-el-NativeValueTraits-p2.patch | 144 ++++ ...mium-125-ffmpeg-5.x-reordered_opaque.patch | 105 +++ chromium.spec | 27 +- skia-vsx-instructions.patch | 394 +++++----- sources | 2 +- 11 files changed, 1210 insertions(+), 1229 deletions(-) delete mode 100644 HACK-debian-clang-disable-skia-musttail.patch delete mode 100644 chromium-121-v8-c++20-p1.patch delete mode 100644 chromium-123-v8-c++20.patch create mode 100644 chromium-125-el-NativeValueTraits-p1.patch create mode 100644 chromium-125-el-NativeValueTraits-p2.patch create mode 100644 chromium-125-ffmpeg-5.x-reordered_opaque.patch diff --git a/0001-Add-PPC64-support-for-boringssl.patch b/0001-Add-PPC64-support-for-boringssl.patch index 52c6cb49..f6364512 100644 --- a/0001-Add-PPC64-support-for-boringssl.patch +++ b/0001-Add-PPC64-support-for-boringssl.patch @@ -1,45 +1,3 @@ -Index: chromium-124.0.6367.60/third_party/boringssl/src/cmake/perlasm.cmake -=================================================================== ---- chromium-124.0.6367.60.orig/third_party/boringssl/src/cmake/perlasm.cmake -+++ chromium-124.0.6367.60/third_party/boringssl/src/cmake/perlasm.cmake -@@ -17,6 +17,7 @@ function(add_perlasm_target dest src) - DEPENDS - ${src} - ${PROJECT_SOURCE_DIR}/crypto/perlasm/arm-xlate.pl -+ ${PROJECT_SOURCE_DIR}/crypto/perlasm/ppc-xlate.pl - ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl - ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl - ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl -@@ -39,6 +40,9 @@ function(perlasm var arch dest src) - elseif(arch STREQUAL "arm") - add_perlasm_target("${dest}-linux.S" ${src} linux32 ${ARGN}) - append_to_parent_scope("${var}_ASM" "${dest}-linux.S") -+ elseif(arch STREQUAL "ppc64le") -+ add_perlasm_target("${dest}-linux.S" ${src} linux64le) -+ append_to_parent_scope("${var}_ASM" "${dest}-linux.S") - elseif(arch STREQUAL "x86") - add_perlasm_target("${dest}-apple.S" ${src} macosx -fPIC ${ARGN}) - add_perlasm_target("${dest}-linux.S" ${src} elf -fPIC ${ARGN}) -Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/CMakeLists.txt -=================================================================== ---- chromium-124.0.6367.60.orig/third_party/boringssl/src/crypto/CMakeLists.txt -+++ chromium-124.0.6367.60/third_party/boringssl/src/crypto/CMakeLists.txt -@@ -26,6 +26,7 @@ perlasm(CRYPTO_SOURCES aarch64 cipher_ex - perlasm(CRYPTO_SOURCES aarch64 test/trampoline-armv8 test/asm/trampoline-armv8.pl) - perlasm(CRYPTO_SOURCES arm chacha/chacha-armv4 chacha/asm/chacha-armv4.pl) - perlasm(CRYPTO_SOURCES arm test/trampoline-armv4 test/asm/trampoline-armv4.pl) -+perlasm(CRYPTO_SOURCES ppc64le test/trampoline-ppc test/asm/trampoline-ppc.pl) - perlasm(CRYPTO_SOURCES x86 chacha/chacha-x86 chacha/asm/chacha-x86.pl) - perlasm(CRYPTO_SOURCES x86 test/trampoline-x86 test/asm/trampoline-x86.pl) - perlasm(CRYPTO_SOURCES x86_64 chacha/chacha-x86_64 chacha/asm/chacha-x86_64.pl) -@@ -137,6 +138,7 @@ add_library( - cpu_arm_freebsd.c - cpu_arm_linux.c - cpu_intel.c -+ cpu_ppc64le.c - crypto.c - curve25519/curve25519.c - curve25519/curve25519_64_adx.c Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/abi_self_test.cc =================================================================== --- chromium-124.0.6367.60.orig/third_party/boringssl/src/crypto/abi_self_test.cc @@ -419,19 +377,6 @@ Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/crypto.c #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) #include -Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/fipsmodule/CMakeLists.txt -=================================================================== ---- chromium-124.0.6367.60.orig/third_party/boringssl/src/crypto/fipsmodule/CMakeLists.txt -+++ chromium-124.0.6367.60/third_party/boringssl/src/crypto/fipsmodule/CMakeLists.txt -@@ -19,6 +19,8 @@ perlasm(BCM_SOURCES arm sha1-armv4-large - perlasm(BCM_SOURCES arm sha256-armv4 sha/asm/sha256-armv4.pl) - perlasm(BCM_SOURCES arm sha512-armv4 sha/asm/sha512-armv4.pl) - perlasm(BCM_SOURCES arm vpaes-armv7 aes/asm/vpaes-armv7.pl) -+perlasm(BCM_SOURCES ppc64le aesp8-ppc aes/asm/aesp8-ppc.pl) -+perlasm(BCM_SOURCES ppc64le ghashp8-ppc modes/asm/ghashp8-ppc.pl) - perlasm(BCM_SOURCES x86 aesni-x86 aes/asm/aesni-x86.pl) - perlasm(BCM_SOURCES x86 bn-586 bn/asm/bn-586.pl) - perlasm(BCM_SOURCES x86 co-586 bn/asm/co-586.pl) Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesp8-ppc.pl =================================================================== --- /dev/null @@ -8870,18 +8815,6 @@ Index: chromium-124.0.6367.60/third_party/boringssl/src/util/fipstools/delocate/ +.byte 0xff +.byte 0x31 +.byte 0x80 -Index: chromium-124.0.6367.60/third_party/boringssl/src/util/generate_build_files.py -=================================================================== ---- chromium-124.0.6367.60.orig/third_party/boringssl/src/util/generate_build_files.py -+++ chromium-124.0.6367.60/third_party/boringssl/src/util/generate_build_files.py -@@ -34,6 +34,7 @@ OS_ARCH_COMBOS = [ - ('apple', 'x86_64', 'macosx', [], 'S'), - ('linux', 'arm', 'linux32', [], 'S'), - ('linux', 'aarch64', 'linux64', [], 'S'), -+ ('linux', 'ppc64le', 'linux64le', [], 'S'), - ('linux', 'x86', 'elf', ['-fPIC'], 'S'), - ('linux', 'x86_64', 'elf', [], 'S'), - ('win', 'x86', 'win32n', [], 'asm'), Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.c =================================================================== --- chromium-124.0.6367.60.orig/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.c diff --git a/0002-third-party-boringssl-add-generated-files.patch b/0002-third-party-boringssl-add-generated-files.patch index b4f8d287..11f9e4c6 100644 --- a/0002-third-party-boringssl-add-generated-files.patch +++ b/0002-third-party-boringssl-add-generated-files.patch @@ -1,8 +1,7 @@ -Index: chromium-120.0.6099.71/third_party/boringssl/BUILD.generated.gni -=================================================================== ---- chromium-120.0.6099.71.orig/third_party/boringssl/BUILD.generated.gni -+++ chromium-120.0.6099.71/third_party/boringssl/BUILD.generated.gni -@@ -94,6 +94,7 @@ crypto_sources = [ +diff -up chromium-125.0.6422.41/third_party/boringssl/BUILD.generated.gni.0002-third-party-boringssl-add-generated-files chromium-125.0.6422.41/third_party/boringssl/BUILD.generated.gni +--- chromium-125.0.6422.41/third_party/boringssl/BUILD.generated.gni.0002-third-party-boringssl-add-generated-files 2024-05-08 22:30:22.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/boringssl/BUILD.generated.gni 2024-05-13 23:31:29.026580692 +0200 +@@ -93,6 +93,7 @@ crypto_sources = [ "src/crypto/cpu_arm_linux.c", "src/crypto/cpu_arm_linux.h", "src/crypto/cpu_intel.c", @@ -10,20 +9,19 @@ Index: chromium-120.0.6099.71/third_party/boringssl/BUILD.generated.gni "src/crypto/crypto.c", "src/crypto/curve25519/curve25519.c", "src/crypto/curve25519/curve25519_64_adx.c", -@@ -389,6 +390,9 @@ crypto_sources_asm = [ - "linux-arm/crypto/fipsmodule/sha512-armv4-linux.S", - "linux-arm/crypto/fipsmodule/vpaes-armv7-linux.S", - "linux-arm/crypto/test/trampoline-armv4-linux.S", +@@ -434,6 +435,9 @@ crypto_sources_asm = [ + "src/gen/crypto/chacha20_poly1305_x86_64-apple.S", + "src/gen/crypto/chacha20_poly1305_x86_64-linux.S", + "src/gen/test_support/trampoline-armv4-linux.S", + "linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S", + "linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S", + "linux-ppc64le/crypto/test/trampoline-ppc-linux.S", - "linux-x86/crypto/chacha/chacha-x86-linux.S", - "linux-x86/crypto/fipsmodule/aesni-x86-linux.S", - "linux-x86/crypto/fipsmodule/bn-586-linux.S", -Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S -=================================================================== ---- /dev/null -+++ chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S + "src/gen/test_support/trampoline-armv8-apple.S", + "src/gen/test_support/trampoline-armv8-linux.S", + "src/gen/test_support/trampoline-armv8-win.S", +diff -up chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S.0002-third-party-boringssl-add-generated-files chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S +--- chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S.0002-third-party-boringssl-add-generated-files 2024-05-13 21:28:13.295879825 +0200 ++++ chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S 2024-05-13 21:28:13.294879802 +0200 @@ -0,0 +1,3673 @@ +// This file is generated from a similarly-named Perl script in the BoringSSL +// source tree. Do not edit by hand. @@ -3698,10 +3696,9 @@ Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmod +// See https://www.airs.com/blog/archives/518. +.section .note.GNU-stack,"",%progbits +#endif -Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S -=================================================================== ---- /dev/null -+++ chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S +diff -up chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S.0002-third-party-boringssl-add-generated-files chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S +--- chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S.0002-third-party-boringssl-add-generated-files 2024-05-13 21:28:13.295879825 +0200 ++++ chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S 2024-05-13 21:28:13.295879825 +0200 @@ -0,0 +1,590 @@ +// This file is generated from a similarly-named Perl script in the BoringSSL +// source tree. Do not edit by hand. @@ -4293,10 +4290,9 @@ Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmod +// See https://www.airs.com/blog/archives/518. +.section .note.GNU-stack,"",%progbits +#endif -Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S -=================================================================== ---- /dev/null -+++ chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S +diff -up chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S.0002-third-party-boringssl-add-generated-files chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S +--- chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S.0002-third-party-boringssl-add-generated-files 2024-05-13 21:28:13.295879825 +0200 ++++ chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S 2024-05-13 21:28:13.295879825 +0200 @@ -0,0 +1,1413 @@ +// This file is generated from a similarly-named Perl script in the BoringSSL +// source tree. Do not edit by hand. diff --git a/HACK-debian-clang-disable-skia-musttail.patch b/HACK-debian-clang-disable-skia-musttail.patch deleted file mode 100644 index 6e255203..00000000 --- a/HACK-debian-clang-disable-skia-musttail.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: chromium-120.0.6099.71/third_party/skia/src/core/SkRasterPipeline.h -=================================================================== ---- chromium-120.0.6099.71.orig/third_party/skia/src/core/SkRasterPipeline.h -+++ chromium-120.0.6099.71/third_party/skia/src/core/SkRasterPipeline.h -@@ -24,7 +24,7 @@ enum SkColorType : int; - struct SkImageInfo; - struct skcms_TransferFunction; - --#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) -+#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) && !defined(__powerpc64__) - #define SK_HAS_MUSTTAIL 1 - #else - #define SK_HAS_MUSTTAIL 0 diff --git a/chromium-121-v8-c++20-p1.patch b/chromium-121-v8-c++20-p1.patch deleted file mode 100644 index bdf6c01d..00000000 --- a/chromium-121-v8-c++20-p1.patch +++ /dev/null @@ -1,171 +0,0 @@ -commit ce71348a09f6689dd01a68db64b172191d0182d8 -Author: Andrey Kosyakov -Date: Thu Dec 21 18:38:38 2023 +0000 - - [bindings] Use v8::Array::Iterate for converting script wrappables - - - This changes CreateIDLSequenceFromV8Array to use the new - v8::Array::Iterate() operation. - This speeds up the "execBundles" part of the microbenchmark - at crbug.com/dawn/1858 by around 3x. - This depends on crrev.com/c/4846594 landing (and rolling) first. - - This is a slight re-work of https://crrev.com/c/4847447/3, - originally by jkummerow@chromium.org - - Bug: v8:14218, dawn:1858, 1511239 - Change-Id: Ia266556d05b4d53e6942e12609d1c08882b4ff0f - Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5132129 - Commit-Queue: Andrey Kosyakov - Reviewed-by: Yuki Shiino - Cr-Commit-Position: refs/heads/main@{#1240236} - -diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h -index 1e5a0790df6da..a5c28b37e9454 100644 ---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h -+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h -@@ -84,6 +84,12 @@ struct NativeValueTraitsBase { - std::is_pointer_v || - requires(ImplType value) { value.IsNull(); }; - -+ // This should only be true for certain subclasses of ScriptWrappable -+ // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with -+ // regards to how NativeValue() is implemented for the underlying type. -+ static constexpr bool supports_scriptwrappable_specific_fast_array_iteration = -+ false; -+ - template - static decltype(auto) ArgumentValue(v8::Isolate* isolate, - int argument_index, -diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h -index 5011503dcf1c0..f085b6e905161 100644 ---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h -+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h -@@ -1037,10 +1037,86 @@ CreateIDLSequenceFromV8ArraySlow(v8::Isolate* isolate, - return {}; - } - -- typename NativeValueTraits>::ImplType result; -+ using ResultType = typename NativeValueTraits>::ImplType; -+ ResultType result; - result.ReserveInitialCapacity(length); - v8::Local current_context = isolate->GetCurrentContext(); - v8::TryCatch try_block(isolate); -+ -+ // Fast path -- we're creating a sequence of script wrappables, which can be -+ // done by directly getting underlying object as long as array types are -+ // homogeneous. With ScriptWrappables, we don't expect to enter JS during -+ // iteration, so we can rely on v8::Array::Iterate() which is much faster than -+ // iterating an array on the client side of the v8. Additionally, for most -+ // subsptyes of ScriptWrappables, we can speed up type checks (see more on -+ // that below next to supports_scriptwrappable_specific_fast_array_iteration -+ // check. -+ if constexpr (std::is_base_of_v) { -+ struct CallbackData { -+ STACK_ALLOCATED(); -+ -+ public: -+ v8::Isolate* isolate; -+ v8::TypecheckWitness witness; -+ ResultType& result; -+ ExceptionState& exception_state; -+ CallbackData(v8::Isolate* isolate, -+ ResultType& result, -+ ExceptionState& exception_state) -+ : isolate(isolate), -+ witness(isolate), -+ result(result), -+ exception_state(exception_state) {} -+ }; -+ -+ CallbackData callback_data(isolate, result, exception_state); -+ v8::Array::IterationCallback callback = [](uint32_t index, -+ v8::Local v8_element, -+ void* data) { -+ CallbackData* callback_data = reinterpret_cast(data); -+ // 3.4. Initialize Si to the result of converting nextItem to an IDL value -+ // of type T. -+ v8::TypecheckWitness& witness = callback_data->witness; -+ // We can speed up type check by taking advantage of V8's type witness, -+ // provided traits' NativeValue implementation doesn't have additional -+ // logic beyond checking the type and calling ToScriptWrappable(). -+ if constexpr ( -+ NativeValueTraits< -+ T>::supports_scriptwrappable_specific_fast_array_iteration) { -+ if (witness.Matches(v8_element)) { -+ auto&& value = ToScriptWrappable(v8_element.As()) -+ ->template ToImpl(); -+ callback_data->result.push_back(std::move(value)); -+ return v8::Array::CallbackResult::kContinue; -+ } -+ } -+ auto&& element = NativeValueTraits::NativeValue( -+ callback_data->isolate, v8_element, callback_data->exception_state); -+ if (callback_data->exception_state.HadException()) { -+ // It doesn't matter whether we return `kException` or `kBreak` here, -+ // as that only affects the return value of `v8_array->Iterate()`, -+ // which we are ignoring. -+ return v8::Array::CallbackResult::kException; -+ } -+ if constexpr ( -+ NativeValueTraits< -+ T>::supports_scriptwrappable_specific_fast_array_iteration) { -+ witness.Update(v8_element); -+ } -+ callback_data->result.push_back(std::move(element)); -+ return v8::Array::CallbackResult::kContinue; -+ }; -+ if (!v8_array->Iterate(current_context, callback, &callback_data) -+ .IsJust()) { -+ if (try_block.HasCaught()) { -+ exception_state.RethrowV8Exception(try_block.Exception()); -+ } -+ DCHECK(exception_state.HadException()); -+ return {}; -+ } -+ return result; -+ } -+ - // Array length may change if array is mutated during iteration. - for (uint32_t i = 0; i < v8_array->Length(); ++i) { - v8::Local v8_element; -@@ -1056,6 +1132,7 @@ CreateIDLSequenceFromV8ArraySlow(v8::Isolate* isolate, - return {}; - result.push_back(std::move(element)); - } -+ - // 3.2. If next is false, then return an IDL sequence value of type - // sequence of length i, where the value of the element at index j is Sj. - return result; -@@ -1398,6 +1475,7 @@ struct NativeValueTraits : public NativeValueTraitsBase { - } - }; - -+// Interface types - template - requires std::derived_from - struct NativeValueTraits> -@@ -1470,12 +1548,21 @@ struct NativeValueTraits : public NativeValueTraitsBase { - template - requires std::derived_from - struct NativeValueTraits : public NativeValueTraitsBase { -+ // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply -+ // certain optimization based on assumptions about `NativeValue()` -+ // implementation below. For subclasses of ScriptWrappable that have -+ // different implementation of NativeValue(), this should remain false. -+ static constexpr bool supports_scriptwrappable_specific_fast_array_iteration = -+ true; -+ - static inline T* NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { - const WrapperTypeInfo* wrapper_type_info = T::GetStaticWrapperTypeInfo(); -- if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info, value)) -+ if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info, -+ value)) { - return ToScriptWrappable(value.As())->template ToImpl(); -+ } - - bindings::NativeValueTraitsInterfaceNotOfType(wrapper_type_info, - exception_state); diff --git a/chromium-123-v8-c++20.patch b/chromium-123-v8-c++20.patch deleted file mode 100644 index a4682da1..00000000 --- a/chromium-123-v8-c++20.patch +++ /dev/null @@ -1,733 +0,0 @@ -commit 940af9f2c87b436559b97c53763aa9eaaf1254eb -Author: Jeremy Roman -Date: Wed Nov 15 16:24:54 2023 +0000 - - Use C++20 features to simplify blink::NativeValueTraitsBase. - - These allow some of the metaprogramming bits to be simplified a little. - - Change-Id: I052b4397586d21348401616e1792afdb9662f975 - Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5030335 - Reviewed-by: Yuki Shiino - Commit-Queue: Jeremy Roman - Cr-Commit-Position: refs/heads/main@{#1224978} - -diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h -index 7fc91d14acc71..1e5a0790df6da 100644 ---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h -+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h -@@ -5,6 +5,7 @@ - #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_ - #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_ - -+#include - #include - - #include "third_party/blink/renderer/bindings/core/v8/idl_types_base.h" -@@ -30,7 +31,7 @@ class ExceptionState; - // return toInt32(isolate, value, exceptionState, NormalConversion); - // } - // } --template -+template - struct NativeValueTraits; - - // This declaration serves only as a blueprint for specializations: the -@@ -45,22 +46,15 @@ struct NativeValueTraits; - - namespace bindings { - --template --struct NativeValueTraitsHasIsNull : std::false_type {}; -- - template --struct NativeValueTraitsHasIsNull< -- T, -- std::void_t().IsNull())>> : std::true_type {}; -+struct ImplTypeFor { -+ using type = T; -+}; - - template --struct NativeValueTraitsHasNullValue { -- // true if |T| supports IDL null value. -- static constexpr bool value = -- // ScriptValue, String, and union types have IsNull member function. -- bindings::NativeValueTraitsHasIsNull::value || -- // Pointer types have nullptr as IDL null value. -- std::is_pointer::value; -+ requires std::derived_from -+struct ImplTypeFor { -+ using type = typename T::ImplType; - }; - - } // namespace bindings -@@ -78,37 +72,17 @@ struct NativeValueTraitsHasNullValue { - // If present, |NullValue()| will be used when converting from the nullable type - // T?, and should be used if the impl type has an existing "null" state. If not - // present, WTF::Optional will be used to wrap the type. --template --struct NativeValueTraitsBase { -- STATIC_ONLY(NativeValueTraitsBase); -- -- using ImplType = T; -- -- static constexpr bool has_null_value = -- bindings::NativeValueTraitsHasNullValue::value; -- -- template -- static decltype(auto) ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state, -- ExtraArgs... extra_args) { -- return NativeValueTraits>::NativeValue( -- isolate, value, exception_state, -- std::forward(extra_args)...); -- } --}; -- - template --struct NativeValueTraitsBase< -- T, -- std::enable_if_t::value>> { -+struct NativeValueTraitsBase { - STATIC_ONLY(NativeValueTraitsBase); - -- using ImplType = typename T::ImplType; -+ using ImplType = bindings::ImplTypeFor::type; - -+ // Pointer types have nullptr as IDL null value. -+ // ScriptValue, String, and union types have IsNull member function. - static constexpr bool has_null_value = -- bindings::NativeValueTraitsHasNullValue::value; -+ std::is_pointer_v || -+ requires(ImplType value) { value.IsNull(); }; - - template - static decltype(auto) ArgumentValue(v8::Isolate* isolate, -diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc -index 508ea6d8eea48..18de71d84023f 100644 ---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc -+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc -@@ -7,6 +7,7 @@ - #include "third_party/blink/renderer/core/core_export.h" - #include "third_party/blink/renderer/core/execution_context/execution_context.h" - #include "third_party/blink/renderer/core/frame/web_feature.h" -+#include "third_party/blink/renderer/core/typed_arrays/flexible_array_buffer_view.h" - #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h" - - namespace blink { -@@ -698,12 +699,11 @@ DOMArrayBufferBase* NativeValueTraits< - // ArrayBufferView - - template --NotShared NativeValueTraits< -- NotShared, -- typename std::enable_if_t::value>>:: -- NativeValue(v8::Isolate* isolate, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+NotShared NativeValueTraits>::NativeValue( -+ v8::Isolate* isolate, -+ v8::Local value, -+ ExceptionState& exception_state) { - return NativeValueImpl< - RecipeTrait>, ToDOMViewType, - Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, -@@ -712,13 +712,12 @@ NotShared NativeValueTraits< - } - - template --NotShared NativeValueTraits< -- NotShared, -- typename std::enable_if_t::value>>:: -- ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+NotShared NativeValueTraits>::ArgumentValue( -+ v8::Isolate* isolate, -+ int argument_index, -+ v8::Local value, -+ ExceptionState& exception_state) { - return ArgumentValueImpl< - RecipeTrait>, ToDOMViewType, - Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, -@@ -729,12 +728,11 @@ NotShared NativeValueTraits< - // [AllowShared] ArrayBufferView - - template --MaybeShared NativeValueTraits< -- MaybeShared, -- typename std::enable_if_t::value>>:: -- NativeValue(v8::Isolate* isolate, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+MaybeShared NativeValueTraits>::NativeValue( -+ v8::Isolate* isolate, -+ v8::Local value, -+ ExceptionState& exception_state) { - return NativeValueImpl>, - ToDOMViewType, - Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, -@@ -743,13 +741,12 @@ MaybeShared NativeValueTraits< - } - - template --MaybeShared NativeValueTraits< -- MaybeShared, -- typename std::enable_if_t::value>>:: -- ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+MaybeShared NativeValueTraits>::ArgumentValue( -+ v8::Isolate* isolate, -+ int argument_index, -+ v8::Local value, -+ ExceptionState& exception_state) { - return ArgumentValueImpl>, - ToDOMViewType, - Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, -@@ -760,12 +757,12 @@ MaybeShared NativeValueTraits< - // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView - - template --MaybeShared NativeValueTraits< -- IDLBufferSourceTypeNoSizeLimit>, -- typename std::enable_if_t::value>>:: -- NativeValue(v8::Isolate* isolate, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+MaybeShared -+NativeValueTraits>>::NativeValue( -+ v8::Isolate* isolate, -+ v8::Local value, -+ ExceptionState& exception_state) { - return NativeValueImpl< - RecipeTrait>, ToDOMViewType, - Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck, -@@ -774,13 +771,12 @@ MaybeShared NativeValueTraits< - } - - template --MaybeShared NativeValueTraits< -- IDLBufferSourceTypeNoSizeLimit>, -- typename std::enable_if_t::value>>:: -- ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+MaybeShared NativeValueTraits>>::ArgumentValue(v8::Isolate* isolate, -+ int argument_index, -+ v8::Local value, -+ ExceptionState& exception_state) { - return ArgumentValueImpl< - RecipeTrait>, ToDOMViewType, - Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck, -@@ -791,12 +787,11 @@ MaybeShared NativeValueTraits< - // Nullable ArrayBufferView - - template --NotShared NativeValueTraits< -- IDLNullable>, -- typename std::enable_if_t::value>>:: -- NativeValue(v8::Isolate* isolate, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+NotShared NativeValueTraits>>::NativeValue( -+ v8::Isolate* isolate, -+ v8::Local value, -+ ExceptionState& exception_state) { - return NativeValueImpl< - RecipeTrait>, ToDOMViewType, - Nullablity::kIsNullable, BufferSizeCheck::kCheck, -@@ -805,13 +800,12 @@ NotShared NativeValueTraits< - } - - template --NotShared NativeValueTraits< -- IDLNullable>, -- typename std::enable_if_t::value>>:: -- ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+NotShared NativeValueTraits>>::ArgumentValue( -+ v8::Isolate* isolate, -+ int argument_index, -+ v8::Local value, -+ ExceptionState& exception_state) { - return ArgumentValueImpl< - RecipeTrait>, ToDOMViewType, - Nullablity::kIsNullable, BufferSizeCheck::kCheck, -@@ -822,12 +816,11 @@ NotShared NativeValueTraits< - // Nullable [AllowShared] ArrayBufferView - - template --MaybeShared NativeValueTraits< -- IDLNullable>, -- typename std::enable_if_t::value>>:: -- NativeValue(v8::Isolate* isolate, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+MaybeShared NativeValueTraits>>::NativeValue( -+ v8::Isolate* isolate, -+ v8::Local value, -+ ExceptionState& exception_state) { - return NativeValueImpl>, - ToDOMViewType, - Nullablity::kIsNullable, BufferSizeCheck::kCheck, -@@ -836,13 +829,12 @@ MaybeShared NativeValueTraits< - } - - template --MaybeShared NativeValueTraits< -- IDLNullable>, -- typename std::enable_if_t::value>>:: -- ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+MaybeShared NativeValueTraits>>::ArgumentValue( -+ v8::Isolate* isolate, -+ int argument_index, -+ v8::Local value, -+ ExceptionState& exception_state) { - return ArgumentValueImpl>, - ToDOMViewType, - Nullablity::kIsNullable, BufferSizeCheck::kCheck, -@@ -853,9 +845,9 @@ MaybeShared NativeValueTraits< - // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView - - template --MaybeShared NativeValueTraits< -- IDLNullable>>, -- typename std::enable_if_t::value>>:: -+ requires std::derived_from -+MaybeShared -+NativeValueTraits>>>:: - ArgumentValue(v8::Isolate* isolate, - int argument_index, - v8::Local value, -@@ -870,13 +862,11 @@ MaybeShared NativeValueTraits< - // [AllowShared, FlexibleArrayBufferView] ArrayBufferView - - template --T NativeValueTraits::value>>:: -- ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+T NativeValueTraits::ArgumentValue(v8::Isolate* isolate, -+ int argument_index, -+ v8::Local value, -+ ExceptionState& exception_state) { - return ArgumentValueImpl, ToFlexibleArrayBufferView, - Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, - ResizableAllowance::kDisallowResizable, -@@ -888,13 +878,12 @@ T NativeValueTraits --T NativeValueTraits, -- typename std::enable_if_t< -- std::is_base_of::value>>:: -- ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+T NativeValueTraits>::ArgumentValue( -+ v8::Isolate* isolate, -+ int argument_index, -+ v8::Local value, -+ ExceptionState& exception_state) { - return ArgumentValueImpl< - RecipeTrait, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable, - BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable, -@@ -905,13 +894,12 @@ T NativeValueTraits, - // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView - - template --T NativeValueTraits, -- typename std::enable_if_t< -- std::is_base_of::value>>:: -- ArgumentValue(v8::Isolate* isolate, -- int argument_index, -- v8::Local value, -- ExceptionState& exception_state) { -+ requires std::derived_from -+T NativeValueTraits>::ArgumentValue( -+ v8::Isolate* isolate, -+ int argument_index, -+ v8::Local value, -+ ExceptionState& exception_state) { - return ArgumentValueImpl, ToFlexibleArrayBufferView, - Nullablity::kIsNullable, BufferSizeCheck::kCheck, - ResizableAllowance::kDisallowResizable, -diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h -index 899929dcf49f9..5011503dcf1c0 100644 ---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h -+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h -@@ -715,9 +718,8 @@ struct CORE_EXPORT NativeValueTraits< - }; - - template --struct NativeValueTraits< -- T, -- typename std::enable_if_t::value>> { -+ requires std::derived_from -+struct NativeValueTraits { - // NotShared or MaybeShared should be used instead. - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -729,9 +731,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLNullable, -- typename std::enable_if_t::value>> { -+ requires std::derived_from -+struct NativeValueTraits> { - // NotShared or MaybeShared should be used instead. - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -743,9 +744,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- NotShared, -- typename std::enable_if_t::value>> -+ requires std::derived_from -+struct NativeValueTraits> - : public NativeValueTraitsBase> { - static NotShared NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -758,9 +758,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLNullable>, -- typename std::enable_if_t::value>> -+ requires std::derived_from -+struct NativeValueTraits>> - : public NativeValueTraitsBase> { - static NotShared NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -773,9 +772,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- MaybeShared, -- typename std::enable_if_t::value>> -+ requires std::derived_from -+struct NativeValueTraits> - : public NativeValueTraitsBase> { - static MaybeShared NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -788,9 +786,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLBufferSourceTypeNoSizeLimit>, -- typename std::enable_if_t::value>> -+ requires std::derived_from -+struct NativeValueTraits>> - : public NativeValueTraitsBase> { - // FlexibleArrayBufferView uses this in its implementation, so we cannot - // delete it. -@@ -805,9 +802,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLNullable>, -- typename std::enable_if_t::value>> -+ requires std::derived_from -+struct NativeValueTraits>> - : public NativeValueTraitsBase> { - static MaybeShared NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -820,9 +816,9 @@ struct NativeValueTraits< - }; - - template -+ requires std::derived_from - struct NativeValueTraits< -- IDLNullable>>, -- typename std::enable_if_t::value>> -+ IDLNullable>>> - : public NativeValueTraitsBase> { - // BufferSourceTypeNoSizeLimit must be used only as arguments. - static MaybeShared NativeValue(v8::Isolate* isolate, -@@ -836,11 +832,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- T, -- typename std::enable_if_t< -- std::is_base_of::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits : public NativeValueTraitsBase { - // FlexibleArrayBufferView must be used only as arguments. - static T NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -853,10 +846,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLBufferSourceTypeNoSizeLimit, -- typename std::enable_if_t< -- std::is_base_of::value>> -+ requires std::derived_from -+struct NativeValueTraits> - : public NativeValueTraitsBase { - // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only - // as arguments. -@@ -871,11 +862,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLNullable, -- typename std::enable_if_t< -- std::is_base_of::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits> : public NativeValueTraitsBase { - // FlexibleArrayBufferView must be used only as arguments. - static T NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -1134,9 +1122,8 @@ NativeValueTraits>::NativeValue( - } - - template --struct NativeValueTraits>, -- typename std::enable_if_t< -- NativeValueTraits>::has_null_value>> -+ requires NativeValueTraits>::has_null_value -+struct NativeValueTraits>> - : public NativeValueTraitsBase>*> { - using ImplType = typename NativeValueTraits>::ImplType*; - -@@ -1203,9 +1190,8 @@ struct NativeValueTraits> - : public NativeValueTraits> {}; - - template --struct NativeValueTraits>, -- typename std::enable_if_t< -- NativeValueTraits>::has_null_value>> -+ requires NativeValueTraits>::has_null_value -+struct NativeValueTraits>> - : public NativeValueTraits>> {}; - - // Record types -@@ -1335,10 +1321,8 @@ struct NativeValueTraits> - - // Callback function types - template --struct NativeValueTraits< -- T, -- typename std::enable_if_t::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits : public NativeValueTraitsBase { - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { -@@ -1361,9 +1345,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLNullable, -- typename std::enable_if_t::value>> -+ requires std::derived_from -+struct NativeValueTraits> - : public NativeValueTraitsBase> { - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -1392,10 +1375,8 @@ struct NativeValueTraits< - - // Callback interface types - template --struct NativeValueTraits< -- T, -- typename std::enable_if_t::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits : public NativeValueTraitsBase { - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { -@@ -1418,9 +1399,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLNullable, -- typename std::enable_if_t::value>> -+ requires std::derived_from -+struct NativeValueTraits> - : public NativeValueTraitsBase> { - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -1449,11 +1429,8 @@ struct NativeValueTraits< - - // Dictionary types - template --struct NativeValueTraits< -- T, -- typename std::enable_if_t< -- std::is_base_of::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits : public NativeValueTraitsBase { - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { -@@ -1464,14 +1441,11 @@ struct NativeValueTraits< - // We don't support nullable dictionary types in general since it's quite - // confusing and often misused. - template --struct NativeValueTraits< -- IDLNullable, -- typename std::enable_if_t< -- std::is_base_of::value && -- (std::is_same::value || -- std::is_same::value || -- std::is_same::value)>> -- : public NativeValueTraitsBase { -+ requires std::derived_from && -+ (std::same_as || -+ std::same_as || -+ std::same_as) -+struct NativeValueTraits> : public NativeValueTraitsBase { - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { -@@ -1483,11 +1457,8 @@ struct NativeValueTraits< - - // Enumeration types - template --struct NativeValueTraits< -- T, -- typename std::enable_if_t< -- std::is_base_of::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits : public NativeValueTraitsBase { - static T NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { -@@ -1497,10 +1468,8 @@ struct NativeValueTraits< - - // Interface types - template --struct NativeValueTraits< -- T, -- typename std::enable_if_t::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits : public NativeValueTraitsBase { - static inline T* NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { -@@ -1528,9 +1497,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLNullable, -- typename std::enable_if_t::value>> -+ requires std::derived_from -+struct NativeValueTraits> - : public NativeValueTraitsBase> { - static inline T* NativeValue(v8::Isolate* isolate, - v8::Local value, -@@ -1565,10 +1533,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- T, -- typename std::enable_if_t::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits : public NativeValueTraitsBase { - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { -@@ -1584,10 +1550,8 @@ struct NativeValueTraits< - }; - - template --struct NativeValueTraits< -- IDLNullable, -- typename std::enable_if_t::value>> -- : public NativeValueTraitsBase { -+ requires std::derived_from -+struct NativeValueTraits> : public NativeValueTraitsBase { - static T* NativeValue(v8::Isolate* isolate, - v8::Local value, - ExceptionState& exception_state) { -@@ -1608,9 +1572,8 @@ struct NativeValueTraits< - - // Nullable types - template --struct NativeValueTraits< -- IDLNullable, -- typename std::enable_if_t::has_null_value>> -+ requires(!NativeValueTraits::has_null_value) -+struct NativeValueTraits> - : public NativeValueTraitsBase> { - // https://webidl.spec.whatwg.org/#es-nullable-type - using ImplType = -@@ -1642,9 +1605,8 @@ struct NativeValueTraits>>; - - // Optional types - template --struct NativeValueTraits, -- typename std::enable_if_t::ImplType>::value>> -+ requires std::is_arithmetic_v::ImplType> -+struct NativeValueTraits> - : public NativeValueTraitsBase::ImplType> { - using ImplType = typename NativeValueTraits::ImplType; - -@@ -1666,9 +1628,8 @@ struct NativeValueTraits, - }; - - template --struct NativeValueTraits, -- typename std::enable_if_t::ImplType>::value>> -+ requires std::is_pointer_v::ImplType> -+struct NativeValueTraits> - : public NativeValueTraitsBase::ImplType> { - using ImplType = typename NativeValueTraits::ImplType; - diff --git a/chromium-125-el-NativeValueTraits-p1.patch b/chromium-125-el-NativeValueTraits-p1.patch new file mode 100644 index 00000000..ad0c8a86 --- /dev/null +++ b/chromium-125-el-NativeValueTraits-p1.patch @@ -0,0 +1,739 @@ +revert as workaround for compiler error with old clang < 17 + +commit 940af9f2c87b436559b97c53763aa9eaaf1254eb +Author: Jeremy Roman +Date: Wed Nov 15 16:24:54 2023 +0000 + + Use C++20 features to simplify blink::NativeValueTraitsBase. + + These allow some of the metaprogramming bits to be simplified a little. + + Change-Id: I052b4397586d21348401616e1792afdb9662f975 + Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5030335 + Reviewed-by: Yuki Shiino + Commit-Queue: Jeremy Roman + Cr-Commit-Position: refs/heads/main@{#1224978} + +--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h ++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h +@@ -5,7 +5,6 @@ + #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_ + #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_ + +-#include + #include + + #include "third_party/blink/renderer/bindings/core/v8/idl_types_base.h" +@@ -31,7 +30,7 @@ class ExceptionState; + // return toInt32(isolate, value, exceptionState, NormalConversion); + // } + // } +-template ++template + struct NativeValueTraits; + + // This declaration serves only as a blueprint for specializations: the +@@ -46,15 +45,22 @@ struct NativeValueTraits; + + namespace bindings { + ++template ++struct NativeValueTraitsHasIsNull : std::false_type {}; ++ + template +-struct ImplTypeFor { +- using type = T; +-}; ++struct NativeValueTraitsHasIsNull< ++ T, ++ std::void_t().IsNull())>> : std::true_type {}; + + template +- requires std::derived_from +-struct ImplTypeFor { +- using type = typename T::ImplType; ++struct NativeValueTraitsHasNullValue { ++ // true if |T| supports IDL null value. ++ static constexpr bool value = ++ // ScriptValue, String, and union types have IsNull member function. ++ bindings::NativeValueTraitsHasIsNull::value || ++ // Pointer types have nullptr as IDL null value. ++ std::is_pointer::value; + }; + + } // namespace bindings +@@ -72,17 +78,37 @@ struct ImplTypeFor { + // If present, |NullValue()| will be used when converting from the nullable type + // T?, and should be used if the impl type has an existing "null" state. If not + // present, WTF::Optional will be used to wrap the type. +-template ++template + struct NativeValueTraitsBase { + STATIC_ONLY(NativeValueTraitsBase); + +- using ImplType = bindings::ImplTypeFor::type; ++ using ImplType = T; ++ ++ static constexpr bool has_null_value = ++ bindings::NativeValueTraitsHasNullValue::value; ++ ++ template ++ static decltype(auto) ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state, ++ ExtraArgs... extra_args) { ++ return NativeValueTraits>::NativeValue( ++ isolate, value, exception_state, ++ std::forward(extra_args)...); ++ } ++}; ++ ++template ++struct NativeValueTraitsBase< ++ T, ++ std::enable_if_t::value>> { ++ STATIC_ONLY(NativeValueTraitsBase); ++ ++ using ImplType = typename T::ImplType; + +- // Pointer types have nullptr as IDL null value. +- // ScriptValue, String, and union types have IsNull member function. + static constexpr bool has_null_value = +- std::is_pointer_v || +- requires(ImplType value) { value.IsNull(); }; ++ bindings::NativeValueTraitsHasNullValue::value; + + // This should only be true for certain subclasses of ScriptWrappable + // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with +--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc ++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc +@@ -7,7 +7,6 @@ + #include "third_party/blink/renderer/core/core_export.h" + #include "third_party/blink/renderer/core/execution_context/execution_context.h" + #include "third_party/blink/renderer/core/frame/web_feature.h" +-#include "third_party/blink/renderer/core/typed_arrays/flexible_array_buffer_view.h" + #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h" + + namespace blink { +@@ -698,11 +697,12 @@ DOMArrayBufferBase* NativeValueTraits< + // ArrayBufferView + + template +- requires std::derived_from +-NotShared NativeValueTraits>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++NotShared NativeValueTraits< ++ NotShared, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, +@@ -711,12 +711,13 @@ NotShared NativeValueTraits +- requires std::derived_from +-NotShared NativeValueTraits>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++NotShared NativeValueTraits< ++ NotShared, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, +@@ -727,11 +728,12 @@ NotShared NativeValueTraits +- requires std::derived_from +-MaybeShared NativeValueTraits>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ MaybeShared, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl>, + ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, +@@ -740,12 +742,13 @@ MaybeShared NativeValueTraits +- requires std::derived_from +-MaybeShared NativeValueTraits>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ MaybeShared, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl>, + ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, +@@ -756,12 +759,12 @@ MaybeShared NativeValueTraits +- requires std::derived_from +-MaybeShared +-NativeValueTraits>>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ IDLBufferSourceTypeNoSizeLimit>, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck, +@@ -770,12 +773,13 @@ NativeValueTraits +- requires std::derived_from +-MaybeShared NativeValueTraits>>::ArgumentValue(v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ IDLBufferSourceTypeNoSizeLimit>, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck, +@@ -786,11 +790,12 @@ MaybeShared NativeValueTraits +- requires std::derived_from +-NotShared NativeValueTraits>>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++NotShared NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, +@@ -799,12 +804,13 @@ NotShared NativeValueTraits +- requires std::derived_from +-NotShared NativeValueTraits>>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++NotShared NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, +@@ -815,11 +821,12 @@ NotShared NativeValueTraits +- requires std::derived_from +-MaybeShared NativeValueTraits>>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl>, + ToDOMViewType, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, +@@ -828,12 +835,13 @@ MaybeShared NativeValueTraits +- requires std::derived_from +-MaybeShared NativeValueTraits>>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl>, + ToDOMViewType, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, +@@ -844,9 +852,9 @@ MaybeShared NativeValueTraits +- requires std::derived_from +-MaybeShared +-NativeValueTraits>>>:: ++MaybeShared NativeValueTraits< ++ IDLNullable>>, ++ typename std::enable_if_t::value>>:: + ArgumentValue(v8::Isolate* isolate, + int argument_index, + v8::Local value, +@@ -861,11 +869,13 @@ NativeValueTraits +- requires std::derived_from +-T NativeValueTraits::ArgumentValue(v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++T NativeValueTraits::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl, ToFlexibleArrayBufferView, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, + ResizableAllowance::kDisallowResizable, +@@ -877,12 +887,13 @@ T NativeValueTraits::ArgumentValue(v8 + // ArrayBufferView + + template +- requires std::derived_from +-T NativeValueTraits>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++T NativeValueTraits, ++ typename std::enable_if_t< ++ std::is_base_of::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl< + RecipeTrait, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable, + BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable, +@@ -893,12 +904,13 @@ T NativeValueTraits +- requires std::derived_from +-T NativeValueTraits>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++T NativeValueTraits, ++ typename std::enable_if_t< ++ std::is_base_of::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl, ToFlexibleArrayBufferView, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, + ResizableAllowance::kDisallowResizable, +--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h ++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h +@@ -5,9 +5,7 @@ + #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_ + #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_ + +-#include + #include +-#include + + #include "third_party/blink/renderer/bindings/core/v8/idl_types.h" + #include "third_party/blink/renderer/bindings/core/v8/native_value_traits.h" +@@ -718,8 +716,9 @@ struct CORE_EXPORT NativeValueTraits< + }; + + template +- requires std::derived_from +-struct NativeValueTraits { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> { + // NotShared or MaybeShared should be used instead. + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -731,8 +730,9 @@ struct NativeValueTraits { + }; + + template +- requires std::derived_from +-struct NativeValueTraits> { ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> { + // NotShared or MaybeShared should be used instead. + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -744,8 +744,9 @@ struct NativeValueTraits> + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ NotShared, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static NotShared NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -758,8 +759,9 @@ struct NativeValueTraits> + }; + + template +- requires std::derived_from +-struct NativeValueTraits>> ++struct NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static NotShared NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -772,8 +774,9 @@ struct NativeValueTraits +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ MaybeShared, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static MaybeShared NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -786,8 +789,9 @@ struct NativeValueTraits> + }; + + template +- requires std::derived_from +-struct NativeValueTraits>> ++struct NativeValueTraits< ++ IDLBufferSourceTypeNoSizeLimit>, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + // FlexibleArrayBufferView uses this in its implementation, so we cannot + // delete it. +@@ -802,8 +806,9 @@ struct NativeValueTraits +- requires std::derived_from +-struct NativeValueTraits>> ++struct NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static MaybeShared NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -816,9 +821,9 @@ struct NativeValueTraits +- requires std::derived_from + struct NativeValueTraits< +- IDLNullable>>> ++ IDLNullable>>, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + // BufferSourceTypeNoSizeLimit must be used only as arguments. + static MaybeShared NativeValue(v8::Isolate* isolate, +@@ -832,8 +837,11 @@ struct NativeValueTraits< + }; + + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t< ++ std::is_base_of::value>> ++ : public NativeValueTraitsBase { + // FlexibleArrayBufferView must be used only as arguments. + static T NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -846,8 +854,10 @@ struct NativeValueTraits : public Nat + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLBufferSourceTypeNoSizeLimit, ++ typename std::enable_if_t< ++ std::is_base_of::value>> + : public NativeValueTraitsBase { + // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only + // as arguments. +@@ -862,8 +872,11 @@ struct NativeValueTraits +- requires std::derived_from +-struct NativeValueTraits> : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t< ++ std::is_base_of::value>> ++ : public NativeValueTraitsBase { + // FlexibleArrayBufferView must be used only as arguments. + static T NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -1199,8 +1212,9 @@ NativeValueTraits>::Nativ + } + + template +- requires NativeValueTraits>::has_null_value +-struct NativeValueTraits>> ++struct NativeValueTraits>, ++ typename std::enable_if_t< ++ NativeValueTraits>::has_null_value>> + : public NativeValueTraitsBase>*> { + using ImplType = typename NativeValueTraits>::ImplType*; + +@@ -1276,8 +1290,9 @@ struct NativeValueTraits> + : public NativeValueTraits> {}; + + template +- requires NativeValueTraits>::has_null_value +-struct NativeValueTraits>> ++struct NativeValueTraits>, ++ typename std::enable_if_t< ++ NativeValueTraits>::has_null_value>> + : public NativeValueTraits>> {}; + + // Record types +@@ -1407,8 +1422,10 @@ struct NativeValueTraits + + // Callback function types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1431,8 +1448,9 @@ struct NativeValueTraits : public Nat + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -1461,8 +1479,10 @@ struct NativeValueTraits> + + // Callback interface types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1486,8 +1506,9 @@ struct NativeValueTraits : public Nat + + // Interface types + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -1516,8 +1537,11 @@ struct NativeValueTraits> + + // Dictionary types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t< ++ std::is_base_of::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1528,11 +1552,14 @@ struct NativeValueTraits : public Nat + // We don't support nullable dictionary types in general since it's quite + // confusing and often misused. + template +- requires std::derived_from && +- (std::same_as || +- std::same_as || +- std::same_as) +-struct NativeValueTraits> : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t< ++ std::is_base_of::value && ++ (std::is_same::value || ++ std::is_same::value || ++ std::is_same::value)>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1544,8 +1571,11 @@ struct NativeValueTraits> + + // Enumeration types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t< ++ std::is_base_of::value>> ++ : public NativeValueTraitsBase { + static T NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1555,8 +1585,10 @@ struct NativeValueTraits : public Nat + + // Interface types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply + // certain optimization based on assumptions about `NativeValue()` + // implementation below. For subclasses of ScriptWrappable that have +@@ -1593,8 +1625,9 @@ struct NativeValueTraits : public Nat + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static inline T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -1629,8 +1662,10 @@ struct NativeValueTraits> + }; + + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1646,8 +1681,10 @@ struct NativeValueTraits : public Nat + }; + + template +- requires std::derived_from +-struct NativeValueTraits> : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1668,8 +1705,9 @@ struct NativeValueTraits> + + // Nullable types + template +- requires(!NativeValueTraits::has_null_value) +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::has_null_value>> + : public NativeValueTraitsBase> { + // https://webidl.spec.whatwg.org/#es-nullable-type + using ImplType = +@@ -1701,8 +1739,9 @@ struct NativeValueTraits +- requires std::is_arithmetic_v::ImplType> +-struct NativeValueTraits> ++struct NativeValueTraits, ++ typename std::enable_if_t::ImplType>::value>> + : public NativeValueTraitsBase::ImplType> { + using ImplType = typename NativeValueTraits::ImplType; + +@@ -1724,8 +1763,9 @@ struct NativeValueTraits> + }; + + template +- requires std::is_pointer_v::ImplType> +-struct NativeValueTraits> ++struct NativeValueTraits, ++ typename std::enable_if_t::ImplType>::value>> + : public NativeValueTraitsBase::ImplType> { + using ImplType = typename NativeValueTraits::ImplType; + diff --git a/chromium-125-el-NativeValueTraits-p2.patch b/chromium-125-el-NativeValueTraits-p2.patch new file mode 100644 index 00000000..477378b9 --- /dev/null +++ b/chromium-125-el-NativeValueTraits-p2.patch @@ -0,0 +1,144 @@ +revert as workaround for compiler error with old clang < 17 + +commit ce71348a09f6689dd01a68db64b172191d0182d8 +Author: Andrey Kosyakov +Date: Thu Dec 21 18:38:38 2023 +0000 + + [bindings] Use v8::Array::Iterate for converting script wrappables + + + This changes CreateIDLSequenceFromV8Array to use the new + v8::Array::Iterate() operation. + This speeds up the "execBundles" part of the microbenchmark + at crbug.com/dawn/1858 by around 3x. + This depends on crrev.com/c/4846594 landing (and rolling) first. + + This is a slight re-work of https://crrev.com/c/4847447/3, + originally by jkummerow@chromium.org + + Bug: v8:14218, dawn:1858, 1511239 + Change-Id: Ia266556d05b4d53e6942e12609d1c08882b4ff0f + Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5132129 + Commit-Queue: Andrey Kosyakov + Reviewed-by: Yuki Shiino + Cr-Commit-Position: refs/heads/main@{#1240236} + +--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h 2024-05-13 20:23:41.165774029 +0200 ++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h 2024-05-13 20:27:58.994663485 +0200 +@@ -110,12 +110,6 @@ struct NativeValueTraitsBase< + static constexpr bool has_null_value = + bindings::NativeValueTraitsHasNullValue::value; + +- // This should only be true for certain subclasses of ScriptWrappable +- // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with +- // regards to how NativeValue() is implemented for the underlying type. +- static constexpr bool supports_scriptwrappable_specific_fast_array_iteration = +- false; +- + template + static decltype(auto) ArgumentValue(v8::Isolate* isolate, + int argument_index, +--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h 2024-05-13 20:23:47.295915837 +0200 ++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h 2024-05-13 20:27:21.649808564 +0200 +@@ -1050,87 +1050,11 @@ CreateIDLSequenceFromV8ArraySlow(v8::Iso + return {}; + } + +- using ResultType = typename NativeValueTraits>::ImplType; +- ResultType result; ++ typename NativeValueTraits>::ImplType result; + result.ReserveInitialCapacity(length); + v8::Local current_context = isolate->GetCurrentContext(); + v8::TryCatch try_block(isolate); + +- // Fast path -- we're creating a sequence of script wrappables, which can be +- // done by directly getting underlying object as long as array types are +- // homogeneous. With ScriptWrappables, we don't expect to enter JS during +- // iteration, so we can rely on v8::Array::Iterate() which is much faster than +- // iterating an array on the client side of the v8. Additionally, for most +- // subsptyes of ScriptWrappables, we can speed up type checks (see more on +- // that below next to supports_scriptwrappable_specific_fast_array_iteration +- // check. +- if constexpr (std::is_base_of_v) { +- struct CallbackData { +- STACK_ALLOCATED(); +- +- public: +- v8::Isolate* isolate; +- v8::TypecheckWitness witness; +- ResultType& result; +- ExceptionState& exception_state; +- CallbackData(v8::Isolate* isolate, +- ResultType& result, +- ExceptionState& exception_state) +- : isolate(isolate), +- witness(isolate), +- result(result), +- exception_state(exception_state) {} +- }; +- +- CallbackData callback_data(isolate, result, exception_state); +- v8::Array::IterationCallback callback = [](uint32_t index, +- v8::Local v8_element, +- void* data) { +- CallbackData* callback_data = reinterpret_cast(data); +- v8::Isolate* isolate = callback_data->isolate; +- // 3.4. Initialize Si to the result of converting nextItem to an IDL value +- // of type T. +- v8::TypecheckWitness& witness = callback_data->witness; +- // We can speed up type check by taking advantage of V8's type witness, +- // provided traits' NativeValue implementation doesn't have additional +- // logic beyond checking the type and calling ToScriptWrappable(). +- if constexpr ( +- NativeValueTraits< +- T>::supports_scriptwrappable_specific_fast_array_iteration) { +- if (witness.Matches(v8_element)) { +- auto&& value = ToScriptWrappable(isolate, v8_element.As()) +- ->template ToImpl(); +- callback_data->result.push_back(std::move(value)); +- return v8::Array::CallbackResult::kContinue; +- } +- } +- auto&& element = NativeValueTraits::NativeValue( +- isolate, v8_element, callback_data->exception_state); +- if (callback_data->exception_state.HadException()) { +- // It doesn't matter whether we return `kException` or `kBreak` here, +- // as that only affects the return value of `v8_array->Iterate()`, +- // which we are ignoring. +- return v8::Array::CallbackResult::kException; +- } +- if constexpr ( +- NativeValueTraits< +- T>::supports_scriptwrappable_specific_fast_array_iteration) { +- witness.Update(v8_element); +- } +- callback_data->result.push_back(std::move(element)); +- return v8::Array::CallbackResult::kContinue; +- }; +- if (!v8_array->Iterate(current_context, callback, &callback_data) +- .IsJust()) { +- if (try_block.HasCaught()) { +- exception_state.RethrowV8Exception(try_block.Exception()); +- } +- DCHECK(exception_state.HadException()); +- return {}; +- } +- return result; +- } +- + // Array length may change if array is mutated during iteration. + for (uint32_t i = 0; i < v8_array->Length(); ++i) { + v8::Local v8_element; +@@ -1590,12 +1514,6 @@ struct NativeValueTraits< + T, + typename std::enable_if_t::value>> + : public NativeValueTraitsBase { +- // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply +- // certain optimization based on assumptions about `NativeValue()` +- // implementation below. For subclasses of ScriptWrappable that have +- // different implementation of NativeValue(), this should remain false. +- static constexpr bool supports_scriptwrappable_specific_fast_array_iteration = +- true; + + static inline T* NativeValue(v8::Isolate* isolate, + v8::Local value, diff --git a/chromium-125-ffmpeg-5.x-reordered_opaque.patch b/chromium-125-ffmpeg-5.x-reordered_opaque.patch new file mode 100644 index 00000000..9aff8648 --- /dev/null +++ b/chromium-125-ffmpeg-5.x-reordered_opaque.patch @@ -0,0 +1,105 @@ +commit 62274859104bd828373ae406aa9309e610449ac5 +Author: Ted Meyer +Date: Fri Mar 22 19:56:55 2024 +0000 + + Replace deprecated use of AVCodecContext::reordered_opaque + + We can use the AV_CODEC_FLAG_COPY_OPAQUE flag on the codec context + now to trigger timestamp propagation. + + Bug: 330573128 + Change-Id: I6bc57241a35ab5283742aad8d42acb4dc5e85858 + Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5384308 + Commit-Queue: Ted (Chromium) Meyer + Reviewed-by: Dan Sanders + Cr-Commit-Position: refs/heads/main@{#1277051} + +diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc +index bd75477feeabb..8a658a58caac5 100644 +--- a/media/filters/ffmpeg_video_decoder.cc ++++ b/media/filters/ffmpeg_video_decoder.cc +@@ -134,7 +134,7 @@ bool FFmpegVideoDecoder::IsCodecSupported(VideoCodec codec) { + } + + FFmpegVideoDecoder::FFmpegVideoDecoder(MediaLog* media_log) +- : media_log_(media_log) { ++ : media_log_(media_log), timestamp_map_(128) { + DVLOG(1) << __func__; + DETACH_FROM_SEQUENCE(sequence_checker_); + } +@@ -363,8 +363,10 @@ bool FFmpegVideoDecoder::FFmpegDecode(const DecoderBuffer& buffer) { + DCHECK(packet->data); + DCHECK_GT(packet->size, 0); + +- // Let FFmpeg handle presentation timestamp reordering. +- codec_context_->reordered_opaque = buffer.timestamp().InMicroseconds(); ++ const int64_t timestamp = buffer.timestamp().InMicroseconds(); ++ const TimestampId timestamp_id = timestamp_id_generator_.GenerateNextId(); ++ timestamp_map_.Put(std::make_pair(timestamp_id, timestamp)); ++ packet->opaque = reinterpret_cast(timestamp_id.GetUnsafeValue()); + } + FFmpegDecodingLoop::DecodeStatus decode_status = decoding_loop_->DecodePacket( + packet, base::BindRepeating(&FFmpegVideoDecoder::OnNewFrame, +@@ -423,7 +425,12 @@ bool FFmpegVideoDecoder::OnNewFrame(AVFrame* frame) { + } + gfx::Size natural_size = aspect_ratio.GetNaturalSize(visible_rect); + +- const auto pts = base::Microseconds(frame->reordered_opaque); ++ const auto ts_id = TimestampId(reinterpret_cast(frame->opaque)); ++ const auto ts_lookup = timestamp_map_.Get(ts_id); ++ if (ts_lookup == timestamp_map_.end()) { ++ return false; ++ } ++ const auto pts = base::Microseconds(std::get<1>(*ts_lookup)); + auto video_frame = VideoFrame::WrapExternalDataWithLayout( + opaque->layout, visible_rect, natural_size, opaque->data, opaque->size, + pts); +@@ -498,8 +505,10 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config, + codec_context_->thread_count = GetFFmpegVideoDecoderThreadCount(config); + codec_context_->thread_type = + FF_THREAD_SLICE | (low_delay ? 0 : FF_THREAD_FRAME); ++ + codec_context_->opaque = this; + codec_context_->get_buffer2 = GetVideoBufferImpl; ++ codec_context_->flags |= AV_CODEC_FLAG_COPY_OPAQUE; + + if (base::FeatureList::IsEnabled(kFFmpegAllowLists)) { + // Note: FFmpeg will try to free this string, so we must duplicate it. +diff --git a/media/filters/ffmpeg_video_decoder.h b/media/filters/ffmpeg_video_decoder.h +index d02cb89c3ddf7..0a2de1c623fff 100644 +--- a/media/filters/ffmpeg_video_decoder.h ++++ b/media/filters/ffmpeg_video_decoder.h +@@ -7,10 +7,12 @@ + + #include + ++#include "base/containers/lru_cache.h" + #include "base/functional/callback.h" + #include "base/memory/raw_ptr.h" + #include "base/memory/scoped_refptr.h" + #include "base/sequence_checker.h" ++#include "base/types/id_type.h" + #include "media/base/frame_buffer_pool.h" + #include "media/base/supported_video_decoder_config.h" + #include "media/base/video_decoder.h" +@@ -87,6 +89,20 @@ class MEDIA_EXPORT FFmpegVideoDecoder : public VideoDecoder { + // FFmpeg structures owned by this object. + std::unique_ptr codec_context_; + ++ // The gist here is that timestamps need to be 64 bits to store microsecond ++ // precision. A 32 bit integer would overflow at ~35 minutes at this level of ++ // precision. We can't cast the timestamp to the void ptr object used by the ++ // opaque field in ffmpeg then, because it would lose data on a 32 bit build. ++ // However, we don't actually have 2^31 timestamped frames in a single ++ // playback, so it's fine to use the 32 bit value as a key in a map which ++ // contains the actual timestamps. Additionally, we've in the past set 128 ++ // outstanding frames for re-ordering as a limit for cross-thread decoding ++ // tasks, so we'll do that here too with the LRU cache. ++ using TimestampId = base::IdType; ++ ++ TimestampId::Generator timestamp_id_generator_; ++ base::LRUCache timestamp_map_; ++ + VideoDecoderConfig config_; + + scoped_refptr frame_pool_; diff --git a/chromium.spec b/chromium.spec index e6c8a5b1..fe61ed75 100644 --- a/chromium.spec +++ b/chromium.spec @@ -428,6 +428,7 @@ Patch122: chromium-124-el7-constexpr.patch # system ffmpeg # need for old ffmpeg 5.x on epel9 +Patch129: chromium-125-ffmpeg-5.x-reordered_opaque.patch Patch130: chromium-107-ffmpeg-5.x-duration.patch # disable the check Patch131: chromium-107-proprietary-codecs.patch @@ -449,10 +450,9 @@ Patch150: chromium-124-qt6.patch # not supported in old glibc < 2.30, error: fatal error: 'sys/ifunc.h' file not found Patch305: chromium-124-arm64-memory_tagging.patch -# compiler errors on epel -# revert it for old clang on rhel and f38 -Patch307: chromium-121-v8-c++20-p1.patch -Patch308: chromium-123-v8-c++20.patch +# compiler errors on el7/el8 and f38 (clang <17) +Patch307: chromium-125-el-NativeValueTraits-p1.patch +Patch308: chromium-125-el-NativeValueTraits-p2.patch # enable fstack-protector-strong Patch312: chromium-123-fstack-protector-strong.patch @@ -462,6 +462,9 @@ Patch313: chromium-123-rust-clap_lex.patch Patch314: chromium-124-clang16-buildflags.patch +# remove ldflags -Wl,-mllvm,-disable-auto-upgrade-debug-info which is not supported +Patch315: chromium-122-clang16-disable-auto-upgrade-debug-info.patch + # add -ftrivial-auto-var-init=zero and -fwrapv Patch316: chromium-122-clang-build-flags.patch @@ -479,9 +482,6 @@ Patch354: chromium-120-split-threshold-for-reg-with-hint.patch # disable FFmpegAllowLists by default to allow external ffmpeg patch356: chromium-125-disable-FFmpegAllowLists.patch -# remove ldflags -Wl,-mllvm,-disable-auto-upgrade-debug-info which is not supported -Patch357: chromium-122-clang16-disable-auto-upgrade-debug-info.patch - # set clang_lib path Patch358: chromium-124-rust-clang_lib.patch @@ -521,7 +521,6 @@ Patch383: 0002-Include-cstddef-to-fix-build.patch Patch384: 0004-third_party-crashpad-port-curl-transport-ppc64.patch Patch385: HACK-third_party-libvpx-use-generic-gnu.patch -Patch386: HACK-debian-clang-disable-skia-musttail.patch Patch387: 0001-Add-ppc64-target-to-libaom.patch Patch388: 0001-Add-pregenerated-config-for-libaom-on-ppc64.patch @@ -1174,6 +1173,7 @@ udev. %if ! %{bundleffmpegfree} %if 0%{?rhel} == 9 +%patch -P129 -p1 -R -b .ffmpeg-5.x-reordered_opaque %patch -P130 -p1 -b .ffmpeg-5.x-duration %endif %patch -P131 -p1 -b .prop-codecs @@ -1226,10 +1226,11 @@ udev. %endif %endif -%if 0%{?rhel} || 0%{?fedora} && 0%{?fedora} < 39 -#patch -P307 -p1 -R -b .v8-c++20 -#patch -P308 -p1 -R -b .v8-c++20 +%if 0%{?rhel} && 0%{?rhel} < 9 || 0%{?fedora} && 0%{?fedora} < 39 +%patch -P307 -p1 -b .el-NativeValueTraits-p1 +%patch -P308 -p1 -b .el-NativeValueTraits %patch -P314 -p1 -b .clang16-buildflag +%patch -P315 -p1 -b .clang16-disable-auto-upgrade-debug-info %endif %patch -P312 -p1 -b .fstack-protector-strong @@ -1248,7 +1249,6 @@ udev. %patch -P354 -p1 -b .revert-split-threshold-for-reg-with-hint %patch -P356 -p1 -b .disable-FFmpegAllowLists -%patch -P357 -p1 -b .clang16-disable-auto-upgrade-debug-info %patch -P358 -p1 -b .rust-clang_lib %patch -P359 -p1 -b .libavif-deps @@ -1283,7 +1283,6 @@ udev. %patch -P384 -p1 -b .0004-third_party-crashpad-port-curl-transport-ppc64 %patch -P385 -p1 -b .HACK-third_party-libvpx-use-generic-gnu -%patch -P386 -p1 -b .HACK-debian-clang-disable-skia-musttail %patch -P387 -p1 -b .0001-Add-ppc64-target-to-libaom %patch -P388 -p1 -b .0001-Add-pregenerated-config-for-libaom-on-ppc64 @@ -2120,7 +2119,7 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt - update to 125.0.6422.41 * Sat May 11 2024 Than Ngo - 124.0.6367.201-2 -- include headless_command_resources.pak for head_shell +- include headless_command_resources.pak for headless_shell * Fri May 10 2024 Than Ngo - 124.0.6367.201-1 - update to 124.0.6367.201 diff --git a/skia-vsx-instructions.patch b/skia-vsx-instructions.patch index fa9d5c73..55e782af 100644 --- a/skia-vsx-instructions.patch +++ b/skia-vsx-instructions.patch @@ -1,8 +1,7 @@ -Index: chromium-124.0.6367.118/third_party/skia/BUILD.gn -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/BUILD.gn -+++ chromium-124.0.6367.118/third_party/skia/BUILD.gn -@@ -191,6 +191,12 @@ opts("skx") { +diff -up chromium-125.0.6422.41/third_party/skia/BUILD.gn.me chromium-125.0.6422.41/third_party/skia/BUILD.gn +--- chromium-125.0.6422.41/third_party/skia/BUILD.gn.me 2024-05-08 22:30:53.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/BUILD.gn 2024-05-14 00:02:51.686315473 +0200 +@@ -188,6 +188,12 @@ opts("skx") { } } @@ -15,7 +14,7 @@ Index: chromium-124.0.6367.118/third_party/skia/BUILD.gn # Any feature of Skia that requires third-party code should be optional and use this template. template("optional") { if (invoker.enabled) { -@@ -1482,6 +1488,7 @@ skia_component("skia") { +@@ -1478,6 +1484,7 @@ skia_component("skia") { ":skx", ":typeface_fontations", ":vello", @@ -23,7 +22,7 @@ Index: chromium-124.0.6367.118/third_party/skia/BUILD.gn ":webp_decode", ":wuffs", ":xml", -@@ -1659,7 +1666,10 @@ skia_static_library("pathkit") { +@@ -1653,7 +1660,10 @@ skia_static_library("pathkit") { public_configs = [ ":skia_public" ] configs = skia_library_configs @@ -35,23 +34,21 @@ Index: chromium-124.0.6367.118/third_party/skia/BUILD.gn sources = [] sources += skia_pathops_sources -Index: chromium-124.0.6367.118/third_party/skia/gn/skia/BUILD.gn -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/gn/skia/BUILD.gn -+++ chromium-124.0.6367.118/third_party/skia/gn/skia/BUILD.gn +diff -up chromium-125.0.6422.41/third_party/skia/gn/skia/BUILD.gn.me chromium-125.0.6422.41/third_party/skia/gn/skia/BUILD.gn +--- chromium-125.0.6422.41/third_party/skia/gn/skia/BUILD.gn.me 2024-05-14 00:02:51.686315473 +0200 ++++ chromium-125.0.6422.41/third_party/skia/gn/skia/BUILD.gn 2024-05-14 00:05:17.683137362 +0200 @@ -163,6 +163,8 @@ config("default") { "-mfpmath=sse", ] ldflags += [ "-m32" ] + } else if (current_cpu == "ppc64") { + cflags += [ "-mcpu=power9", "-mtune=power9" ] - } - - if (malloc != "" && !is_win) { -Index: chromium-124.0.6367.118/third_party/skia/include/core/SkTypes.h -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/include/core/SkTypes.h -+++ chromium-124.0.6367.118/third_party/skia/include/core/SkTypes.h + } else if (current_cpu == "loong64") { + cflags += [ + "-mlsx", +diff -up chromium-125.0.6422.41/third_party/skia/include/core/SkTypes.h.me chromium-125.0.6422.41/third_party/skia/include/core/SkTypes.h +--- chromium-125.0.6422.41/third_party/skia/include/core/SkTypes.h.me 2024-05-08 22:30:53.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/include/core/SkTypes.h 2024-05-14 00:02:51.686315473 +0200 @@ -195,5 +195,44 @@ static constexpr uint32_t SK_InvalidGenI */ static constexpr uint32_t SK_InvalidUniqueID = 0; @@ -97,10 +94,32 @@ Index: chromium-124.0.6367.118/third_party/skia/include/core/SkTypes.h + #endif -Index: chromium-124.0.6367.118/third_party/skia/src/base/SkSpinlock.cpp -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/base/SkSpinlock.cpp -+++ chromium-124.0.6367.118/third_party/skia/src/base/SkSpinlock.cpp +diff -up chromium-125.0.6422.41/third_party/skia/include/private/base/SkFeatures.h.me chromium-125.0.6422.41/third_party/skia/include/private/base/SkFeatures.h +--- chromium-125.0.6422.41/third_party/skia/include/private/base/SkFeatures.h.me 2024-05-08 22:30:53.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/include/private/base/SkFeatures.h 2024-05-14 00:02:51.689315531 +0200 +@@ -63,6 +63,8 @@ + + #if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) + #define SK_CPU_X86 1 ++#elif defined(__powerpc64__) || defined(__PPC64__) ++ #define SK_CPU_PPC64 1 + #endif + + #if defined(__loongarch__) || defined (__loongarch64) +diff -up chromium-125.0.6422.41/third_party/skia/modules/skcms/src/skcms_internals.h.me chromium-125.0.6422.41/third_party/skia/modules/skcms/src/skcms_internals.h +--- chromium-125.0.6422.41/third_party/skia/modules/skcms/src/skcms_internals.h.me 2024-05-08 22:30:54.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/modules/skcms/src/skcms_internals.h 2024-05-14 00:02:51.689315531 +0200 +@@ -47,6 +47,7 @@ extern "C" { + && !defined(__EMSCRIPTEN__) \ + && !defined(__arm__) \ + && !defined(__riscv) \ ++ && !defined(__powerpc64__) \ + && !defined(__loongarch__) \ + && !defined(_WIN32) && !defined(__SYMBIAN32__) + #define SKCMS_HAS_MUSTTAIL 1 +diff -up chromium-125.0.6422.41/third_party/skia/src/base/SkSpinlock.cpp.me chromium-125.0.6422.41/third_party/skia/src/base/SkSpinlock.cpp +--- chromium-125.0.6422.41/third_party/skia/src/base/SkSpinlock.cpp.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/base/SkSpinlock.cpp 2024-05-14 00:02:51.686315473 +0200 @@ -33,7 +33,8 @@ #endif @@ -111,10 +130,119 @@ Index: chromium-124.0.6367.118/third_party/skia/src/base/SkSpinlock.cpp #include static void do_pause() { _mm_pause(); } #else -Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkBitmapProcState_opts.h -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/opts/SkBitmapProcState_opts.h -+++ chromium-124.0.6367.118/third_party/skia/src/opts/SkBitmapProcState_opts.h +diff -up chromium-125.0.6422.41/third_party/skia/src/base/SkVx.h.me chromium-125.0.6422.41/third_party/skia/src/base/SkVx.h +--- chromium-125.0.6422.41/third_party/skia/src/base/SkVx.h.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/base/SkVx.h 2024-05-14 00:02:51.688315511 +0200 +@@ -42,7 +42,13 @@ + + #if SKVX_USE_SIMD + #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1 +- #include ++ #if __PPC64__ ++ #include ++ #include ++ #include ++ #else ++ #include ++ #endif + #elif defined(SK_ARM_HAS_NEON) + #include + #elif defined(__wasm_simd128__) +diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts.cpp +--- chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts.cpp.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts.cpp 2024-05-14 00:02:51.689315531 +0200 +@@ -25,7 +25,7 @@ namespace SkOpts { + static bool init() { + #if defined(SK_ENABLE_OPTIMIZE_SIZE) + // All Init_foo functions are omitted when optimizing for size +- #elif defined(SK_CPU_X86) ++ #elif defined(SK_CPU_X86) || defined(SK_CPU_PPC64) + #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3 + if (SkCpu::Supports(SkCpu::SSSE3)) { Init_BitmapProcState_ssse3(); } + #endif +diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp +--- chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp 2024-05-14 00:02:51.689315531 +0200 +@@ -8,7 +8,7 @@ + #include "include/private/base/SkFeatures.h" + #include "src/core/SkOptsTargets.h" + +-#if defined(SK_CPU_X86) && !defined(SK_ENABLE_OPTIMIZE_SIZE) ++#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && !defined(SK_ENABLE_OPTIMIZE_SIZE) + + // The order of these includes is important: + // 1) Select the target CPU architecture by defining SK_OPTS_TARGET and including SkOpts_SetTarget +diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts.cpp +--- chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts.cpp.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts.cpp 2024-05-14 00:02:51.689315531 +0200 +@@ -25,7 +25,7 @@ namespace SkOpts { + static bool init() { + #if defined(SK_ENABLE_OPTIMIZE_SIZE) + // All Init_foo functions are omitted when optimizing for size +- #elif defined(SK_CPU_X86) ++ #elif defined(SK_CPU_X86) || defined(SK_CPU_PPC64) + #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3 + if (SkCpu::Supports(SkCpu::SSSE3)) { Init_BlitMask_ssse3(); } + #endif +diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp +--- chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp 2024-05-14 00:02:51.688315511 +0200 +@@ -9,7 +9,7 @@ + #include "src/core/SkBlitMask.h" + #include "src/core/SkOptsTargets.h" + +-#if defined(SK_CPU_X86) && !defined(SK_ENABLE_OPTIMIZE_SIZE) ++#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && !defined(SK_ENABLE_OPTIMIZE_SIZE) + + // The order of these includes is important: + // 1) Select the target CPU architecture by defining SK_OPTS_TARGET and including SkOpts_SetTarget +diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBlitter_ARGB32.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBlitter_ARGB32.cpp +--- chromium-125.0.6422.41/third_party/skia/src/core/SkBlitter_ARGB32.cpp.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBlitter_ARGB32.cpp 2024-05-14 00:02:51.690315550 +0200 +@@ -126,6 +126,16 @@ static inline SkPMColor blend_lcd16_opaq + #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 + #include + ++#if defined(SK_CPU_PPC64) ++ /* Load signed 64-bit integer from P into vector element 0. The address need not be 16-byte aligned. */ ++ extern __inline __m128i ++ __attribute__((__gnu_inline__, __always_inline__, __artificial__)) ++ _mm_loadu_si64 (void const *__P) ++ { ++ return _mm_set_epi64((__m64)0LL, *(__m64 *)__P); ++ } ++#endif ++ + // The following (left) shifts cause the top 5 bits of the mask components to + // line up with the corresponding components in an SkPMColor. + // Note that the mask's RGB16 order may differ from the SkPMColor order. +diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkCpu.h.me chromium-125.0.6422.41/third_party/skia/src/core/SkCpu.h +--- chromium-125.0.6422.41/third_party/skia/src/core/SkCpu.h.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/core/SkCpu.h 2024-05-14 00:02:51.689315531 +0200 +@@ -60,7 +60,7 @@ inline bool SkCpu::Supports(uint32_t mas + + // If we mask in compile-time known lower limits, the compiler can + // often compile away this entire function. +-#if SK_CPU_X86 ++#if SK_CPU_X86 || defined(SK_CPU_PPC64) + #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1 + features |= SSE1; + #endif +diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp +--- chromium-125.0.6422.41/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp 2024-05-14 00:02:51.688315511 +0200 +@@ -10,7 +10,7 @@ + #include "src/core/SkOptsTargets.h" + #include "src/core/SkSwizzlePriv.h" + +-#if defined(SK_CPU_X86) && \ ++#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && \ + !defined(SK_ENABLE_OPTIMIZE_SIZE) && \ + SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3 + +diff -up chromium-125.0.6422.41/third_party/skia/src/opts/SkBitmapProcState_opts.h.me chromium-125.0.6422.41/third_party/skia/src/opts/SkBitmapProcState_opts.h +--- chromium-125.0.6422.41/third_party/skia/src/opts/SkBitmapProcState_opts.h.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/opts/SkBitmapProcState_opts.h 2024-05-14 00:02:51.686315473 +0200 @@ -21,7 +21,13 @@ // The rest are scattershot at the moment but I want to get them // all migrated to be normal code inside SkBitmapProcState.cpp. @@ -130,10 +258,9 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkBitmapProcState_opts. #include #elif defined(SK_ARM_HAS_NEON) #include -Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkBlitRow_opts.h -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/opts/SkBlitRow_opts.h -+++ chromium-124.0.6367.118/third_party/skia/src/opts/SkBlitRow_opts.h +diff -up chromium-125.0.6422.41/third_party/skia/src/opts/SkBlitRow_opts.h.me chromium-125.0.6422.41/third_party/skia/src/opts/SkBlitRow_opts.h +--- chromium-125.0.6422.41/third_party/skia/src/opts/SkBlitRow_opts.h.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/opts/SkBlitRow_opts.h 2024-05-14 00:02:51.687315492 +0200 @@ -69,7 +69,7 @@ #endif @@ -143,10 +270,9 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkBlitRow_opts.h static inline __m128i SkPMSrcOver_SSE2(const __m128i& src, const __m128i& dst) { __m128i scale = _mm_sub_epi32(_mm_set1_epi32(256), -Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/opts/SkRasterPipeline_opts.h -+++ chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h +diff -up chromium-125.0.6422.41/third_party/skia/src/opts/SkRasterPipeline_opts.h.me chromium-125.0.6422.41/third_party/skia/src/opts/SkRasterPipeline_opts.h +--- chromium-125.0.6422.41/third_party/skia/src/opts/SkRasterPipeline_opts.h.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/opts/SkRasterPipeline_opts.h 2024-05-14 00:11:12.485694679 +0200 @@ -1,5 +1,6 @@ /* * Copyright 2018 Google Inc. @@ -163,16 +289,16 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h #elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SKX #define JUMPER_IS_SKX #elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_AVX2 -@@ -107,6 +110,8 @@ using NoCtx = const void*; - #include - #elif defined(JUMPER_IS_NEON) - #include +@@ -116,6 +119,8 @@ using NoCtx = const void*; + #include + #elif defined(JUMPER_IS_LSX) + #include +#elif defined(JUMPER_IS_VSX) + #include #else #include #endif -@@ -200,6 +205,184 @@ namespace SK_OPTS_NS { +@@ -209,6 +214,184 @@ namespace SK_OPTS_NS { ptr[3] = a; } @@ -357,7 +483,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h #elif defined(JUMPER_IS_NEON) template using V = Vec<4, T>; using F = V; -@@ -1025,6 +1208,15 @@ SI F from_half(U16 h) { +@@ -1406,6 +1589,15 @@ SI F from_half(U16 h) { #elif defined(JUMPER_IS_HSW) return _mm256_cvtph_ps((__m128i)h); @@ -373,7 +499,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h #else // Remember, a half is 1-5-10 (sign-exponent-mantissa) with 15 exponent bias. U32 sem = expand(h), -@@ -1048,6 +1240,16 @@ SI U16 to_half(F f) { +@@ -1429,6 +1621,16 @@ SI U16 to_half(F f) { #elif defined(JUMPER_IS_HSW) return (U16)_mm256_cvtps_ph(f, _MM_FROUND_CUR_DIRECTION); @@ -390,19 +516,19 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h #else // Remember, a float is 1-8-23 (sign-exponent-mantissa) with 127 exponent bias. U32 sem = sk_bit_cast(f), -@@ -1123,7 +1325,7 @@ static constexpr size_t N = sizeof(F) / +@@ -1504,7 +1706,7 @@ static constexpr size_t N = sizeof(F) / // instead of {b,a} on the stack. Narrow stages work best for __vectorcall. #define ABI __vectorcall #define JUMPER_NARROW_STAGES 1 --#elif defined(__x86_64__) || defined(SK_CPU_ARM64) -+#elif defined(__x86_64__) || defined(SK_CPU_ARM64) || defined(SK_CPU_PPC64) +-#elif defined(__x86_64__) || defined(SK_CPU_ARM64) || defined(SK_CPU_LOONGARCH) ++#elif defined(__x86_64__) || defined(SK_CPU_ARM64) || defined(SK_CPU_LOONGARCH) || defined(SK_CPU_PPC64) // These platforms are ideal for wider stages, and their default ABI is ideal. #define ABI #define JUMPER_NARROW_STAGES 0 -@@ -5023,6 +5225,10 @@ SI F sqrt_(F x) { - float32x4_t lo,hi; +@@ -5475,6 +5677,10 @@ SI F sqrt_(F x) { + __m128 lo,hi; split(x, &lo,&hi); - return join(sqrt(lo), sqrt(hi)); + return join(__lsx_vfsqrt_s(lo), __lsx_vfsqrt_s(hi)); +#elif defined(JUMPER_IS_VSX) + vector float lo,hi; + split(x, &lo,&hi); @@ -410,10 +536,10 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h #else return F{ sqrtf(x[0]), sqrtf(x[1]), sqrtf(x[2]), sqrtf(x[3]), -@@ -5046,6 +5252,10 @@ SI F floor_(F x) { +@@ -5506,6 +5712,10 @@ SI F floor_(F x) { __m128 lo,hi; split(x, &lo,&hi); - return join(_mm_floor_ps(lo), _mm_floor_ps(hi)); + return join(__lsx_vfrintrm_s(lo), __lsx_vfrintrm_s(hi)); +#elif defined(JUMPER_IS_VSX) + vector float lo,hi; + split(x, &lo,&hi); @@ -421,7 +547,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h #else F roundtrip = cast(cast(x)); return roundtrip - if_then_else(roundtrip > x, F_(1), F_(0)); -@@ -5057,6 +5267,7 @@ SI F floor_(F x) { +@@ -5517,6 +5727,7 @@ SI F floor_(F x) { // (2 * a * b + (1 << 15)) >> 16 // The result is a number on [-1, 1). // Note: on neon this is a saturating multiply while the others are not. @@ -429,10 +555,10 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h SI I16 scaled_mult(I16 a, I16 b) { #if defined(JUMPER_IS_SKX) return (I16)_mm256_mulhrs_epi16((__m256i)a, (__m256i)b); -@@ -5068,6 +5279,22 @@ SI I16 scaled_mult(I16 a, I16 b) { - return vqrdmulhq_s16(a, b); - #elif defined(JUMPER_IS_NEON) - return vqrdmulhq_s16(a, b); +@@ -5534,6 +5745,22 @@ SI I16 scaled_mult(I16 a, I16 b) { + #elif defined(JUMPER_IS_LSX) + I16 res = __lsx_vmuh_h(a, b); + return __lsx_vslli_h(res, 1); +#elif defined(JUMPER_IS_VSX) + const vector unsigned int shift = vec_splats((unsigned int)14); + const vector int ones = vec_splats((signed int)1); @@ -452,7 +578,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h #else const I32 roundingTerm = I32_(1 << 14); return cast((cast(a) * cast(b) + roundingTerm) >> 15); -@@ -5089,7 +5316,26 @@ SI U16 constrained_add(I16 a, U16 b) { +@@ -5555,7 +5782,26 @@ SI U16 constrained_add(I16 a, U16 b) { SkASSERT(-ib <= ia && ia <= 65535 - ib); } #endif @@ -479,7 +605,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h } SI F fract(F x) { return x - floor_(x); } -@@ -5947,8 +6193,14 @@ STAGE_GP(bilerp_clamp_8888, const SkRast +@@ -6479,8 +6725,14 @@ STAGE_GP(bilerp_clamp_8888, const SkRast // 2^-8 * v = 2^-9 * (tx*(R - L) + (R + L)) // v = 1/2 * (tx*(R - L) + (R + L)) auto lerpX = [&](U16 left, U16 right) -> U16 { @@ -494,7 +620,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h // The constrained_add is the most subtle part of lerp. The first term is on the interval // [-1, 1), and the second term is on the interval is on the interval [0, 1) because // both terms are too high by a factor of 2 which will be handled below. (Both R and L are -@@ -5960,7 +6212,12 @@ STAGE_GP(bilerp_clamp_8888, const SkRast +@@ -6492,7 +6744,12 @@ STAGE_GP(bilerp_clamp_8888, const SkRast U16 v2 = constrained_add(scaled_mult(tx, width), middle) + 1; // Divide by 2 to calculate v and at the same time bring the intermediate value onto the // interval [0, 1/2] to set up for the lerpY. @@ -507,7 +633,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h }; const uint32_t* ptr; -@@ -5994,9 +6251,15 @@ STAGE_GP(bilerp_clamp_8888, const SkRast +@@ -6526,9 +6783,15 @@ STAGE_GP(bilerp_clamp_8888, const SkRast I16 width = (I16)bottom - (I16)top; U16 middle = bottom + top; // Add + 0x80 for rounding. @@ -524,132 +650,9 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h }; r = lerpY(topR, bottomR); -Index: chromium-124.0.6367.118/third_party/skia/src/base/SkVx.h -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/base/SkVx.h -+++ chromium-124.0.6367.118/third_party/skia/src/base/SkVx.h -@@ -42,7 +42,13 @@ - - #if SKVX_USE_SIMD - #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1 -- #include -+ #if __PPC64__ -+ #include -+ #include -+ #include -+ #else -+ #include -+ #endif - #elif defined(SK_ARM_HAS_NEON) - #include - #elif defined(__wasm_simd128__) -Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp -+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp -@@ -9,7 +9,7 @@ - #include "src/core/SkBlitMask.h" - #include "src/core/SkOptsTargets.h" - --#if defined(SK_CPU_X86) && !defined(SK_ENABLE_OPTIMIZE_SIZE) -+#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && !defined(SK_ENABLE_OPTIMIZE_SIZE) - - // The order of these includes is important: - // 1) Select the target CPU architecture by defining SK_OPTS_TARGET and including SkOpts_SetTarget -Index: chromium-124.0.6367.118/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp -+++ chromium-124.0.6367.118/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp -@@ -10,7 +10,7 @@ - #include "src/core/SkOptsTargets.h" - #include "src/core/SkSwizzlePriv.h" - --#if defined(SK_CPU_X86) && \ -+#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && \ - !defined(SK_ENABLE_OPTIMIZE_SIZE) && \ - SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3 - -Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBlitMask_opts.cpp -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBlitMask_opts.cpp -+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBlitMask_opts.cpp -@@ -25,7 +25,7 @@ namespace SkOpts { - static bool init() { - #if defined(SK_ENABLE_OPTIMIZE_SIZE) - // All Init_foo functions are omitted when optimizing for size -- #elif defined(SK_CPU_X86) -+ #elif defined(SK_CPU_X86) || defined(SK_CPU_PPC64) - #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3 - if (SkCpu::Supports(SkCpu::SSSE3)) { Init_BlitMask_ssse3(); } - #endif -Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBitmapProcState_opts.cpp -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBitmapProcState_opts.cpp -+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBitmapProcState_opts.cpp -@@ -25,7 +25,7 @@ namespace SkOpts { - static bool init() { - #if defined(SK_ENABLE_OPTIMIZE_SIZE) - // All Init_foo functions are omitted when optimizing for size -- #elif defined(SK_CPU_X86) -+ #elif defined(SK_CPU_X86) || defined(SK_CPU_PPC64) - #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3 - if (SkCpu::Supports(SkCpu::SSSE3)) { Init_BitmapProcState_ssse3(); } - #endif -Index: chromium-124.0.6367.118/third_party/skia/src/core/SkCpu.h -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkCpu.h -+++ chromium-124.0.6367.118/third_party/skia/src/core/SkCpu.h -@@ -55,7 +55,7 @@ inline bool SkCpu::Supports(uint32_t mas - - // If we mask in compile-time known lower limits, the compiler can - // often compile away this entire function. --#if SK_CPU_X86 -+#if SK_CPU_X86 || defined(SK_CPU_PPC64) - #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1 - features |= SSE1; - #endif -Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp -+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp -@@ -8,7 +8,7 @@ - #include "include/private/base/SkFeatures.h" - #include "src/core/SkOptsTargets.h" - --#if defined(SK_CPU_X86) && !defined(SK_ENABLE_OPTIMIZE_SIZE) -+#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && !defined(SK_ENABLE_OPTIMIZE_SIZE) - - // The order of these includes is important: - // 1) Select the target CPU architecture by defining SK_OPTS_TARGET and including SkOpts_SetTarget -Index: chromium-124.0.6367.118/third_party/skia/include/private/base/SkFeatures.h -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/include/private/base/SkFeatures.h -+++ chromium-124.0.6367.118/third_party/skia/include/private/base/SkFeatures.h -@@ -63,6 +63,8 @@ - - #if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) - #define SK_CPU_X86 1 -+#elif defined(__powerpc64__) || defined(__PPC64__) -+ #define SK_CPU_PPC64 1 - #endif - - /** -Index: chromium-124.0.6367.118/third_party/skia/modules/skcms/src/skcms_internals.h -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/modules/skcms/src/skcms_internals.h -+++ chromium-124.0.6367.118/third_party/skia/modules/skcms/src/skcms_internals.h -@@ -47,6 +47,7 @@ extern "C" { - && !defined(__EMSCRIPTEN__) \ - && !defined(__arm__) \ - && !defined(__riscv) \ -+ && !defined(__powerpc64__) \ - && !defined(__loongarch__) \ - && !defined(_WIN32) && !defined(__SYMBIAN32__) - #define SKCMS_HAS_MUSTTAIL 1 -Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/opts/SkSwizzler_opts.inc -+++ chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc +diff -up chromium-125.0.6422.41/third_party/skia/src/opts/SkSwizzler_opts.inc.me chromium-125.0.6422.41/third_party/skia/src/opts/SkSwizzler_opts.inc +--- chromium-125.0.6422.41/third_party/skia/src/opts/SkSwizzler_opts.inc.me 2024-05-08 22:30:55.000000000 +0200 ++++ chromium-125.0.6422.41/third_party/skia/src/opts/SkSwizzler_opts.inc 2024-05-14 00:02:51.689315531 +0200 @@ -14,7 +14,10 @@ #include #include @@ -662,7 +665,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc #include #elif defined(SK_ARM_HAS_NEON) #include -@@ -61,6 +64,33 @@ SI float reciprocal_alpha_times_255(floa +@@ -65,6 +68,33 @@ SI float reciprocal_alpha_times_255(floa SI float reciprocal_alpha(float a) { return reciprocal_alpha_portable(a); } @@ -696,24 +699,3 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc #elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1 && (defined(__clang__) || !defined(_MSC_VER)) // -- SSE -- Harden against timing attacks -- MSVC is not supported. using F4 = __m128; -Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBlitter_ARGB32.cpp -=================================================================== ---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBlitter_ARGB32.cpp -+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBlitter_ARGB32.cpp -@@ -126,6 +126,16 @@ static inline SkPMColor blend_lcd16_opaq - #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 - #include - -+#if defined(SK_CPU_PPC64) -+ /* Load signed 64-bit integer from P into vector element 0. The address need not be 16-byte aligned. */ -+ extern __inline __m128i -+ __attribute__((__gnu_inline__, __always_inline__, __artificial__)) -+ _mm_loadu_si64 (void const *__P) -+ { -+ return _mm_set_epi64((__m64)0LL, *(__m64 *)__P); -+ } -+#endif -+ - // The following (left) shifts cause the top 5 bits of the mask components to - // line up with the corresponding components in an SkPMColor. - // Note that the mask's RGB16 order may differ from the SkPMColor order. diff --git a/sources b/sources index 61067274..ae802a55 100644 --- a/sources +++ b/sources @@ -2,4 +2,4 @@ SHA512 (node-v20.6.1-linux-arm64.tar.xz) = adfcaf2c22614797fd69fb46d94c1cbf64dea SHA512 (node-v20.6.1-linux-x64.tar.xz) = 7e15c05041a9a50f0046266aadb2e092a5aefbec19be1c7c809471add520cb57c7df3c47d88b1888b29bf2979dca3c92adddfd965370fa2a9da4ea02186464fd SHA512 (linux-arm64-0.19.2.tgz) = 8a0d8fec6786fffcd6954d00820037a55d61e60762c74300df0801f8db27057562c221a063bedfb8df56af9ba80abb366336987e881782c5996e6f871abd3dc6 SHA512 (linux-x64-0.19.2.tgz) = a31cc74c4bfa54f9b75d735a1cfc944d3b5efb7c06bfba9542da9a642ae0b2d235ea00ae84d3ad0572c406405110fe7b61377af0fd15803806ef78d20fc6f05d -SHA512 (chromium-125.0.6422.41-clean.tar.xz) = db3fb64e5962d3ab1f0debae06d311df4866fd647d50d74f3c58368a70a7bc1cb4f81c900adb96130ef416c8f90976d40ab4e90fa683f9b68791019ed570d1ed +SHA512 (chromium-125.0.6422.41-clean.tar.xz) = 8ada0a737557c88f797f00e10d4eb9410dcd37dffc02b3846aabe027b968caf3c21388a620bd07734285aed5a119e5d61e28bbbb23cbf049a5ac050ce9ff1db0