public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/chromium] epel9-next: - refreshed patches
@ 2026-08-07 16:06 Than Ngo
0 siblings, 0 replies; only message in thread
From: Than Ngo @ 2026-08-07 16:06 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/chromium
Branch : epel9-next
Commit : 765ac9dc58ec6372b7312555ea3ec2b675d40fbd
Author : Than Ngo <than@redhat.com>
Date : 2024-05-14T11:10:12+02:00
Stats : +1210/-1229 in 11 file(s)
URL : https://src.fedoraproject.org/rpms/chromium/c/765ac9dc58ec6372b7312555ea3ec2b675d40fbd?branch=epel9-next
Log:
- refreshed patches
- rebased clean source
---
diff --git a/0001-Add-PPC64-support-for-boringssl.patch b/0001-Add-PPC64-support-for-boringssl.patch
index 52c6cb4..f636451 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 <openssl/arm_arch.h>
-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 b4f8d28..11f9e4c 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 6e25520..0000000
--- 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 bdf6c01..0000000
--- a/chromium-121-v8-c++20-p1.patch
+++ /dev/null
@@ -1,171 +0,0 @@
-commit ce71348a09f6689dd01a68db64b172191d0182d8
-Author: Andrey Kosyakov <caseq@chromium.org>
-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 <caseq@chromium.org>
- Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
- 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<ImplType> ||
- 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 <typename... ExtraArgs>
- 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<IDLSequence<T>>::ImplType result;
-+ using ResultType = typename NativeValueTraits<IDLSequence<T>>::ImplType;
-+ ResultType result;
- result.ReserveInitialCapacity(length);
- v8::Local<v8::Context> 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<ScriptWrappable, T>) {
-+ 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::Value> v8_element,
-+ void* data) {
-+ CallbackData* callback_data = reinterpret_cast<CallbackData*>(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<v8::Object>())
-+ ->template ToImpl<T>();
-+ callback_data->result.push_back(std::move(value));
-+ return v8::Array::CallbackResult::kContinue;
-+ }
-+ }
-+ auto&& element = NativeValueTraits<T>::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::Value> 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<T> of length i, where the value of the element at index j is Sj.
- return result;
-@@ -1398,6 +1475,7 @@ struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
- }
- };
-
-+// Interface types
- template <typename T>
- requires std::derived_from<T, CallbackInterfaceBase>
- struct NativeValueTraits<IDLNullable<T>>
-@@ -1470,12 +1548,21 @@ struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
- template <typename T>
- requires std::derived_from<T, ScriptWrappable>
- struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-+ // 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<v8::Value> 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<v8::Object>())->template ToImpl<T>();
-+ }
-
- 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 a4682da..0000000
--- a/chromium-123-v8-c++20.patch
+++ /dev/null
@@ -1,733 +0,0 @@
-commit 940af9f2c87b436559b97c53763aa9eaaf1254eb
-Author: Jeremy Roman <jbroman@chromium.org>
-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 <yukishiino@chromium.org>
- Commit-Queue: Jeremy Roman <jbroman@chromium.org>
- 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 <concepts>
- #include <type_traits>
-
- #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 <typename T, typename SFINAEHelper = void>
-+template <typename T>
- struct NativeValueTraits;
-
- // This declaration serves only as a blueprint for specializations: the
-@@ -45,22 +46,15 @@ struct NativeValueTraits;
-
- namespace bindings {
-
--template <typename T, typename = void>
--struct NativeValueTraitsHasIsNull : std::false_type {};
--
- template <typename T>
--struct NativeValueTraitsHasIsNull<
-- T,
-- std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
-+struct ImplTypeFor {
-+ using type = T;
-+};
-
- template <typename T>
--struct NativeValueTraitsHasNullValue {
-- // true if |T| supports IDL null value.
-- static constexpr bool value =
-- // ScriptValue, String, and union types have IsNull member function.
-- bindings::NativeValueTraitsHasIsNull<T>::value ||
-- // Pointer types have nullptr as IDL null value.
-- std::is_pointer<T>::value;
-+ requires std::derived_from<T, IDLBase>
-+struct ImplTypeFor<T> {
-+ 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 <typename T, typename SFINAEHelper = void>
--struct NativeValueTraitsBase {
-- STATIC_ONLY(NativeValueTraitsBase);
--
-- using ImplType = T;
--
-- static constexpr bool has_null_value =
-- bindings::NativeValueTraitsHasNullValue<ImplType>::value;
--
-- template <typename... ExtraArgs>
-- static decltype(auto) ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state,
-- ExtraArgs... extra_args) {
-- return NativeValueTraits<std::remove_pointer_t<T>>::NativeValue(
-- isolate, value, exception_state,
-- std::forward<ExtraArgs>(extra_args)...);
-- }
--};
--
- template <typename T>
--struct NativeValueTraitsBase<
-- T,
-- std::enable_if_t<std::is_base_of<IDLBase, T>::value>> {
-+struct NativeValueTraitsBase {
- STATIC_ONLY(NativeValueTraitsBase);
-
-- using ImplType = typename T::ImplType;
-+ using ImplType = bindings::ImplTypeFor<T>::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<ImplType>::value;
-+ std::is_pointer_v<ImplType> ||
-+ requires(ImplType value) { value.IsNull(); };
-
- template <typename... ExtraArgs>
- 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 <typename T>
--NotShared<T> NativeValueTraits<
-- NotShared<T>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- NativeValue(v8::Isolate* isolate,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
-+ v8::Isolate* isolate,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return NativeValueImpl<
- RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -712,13 +712,12 @@ NotShared<T> NativeValueTraits<
- }
-
- template <typename T>
--NotShared<T> NativeValueTraits<
-- NotShared<T>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+NotShared<T> NativeValueTraits<NotShared<T>>::ArgumentValue(
-+ v8::Isolate* isolate,
-+ int argument_index,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return ArgumentValueImpl<
- RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -729,12 +728,11 @@ NotShared<T> NativeValueTraits<
- // [AllowShared] ArrayBufferView
-
- template <typename T>
--MaybeShared<T> NativeValueTraits<
-- MaybeShared<T>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- NativeValue(v8::Isolate* isolate,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
-+ v8::Isolate* isolate,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
- ToDOMViewType<T, kMaybeShared>,
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -743,13 +741,12 @@ MaybeShared<T> NativeValueTraits<
- }
-
- template <typename T>
--MaybeShared<T> NativeValueTraits<
-- MaybeShared<T>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<MaybeShared<T>>::ArgumentValue(
-+ v8::Isolate* isolate,
-+ int argument_index,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
- ToDOMViewType<T, kMaybeShared>,
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -760,12 +757,12 @@ MaybeShared<T> NativeValueTraits<
- // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
-
- template <typename T>
--MaybeShared<T> NativeValueTraits<
-- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- NativeValue(v8::Isolate* isolate,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T>
-+NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
-+ v8::Isolate* isolate,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return NativeValueImpl<
- RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
- Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
-@@ -774,13 +771,12 @@ MaybeShared<T> NativeValueTraits<
- }
-
- template <typename T>
--MaybeShared<T> NativeValueTraits<
-- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<
-+ MaybeShared<T>>>::ArgumentValue(v8::Isolate* isolate,
-+ int argument_index,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return ArgumentValueImpl<
- RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
- Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
-@@ -791,12 +787,11 @@ MaybeShared<T> NativeValueTraits<
- // Nullable ArrayBufferView
-
- template <typename T>
--NotShared<T> NativeValueTraits<
-- IDLNullable<NotShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- NativeValue(v8::Isolate* isolate,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
-+ v8::Isolate* isolate,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return NativeValueImpl<
- RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -805,13 +800,12 @@ NotShared<T> NativeValueTraits<
- }
-
- template <typename T>
--NotShared<T> NativeValueTraits<
-- IDLNullable<NotShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::ArgumentValue(
-+ v8::Isolate* isolate,
-+ int argument_index,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return ArgumentValueImpl<
- RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -822,12 +816,11 @@ NotShared<T> NativeValueTraits<
- // Nullable [AllowShared] ArrayBufferView
-
- template <typename T>
--MaybeShared<T> NativeValueTraits<
-- IDLNullable<MaybeShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- NativeValue(v8::Isolate* isolate,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
-+ v8::Isolate* isolate,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
- ToDOMViewType<T, kMaybeShared>,
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -836,13 +829,12 @@ MaybeShared<T> NativeValueTraits<
- }
-
- template <typename T>
--MaybeShared<T> NativeValueTraits<
-- IDLNullable<MaybeShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-- ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::ArgumentValue(
-+ v8::Isolate* isolate,
-+ int argument_index,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
- ToDOMViewType<T, kMaybeShared>,
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -853,9 +845,9 @@ MaybeShared<T> NativeValueTraits<
- // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
-
- template <typename T>
--MaybeShared<T> NativeValueTraits<
-- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-+ requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T>
-+NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
- ArgumentValue(v8::Isolate* isolate,
- int argument_index,
- v8::Local<v8::Value> value,
-@@ -870,13 +862,11 @@ MaybeShared<T> NativeValueTraits<
- // [AllowShared, FlexibleArrayBufferView] ArrayBufferView
-
- template <typename T>
--T NativeValueTraits<T,
-- typename std::enable_if_t<
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
-- ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, FlexibleArrayBufferView>
-+T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
-+ int argument_index,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
- ResizableAllowance::kDisallowResizable,
-@@ -888,13 +878,12 @@ T NativeValueTraits<T,
- // ArrayBufferView
-
- template <typename T>
--T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
-- typename std::enable_if_t<
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
-- ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, FlexibleArrayBufferView>
-+T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>::ArgumentValue(
-+ v8::Isolate* isolate,
-+ int argument_index,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return ArgumentValueImpl<
- RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
- BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
-@@ -905,13 +894,12 @@ T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
- // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
-
- template <typename T>
--T NativeValueTraits<IDLNullable<T>,
-- typename std::enable_if_t<
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
-- ArgumentValue(v8::Isolate* isolate,
-- int argument_index,
-- v8::Local<v8::Value> value,
-- ExceptionState& exception_state) {
-+ requires std::derived_from<T, FlexibleArrayBufferView>
-+T NativeValueTraits<IDLNullable<T>>::ArgumentValue(
-+ v8::Isolate* isolate,
-+ int argument_index,
-+ v8::Local<v8::Value> value,
-+ ExceptionState& exception_state) {
- return ArgumentValueImpl<RecipeTrait<T>, 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 <typename T>
--struct NativeValueTraits<
-- T,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<T> {
- // NotShared<T> or MaybeShared<T> should be used instead.
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -729,9 +731,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLNullable<T>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
-+ requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<IDLNullable<T>> {
- // NotShared<T> or MaybeShared<T> should be used instead.
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -743,9 +744,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- NotShared<T>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+ requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<NotShared<T>>
- : public NativeValueTraitsBase<NotShared<T>> {
- static NotShared<T> NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -758,9 +758,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLNullable<NotShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+ requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<IDLNullable<NotShared<T>>>
- : public NativeValueTraitsBase<NotShared<T>> {
- static NotShared<T> NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -773,9 +772,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- MaybeShared<T>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+ requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<MaybeShared<T>>
- : public NativeValueTraitsBase<MaybeShared<T>> {
- static MaybeShared<T> NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -788,9 +786,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+ requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
- : public NativeValueTraitsBase<MaybeShared<T>> {
- // FlexibleArrayBufferView uses this in its implementation, so we cannot
- // delete it.
-@@ -805,9 +802,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLNullable<MaybeShared<T>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+ requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
- : public NativeValueTraitsBase<MaybeShared<T>> {
- static MaybeShared<T> NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -820,9 +816,9 @@ struct NativeValueTraits<
- };
-
- template <typename T>
-+ requires std::derived_from<T, DOMArrayBufferView>
- struct NativeValueTraits<
-- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+ IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
- : public NativeValueTraitsBase<MaybeShared<T>> {
- // BufferSourceTypeNoSizeLimit must be used only as arguments.
- static MaybeShared<T> NativeValue(v8::Isolate* isolate,
-@@ -836,11 +832,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- T,
-- typename std::enable_if_t<
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>
-- : public NativeValueTraitsBase<T> {
-+ requires std::derived_from<T, FlexibleArrayBufferView>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
- // FlexibleArrayBufferView must be used only as arguments.
- static T NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -853,10 +846,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLBufferSourceTypeNoSizeLimit<T>,
-- typename std::enable_if_t<
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>
-+ requires std::derived_from<T, FlexibleArrayBufferView>
-+struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
- : public NativeValueTraitsBase<T> {
- // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
- // as arguments.
-@@ -871,11 +862,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLNullable<T>,
-- typename std::enable_if_t<
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>
-- : public NativeValueTraitsBase<T> {
-+ requires std::derived_from<T, FlexibleArrayBufferView>
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
- // FlexibleArrayBufferView must be used only as arguments.
- static T NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -1134,9 +1122,8 @@ NativeValueTraits<IDLSequence<T>>::NativeValue(
- }
-
- template <typename T>
--struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
-- typename std::enable_if_t<
-- NativeValueTraits<IDLSequence<T>>::has_null_value>>
-+ requires NativeValueTraits<IDLSequence<T>>::has_null_value
-+struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
- : public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
- using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
-
-@@ -1203,9 +1190,8 @@ struct NativeValueTraits<IDLArray<T>>
- : public NativeValueTraits<IDLSequence<T>> {};
-
- template <typename T>
--struct NativeValueTraits<IDLNullable<IDLArray<T>>,
-- typename std::enable_if_t<
-- NativeValueTraits<IDLSequence<T>>::has_null_value>>
-+ requires NativeValueTraits<IDLSequence<T>>::has_null_value
-+struct NativeValueTraits<IDLNullable<IDLArray<T>>>
- : public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
-
- // Record types
-@@ -1335,10 +1321,8 @@ struct NativeValueTraits<IDLRecord<K, V>>
-
- // Callback function types
- template <typename T>
--struct NativeValueTraits<
-- T,
-- typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
-- : public NativeValueTraitsBase<T*> {
-+ requires std::derived_from<T, CallbackFunctionBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
- ExceptionState& exception_state) {
-@@ -1361,9 +1345,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLNullable<T>,
-- typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
-+ requires std::derived_from<T, CallbackFunctionBase>
-+struct NativeValueTraits<IDLNullable<T>>
- : public NativeValueTraitsBase<IDLNullable<T>> {
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -1392,10 +1375,8 @@ struct NativeValueTraits<
-
- // Callback interface types
- template <typename T>
--struct NativeValueTraits<
-- T,
-- typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
-- : public NativeValueTraitsBase<T*> {
-+ requires std::derived_from<T, CallbackInterfaceBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
- ExceptionState& exception_state) {
-@@ -1418,9 +1399,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLNullable<T>,
-- typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
-+ requires std::derived_from<T, CallbackInterfaceBase>
-+struct NativeValueTraits<IDLNullable<T>>
- : public NativeValueTraitsBase<IDLNullable<T>> {
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -1449,11 +1429,8 @@ struct NativeValueTraits<
-
- // Dictionary types
- template <typename T>
--struct NativeValueTraits<
-- T,
-- typename std::enable_if_t<
-- std::is_base_of<bindings::DictionaryBase, T>::value>>
-- : public NativeValueTraitsBase<T*> {
-+ requires std::derived_from<T, bindings::DictionaryBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> 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 <typename T>
--struct NativeValueTraits<
-- IDLNullable<T>,
-- typename std::enable_if_t<
-- std::is_base_of<bindings::DictionaryBase, T>::value &&
-- (std::is_same<T, GPUColorTargetState>::value ||
-- std::is_same<T, GPURenderPassColorAttachment>::value ||
-- std::is_same<T, GPUVertexBufferLayout>::value)>>
-- : public NativeValueTraitsBase<T*> {
-+ requires std::derived_from<T, bindings::DictionaryBase> &&
-+ (std::same_as<T, GPUColorTargetState> ||
-+ std::same_as<T, GPURenderPassColorAttachment> ||
-+ std::same_as<T, GPUVertexBufferLayout>)
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
- ExceptionState& exception_state) {
-@@ -1483,11 +1457,8 @@ struct NativeValueTraits<
-
- // Enumeration types
- template <typename T>
--struct NativeValueTraits<
-- T,
-- typename std::enable_if_t<
-- std::is_base_of<bindings::EnumerationBase, T>::value>>
-- : public NativeValueTraitsBase<T> {
-+ requires std::derived_from<T, bindings::EnumerationBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
- static T NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
- ExceptionState& exception_state) {
-@@ -1497,10 +1468,8 @@ struct NativeValueTraits<
-
- // Interface types
- template <typename T>
--struct NativeValueTraits<
-- T,
-- typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
-- : public NativeValueTraitsBase<T*> {
-+ requires std::derived_from<T, ScriptWrappable>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
- static inline T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
- ExceptionState& exception_state) {
-@@ -1528,9 +1497,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLNullable<T>,
-- typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
-+ requires std::derived_from<T, ScriptWrappable>
-+struct NativeValueTraits<IDLNullable<T>>
- : public NativeValueTraitsBase<IDLNullable<T>> {
- static inline T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
-@@ -1565,10 +1533,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- T,
-- typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
-- : public NativeValueTraitsBase<T*> {
-+ requires std::derived_from<T, bindings::UnionBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
- ExceptionState& exception_state) {
-@@ -1584,10 +1550,8 @@ struct NativeValueTraits<
- };
-
- template <typename T>
--struct NativeValueTraits<
-- IDLNullable<T>,
-- typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
-- : public NativeValueTraitsBase<T*> {
-+ requires std::derived_from<T, bindings::UnionBase>
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
- static T* NativeValue(v8::Isolate* isolate,
- v8::Local<v8::Value> value,
- ExceptionState& exception_state) {
-@@ -1608,9 +1572,8 @@ struct NativeValueTraits<
-
- // Nullable types
- template <typename InnerType>
--struct NativeValueTraits<
-- IDLNullable<InnerType>,
-- typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
-+ requires(!NativeValueTraits<InnerType>::has_null_value)
-+struct NativeValueTraits<IDLNullable<InnerType>>
- : public NativeValueTraitsBase<IDLNullable<InnerType>> {
- // https://webidl.spec.whatwg.org/#es-nullable-type
- using ImplType =
-@@ -1642,9 +1605,8 @@ struct NativeValueTraits<IDLNullable<IDLNullable<T>>>;
-
- // Optional types
- template <typename T>
--struct NativeValueTraits<IDLOptional<T>,
-- typename std::enable_if_t<std::is_arithmetic<
-- typename NativeValueTraits<T>::ImplType>::value>>
-+ requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
-+struct NativeValueTraits<IDLOptional<T>>
- : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
- using ImplType = typename NativeValueTraits<T>::ImplType;
-
-@@ -1666,9 +1628,8 @@ struct NativeValueTraits<IDLOptional<T>,
- };
-
- template <typename T>
--struct NativeValueTraits<IDLOptional<T>,
-- typename std::enable_if_t<std::is_pointer<
-- typename NativeValueTraits<T>::ImplType>::value>>
-+ requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
-+struct NativeValueTraits<IDLOptional<T>>
- : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
- using ImplType = typename NativeValueTraits<T>::ImplType;
-
diff --git a/chromium-125-el-NativeValueTraits-p1.patch b/chromium-125-el-NativeValueTraits-p1.patch
new file mode 100644
index 0000000..ad0c8a8
--- /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 <jbroman@chromium.org>
+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 <yukishiino@chromium.org>
+ Commit-Queue: Jeremy Roman <jbroman@chromium.org>
+ 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 <concepts>
+ #include <type_traits>
+
+ #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 <typename T>
++template <typename T, typename SFINAEHelper = void>
+ struct NativeValueTraits;
+
+ // This declaration serves only as a blueprint for specializations: the
+@@ -46,15 +45,22 @@ struct NativeValueTraits;
+
+ namespace bindings {
+
++template <typename T, typename = void>
++struct NativeValueTraitsHasIsNull : std::false_type {};
++
+ template <typename T>
+-struct ImplTypeFor {
+- using type = T;
+-};
++struct NativeValueTraitsHasIsNull<
++ T,
++ std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
+
+ template <typename T>
+- requires std::derived_from<T, IDLBase>
+-struct ImplTypeFor<T> {
+- 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<T>::value ||
++ // Pointer types have nullptr as IDL null value.
++ std::is_pointer<T>::value;
+ };
+
+ } // namespace bindings
+@@ -72,17 +78,37 @@ struct ImplTypeFor<T> {
+ // 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 <typename T>
++template <typename T, typename SFINAEHelper = void>
+ struct NativeValueTraitsBase {
+ STATIC_ONLY(NativeValueTraitsBase);
+
+- using ImplType = bindings::ImplTypeFor<T>::type;
++ using ImplType = T;
++
++ static constexpr bool has_null_value =
++ bindings::NativeValueTraitsHasNullValue<ImplType>::value;
++
++ template <typename... ExtraArgs>
++ static decltype(auto) ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state,
++ ExtraArgs... extra_args) {
++ return NativeValueTraits<std::remove_pointer_t<T>>::NativeValue(
++ isolate, value, exception_state,
++ std::forward<ExtraArgs>(extra_args)...);
++ }
++};
++
++template <typename T>
++struct NativeValueTraitsBase<
++ T,
++ std::enable_if_t<std::is_base_of<IDLBase, 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<ImplType> ||
+- requires(ImplType value) { value.IsNull(); };
++ bindings::NativeValueTraitsHasNullValue<ImplType>::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 <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
+- v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++NotShared<T> NativeValueTraits<
++ NotShared<T>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ NativeValue(v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -711,12 +711,13 @@ NotShared<T> NativeValueTraits<NotShared
+ }
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-NotShared<T> NativeValueTraits<NotShared<T>>::ArgumentValue(
+- v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++NotShared<T> NativeValueTraits<
++ NotShared<T>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -727,11 +728,12 @@ NotShared<T> NativeValueTraits<NotShared
+ // [AllowShared] ArrayBufferView
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
+- v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++ MaybeShared<T>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ NativeValue(v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -740,12 +742,13 @@ MaybeShared<T> NativeValueTraits<MaybeSh
+ }
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<MaybeShared<T>>::ArgumentValue(
+- v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++ MaybeShared<T>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -756,12 +759,12 @@ MaybeShared<T> NativeValueTraits<MaybeSh
+ // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T>
+-NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
+- v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++ IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ NativeValue(v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
+@@ -770,12 +773,13 @@ NativeValueTraits<IDLBufferSourceTypeNoS
+ }
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<
+- MaybeShared<T>>>::ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++ IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
+@@ -786,11 +790,12 @@ MaybeShared<T> NativeValueTraits<IDLBuff
+ // Nullable ArrayBufferView
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
+- v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++NotShared<T> NativeValueTraits<
++ IDLNullable<NotShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ NativeValue(v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -799,12 +804,13 @@ NotShared<T> NativeValueTraits<IDLNullab
+ }
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::ArgumentValue(
+- v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++NotShared<T> NativeValueTraits<
++ IDLNullable<NotShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -815,11 +821,12 @@ NotShared<T> NativeValueTraits<IDLNullab
+ // Nullable [AllowShared] ArrayBufferView
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
+- v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++ IDLNullable<MaybeShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ NativeValue(v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -828,12 +835,13 @@ MaybeShared<T> NativeValueTraits<IDLNull
+ }
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::ArgumentValue(
+- v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++ IDLNullable<MaybeShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -844,9 +852,9 @@ MaybeShared<T> NativeValueTraits<IDLNull
+ // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T>
+-NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
++MaybeShared<T> NativeValueTraits<
++ IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+ ArgumentValue(v8::Isolate* isolate,
+ int argument_index,
+ v8::Local<v8::Value> value,
+@@ -861,11 +869,13 @@ NativeValueTraits<IDLNullable<IDLBufferS
+ // [AllowShared, FlexibleArrayBufferView] ArrayBufferView
+
+ template <typename T>
+- requires std::derived_from<T, FlexibleArrayBufferView>
+-T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++T NativeValueTraits<T,
++ typename std::enable_if_t<
++ std::is_base_of<FlexibleArrayBufferView, T>::value>>::
++ ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+ ResizableAllowance::kDisallowResizable,
+@@ -877,12 +887,13 @@ T NativeValueTraits<T>::ArgumentValue(v8
+ // ArrayBufferView
+
+ template <typename T>
+- requires std::derived_from<T, FlexibleArrayBufferView>
+-T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>::ArgumentValue(
+- v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
++ typename std::enable_if_t<
++ std::is_base_of<FlexibleArrayBufferView, T>::value>>::
++ ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
+ BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
+@@ -893,12 +904,13 @@ T NativeValueTraits<IDLBufferSourceTypeN
+ // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
+
+ template <typename T>
+- requires std::derived_from<T, FlexibleArrayBufferView>
+-T NativeValueTraits<IDLNullable<T>>::ArgumentValue(
+- v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++T NativeValueTraits<IDLNullable<T>,
++ typename std::enable_if_t<
++ std::is_base_of<FlexibleArrayBufferView, T>::value>>::
++ ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<T>, 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 <concepts>
+ #include <optional>
+-#include <type_traits>
+
+ #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 <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<T> {
++struct NativeValueTraits<
++ T,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
+ // NotShared<T> or MaybeShared<T> should be used instead.
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -731,8 +730,9 @@ struct NativeValueTraits<T> {
+ };
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<IDLNullable<T>> {
++struct NativeValueTraits<
++ IDLNullable<T>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
+ // NotShared<T> or MaybeShared<T> should be used instead.
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -744,8 +744,9 @@ struct NativeValueTraits<IDLNullable<T>>
+ };
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<NotShared<T>>
++struct NativeValueTraits<
++ NotShared<T>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+ : public NativeValueTraitsBase<NotShared<T>> {
+ static NotShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -758,8 +759,9 @@ struct NativeValueTraits<NotShared<T>>
+ };
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<IDLNullable<NotShared<T>>>
++struct NativeValueTraits<
++ IDLNullable<NotShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+ : public NativeValueTraitsBase<NotShared<T>> {
+ static NotShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -772,8 +774,9 @@ struct NativeValueTraits<IDLNullable<Not
+ };
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<MaybeShared<T>>
++struct NativeValueTraits<
++ MaybeShared<T>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -786,8 +789,9 @@ struct NativeValueTraits<MaybeShared<T>>
+ };
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
++struct NativeValueTraits<
++ IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ // FlexibleArrayBufferView uses this in its implementation, so we cannot
+ // delete it.
+@@ -802,8 +806,9 @@ struct NativeValueTraits<IDLBufferSource
+ };
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
++struct NativeValueTraits<
++ IDLNullable<MaybeShared<T>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -816,9 +821,9 @@ struct NativeValueTraits<IDLNullable<May
+ };
+
+ template <typename T>
+- requires std::derived_from<T, DOMArrayBufferView>
+ struct NativeValueTraits<
+- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
++ IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
++ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ // BufferSourceTypeNoSizeLimit must be used only as arguments.
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+@@ -832,8 +837,11 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+- requires std::derived_from<T, FlexibleArrayBufferView>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
++struct NativeValueTraits<
++ T,
++ typename std::enable_if_t<
++ std::is_base_of<FlexibleArrayBufferView, T>::value>>
++ : public NativeValueTraitsBase<T> {
+ // FlexibleArrayBufferView must be used only as arguments.
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -846,8 +854,10 @@ struct NativeValueTraits<T> : public Nat
+ };
+
+ template <typename T>
+- requires std::derived_from<T, FlexibleArrayBufferView>
+-struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
++struct NativeValueTraits<
++ IDLBufferSourceTypeNoSizeLimit<T>,
++ typename std::enable_if_t<
++ std::is_base_of<FlexibleArrayBufferView, T>::value>>
+ : public NativeValueTraitsBase<T> {
+ // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
+ // as arguments.
+@@ -862,8 +872,11 @@ struct NativeValueTraits<IDLBufferSource
+ };
+
+ template <typename T>
+- requires std::derived_from<T, FlexibleArrayBufferView>
+-struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
++struct NativeValueTraits<
++ IDLNullable<T>,
++ typename std::enable_if_t<
++ std::is_base_of<FlexibleArrayBufferView, T>::value>>
++ : public NativeValueTraitsBase<T> {
+ // FlexibleArrayBufferView must be used only as arguments.
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1199,8 +1212,9 @@ NativeValueTraits<IDLSequence<T>>::Nativ
+ }
+
+ template <typename T>
+- requires NativeValueTraits<IDLSequence<T>>::has_null_value
+-struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
++struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
++ typename std::enable_if_t<
++ NativeValueTraits<IDLSequence<T>>::has_null_value>>
+ : public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
+ using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
+
+@@ -1276,8 +1290,9 @@ struct NativeValueTraits<IDLArray<T>>
+ : public NativeValueTraits<IDLSequence<T>> {};
+
+ template <typename T>
+- requires NativeValueTraits<IDLSequence<T>>::has_null_value
+-struct NativeValueTraits<IDLNullable<IDLArray<T>>>
++struct NativeValueTraits<IDLNullable<IDLArray<T>>,
++ typename std::enable_if_t<
++ NativeValueTraits<IDLSequence<T>>::has_null_value>>
+ : public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
+
+ // Record types
+@@ -1407,8 +1422,10 @@ struct NativeValueTraits<IDLRecord<K, V>
+
+ // Callback function types
+ template <typename T>
+- requires std::derived_from<T, CallbackFunctionBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++ T,
++ typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
++ : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1431,8 +1448,9 @@ struct NativeValueTraits<T> : public Nat
+ };
+
+ template <typename T>
+- requires std::derived_from<T, CallbackFunctionBase>
+-struct NativeValueTraits<IDLNullable<T>>
++struct NativeValueTraits<
++ IDLNullable<T>,
++ typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1461,8 +1479,10 @@ struct NativeValueTraits<IDLNullable<T>>
+
+ // Callback interface types
+ template <typename T>
+- requires std::derived_from<T, CallbackInterfaceBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++ T,
++ typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
++ : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1486,8 +1506,9 @@ struct NativeValueTraits<T> : public Nat
+
+ // Interface types
+ template <typename T>
+- requires std::derived_from<T, CallbackInterfaceBase>
+-struct NativeValueTraits<IDLNullable<T>>
++struct NativeValueTraits<
++ IDLNullable<T>,
++ typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1516,8 +1537,11 @@ struct NativeValueTraits<IDLNullable<T>>
+
+ // Dictionary types
+ template <typename T>
+- requires std::derived_from<T, bindings::DictionaryBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++ T,
++ typename std::enable_if_t<
++ std::is_base_of<bindings::DictionaryBase, T>::value>>
++ : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1528,11 +1552,14 @@ struct NativeValueTraits<T> : public Nat
+ // We don't support nullable dictionary types in general since it's quite
+ // confusing and often misused.
+ template <typename T>
+- requires std::derived_from<T, bindings::DictionaryBase> &&
+- (std::same_as<T, GPUColorTargetState> ||
+- std::same_as<T, GPURenderPassColorAttachment> ||
+- std::same_as<T, GPUVertexBufferLayout>)
+-struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++ IDLNullable<T>,
++ typename std::enable_if_t<
++ std::is_base_of<bindings::DictionaryBase, T>::value &&
++ (std::is_same<T, GPUColorTargetState>::value ||
++ std::is_same<T, GPURenderPassColorAttachment>::value ||
++ std::is_same<T, GPUVertexBufferLayout>::value)>>
++ : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1544,8 +1571,11 @@ struct NativeValueTraits<IDLNullable<T>>
+
+ // Enumeration types
+ template <typename T>
+- requires std::derived_from<T, bindings::EnumerationBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
++struct NativeValueTraits<
++ T,
++ typename std::enable_if_t<
++ std::is_base_of<bindings::EnumerationBase, T>::value>>
++ : public NativeValueTraitsBase<T> {
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1555,8 +1585,10 @@ struct NativeValueTraits<T> : public Nat
+
+ // Interface types
+ template <typename T>
+- requires std::derived_from<T, ScriptWrappable>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++ T,
++ typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
++ : public NativeValueTraitsBase<T*> {
+ // 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<T> : public Nat
+ };
+
+ template <typename T>
+- requires std::derived_from<T, ScriptWrappable>
+-struct NativeValueTraits<IDLNullable<T>>
++struct NativeValueTraits<
++ IDLNullable<T>,
++ typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static inline T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1629,8 +1662,10 @@ struct NativeValueTraits<IDLNullable<T>>
+ };
+
+ template <typename T>
+- requires std::derived_from<T, bindings::UnionBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++ T,
++ typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
++ : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1646,8 +1681,10 @@ struct NativeValueTraits<T> : public Nat
+ };
+
+ template <typename T>
+- requires std::derived_from<T, bindings::UnionBase>
+-struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++ IDLNullable<T>,
++ typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
++ : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1668,8 +1705,9 @@ struct NativeValueTraits<IDLNullable<T>>
+
+ // Nullable types
+ template <typename InnerType>
+- requires(!NativeValueTraits<InnerType>::has_null_value)
+-struct NativeValueTraits<IDLNullable<InnerType>>
++struct NativeValueTraits<
++ IDLNullable<InnerType>,
++ typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
+ : public NativeValueTraitsBase<IDLNullable<InnerType>> {
+ // https://webidl.spec.whatwg.org/#es-nullable-type
+ using ImplType =
+@@ -1701,8 +1739,9 @@ struct NativeValueTraits<IDLNullable<IDL
+
+ // Optional types
+ template <typename T>
+- requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
+-struct NativeValueTraits<IDLOptional<T>>
++struct NativeValueTraits<IDLOptional<T>,
++ typename std::enable_if_t<std::is_arithmetic<
++ typename NativeValueTraits<T>::ImplType>::value>>
+ : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
+ using ImplType = typename NativeValueTraits<T>::ImplType;
+
+@@ -1724,8 +1763,9 @@ struct NativeValueTraits<IDLOptional<T>>
+ };
+
+ template <typename T>
+- requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
+-struct NativeValueTraits<IDLOptional<T>>
++struct NativeValueTraits<IDLOptional<T>,
++ typename std::enable_if_t<std::is_pointer<
++ typename NativeValueTraits<T>::ImplType>::value>>
+ : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
+ using ImplType = typename NativeValueTraits<T>::ImplType;
+
diff --git a/chromium-125-el-NativeValueTraits-p2.patch b/chromium-125-el-NativeValueTraits-p2.patch
new file mode 100644
index 0000000..477378b
--- /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 <caseq@chromium.org>
+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 <caseq@chromium.org>
+ Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
+ 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<ImplType>::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 <typename... ExtraArgs>
+ 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<IDLSequence<T>>::ImplType;
+- ResultType result;
++ typename NativeValueTraits<IDLSequence<T>>::ImplType result;
+ result.ReserveInitialCapacity(length);
+ v8::Local<v8::Context> 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<ScriptWrappable, T>) {
+- 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::Value> v8_element,
+- void* data) {
+- CallbackData* callback_data = reinterpret_cast<CallbackData*>(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<v8::Object>())
+- ->template ToImpl<T>();
+- callback_data->result.push_back(std::move(value));
+- return v8::Array::CallbackResult::kContinue;
+- }
+- }
+- auto&& element = NativeValueTraits<T>::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::Value> v8_element;
+@@ -1590,12 +1514,6 @@ struct NativeValueTraits<
+ T,
+ typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
+ : public NativeValueTraitsBase<T*> {
+- // 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<v8::Value> 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 0000000..9aff864
--- /dev/null
+++ b/chromium-125-ffmpeg-5.x-reordered_opaque.patch
@@ -0,0 +1,105 @@
+commit 62274859104bd828373ae406aa9309e610449ac5
+Author: Ted Meyer <tmathmeyer@chromium.org>
+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 <tmathmeyer@chromium.org>
+ Reviewed-by: Dan Sanders <sandersd@chromium.org>
+ 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<void*>(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<size_t>(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 <memory>
+
++#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<AVCodecContext, ScopedPtrAVFreeContext> 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<int64_t, size_t, 0>;
++
++ TimestampId::Generator timestamp_id_generator_;
++ base::LRUCache<TimestampId, int64_t> timestamp_map_;
++
+ VideoDecoderConfig config_;
+
+ scoped_refptr<FrameBufferPool> frame_pool_;
diff --git a/chromium.spec b/chromium.spec
index e6c8a5b..fe61ed7 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 <than@redhat.com> - 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 <than@redhat.com> - 124.0.6367.201-1
- update to 124.0.6367.201
diff --git a/skia-vsx-instructions.patch b/skia-vsx-instructions.patch
index fa9d5c7..55e782a 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 <emmintrin.h>
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 <immintrin.h>
++ #if __PPC64__
++ #include <mmintrin.h>
++ #include <emmintrin.h>
++ #include <tmmintrin.h>
++ #else
++ #include <immintrin.h>
++ #endif
+ #elif defined(SK_ARM_HAS_NEON)
+ #include <arm_neon.h>
+ #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 <emmintrin.h>
+
++#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 <immintrin.h>
#elif defined(SK_ARM_HAS_NEON)
#include <arm_neon.h>
-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 <math.h>
- #elif defined(JUMPER_IS_NEON)
- #include <arm_neon.h>
+@@ -116,6 +119,8 @@ using NoCtx = const void*;
+ #include <lsxintrin.h>
+ #elif defined(JUMPER_IS_LSX)
+ #include <lsxintrin.h>
+#elif defined(JUMPER_IS_VSX)
+ #include <emmintrin.h>
#else
#include <immintrin.h>
#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 <typename T> using V = Vec<4, T>;
using F = V<float >;
-@@ -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<U32>(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<F>(sqrt(lo), sqrt(hi));
+ return join<F>(__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<F>(_mm_floor_ps(lo), _mm_floor_ps(hi));
+ return join<F>(__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<F>(cast<I32>(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<I16>((cast<I32>(a) * cast<I32>(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 <immintrin.h>
-+ #if __PPC64__
-+ #include <mmintrin.h>
-+ #include <emmintrin.h>
-+ #include <tmmintrin.h>
-+ #else
-+ #include <immintrin.h>
-+ #endif
- #elif defined(SK_ARM_HAS_NEON)
- #include <arm_neon.h>
- #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 <cmath>
#include <utility>
@@ -662,7 +665,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc
#include <immintrin.h>
#elif defined(SK_ARM_HAS_NEON)
#include <arm_neon.h>
-@@ -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 <emmintrin.h>
-
-+#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 6106727..ae802a5 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
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-07 16:06 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-07 16:06 [rpms/chromium] epel9-next: - refreshed patches Than Ngo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox