webrender

Struct ChunkPool

Source
pub struct ChunkPool {
    inner: Mutex<ChunkPoolInner>,
}
Expand description

A simple pool for allocating and recycling memory chunks of a fixed size, protected by a mutex.

Chunks in the pool are stored as a linked list using a pointer to the next element at the beginning of the chunk.

Fields§

§inner: Mutex<ChunkPoolInner>

Implementations§

Source§

impl ChunkPool

Source

pub fn new() -> Self

Source

pub fn allocate_chunk(&self, size: usize) -> Result<NonNull<Chunk>, AllocError>

Pop a chunk from the pool or allocate a new one.

If the requested size is not equal to the default chunk size, a new chunk is allocated.

Source

unsafe fn recycle_chunks(&self, chunk: NonNull<Chunk>)

Put the provided list of chunks into the pool.

Chunks with size different from the default chunk size are deallocated immediately.

§Safety

Ownership of the provided chunks is transfered to the pool, nothing else can access them after this function runs.

Source

pub fn purge_chunks(&self, target: u32, count: u32) -> bool

Deallocate chunks until the pool contains at most target items, or count chunks have been deallocated.

Returns true if the target number of chunks in the pool was reached, false if this method stopped before reaching the target.

Purging chunks can be expensive so it is preferable to perform this operation outside of the critical path. Specifying a lower count allows the caller to split the work and spread it over time.

Source

pub fn purge_all_chunks(&self)

Deallocate all of the chunks.

Trait Implementations§

Source§

impl Drop for ChunkPool

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.