diff options
Diffstat (limited to 'core/src/fxcrt/mem_int.h')
-rw-r--r-- | core/src/fxcrt/mem_int.h | 232 |
1 files changed, 0 insertions, 232 deletions
diff --git a/core/src/fxcrt/mem_int.h b/core/src/fxcrt/mem_int.h deleted file mode 100644 index 3e3d25a7ec..0000000000 --- a/core/src/fxcrt/mem_int.h +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef _FXM_MEM_INT_H_ -#define _FXM_MEM_INT_H_ -struct FX_DefAllocator { - IFX_Allocator m_Allocator; - struct CFX_MemoryMgr* m_pFoxitMgr; -}; -struct CFX_MemoryMgr { -public: - FXMEM_SystemMgr* m_pSystemMgr; - FX_DefAllocator m_DefAllocator; - FX_LPVOID m_pExternalMemory; - FX_BOOL m_bReleaseMgr; - void Init(FXMEM_SystemMgr* pSystemMgr); - void* Alloc(size_t size, int flags); - void* AllocDebug(size_t size, int flags, FX_LPCSTR file, int line); - void* Realloc(void* p, size_t size, int flags); - void* ReallocDebug(void* p, size_t size, int flags, FX_LPCSTR file, int line); - void Free(void* p, int flags); - void PurgeMgr(); -}; -extern CFX_MemoryMgr* g_pDefFoxitMgr; -#define FIXEDMEM_PAGE_EXTRASPACE sizeof(size_t) -#define FIXEDMEM_BLOCKNUM(bs) (8 * (FX_FIXEDMEM_PAGESIZE - FIXEDMEM_PAGE_EXTRASPACE) / (8 * bs + 1)) -#define FIXEDMEM_8BYTES_BLOCKNUM FIXEDMEM_BLOCKNUM(8) -#define FIXEDMEM_16BYTES_BLOCKNUM FIXEDMEM_BLOCKNUM(16) -#define FIXEDMEM_32BYTES_BLOCKNUM FIXEDMEM_BLOCKNUM(32) -extern const FX_BYTE ZeroLeadPos[256]; -extern const FX_BYTE OneLeadPos[256]; -template <size_t blockNum, size_t blockSize> -class CFXMEM_FixedPage -{ -public: - void Initialize() - { - m_nAvailCount = blockNum; - FXSYS_memset32(m_BusyMap, 0, (blockNum + 7) / 8); - } - FX_BOOL HasFreeBlock() const - { - return (FX_BOOL)m_nAvailCount; - } - FX_LPVOID Alloc(size_t size) - { - FXSYS_assert(m_nAvailCount); - FX_LPDWORD pFind = (FX_LPDWORD)m_BusyMap; - size_t i = 0; - while (i < (blockNum + 7) / 8 / 4 && pFind[i] == 0xFFFFFFFF) { - i ++; - } - i *= 4; - while (m_BusyMap[i] == 0xFF) { - i ++; - } - size_t pos = ZeroLeadPos[m_BusyMap[i]]; - m_BusyMap[i] |= 1 << (7 - pos); - m_nAvailCount --; - return (FX_LPBYTE)(this + 1) + (i * 8 + pos) * blockSize; - } - void Free(FX_LPVOID p) - { - FXSYS_assert(p > (FX_LPVOID)this && p < (FX_LPVOID)((FX_LPBYTE)this + FX_FIXEDMEM_PAGESIZE)); - size_t pos = ((FX_LPBYTE)p - (FX_LPBYTE)(this + 1)) / blockSize; - m_BusyMap[pos / 8] &= ~(1 << (7 - (pos % 8))); - m_nAvailCount ++; - } - volatile size_t m_nAvailCount; - FX_BYTE m_BusyMap[(blockNum + 7) / 8]; -}; -typedef CFXMEM_FixedPage<FIXEDMEM_8BYTES_BLOCKNUM, 8> CFXMEM_8BytesPage; -typedef CFXMEM_FixedPage<FIXEDMEM_16BYTES_BLOCKNUM, 16> CFXMEM_16BytesPage; -typedef CFXMEM_FixedPage<FIXEDMEM_32BYTES_BLOCKNUM, 32> CFXMEM_32BytesPage; -template <size_t blockNum, size_t blockSize> -class CFXMEM_FixedPages -{ -public: - typedef CFXMEM_FixedPage<blockNum, blockSize> T; - FX_LPBYTE m_pStartPage; - FX_LPBYTE m_pLimitPos; - FX_LPBYTE m_pCurPage; - volatile size_t m_nAvailBlocks; - void Initialize(FX_LPBYTE pStart, size_t pages) - { - m_pStartPage = m_pCurPage = pStart; - m_nAvailBlocks = pages * blockNum; - for (size_t n = 0; n < pages; n ++) { - ((T*)pStart)->Initialize(); - pStart += FX_FIXEDMEM_PAGESIZE; - } - m_pLimitPos = pStart; - } - FX_BOOL IsEmpty() const - { - return m_nAvailBlocks == (m_pLimitPos - m_pStartPage) / FX_FIXEDMEM_PAGESIZE * blockNum; - } - FX_BOOL HasFreeBlock() const - { - return (FX_BOOL)m_nAvailBlocks; - } - FX_LPVOID Alloc(size_t size) - { - FXSYS_assert(m_nAvailBlocks); - do { - if (((T*)m_pCurPage)->HasFreeBlock()) { - m_nAvailBlocks --; - return ((T*)m_pCurPage)->Alloc(size); - } - m_pCurPage += FX_FIXEDMEM_PAGESIZE; - if (m_pCurPage == m_pLimitPos) { - m_pCurPage = m_pStartPage; - } - } while (TRUE); - return NULL; - } - void Free(FX_LPVOID p) - { - FXSYS_assert(p > (FX_LPVOID)m_pStartPage && p < (FX_LPVOID)m_pLimitPos); - ((T*)(m_pStartPage + ((FX_LPBYTE)p - m_pStartPage) / FX_FIXEDMEM_PAGESIZE * FX_FIXEDMEM_PAGESIZE))->Free(p); - m_nAvailBlocks ++; - } -}; -typedef CFXMEM_FixedPages<FIXEDMEM_8BYTES_BLOCKNUM, 8> CFXMEM_8BytesPages; -typedef CFXMEM_FixedPages<FIXEDMEM_16BYTES_BLOCKNUM, 16> CFXMEM_16BytesPages; -typedef CFXMEM_FixedPages<FIXEDMEM_32BYTES_BLOCKNUM, 32> CFXMEM_32BytesPages; -class CFXMEM_Block -{ -public: - size_t m_nBlockSize; - CFXMEM_Block* m_pNextBlock; -}; -class CFXMEM_Page -{ -public: - size_t m_nAvailSize; - CFXMEM_Block* m_pLimitPos; - CFXMEM_Block m_AvailHead; - void Initialize(size_t size); - FX_BOOL IsEmpty() const - { - return m_AvailHead.m_pNextBlock && m_AvailHead.m_nBlockSize == m_AvailHead.m_pNextBlock->m_nBlockSize; - } - FX_LPVOID Alloc(size_t size); - FX_LPVOID Realloc(FX_LPVOID p, size_t oldSize, size_t newSize); - void Free(FX_LPVOID p); -protected: - FX_LPVOID Alloc(CFXMEM_Block* pPrevBlock, CFXMEM_Block* pNextBlock, size_t size, size_t oldsize); -}; -class CFXMEM_Pages -{ -public: - CFXMEM_Page* m_pStartPage; - CFXMEM_Page* m_pLimitPos; - CFXMEM_Page* m_pCurPage; - size_t m_nPageSize; - void Initialize(FX_LPBYTE pStart, size_t pageSize, size_t pages); - FX_BOOL IsEmpty() const; - FX_LPVOID Alloc(size_t size); - FX_LPVOID Realloc(FX_LPVOID p, size_t oldSize, size_t newSize); - void Free(FX_LPVOID p); -}; -class CFXMEM_Pool -{ -public: - CFXMEM_Pool* m_pPrevPool; - CFXMEM_Pool* m_pNextPool; - CFXMEM_8BytesPages m_8BytesPages; - CFXMEM_16BytesPages m_16BytesPages; - CFXMEM_32BytesPages m_32BytesPages; - CFXMEM_Pages m_MidPages; - FX_BOOL m_bAlone; - FX_DWORD m_dwReserved[3]; - FX_LPVOID m_pLimitPos; - CFXMEM_Page* m_pLargePage; - void Initialize(const FX_MEMCONFIG* pMemConfig, size_t size, size_t pageNum8Bytes, size_t pageNum16Bytes, size_t pageNum32Bytes, size_t pageNumMid); - FX_BOOL IsEmpty() const; - size_t GetSize(FX_LPVOID p) const; - FX_LPVOID Realloc(FX_LPVOID p, size_t oldSize, size_t newSize); - void Free(FX_LPVOID p); -}; -class CFXMEM_FixedMgr -{ -public: - void Initialize(size_t size); - FX_LPVOID Alloc(size_t size); - FX_LPVOID Realloc(FX_LPVOID p, size_t newSize); - void Free(FX_LPVOID p); - void FreeAll(); - void Purge(); - CFXMEM_Pool* GetFirstPool() - { - return &m_FirstPool; - } - size_t GetSize(FX_LPVOID p) const; - FXMEM_SystemMgr m_SystemMgr; - FXMEM_SystemMgr2* m_pExtender; - FX_LPVOID m_pReserved; - FX_MEMCONFIG m_MemConfig; -protected: - FX_LPVOID Alloc16(CFXMEM_Pool **pp32Pool = NULL, size_t size = 0); - FX_LPVOID Alloc32(size_t size); - FX_LPVOID AllocSmall(size_t size); - FX_LPVOID AllocMid(size_t size); - FX_LPVOID AllocLarge(size_t size); - FX_LPVOID ReallocSmall(CFXMEM_Pool* pPool, FX_LPVOID p, size_t oldSize, size_t newSize); - void FreePool(CFXMEM_Pool* pPool); - CFXMEM_Pool m_FirstPool; -}; -#define FIXEDMEM_PROXYSIZE_0 (1024 * 1024 * 8) -#define FIXEDMEM_PROXYSIZE_1 (1024 * 1024 * 16) -#define FIXEDMEM_PROXYSIZE_2 (1024 * 1024 * 32) -#define FIXEDMEM_PROXYSIZE_3 (1024 * 1024 * 64) -#define FIXEDMEM_PROXYSIZE_4 (1024 * 1024 * 128) -#define FIXEDMEM_PROXYSIZE_5 (1024 * 1024 * 256) -const FX_MEMCONFIG* FixedMgr_GetConfig(size_t nSize); -class CFixedMgr_Proxy -{ -public: - FXMEM_FoxitMgr* Initialize(FX_LPVOID pBuffer, size_t nSize, FX_BOOL bExtensible); - static FX_BOOL Common_More(FXMEM_SystemMgr2* pMgr, size_t alloc_size, void** new_memory, size_t* new_size); - static void Common_Free(FXMEM_SystemMgr2* pMgr, void* memory); - FXMEM_SystemMgr2 m_SystemMgr; - CFXMEM_Page* m_pFixedPage; - FX_LPVOID m_pBuffer; - size_t m_nSize; - FX_BOOL m_bExtensible; -}; -#endif |