author Andreas Pehrson <pehrsons@gmail.com>
Thu, 05 Nov 2015 15:42:24 +0800
changeset 306659 481d2dace480c02b375a91e902ece00eef223c2b
parent 132643 24997e3446b19b4283278cb4a4763359ca610134
child 338484 c661f2c5cd878c26e25abc0256b4893d8a249b49
permissions -rw-r--r--
Bug 1208371 - Various cleanups in DOMMediaStream/MediaStreamTrack. r?jib

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef PLARENAS_H
#define PLARENAS_H


typedef struct PLArenaPool      PLArenaPool;

** Initialize an arena pool with the given name for debugging and metering,
** with a minimum gross size per arena of size bytes.  The net size per arena
** is smaller than the gross size by a header of four pointers plus any
** necessary padding for alignment.
** Note: choose a gross size that's a power of two to avoid the heap allocator
** rounding the size up.
PR_EXTERN(void) PL_InitArenaPool(
    PLArenaPool *pool, const char *name, PRUint32 size, PRUint32 align);

** Finish using arenas, freeing all memory associated with them.
PR_EXTERN(void) PL_ArenaFinish(void);

** Free the arenas in pool.  The user may continue to allocate from pool
** after calling this function.  There is no need to call PL_InitArenaPool()
** again unless PL_FinishArenaPool(pool) has been called.
PR_EXTERN(void) PL_FreeArenaPool(PLArenaPool *pool);

** Free the arenas in pool and finish using it altogether.
PR_EXTERN(void) PL_FinishArenaPool(PLArenaPool *pool);

** Compact all of the arenas in a pool so that no space is wasted.
** NOT IMPLEMENTED.  Do not use.
PR_EXTERN(void) PL_CompactArenaPool(PLArenaPool *pool);

** Friend functions used by the PL_ARENA_*() macros.
** WARNING: do not call these functions directly. Always use the
** PL_ARENA_*() macros.
PR_EXTERN(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb);

PR_EXTERN(void *) PL_ArenaGrow(
    PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr);

PR_EXTERN(void) PL_ArenaRelease(PLArenaPool *pool, char *mark);

** memset contents of all arenas in pool to pattern
PR_EXTERN(void) PL_ClearArenaPool(PLArenaPool *pool, PRInt32 pattern);

** A function like malloc_size() or malloc_usable_size() that measures the
** size of a heap block.
typedef size_t (*PLMallocSizeFn)(const void *ptr);

** Measure all memory used by a PLArenaPool, excluding the PLArenaPool
** structure.
PR_EXTERN(size_t) PL_SizeOfArenaPoolExcludingPool(
    const PLArenaPool *pool, PLMallocSizeFn mallocSizeOf);


#endif /* PLARENAS_H */