[EventEngine] Add virtual a MakeSlice method into MemoryAllocatorImpl and move its default implementation to GrpcMemoryAllocatorImpl

PiperOrigin-RevId: 589155443
pull/35224/head
Vignesh Babu 1 year ago committed by Copybara-Service
parent 257efc0375
commit f0d7df79da
  1. 9
      CMakeLists.txt
  2. 2
      Makefile
  3. 1
      Package.swift
  4. 9
      build_autogenerated.yaml
  5. 1
      config.m4
  6. 1
      config.w32
  7. 1
      gRPC-Core.podspec
  8. 1
      grpc.gemspec
  9. 3
      grpc.gyp
  10. 6
      include/grpc/event_engine/internal/memory_allocator_impl.h
  11. 4
      include/grpc/event_engine/memory_allocator.h
  12. 5
      include/grpc/impl/channel_arg_names.h
  13. 1
      package.xml
  14. 5
      src/core/BUILD
  15. 74
      src/core/lib/event_engine/memory_allocator.cc
  16. 8
      src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc
  17. 7
      src/core/lib/event_engine/posix_engine/tcp_socket_utils.h
  18. 54
      src/core/lib/resource_quota/memory_quota.cc
  19. 6
      src/core/lib/resource_quota/memory_quota.h
  20. 1
      src/python/grpcio/grpc_core_dependencies.py
  21. 1
      tools/doxygen/Doxyfile.c++.internal
  22. 1
      tools/doxygen/Doxyfile.core.internal

9
CMakeLists.txt generated

@ -2242,7 +2242,6 @@ add_library(grpc
src/core/lib/event_engine/default_event_engine_factory.cc
src/core/lib/event_engine/event_engine.cc
src/core/lib/event_engine/forkable.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
@ -2971,7 +2970,6 @@ add_library(grpc_unsecure
src/core/lib/event_engine/default_event_engine_factory.cc
src/core/lib/event_engine/event_engine.cc
src/core/lib/event_engine/forkable.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
@ -4960,7 +4958,6 @@ add_library(grpc_authorization_provider
src/core/lib/event_engine/default_event_engine_factory.cc
src/core/lib/event_engine/event_engine.cc
src/core/lib/event_engine/forkable.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
@ -8863,7 +8860,6 @@ add_executable(chunked_vector_test
src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
src/core/lib/debug/trace.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/experiments/config.cc
src/core/lib/experiments/experiments.cc
src/core/lib/gprpp/status_helper.cc
@ -12160,7 +12156,6 @@ add_executable(flow_control_test
src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
src/core/lib/debug/trace.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/experiments/config.cc
src/core/lib/experiments/experiments.cc
src/core/lib/gprpp/status_helper.cc
@ -12246,7 +12241,6 @@ add_executable(for_each_test
src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
src/core/lib/debug/trace.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/experiments/config.cc
src/core/lib/experiments/experiments.cc
src/core/lib/gprpp/status_helper.cc
@ -15024,7 +15018,6 @@ add_executable(interceptor_list_test
src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
src/core/lib/debug/trace.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/experiments/config.cc
src/core/lib/experiments/experiments.cc
src/core/lib/gprpp/status_helper.cc
@ -15948,7 +15941,6 @@ add_executable(map_pipe_test
src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
src/core/lib/debug/trace.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/experiments/config.cc
src/core/lib/experiments/experiments.cc
src/core/lib/gprpp/status_helper.cc
@ -24645,7 +24637,6 @@ add_executable(test_core_transport_chaotic_good_frame_test
src/core/lib/event_engine/default_event_engine_factory.cc
src/core/lib/event_engine/event_engine.cc
src/core/lib/event_engine/forkable.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc

2
Makefile generated

@ -1444,7 +1444,6 @@ LIBGRPC_SRC = \
src/core/lib/event_engine/default_event_engine_factory.cc \
src/core/lib/event_engine/event_engine.cc \
src/core/lib/event_engine/forkable.cc \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc \
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc \
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \
@ -2023,7 +2022,6 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/event_engine/default_event_engine_factory.cc \
src/core/lib/event_engine/event_engine.cc \
src/core/lib/event_engine/forkable.cc \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc \
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc \
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \

1
Package.swift generated

@ -1260,7 +1260,6 @@ let package = Package(
"src/core/lib/event_engine/forkable.h",
"src/core/lib/event_engine/grpc_polled_fd.h",
"src/core/lib/event_engine/handle_containers.h",
"src/core/lib/event_engine/memory_allocator.cc",
"src/core/lib/event_engine/memory_allocator_factory.h",
"src/core/lib/event_engine/nameser.h",
"src/core/lib/event_engine/poller.h",

@ -1695,7 +1695,6 @@ libs:
- src/core/lib/event_engine/default_event_engine_factory.cc
- src/core/lib/event_engine/event_engine.cc
- src/core/lib/event_engine/forkable.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
- src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
@ -2776,7 +2775,6 @@ libs:
- src/core/lib/event_engine/default_event_engine_factory.cc
- src/core/lib/event_engine/event_engine.cc
- src/core/lib/event_engine/forkable.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
- src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
@ -4820,7 +4818,6 @@ libs:
- src/core/lib/event_engine/default_event_engine_factory.cc
- src/core/lib/event_engine/event_engine.cc
- src/core/lib/event_engine/forkable.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
- src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
@ -7310,7 +7307,6 @@ targets:
- src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
- src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
- src/core/lib/debug/trace.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/experiments/config.cc
- src/core/lib/experiments/experiments.cc
- src/core/lib/gprpp/status_helper.cc
@ -9295,7 +9291,6 @@ targets:
- src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
- src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
- src/core/lib/debug/trace.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/experiments/config.cc
- src/core/lib/experiments/experiments.cc
- src/core/lib/gprpp/status_helper.cc
@ -9469,7 +9464,6 @@ targets:
- src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
- src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
- src/core/lib/debug/trace.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/experiments/config.cc
- src/core/lib/experiments/experiments.cc
- src/core/lib/gprpp/status_helper.cc
@ -11008,7 +11002,6 @@ targets:
- src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
- src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
- src/core/lib/debug/trace.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/experiments/config.cc
- src/core/lib/experiments/experiments.cc
- src/core/lib/gprpp/status_helper.cc
@ -11639,7 +11632,6 @@ targets:
- src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
- src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
- src/core/lib/debug/trace.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/experiments/config.cc
- src/core/lib/experiments/experiments.cc
- src/core/lib/gprpp/status_helper.cc
@ -17161,7 +17153,6 @@ targets:
- src/core/lib/event_engine/default_event_engine_factory.cc
- src/core/lib/event_engine/event_engine.cc
- src/core/lib/event_engine/forkable.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
- src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc

1
config.m4 generated

@ -534,7 +534,6 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/event_engine/default_event_engine_factory.cc \
src/core/lib/event_engine/event_engine.cc \
src/core/lib/event_engine/forkable.cc \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc \
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc \
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \

1
config.w32 generated

@ -499,7 +499,6 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\event_engine\\default_event_engine_factory.cc " +
"src\\core\\lib\\event_engine\\event_engine.cc " +
"src\\core\\lib\\event_engine\\forkable.cc " +
"src\\core\\lib\\event_engine\\memory_allocator.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\ev_epoll1_linux.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\ev_poll_posix.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\event_poller_posix_default.cc " +

1
gRPC-Core.podspec generated

@ -1363,7 +1363,6 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/forkable.h',
'src/core/lib/event_engine/grpc_polled_fd.h',
'src/core/lib/event_engine/handle_containers.h',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/memory_allocator_factory.h',
'src/core/lib/event_engine/nameser.h',
'src/core/lib/event_engine/poller.h',

1
grpc.gemspec generated

@ -1266,7 +1266,6 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/event_engine/forkable.h )
s.files += %w( src/core/lib/event_engine/grpc_polled_fd.h )
s.files += %w( src/core/lib/event_engine/handle_containers.h )
s.files += %w( src/core/lib/event_engine/memory_allocator.cc )
s.files += %w( src/core/lib/event_engine/memory_allocator_factory.h )
s.files += %w( src/core/lib/event_engine/nameser.h )
s.files += %w( src/core/lib/event_engine/poller.h )

3
grpc.gyp generated

@ -764,7 +764,6 @@
'src/core/lib/event_engine/default_event_engine_factory.cc',
'src/core/lib/event_engine/event_engine.cc',
'src/core/lib/event_engine/forkable.cc',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc',
'src/core/lib/event_engine/posix_engine/ev_poll_posix.cc',
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
@ -1285,7 +1284,6 @@
'src/core/lib/event_engine/default_event_engine_factory.cc',
'src/core/lib/event_engine/event_engine.cc',
'src/core/lib/event_engine/forkable.cc',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc',
'src/core/lib/event_engine/posix_engine/ev_poll_posix.cc',
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
@ -2065,7 +2063,6 @@
'src/core/lib/event_engine/default_event_engine_factory.cc',
'src/core/lib/event_engine/event_engine.cc',
'src/core/lib/event_engine/forkable.cc',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc',
'src/core/lib/event_engine/posix_engine/ev_poll_posix.cc',
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',

@ -50,6 +50,12 @@ class MemoryAllocatorImpl
/// request.max() inclusively.
virtual size_t Reserve(MemoryRequest request) = 0;
/// Allocate a slice, using MemoryRequest to size the number of returned
/// bytes. For a variable length request, check the returned slice length to
/// verify how much memory was allocated. Takes care of reserving memory for
/// any relevant control structures also.
virtual grpc_slice MakeSlice(MemoryRequest request) = 0;
/// Release some bytes that were previously reserved.
/// If more bytes are released than were reserved, we will have undefined
/// behavior.

@ -134,7 +134,9 @@ class MemoryAllocator {
/// bytes. For a variable length request, check the returned slice length to
/// verify how much memory was allocated. Takes care of reserving memory for
/// any relevant control structures also.
grpc_slice MakeSlice(MemoryRequest request);
grpc_slice MakeSlice(MemoryRequest request) {
return allocator_->MakeSlice(request);
}
/// A C++ allocator for containers of T.
template <typename T>

@ -384,6 +384,11 @@
* Defaults to 250ms. */
#define GRPC_ARG_HAPPY_EYEBALLS_CONNECTION_ATTEMPT_DELAY_MS \
"grpc.happy_eyeballs_connection_attempt_delay_ms"
/** It accepts a MemoryAllocatorFactory as input and If specified, it forces
* the default event engine to use memory allocators created using the provided
* factory. */
#define GRPC_ARG_EVENT_ENGINE_USE_MEMORY_ALLOCATOR_FACTORY \
"grpc.event_engine_use_memory_allocator_factory"
/** \} */
#endif /* GRPC_IMPL_CHANNEL_ARG_NAMES_H */

1
package.xml generated

@ -1248,7 +1248,6 @@
<file baseinstalldir="/" name="src/core/lib/event_engine/forkable.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/grpc_polled_fd.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/handle_containers.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/memory_allocator.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/memory_allocator_factory.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/nameser.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/poller.h" role="src" />

@ -1163,9 +1163,6 @@ grpc_cc_library(
grpc_cc_library(
name = "event_engine_memory_allocator",
srcs = [
"lib/event_engine/memory_allocator.cc",
],
hdrs = [
"//:include/grpc/event_engine/internal/memory_allocator_impl.h",
"//:include/grpc/event_engine/memory_allocator.h",
@ -1175,7 +1172,6 @@ grpc_cc_library(
language = "c++",
deps = [
"slice",
"slice_refcount",
"//:gpr_platform",
],
)
@ -1221,6 +1217,7 @@ grpc_cc_library(
"race",
"resource_quota_trace",
"seq",
"slice_refcount",
"time",
"useful",
"//:gpr",

@ -1,74 +0,0 @@
// Copyright 2021 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#include <stdint.h>
#include <stdlib.h>
#include <memory>
#include <new>
#include <utility>
#include <grpc/event_engine/memory_allocator.h>
#include <grpc/event_engine/memory_request.h>
#include <grpc/slice.h>
#include "src/core/lib/slice/slice_refcount.h"
namespace grpc_event_engine {
namespace experimental {
namespace {
// Reference count for a slice allocated by MemoryAllocator::MakeSlice.
// Takes care of releasing memory back when the slice is destroyed.
class SliceRefCount : public grpc_slice_refcount {
public:
SliceRefCount(std::shared_ptr<internal::MemoryAllocatorImpl> allocator,
size_t size)
: grpc_slice_refcount(Destroy),
allocator_(std::move(allocator)),
size_(size) {
// Nothing to do here.
}
~SliceRefCount() { allocator_->Release(size_); }
private:
static void Destroy(grpc_slice_refcount* p) {
auto* rc = static_cast<SliceRefCount*>(p);
rc->~SliceRefCount();
free(rc);
}
std::shared_ptr<internal::MemoryAllocatorImpl> allocator_;
size_t size_;
};
} // namespace
grpc_slice MemoryAllocator::MakeSlice(MemoryRequest request) {
auto size = Reserve(request.Increase(sizeof(SliceRefCount)));
void* p = malloc(size);
new (p) SliceRefCount(allocator_, size);
grpc_slice slice;
slice.refcount = static_cast<SliceRefCount*>(p);
slice.data.refcounted.bytes =
static_cast<uint8_t*>(p) + sizeof(SliceRefCount);
slice.data.refcounted.length = size - sizeof(SliceRefCount);
return slice;
}
} // namespace experimental
} // namespace grpc_event_engine

@ -25,6 +25,7 @@
#include "absl/types/optional.h"
#include <grpc/event_engine/event_engine.h>
#include <grpc/event_engine/memory_allocator.h>
#include <grpc/impl/channel_arg_names.h>
#include "src/core/lib/gpr/useful.h"
@ -209,6 +210,13 @@ PosixTcpOptions TcpOptionsFromEndpointConfig(const EndpointConfig& config) {
options.socket_mutator =
grpc_socket_mutator_ref(static_cast<grpc_socket_mutator*>(value));
}
value =
config.GetVoidPointer(GRPC_ARG_EVENT_ENGINE_USE_MEMORY_ALLOCATOR_FACTORY);
if (value != nullptr) {
options.memory_allocator_factory =
static_cast<grpc_event_engine::experimental::MemoryAllocatorFactory*>(
value);
}
return options;
}

@ -26,6 +26,7 @@
#include <grpc/event_engine/endpoint_config.h>
#include <grpc/event_engine/event_engine.h>
#include <grpc/event_engine/memory_allocator.h>
#include <grpc/grpc.h>
#include <grpc/support/log.h>
@ -75,6 +76,8 @@ struct PosixTcpOptions {
int dscp = kDscpNotSet;
grpc_core::RefCountedPtr<grpc_core::ResourceQuota> resource_quota;
struct grpc_socket_mutator* socket_mutator = nullptr;
grpc_event_engine::experimental::MemoryAllocatorFactory*
memory_allocator_factory = nullptr;
PosixTcpOptions() = default;
// Move ctor
PosixTcpOptions(PosixTcpOptions&& other) noexcept {
@ -89,6 +92,8 @@ struct PosixTcpOptions {
}
socket_mutator = std::exchange(other.socket_mutator, nullptr);
resource_quota = std::move(other.resource_quota);
memory_allocator_factory =
std::exchange(other.memory_allocator_factory, nullptr);
CopyIntegerOptions(other);
return *this;
}
@ -98,6 +103,7 @@ struct PosixTcpOptions {
socket_mutator = grpc_socket_mutator_ref(other.socket_mutator);
}
resource_quota = other.resource_quota;
memory_allocator_factory = other.memory_allocator_factory;
CopyIntegerOptions(other);
}
// Copy assignment
@ -113,6 +119,7 @@ struct PosixTcpOptions {
socket_mutator = grpc_socket_mutator_ref(other.socket_mutator);
}
resource_quota = other.resource_quota;
memory_allocator_factory = other.memory_allocator_factory;
CopyIntegerOptions(other);
return *this;
}

@ -20,11 +20,19 @@
#include <algorithm>
#include <atomic>
#include <cstddef>
#include <cstdint>
#include <cstdlib>
#include <memory>
#include <tuple>
#include <utility>
#include "absl/status/status.h"
#include "absl/strings/str_cat.h"
#include <grpc/event_engine/internal/memory_allocator_impl.h>
#include <grpc/slice.h>
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/mpscq.h"
@ -34,6 +42,7 @@
#include "src/core/lib/promise/race.h"
#include "src/core/lib/promise/seq.h"
#include "src/core/lib/resource_quota/trace.h"
#include "src/core/lib/slice/slice_refcount.h"
namespace grpc_core {
@ -90,6 +99,39 @@ class MemoryQuotaTracker {
Mutex mu_;
std::vector<std::weak_ptr<BasicMemoryQuota>> quotas_ ABSL_GUARDED_BY(mu_);
};
// Reference count for a slice allocated by MemoryAllocator::MakeSlice.
// Takes care of releasing memory back when the slice is destroyed.
class SliceRefCount : public grpc_slice_refcount {
public:
SliceRefCount(
std::shared_ptr<
grpc_event_engine::experimental::internal::MemoryAllocatorImpl>
allocator,
size_t size)
: grpc_slice_refcount(Destroy),
allocator_(std::move(allocator)),
size_(size) {
// Nothing to do here.
}
~SliceRefCount() {
allocator_->Release(size_);
allocator_.reset();
}
private:
static void Destroy(grpc_slice_refcount* p) {
auto* rc = static_cast<SliceRefCount*>(p);
rc->~SliceRefCount();
free(rc);
}
std::shared_ptr<
grpc_event_engine::experimental::internal::MemoryAllocatorImpl>
allocator_;
size_t size_;
};
} // namespace
//
@ -337,6 +379,18 @@ void GrpcMemoryAllocatorImpl::Replenish() {
free_bytes_.fetch_add(amount, std::memory_order_acq_rel);
}
grpc_slice GrpcMemoryAllocatorImpl::MakeSlice(MemoryRequest request) {
auto size = Reserve(request.Increase(sizeof(SliceRefCount)));
void* p = malloc(size);
new (p) SliceRefCount(shared_from_this(), size);
grpc_slice slice;
slice.refcount = static_cast<SliceRefCount*>(p);
slice.data.refcounted.bytes =
static_cast<uint8_t*>(p) + sizeof(SliceRefCount);
slice.data.refcounted.length = size - sizeof(SliceRefCount);
return slice;
}
//
// BasicMemoryQuota
//

@ -400,6 +400,12 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
// Returns the number of bytes reserved.
size_t Reserve(MemoryRequest request) override;
/// Allocate a slice, using MemoryRequest to size the number of returned
/// bytes. For a variable length request, check the returned slice length to
/// verify how much memory was allocated. Takes care of reserving memory for
/// any relevant control structures also.
grpc_slice MakeSlice(MemoryRequest request) override;
// Release some bytes that were previously reserved.
void Release(size_t n) override {
// Add the released memory to our free bytes counter... if this increases

@ -508,7 +508,6 @@ CORE_SOURCE_FILES = [
'src/core/lib/event_engine/default_event_engine_factory.cc',
'src/core/lib/event_engine/event_engine.cc',
'src/core/lib/event_engine/forkable.cc',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc',
'src/core/lib/event_engine/posix_engine/ev_poll_posix.cc',
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',

@ -2265,7 +2265,6 @@ src/core/lib/event_engine/forkable.cc \
src/core/lib/event_engine/forkable.h \
src/core/lib/event_engine/grpc_polled_fd.h \
src/core/lib/event_engine/handle_containers.h \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/memory_allocator_factory.h \
src/core/lib/event_engine/nameser.h \
src/core/lib/event_engine/poller.h \

@ -2041,7 +2041,6 @@ src/core/lib/event_engine/forkable.cc \
src/core/lib/event_engine/forkable.h \
src/core/lib/event_engine/grpc_polled_fd.h \
src/core/lib/event_engine/handle_containers.h \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/memory_allocator_factory.h \
src/core/lib/event_engine/nameser.h \
src/core/lib/event_engine/poller.h \

Loading…
Cancel
Save