Commit bf4f83d9 authored by Benoit Lize's avatar Benoit Lize Committed by Chromium LUCI CQ

[blink/wtf] Make PartitionAlloc's partitions NoDestructor.

No need to call the destructor anywhere, and this is also dangerous in
principle, since raw pointers to the partitions are captured and used
everywhere in blink.

Change-Id: I84f62502003ac2bb3da6d1c48e6e28f7e8c81fb6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2607312Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Benoit L <lizeb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840193}
parent e1db1694
...@@ -15,6 +15,7 @@ include_rules = [ ...@@ -15,6 +15,7 @@ include_rules = [
"+base/memory/ref_counted.h", "+base/memory/ref_counted.h",
"+base/memory/weak_ptr.h", "+base/memory/weak_ptr.h",
"+base/metrics/histogram_macros.h", "+base/metrics/histogram_macros.h",
"+base/no_destructor.h",
"+base/numerics", "+base/numerics",
"+base/optional.h", "+base/optional.h",
"+base/process/process_metrics.h", "+base/process/process_metrics.h",
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include "base/allocator/partition_allocator/page_allocator.h" #include "base/allocator/partition_allocator/page_allocator.h"
#include "base/allocator/partition_allocator/partition_alloc_features.h" #include "base/allocator/partition_allocator/partition_alloc_features.h"
#include "base/debug/alias.h" #include "base/debug/alias.h"
#include "base/no_destructor.h"
#include "base/strings/safe_sprintf.h" #include "base/strings/safe_sprintf.h"
#include "base/thread_annotations.h" #include "base/thread_annotations.h"
#include "components/crash/core/common/crash_key.h" #include "components/crash/core/common/crash_key.h"
...@@ -70,35 +71,36 @@ void Partitions::Initialize() { ...@@ -70,35 +71,36 @@ void Partitions::Initialize() {
// static // static
bool Partitions::InitializeOnce() { bool Partitions::InitializeOnce() {
#if !BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) #if !BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
static base::PartitionAllocator fast_malloc_allocator{}; static base::NoDestructor<base::PartitionAllocator> fast_malloc_allocator{};
fast_malloc_allocator.init( fast_malloc_allocator->init(
{base::PartitionOptions::Alignment::kRegular, {base::PartitionOptions::Alignment::kRegular,
base::PartitionOptions::ThreadCache::kEnabled, base::PartitionOptions::ThreadCache::kEnabled,
base::PartitionOptions::PCScan::kDisabledByDefault}); base::PartitionOptions::PCScan::kDisabledByDefault});
fast_malloc_root_ = fast_malloc_allocator.root(); fast_malloc_root_ = fast_malloc_allocator->root();
#endif // !BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) #endif // !BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
static base::PartitionAllocator array_buffer_allocator{}; static base::NoDestructor<base::PartitionAllocator> array_buffer_allocator{};
static base::PartitionAllocator buffer_allocator{}; static base::NoDestructor<base::PartitionAllocator> buffer_allocator{};
static base::ThreadUnsafePartitionAllocator layout_allocator{}; static base::NoDestructor<base::ThreadUnsafePartitionAllocator>
layout_allocator{};
base::PartitionAllocGlobalInit(&Partitions::HandleOutOfMemory); base::PartitionAllocGlobalInit(&Partitions::HandleOutOfMemory);
array_buffer_allocator.init( array_buffer_allocator->init(
{base::PartitionOptions::Alignment::kRegular, {base::PartitionOptions::Alignment::kRegular,
base::PartitionOptions::ThreadCache::kDisabled, base::PartitionOptions::ThreadCache::kDisabled,
base::PartitionOptions::PCScan::kAlwaysDisabled}); base::PartitionOptions::PCScan::kAlwaysDisabled});
buffer_allocator.init({base::PartitionOptions::Alignment::kRegular, buffer_allocator->init({base::PartitionOptions::Alignment::kRegular,
base::PartitionOptions::ThreadCache::kDisabled, base::PartitionOptions::ThreadCache::kDisabled,
base::PartitionOptions::PCScan::kDisabledByDefault}); base::PartitionOptions::PCScan::kDisabledByDefault});
layout_allocator.init({base::PartitionOptions::Alignment::kRegular, layout_allocator->init({base::PartitionOptions::Alignment::kRegular,
base::PartitionOptions::ThreadCache::kDisabled, base::PartitionOptions::ThreadCache::kDisabled,
base::PartitionOptions::PCScan::kAlwaysDisabled}); base::PartitionOptions::PCScan::kAlwaysDisabled});
array_buffer_root_ = array_buffer_allocator.root(); array_buffer_root_ = array_buffer_allocator->root();
buffer_root_ = buffer_allocator.root(); buffer_root_ = buffer_allocator->root();
layout_root_ = layout_allocator.root(); layout_root_ = layout_allocator->root();
if (base::features::IsPartitionAllocPCScanEnabled() || if (base::features::IsPartitionAllocPCScanEnabled() ||
base::FeatureList::IsEnabled(kPCScanBlinkPartitions)) { base::FeatureList::IsEnabled(kPCScanBlinkPartitions)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment