Browse Source

chore: bump chromium to 112.0.5615.49 (24-x-y) (#37767)

* chore: bump chromium in DEPS to 112.0.5615.49

* fix: Store the thread stack start in TLS.

https://chromium-review.googlesource.com/c/v8/v8/+/4338176

Fixes #37454

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <[email protected]>
electron-roller[bot] 2 years ago
parent
commit
5c6dd3fdef
3 changed files with 195 additions and 1 deletions
  1. 1 1
      DEPS
  2. 1 0
      patches/v8/.patches
  3. 193 0
      patches/v8/store_the_thread_stack_start_in_tls.patch

+ 1 - 1
DEPS

@@ -2,7 +2,7 @@ gclient_gn_args_from = 'src'
 
 vars = {
   'chromium_version':
-    '112.0.5615.39',
+    '112.0.5615.49',
   'node_version':
     'v18.14.0',
   'nan_version':

+ 1 - 0
patches/v8/.patches

@@ -8,3 +8,4 @@ fix_build_deprecated_attribute_for_older_msvc_versions.patch
 fix_disable_implies_dcheck_for_node_stream_array_buffers.patch
 force_cppheapcreateparams_to_be_noncopyable.patch
 chore_allow_customizing_microtask_policy_per_context.patch
+store_the_thread_stack_start_in_tls.patch

+ 193 - 0
patches/v8/store_the_thread_stack_start_in_tls.patch

@@ -0,0 +1,193 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Victor Polevoy <[email protected]>
+Date: Thu, 9 Mar 2023 12:06:55 +0100
+Subject: Store the thread stack start in TLS.
+
+Stores the thread's stack start address in the Thread Local Storage.
+This should allow for faster enter of isolates. Previously it was
+obtained each time whenever an isolate is entered what was costly
+in terms of performance and unnecessary in general. This change
+reverts the high performance back.
+
+Bug: v8:13772
+Change-Id: I0a5bb29579cfb407e7d129c4434192d2a6962296
+Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4338176
+Commit-Queue: Omer Katz <[email protected]>
+Reviewed-by: Michael Lippautz <[email protected]>
+Reviewed-by: Omer Katz <[email protected]>
+Cr-Commit-Position: refs/heads/main@{#86578}
+(cherry picked from commit 2902d182818fa2790c2ff2b60979039fae4fc636)
+
+diff --git a/AUTHORS b/AUTHORS
+index 515bb0d6ccaf7e82b8feace2a49bbfcae29ecc8c..5f14dd472616aa17327fc3b44df4e13aa9dae078 100644
+--- a/AUTHORS
++++ b/AUTHORS
+@@ -258,6 +258,7 @@ Ujjwal Sharma <[email protected]>
+ Vadim Gorbachev <[email protected]>
+ Varun Varada <[email protected]>
+ Victor Costan <[email protected]>
++Victor Polevoy <[email protected]>
+ Vlad Burlik <[email protected]>
+ Vladimir Krivosheev <[email protected]>
+ Vladimir Shutoff <[email protected]>
+diff --git a/BUILD.bazel b/BUILD.bazel
+index 08247f86115254220b954a0b7eddf22ff33002b1..99bd667de0007b87fd12ba3b6477e14e585dd2b9 100644
+--- a/BUILD.bazel
++++ b/BUILD.bazel
+@@ -663,6 +663,7 @@ filegroup(
+         "src/base/platform/mutex.cc",
+         "src/base/platform/mutex.h",
+         "src/base/platform/platform.h",
++        "src/base/platform/platform.cc",
+         "src/base/platform/semaphore.cc",
+         "src/base/platform/semaphore.h",
+         "src/base/platform/time.cc",
+diff --git a/BUILD.gn b/BUILD.gn
+index 1f8f89e1876ca7a02a8762c5e88d6fcf96037dc0..347471a52ce817618a3e9b7addc17e94b1e5619c 100644
+--- a/BUILD.gn
++++ b/BUILD.gn
+@@ -5648,6 +5648,7 @@ v8_component("v8_libbase") {
+     "src/base/platform/memory.h",
+     "src/base/platform/mutex.cc",
+     "src/base/platform/mutex.h",
++    "src/base/platform/platform.cc",
+     "src/base/platform/platform.h",
+     "src/base/platform/semaphore.cc",
+     "src/base/platform/semaphore.h",
+diff --git a/src/base/platform/platform-aix.cc b/src/base/platform/platform-aix.cc
+index 9c9adda3897b80ded70e8ddb3b6195eba5c98c47..e6421f37ac32a03e455c60e9ac58466e4447eca9 100644
+--- a/src/base/platform/platform-aix.cc
++++ b/src/base/platform/platform-aix.cc
+@@ -136,7 +136,7 @@ std::vector<OS::MemoryRange> OS::GetFreeMemoryRangesWithin(
+ }
+ 
+ // static
+-Stack::StackSlot Stack::GetStackStart() {
++Stack::StackSlot Stack::ObtainCurrentThreadStackStart() {
+   // pthread_getthrds_np creates 3 values:
+   // __pi_stackaddr, __pi_stacksize, __pi_stackend
+ 
+diff --git a/src/base/platform/platform-darwin.cc b/src/base/platform/platform-darwin.cc
+index b6260dfaf93e430f584c25eb37366fc94cad81e5..7fde32b22bf291b78bdc7e897995c662625794c4 100644
+--- a/src/base/platform/platform-darwin.cc
++++ b/src/base/platform/platform-darwin.cc
+@@ -136,7 +136,7 @@ std::vector<OS::MemoryRange> OS::GetFreeMemoryRangesWithin(
+ }
+ 
+ // static
+-Stack::StackSlot Stack::GetStackStart() {
++Stack::StackSlot Stack::ObtainCurrentThreadStackStart() {
+   return pthread_get_stackaddr_np(pthread_self());
+ }
+ 
+diff --git a/src/base/platform/platform-freebsd.cc b/src/base/platform/platform-freebsd.cc
+index 55d600283f6029ae28edf80eb68d405d079385a4..4314b1070928859e8a67b913ccfb334bb8737c2f 100644
+--- a/src/base/platform/platform-freebsd.cc
++++ b/src/base/platform/platform-freebsd.cc
+@@ -104,7 +104,7 @@ std::vector<OS::MemoryRange> OS::GetFreeMemoryRangesWithin(
+ }
+ 
+ // static
+-Stack::StackSlot Stack::GetStackStart() {
++Stack::StackSlot Stack::ObtainCurrentThreadStackStart() {
+   pthread_attr_t attr;
+   int error;
+   pthread_attr_init(&attr);
+diff --git a/src/base/platform/platform-posix.cc b/src/base/platform/platform-posix.cc
+index 540cc8bdff0e6c9a0365ea0e8cc27571472fe46d..40e870a346f885b9009d19f8567f28ad535432e3 100644
+--- a/src/base/platform/platform-posix.cc
++++ b/src/base/platform/platform-posix.cc
+@@ -1241,7 +1241,7 @@ void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
+     !defined(V8_OS_SOLARIS)
+ 
+ // static
+-Stack::StackSlot Stack::GetStackStart() {
++Stack::StackSlot Stack::ObtainCurrentThreadStackStart() {
+   pthread_attr_t attr;
+   int error = pthread_getattr_np(pthread_self(), &attr);
+   if (!error) {
+diff --git a/src/base/platform/platform-solaris.cc b/src/base/platform/platform-solaris.cc
+index 8f5dd0c9f12284d5197695a9636e442f35fb4c93..6ff02e3278f9a486c36c4c6d3350c8e15f63ce74 100644
+--- a/src/base/platform/platform-solaris.cc
++++ b/src/base/platform/platform-solaris.cc
+@@ -72,7 +72,7 @@ std::vector<OS::MemoryRange> OS::GetFreeMemoryRangesWithin(
+ }
+ 
+ // static
+-Stack::StackSlot Stack::GetStackStart() {
++Stack::StackSlot Stack::ObtainCurrentThreadStackStart() {
+   pthread_attr_t attr;
+   int error;
+   pthread_attr_init(&attr);
+diff --git a/src/base/platform/platform-win32.cc b/src/base/platform/platform-win32.cc
+index 0eedaba0e512eea37fdbfdc109f82788851b5897..280fe18f7f2281884e7ced547762cda6feb98302 100644
+--- a/src/base/platform/platform-win32.cc
++++ b/src/base/platform/platform-win32.cc
+@@ -1739,7 +1739,7 @@ std::vector<OS::MemoryRange> OS::GetFreeMemoryRangesWithin(
+ }
+ 
+ // static
+-Stack::StackSlot Stack::GetStackStart() {
++Stack::StackSlot Stack::ObtainCurrentThreadStackStart() {
+ #if defined(V8_TARGET_ARCH_X64)
+   return reinterpret_cast<void*>(
+       reinterpret_cast<NT_TIB64*>(NtCurrentTeb())->StackBase);
+@@ -1753,7 +1753,7 @@ Stack::StackSlot Stack::GetStackStart() {
+   ::GetCurrentThreadStackLimits(&lowLimit, &highLimit);
+   return reinterpret_cast<void*>(highLimit);
+ #else
+-#error Unsupported GetStackStart.
++#error Unsupported ObtainCurrentThreadStackStart.
+ #endif
+ }
+ 
+diff --git a/src/base/platform/platform.cc b/src/base/platform/platform.cc
+new file mode 100644
+index 0000000000000000000000000000000000000000..3914b7dabab3fd32a85237cb1e7d97ad14f94d31
+--- /dev/null
++++ b/src/base/platform/platform.cc
+@@ -0,0 +1,29 @@
++// Copyright 2023 the V8 project authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++#include "src/base/platform/platform.h"
++
++namespace v8 {
++
++namespace base {
++
++namespace {
++
++// A pointer to current thread's stack beginning.
++thread_local void* thread_stack_start = nullptr;
++
++}  // namespace
++
++// static
++Stack::StackSlot Stack::GetStackStart() {
++  DCHECK_IMPLIES(thread_stack_start,
++                 thread_stack_start == ObtainCurrentThreadStackStart());
++
++  if (!thread_stack_start) {
++    thread_stack_start = ObtainCurrentThreadStackStart();
++  }
++  return thread_stack_start;
++}
++
++}  // namespace base
++}  // namespace v8
+diff --git a/src/base/platform/platform.h b/src/base/platform/platform.h
+index b9b734dac8042b67bf68e8bace550c38130b5e7f..850f447185825cdce688e2687a2d0702904fb7e6 100644
+--- a/src/base/platform/platform.h
++++ b/src/base/platform/platform.h
+@@ -660,6 +660,10 @@ class V8_BASE_EXPORT Stack {
+ #endif  // V8_USE_ADDRESS_SANITIZER
+     return slot;
+   }
++
++ private:
++  // Returns the current thread stack start pointer.
++  static Stack::StackSlot ObtainCurrentThreadStackStart();
+ };
+ 
+ }  // namespace base