chore: add process memory limit details in parition_alloc oom handler (#44512)

chore: backport b5b8e05a8 from chromium
This commit is contained in:
Robo 2024-11-04 20:49:06 +09:00 committed by GitHub
parent 6d94e1a436
commit fb6faaab69
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 101 additions and 17 deletions

View file

@ -135,3 +135,4 @@ feat_allow_usage_of_sccontentsharingpicker_on_supported_platforms.patch
feat_allow_-4_as_a_macos_screen_share_id.patch feat_allow_-4_as_a_macos_screen_share_id.patch
fix_software_compositing_infinite_loop.patch fix_software_compositing_infinite_loop.patch
cherry-pick-8c4edae5e34d.patch cherry-pick-8c4edae5e34d.patch
oom_add_commit_limit_available_to_oom_exception_arguments.patch

View file

@ -1,7 +1,7 @@
From 8c4edae5e34dbe82ebaaf9596710800ac524258a Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Justin Lulejian <jlulejian@chromium.org> From: Justin Lulejian <jlulejian@chromium.org>
Date: Fri, 18 Oct 2024 21:34:12 +0000 Date: Fri, 18 Oct 2024 21:34:12 +0000
Subject: [PATCH] [M130][Extensions][ServiceWorker] Skip worker for isolated world module fetch Subject: Skip worker for isolated world module fetch
Before this change, an isolated world (e.g. extension content script, Before this change, an isolated world (e.g. extension content script,
but also others) could dynamically import a script from an accessible but also others) could dynamically import a script from an accessible
@ -27,13 +27,12 @@ Owners-Override: Daniel Yip <danielyip@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/branch-heads/6723@{#1432} Cr-Commit-Position: refs/branch-heads/6723@{#1432}
Cr-Branched-From: 985f2961df230630f9cbd75bd6fe463009855a11-refs/heads/main@{#1356013} Cr-Branched-From: 985f2961df230630f9cbd75bd6fe463009855a11-refs/heads/main@{#1356013}
---
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
index 9fad30c7..b83416e 100644 index f32bdc144f26a1ea5da2dad9ac0c8a782b0b2ff9..21e96096f1b1e3279e6a9d9687464045a9dd4288 100644
--- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc --- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc +++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
@@ -153,12 +153,20 @@ @@ -153,12 +153,20 @@ void ModuleScriptLoader::FetchInternal(
url_ = module_request.Url(); url_ = module_request.Url();
#endif #endif

View file

@ -10,10 +10,10 @@ process CompositingModeFallbackToSoftware IPC to disable GPU compositing.
https://issues.chromium.org/345275130 https://issues.chromium.org/345275130
diff --git a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc diff --git a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
index 9497ab591864295231db47fdc526e59935e6aa31..635fa41649db41800f99da2683cc955b2e1e935f 100644 index 3bbaa7dafcff1c88badaec0dbf14fd3320130398..8db903f3f343ed8723ad8adcb978b01fc27c6d9e 100644
--- a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc --- a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
+++ b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc +++ b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
@@ -374,9 +374,13 @@ void LayerTreeView::DidFailToInitializeLayerTreeFrameSink() { @@ -375,9 +375,13 @@ void LayerTreeView::DidFailToInitializeLayerTreeFrameSink() {
// unable to be killed after Chrome is closed. // unable to be killed after Chrome is closed.
// https://issues.chromium.org/336164423 // https://issues.chromium.org/336164423
if (!Platform::Current()->IsGpuRemoteDisconnected()) { if (!Platform::Current()->IsGpuRemoteDisconnected()) {

View file

@ -0,0 +1,86 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Francois Doray <fdoray@chromium.org>
Date: Mon, 16 Sep 2024 15:57:01 +0000
Subject: [oom] Add commit limit/available to OOM exception arguments
(Windows).
~25% of OOM crashes [1] occur for an allocation <10MB when the
"system commit remaining" [2] is >1GB. This CL adds the
"process commit limit" and "process commit available" value from
MEMORYSTATUSEX to the OOM exception arguments, which will allow
verifying if the "process commit limit/remaining" is lower than
the "system commit limit/remaining" when these OOM crashes occur.
Depending on what we find, we might add these values to the
stability_report.ProcessState proto in the future.
[1] go/win-ooms-alloc-less-10mb-commit-remaining-more-1gb-126+
go/all-win-ooms-m126+
[2] Computed asynchronously by crashpad from PERFORMANCE_INFORMATION:
(CommitLimit - CommitTotal)
Change-Id: I1d6b34ce15fad46516a4e34a9507c341bfb81047
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5856490
Auto-Submit: Francois Pierre Doray <fdoray@chromium.org>
Reviewed-by: Benoit Lize <lizeb@chromium.org>
Reviewed-by: Greg Thompson <grt@chromium.org>
Commit-Queue: Francois Pierre Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1355900}
diff --git a/base/allocator/partition_allocator/src/partition_alloc/oom.cc b/base/allocator/partition_allocator/src/partition_alloc/oom.cc
index c0488caa98badb7f6fcef5d8051c41c4306eb316..9b78dfb817139c5f1a08d2e7c600d76c96fc4b85 100644
--- a/base/allocator/partition_allocator/src/partition_alloc/oom.cc
+++ b/base/allocator/partition_allocator/src/partition_alloc/oom.cc
@@ -28,21 +28,47 @@ namespace internal {
// partition_alloc::internal::base::internal::OnNoMemoryInternal
PA_NOINLINE void OnNoMemoryInternal(size_t size) {
g_oom_size = size;
+ size_t tmp_size = size;
+ internal::base::debug::Alias(&tmp_size);
+
#if PA_BUILDFLAG(IS_WIN)
+ // Create an exception vector with:
+ // [0] the size of the allocation, in bytes
+ // [1] "current committed memory limit for the system or the current process,
+ // whichever is smaller, in bytes"
+ // [2] "maximum amount of memory the current process can commit, in bytes"
+ //
+ // Citations from
+ // https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-memorystatusex
+ //
+ // System commit constraints (which may be different from the process commit
+ // constraints) are in the stability_report.SystemMemoryState.WindowsMemory
+ // proto attached to crash reports.
+ //
+ // Note: Both the process commit constraints in the exception vector and the
+ // system commit constraints in the proto are collected *after* the OOM and
+ // may therefore not reflect the state at the time of the OOM (e.g. another
+ // process may have exited or the page file may have been resized).
+ constexpr size_t kInvalid = std::numeric_limits<ULONG_PTR>::max();
+ ULONG_PTR exception_args[] = {size, kInvalid, kInvalid};
+
+ MEMORYSTATUSEX memory_status = {};
+ memory_status.dwLength = sizeof(memory_status);
+ if (::GlobalMemoryStatusEx(&memory_status) != 0) {
+ exception_args[1] = memory_status.ullTotalPageFile;
+ exception_args[2] = memory_status.ullAvailPageFile;
+ }
+ internal::base::debug::Alias(&memory_status);
+
// Kill the process. This is important for security since most of code
// does not check the result of memory allocation.
- // https://msdn.microsoft.com/en-us/library/het71c37.aspx
- // Pass the size of the failed request in an exception argument.
- ULONG_PTR exception_args[] = {size};
+ // Documentation: https://msdn.microsoft.com/en-us/library/het71c37.aspx
::RaiseException(win::kOomExceptionCode, EXCEPTION_NONCONTINUABLE,
std::size(exception_args), exception_args);
// Safety check, make sure process exits here.
_exit(win::kOomExceptionCode);
#else
- size_t tmp_size = size;
- internal::base::debug::Alias(&tmp_size);
-
// Note: Don't add anything that may allocate here. Depending on the
// allocator, this may be called from within the allocator (e.g. with
// PartitionAlloc), and would deadlock as our locks are not recursive.

View file

@ -950,10 +950,10 @@ index e89fd87753bad3c5663fa53f8dcc4542e7e307e5..2b433a0705234af6f9808ee741a9795d
base::FilePath GetCanonicalPath(const base::FilePath& path) { base::FilePath GetCanonicalPath(const base::FilePath& path) {
diff --git a/ui/gtk/gtk_util.cc b/ui/gtk/gtk_util.cc diff --git a/ui/gtk/gtk_util.cc b/ui/gtk/gtk_util.cc
index d86fbcf969f2fa0d176ead903703ab612e5464c2..6b963ea8401d20e655d068a69105586814bab320 100644 index 2bff2a36b980f0e96b66a651825c4b7c12c07156..ac7029444cc468ac8b1959e58bfd3520b077ef13 100644
--- a/ui/gtk/gtk_util.cc --- a/ui/gtk/gtk_util.cc
+++ b/ui/gtk/gtk_util.cc +++ b/ui/gtk/gtk_util.cc
@@ -227,9 +227,13 @@ aura::Window* GetAuraTransientParent(GtkWidget* dialog) { @@ -222,9 +222,13 @@ aura::Window* GetAuraTransientParent(GtkWidget* dialog) {
} }
void ClearAuraTransientParent(GtkWidget* dialog, aura::Window* parent) { void ClearAuraTransientParent(GtkWidget* dialog, aura::Window* parent) {

View file

@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: James Price <jrprice@google.com> From: James Price <jrprice@google.com>
Date: Mon, 28 Oct 2024 16:57:46 +0000 Date: Mon, 28 Oct 2024 16:57:46 +0000
Subject: [tint] Validate that `@align()` is large enough Subject: Validate that `@align()` is large enough
MIME-Version: 1.0 MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8 Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit Content-Transfer-Encoding: 8bit

View file

@ -1,8 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Andreas Haas <ahaas@chromium.org> From: Andreas Haas <ahaas@chromium.org>
Date: Thu, 10 Oct 2024 13:56:42 +0200 Date: Thu, 10 Oct 2024 13:56:42 +0200
Subject: [13.0][wasm] Don't tier up wrapper if signature depends on other Subject: Don't tier up wrapper if signature depends on other instance
instance
The wasm-to-js wrapper tierup currently does not handle signatures with The wasm-to-js wrapper tierup currently does not handle signatures with
indexed types correctly if the WebAssembly instance from which the indexed types correctly if the WebAssembly instance from which the

View file

@ -1,7 +1,7 @@
From d9893f4856af26e78ba5021063ee2b1c61a3023b Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Thibaud Michaud <thibaudm@chromium.org> From: Thibaud Michaud <thibaudm@chromium.org>
Date: Thu, 10 Oct 2024 18:54:04 +0200 Date: Thu, 10 Oct 2024 18:54:04 +0200
Subject: [PATCH] Merged: [wasm] Fix default externref/exnref reference Subject: Merged: [wasm] Fix default externref/exnref reference
- The default nullexternref should be null instead of undefined - The default nullexternref should be null instead of undefined
- The default exnref/nullexnref should be null instead of wasm_null - The default exnref/nullexnref should be null instead of wasm_null
@ -17,13 +17,12 @@ Commit-Queue: Thibaud Michaud <thibaudm@chromium.org>
Cr-Commit-Position: refs/branch-heads/13.0@{#35} Cr-Commit-Position: refs/branch-heads/13.0@{#35}
Cr-Branched-From: 4be854bd71ea878a25b236a27afcecffa2e29360-refs/heads/13.0.245@{#1} Cr-Branched-From: 4be854bd71ea878a25b236a27afcecffa2e29360-refs/heads/13.0.245@{#1}
Cr-Branched-From: 1f5183f7ad6cca21029fd60653d075730c644432-refs/heads/main@{#96103} Cr-Branched-From: 1f5183f7ad6cca21029fd60653d075730c644432-refs/heads/main@{#96103}
---
diff --git a/src/wasm/wasm-js.cc b/src/wasm/wasm-js.cc diff --git a/src/wasm/wasm-js.cc b/src/wasm/wasm-js.cc
index f8549cb..7c07f1e 100644 index 32bbbce5838a65c62d419bb7b79a36827d7b97f2..0d24a204f68a64bb65c7b102fe52571e23fe29a0 100644
--- a/src/wasm/wasm-js.cc --- a/src/wasm/wasm-js.cc
+++ b/src/wasm/wasm-js.cc +++ b/src/wasm/wasm-js.cc
@@ -1322,9 +1322,12 @@ @@ -1314,9 +1314,12 @@ i::Handle<i::HeapObject> DefaultReferenceValue(i::Isolate* isolate,
DCHECK(type.is_object_reference()); DCHECK(type.is_object_reference());
// Use undefined for JS type (externref) but null for wasm types as wasm does // Use undefined for JS type (externref) but null for wasm types as wasm does
// not know undefined. // not know undefined.