C/C++ API Reference
Loading...
Searching...
No Matches
pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ > Class Template Reference

Overview

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
class pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >

An AllocatorForTest that is automatically initialized on construction.

Inheritance diagram for pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >:
pw::Allocator pw::Deallocator

Public Types

using BlockType = BlockType_
 
using MetricsType = MetricsType_
 
using AllocatorType = FirstFitAllocator< BlockType >
 
- Public Types inherited from pw::Allocator
using Fragmentation = allocator::Fragmentation
 
- Public Types inherited from pw::Deallocator
using Capabilities = allocator::Capabilities
 
using Capability = allocator::Capability
 
using Layout = allocator::Layout
 

Public Member Functions

BlockType::Range blocks () const
 
BlockType::Range blocks ()
 
const metric::Group & metric_group () const
 
metric::Group & metric_group ()
 
const MetricsType & metrics () const
 
size_t allocate_size () const
 
void * deallocate_ptr () const
 
size_t deallocate_size () const
 
void * resize_ptr () const
 
size_t resize_old_size () const
 
size_t resize_new_size () const
 
void ResetParameters ()
 Resets the recorded parameters to an initial state.
 
void Exhaust ()
 Allocates all the memory from this object.
 
void SetMeasureFragmentationEnabled (bool enabled)
 
void SetFragmentation (const Fragmentation &fragmentation)
 
- Public Member Functions inherited from pw::Allocator
void * Allocate (Layout layout)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0, typename... Args>
T * New (Args &&... args)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
ElementType * New ()
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
ElementType * New (size_t count)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
ElementType * New (size_t count, size_t alignment)
 Constructs an alignment-byte aligned array of count objects.
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0, typename... Args>
UniquePtr< T > MakeUnique (Args &&... args)
 
template<typename T , std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique (size_t size)
 
template<typename T , std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique (size_t size, size_t alignment)
 
template<typename T , std::enable_if_t< is_bounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique ()
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0, typename... Args>
SharedPtr< T > MakeShared (Args &&... args)
 
template<typename T , std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared (size_t size)
 
template<typename T , std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared (size_t size, size_t alignment)
 
template<typename T , std::enable_if_t< is_bounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared ()
 
bool Resize (void *ptr, size_t new_size)
 
void * Reallocate (void *ptr, Layout new_layout)
 
size_t GetAllocated () const
 
std::optional< FragmentationMeasureFragmentation () const
 Returns fragmentation information for the allocator's memory region.
 
- Public Member Functions inherited from pw::Deallocator
constexpr const Capabilitiescapabilities () const
 
constexpr bool HasCapability (Capability capability) const
 Returns whether a given capability is enabled for this object.
 
void Deallocate (void *ptr)
 
template<typename ElementType >
void DeleteArray (ElementType *ptr, size_t count)
 
StatusWithSize GetCapacity () const
 
bool IsEqual (const Deallocator &other) const
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0>
void Delete (T *ptr)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
void Delete (ElementType *ptr)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
void Delete (ElementType *ptr, size_t count)
 

Static Public Attributes

static constexpr size_t kMinSize = BlockType::kAlignment
 

Protected Member Functions

TrackingAllocator< MetricsType > & GetTracker ()
 Returns the underlying tracking allocator.
 
std::optional< FragmentationDoMeasureFragmentation () const override
 Returns fragmentation information for the allocator's memory region.
 
- Protected Member Functions inherited from pw::Allocator
constexpr Allocator ()=default
 TODO(b/326509341): Remove when downstream consumers migrate.
 
constexpr Allocator (const Capabilities &capabilities)
 
virtual void * DoAllocate (Layout layout)=0
 
virtual bool DoResize (void *ptr, size_t new_size)
 
virtual void * DoReallocate (void *ptr, Layout new_layout)
 
virtual size_t DoGetAllocated () const
 
virtual std::optional< FragmentationDoMeasureFragmentation () const
 Returns fragmentation information for the allocator's memory region.
 
- Protected Member Functions inherited from pw::Deallocator
constexpr Deallocator ()=default
 TODO(b/326509341): Remove when downstream consumers migrate.
 
constexpr Deallocator (const Capabilities &capabilities)
 
Result< LayoutGetInfo (InfoType info_type, const void *ptr) const
 
Result< LayoutGetRequestedLayout (const void *ptr) const
 
Result< LayoutGetUsableLayout (const void *ptr) const
 
Result< LayoutGetAllocatedLayout (const void *ptr) const
 
bool Recognizes (const void *ptr) const
 
virtual void DoDeallocate (void *ptr)=0
 
virtual Result< LayoutDoGetInfo (InfoType, const void *) const
 

Private Member Functions

void * DoAllocate (Layout layout) override
 
void DoDeallocate (void *ptr) override
 
bool DoResize (void *ptr, size_t new_size) override
 
size_t DoGetAllocated () const override
 
Result< LayoutDoGetInfo (InfoType info_type, const void *ptr) const override
 

Additional Inherited Members

- Protected Types inherited from pw::Deallocator
enum class  InfoType {
  kRequestedLayoutOf , kUsableLayoutOf , kAllocatedLayoutOf , kCapacity ,
  kRecognizes
}
 
- Static Protected Member Functions inherited from pw::Deallocator
static Result< LayoutGetInfo (const Deallocator &deallocator, InfoType info_type, const void *ptr)
 
static Result< LayoutGetRequestedLayout (const Deallocator &deallocator, const void *ptr)
 
static Result< LayoutGetUsableLayout (const Deallocator &deallocator, const void *ptr)
 
static Result< LayoutGetAllocatedLayout (const Deallocator &deallocator, const void *ptr)
 
static bool Recognizes (const Deallocator &deallocator, const void *ptr)
 
- Static Protected Attributes inherited from pw::Deallocator
template<typename T >
static constexpr bool is_bounded_array_v = ::pw::is_bounded_array_v<T>
 
template<typename T >
static constexpr bool is_unbounded_array_v = ::pw::is_unbounded_array_v<T>
 

Member Function Documentation

◆ DoAllocate()

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
void * pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >::DoAllocate ( Layout  layout)
inlineoverrideprivatevirtual

Allocates a block of memory with the specified size and alignment.

Returns nullptr if the allocation cannot be made, or the layout has a size of 0.

Parameters
[in]layoutDescribes the memory to be allocated.

Implements pw::Allocator.

◆ DoDeallocate()

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
void pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >::DoDeallocate ( void *  ptr)
inlineoverrideprivatevirtual

Releases a previously-allocated block of memory.

The given pointer must have been previously provided by this memory resource; otherwise the behavior is undefined.

Parameters
[in]ptrPointer to previously-allocated memory.

Implements pw::Deallocator.

◆ DoGetAllocated()

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
size_t pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >::DoGetAllocated ( ) const
inlineoverrideprivatevirtual

Returns the total bytes that have been allocated by this allocator, or size_t(-1) if this allocator does not track its total allocated bytes.

Reimplemented from pw::Allocator.

◆ DoGetInfo()

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
Result< Layout > pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >::DoGetInfo ( InfoType  info_type,
const void *  ptr 
) const
inlineoverrideprivatevirtual

Returns deallocator-specific information about allocations.

Deallocators may support any number of InfoTypes. See that type for what each supported type returns. For unsupported types, this method returns UNIMPLEMENTED.

Reimplemented from pw::Deallocator.

◆ DoMeasureFragmentation()

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
std::optional< Fragmentation > pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >::DoMeasureFragmentation ( ) const
inlineoverrideprotectedvirtual

Returns fragmentation information for the allocator's memory region.

The default implementation simply returns std::nullopt, indicating that tracking memory fragmentation is not supported.

Reimplemented from pw::Allocator.

◆ DoResize()

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
bool pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >::DoResize ( void *  ptr,
size_t  new_size 
)
inlineoverrideprivatevirtual

Modifies the size of an previously-allocated block of memory without copying any data.

Returns true if its size was changed without copying data to a new allocation; otherwise returns false.

In particular, it always returns true if the old_layout.size() equals new_size, and always returns false if the given pointer is null, the old_layout.size() is 0, or the new_size is 0.

Parameters
[in]ptrPointer to previously-allocated memory.
[in]new_sizeRequested new size for the memory allocation.

Reimplemented from pw::Allocator.

◆ SetFragmentation()

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
void pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >::SetFragmentation ( const Fragmentation fragmentation)
inline

Sets a fake fragmentation struct to be returned by this allocator. This can be used to test that fragmentation info is properly forwarded by forwarding allocators regardless of the details of the underlying allocator.

◆ SetMeasureFragmentationEnabled()

template<size_t kBufferSize, typename BlockType_ = FirstFitBlock<uint32_t>, typename MetricsType_ = internal::AllMetrics>
void pw::allocator::test::AllocatorForTest< kBufferSize, BlockType_, MetricsType_ >::SetMeasureFragmentationEnabled ( bool  enabled)
inline

Sets whether this allocator returns fragmentation information from MeasureFragmentation or std::nullopt.


The documentation for this class was generated from the following file: