Refactor to remove the arena_config.h library.

PiperOrigin-RevId: 538200938
pull/12992/head
Protobuf Team Bot 2 years ago committed by Copybara-Service
parent ff750bb4c3
commit 7472748ce8
  1. 18
      src/google/protobuf/BUILD.bazel
  2. 3
      src/google/protobuf/arena.h
  3. 9
      src/google/protobuf/arena_allocation_policy.h
  4. 53
      src/google/protobuf/arena_config.cc
  5. 73
      src/google/protobuf/arena_config.h
  6. 1
      src/google/protobuf/serial_arena.h
  7. 1
      src/google/protobuf/thread_safe_arena.h

@ -266,20 +266,6 @@ cc_library(
], ],
) )
cc_library(
name = "arena_config",
srcs = ["arena_config.cc"],
hdrs = ["arena_config.h"],
include_prefix = "google/protobuf",
visibility = [
"//:__subpackages__",
"//src/google/protobuf:__subpackages__",
],
deps = [
"//src/google/protobuf/stubs:lite",
],
)
cc_library( cc_library(
name = "arena_allocation_policy", name = "arena_allocation_policy",
hdrs = ["arena_allocation_policy.h"], hdrs = ["arena_allocation_policy.h"],
@ -289,7 +275,6 @@ cc_library(
"//src/google/protobuf:__subpackages__", "//src/google/protobuf:__subpackages__",
], ],
deps = [ deps = [
":arena_config",
"//src/google/protobuf/stubs:lite", "//src/google/protobuf/stubs:lite",
], ],
) )
@ -322,7 +307,6 @@ cc_library(
], ],
hdrs = [ hdrs = [
"arena.h", "arena.h",
"arena_config.h",
"arenaz_sampler.h", "arenaz_sampler.h",
"serial_arena.h", "serial_arena.h",
"thread_safe_arena.h", "thread_safe_arena.h",
@ -336,7 +320,6 @@ cc_library(
":arena_align", ":arena_align",
":arena_allocation_policy", ":arena_allocation_policy",
":arena_cleanup", ":arena_cleanup",
":arena_config",
":string_block", ":string_block",
"//src/google/protobuf/stubs:lite", "//src/google/protobuf/stubs:lite",
"@com_google_absl//absl/log:absl_check", "@com_google_absl//absl/log:absl_check",
@ -411,7 +394,6 @@ cc_library(
deps = [ deps = [
":arena", ":arena",
":arena_align", ":arena_align",
":arena_config",
":string_block", ":string_block",
":varint_shuffle", ":varint_shuffle",
"//src/google/protobuf/io", "//src/google/protobuf/io",

@ -50,7 +50,6 @@ using type_info = ::type_info;
#include "absl/meta/type_traits.h" #include "absl/meta/type_traits.h"
#include "google/protobuf/arena_align.h" #include "google/protobuf/arena_align.h"
#include "google/protobuf/arena_config.h"
#include "google/protobuf/port.h" #include "google/protobuf/port.h"
#include "google/protobuf/serial_arena.h" #include "google/protobuf/serial_arena.h"
#include "google/protobuf/thread_safe_arena.h" #include "google/protobuf/thread_safe_arena.h"
@ -122,7 +121,7 @@ struct ArenaOptions {
// individual arena allocation request occurs with a size larger than this // individual arena allocation request occurs with a size larger than this
// maximum). Requested block sizes increase up to this value, then remain // maximum). Requested block sizes increase up to this value, then remain
// here. // here.
size_t max_block_size = internal::GetDefaultArenaMaxBlockSize(); size_t max_block_size = internal::AllocationPolicy::kDefaultMaxBlockSize;
// An initial block of memory for the arena to use, or nullptr for none. If // An initial block of memory for the arena to use, or nullptr for none. If
// provided, the block must live at least as long as the arena itself. The // provided, the block must live at least as long as the arena itself. The

@ -34,8 +34,6 @@
#include <cstddef> #include <cstddef>
#include <cstdint> #include <cstdint>
#include "google/protobuf/arena_config.h"
namespace google { namespace google {
namespace protobuf { namespace protobuf {
namespace internal { namespace internal {
@ -47,17 +45,18 @@ namespace internal {
// public configuration class such as `ArenaOptions`. // public configuration class such as `ArenaOptions`.
struct AllocationPolicy { struct AllocationPolicy {
static constexpr size_t kDefaultStartBlockSize = 256; static constexpr size_t kDefaultStartBlockSize = 256;
static constexpr size_t kDefaultMaxBlockSize = 32 << 10;
size_t start_block_size = kDefaultStartBlockSize; size_t start_block_size = kDefaultStartBlockSize;
size_t max_block_size = GetDefaultArenaMaxBlockSize(); size_t max_block_size = kDefaultMaxBlockSize;
void* (*block_alloc)(size_t) = nullptr; void* (*block_alloc)(size_t) = nullptr;
void (*block_dealloc)(void*, size_t) = nullptr; void (*block_dealloc)(void*, size_t) = nullptr;
bool IsDefault() const { bool IsDefault() const {
return start_block_size == kDefaultStartBlockSize && return start_block_size == kDefaultStartBlockSize &&
max_block_size == GetDefaultArenaMaxBlockSize() && max_block_size == kDefaultMaxBlockSize && block_alloc == nullptr &&
block_alloc == nullptr && block_dealloc == nullptr; block_dealloc == nullptr;
} }
}; };

@ -1,53 +0,0 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
// https://developers.google.com/protocol-buffers/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "google/protobuf/arena_config.h"
#include <atomic>
#include <cstddef>
// Must be included last.
#include "google/protobuf/port_def.inc"
namespace google {
namespace protobuf {
namespace internal {
PROTOBUF_CONSTINIT const size_t kDefaultDefaultArenaMaxBlockSize = 32 << 10;
namespace arena_config_internal {
std::atomic<size_t> default_arena_max_block_size{
kDefaultDefaultArenaMaxBlockSize};
} // namespace arena_config_internal
} // namespace internal
} // namespace protobuf
} // namespace google

@ -1,73 +0,0 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
// https://developers.google.com/protocol-buffers/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef GOOGLE_PROTOBUF_ARENA_CONFIG_H__
#define GOOGLE_PROTOBUF_ARENA_CONFIG_H__
#include <atomic>
#include <cstddef>
// Must be included last.
#include "google/protobuf/port_def.inc"
namespace google {
namespace protobuf {
namespace internal {
namespace arena_config_internal {
// We use an atomic here only for correctness so that we can read/write
// concurrently. We don't have memory order requirements so we use relaxed
// memory ordering.
PROTOBUF_EXPORT extern std::atomic<size_t> default_arena_max_block_size;
} // namespace arena_config_internal
// The default value to use for DefaultArenaMaxBlockSize when
// SetDefaultArenaMaxBlockSize hasn't been called.
PROTOBUF_EXPORT extern const size_t kDefaultDefaultArenaMaxBlockSize;
// The default value to use for arena max block size when no value is provided
// in ArenaOptions.
inline size_t GetDefaultArenaMaxBlockSize() {
return arena_config_internal::default_arena_max_block_size.load(
std::memory_order_relaxed);
}
inline void SetDefaultArenaMaxBlockSize(size_t default_arena_max_block_size) {
return arena_config_internal::default_arena_max_block_size.store(
default_arena_max_block_size, std::memory_order_relaxed);
}
} // namespace internal
} // namespace protobuf
} // namespace google
#include "google/protobuf/port_undef.inc"
#endif // GOOGLE_PROTOBUF_ARENA_CONFIG_H__

@ -47,7 +47,6 @@
#include "absl/numeric/bits.h" #include "absl/numeric/bits.h"
#include "google/protobuf/arena_align.h" #include "google/protobuf/arena_align.h"
#include "google/protobuf/arena_cleanup.h" #include "google/protobuf/arena_cleanup.h"
#include "google/protobuf/arena_config.h"
#include "google/protobuf/arenaz_sampler.h" #include "google/protobuf/arenaz_sampler.h"
#include "google/protobuf/port.h" #include "google/protobuf/port.h"
#include "google/protobuf/string_block.h" #include "google/protobuf/string_block.h"

@ -43,7 +43,6 @@
#include "google/protobuf/arena_align.h" #include "google/protobuf/arena_align.h"
#include "google/protobuf/arena_allocation_policy.h" #include "google/protobuf/arena_allocation_policy.h"
#include "google/protobuf/arena_cleanup.h" #include "google/protobuf/arena_cleanup.h"
#include "google/protobuf/arena_config.h"
#include "google/protobuf/arenaz_sampler.h" #include "google/protobuf/arenaz_sampler.h"
#include "google/protobuf/port.h" #include "google/protobuf/port.h"
#include "google/protobuf/serial_arena.h" #include "google/protobuf/serial_arena.h"

Loading…
Cancel
Save