| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fgas/crt/fgas_memory.h" | 7 #include "xfa/fgas/crt/fgas_memory.h" |
| 8 | 8 |
| 9 #ifndef MEMORY_TOOL_REPLACES_ALLOCATOR | 9 #ifndef MEMORY_TOOL_REPLACES_ALLOCATOR |
| 10 #define MEMORY_TOOL_REPLACES_ALLOCATOR // Temporary, for CF testing. | 10 #define MEMORY_TOOL_REPLACES_ALLOCATOR // Temporary, for CF testing. |
| 11 #endif | 11 #endif |
| 12 | 12 |
| 13 #include <algorithm> | 13 #include <algorithm> |
| 14 | 14 |
| 15 #ifdef MEMORY_TOOL_REPLACES_ALLOCATOR | 15 #ifdef MEMORY_TOOL_REPLACES_ALLOCATOR |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 class CFX_DefStore : public IFX_MemoryAllocator, public CFX_Target { | 19 class CFX_DefStore : public IFX_MemoryAllocator, public CFX_Target { |
| 20 public: | 20 public: |
| 21 CFX_DefStore() {} | 21 CFX_DefStore() {} |
| 22 ~CFX_DefStore() override {} | 22 ~CFX_DefStore() override {} |
| 23 | 23 |
| 24 void* Alloc(size_t size) override { return FX_Alloc(uint8_t, size); } | 24 void* Alloc(size_t size) override { return FX_Alloc(uint8_t, size); } |
| 25 void Free(void* pBlock) override { FX_Free(pBlock); } | 25 void Free(void* pBlock) override { FX_Free(pBlock); } |
| 26 }; | 26 }; |
| 27 | 27 |
| 28 } // namespace | 28 } // namespace |
| 29 | 29 |
| 30 IFX_MemoryAllocator* IFX_MemoryAllocator::Create(FX_ALLOCTYPE eType, | 30 std::unique_ptr<IFX_MemoryAllocator> IFX_MemoryAllocator::Create( |
| 31 size_t chunkSize, | 31 FX_ALLOCTYPE eType, |
| 32 size_t blockSize) { | 32 size_t chunkSize, |
| 33 return new CFX_DefStore(); | 33 size_t blockSize) { |
| 34 return std::unique_ptr<IFX_MemoryAllocator>(new CFX_DefStore()); |
| 34 } | 35 } |
| 35 | 36 |
| 36 #else // MEMORY_TOOL_REPLACES_ALLOCATOR | 37 #else // MEMORY_TOOL_REPLACES_ALLOCATOR |
| 37 | 38 |
| 38 namespace { | 39 namespace { |
| 39 | 40 |
| 40 struct FX_STATICSTORECHUNK { | 41 struct FX_STATICSTORECHUNK { |
| 41 FX_STATICSTORECHUNK* pNextChunk; | 42 FX_STATICSTORECHUNK* pNextChunk; |
| 42 size_t iChunkSize; | 43 size_t iChunkSize; |
| 43 size_t iFreeSize; | 44 size_t iFreeSize; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 | 82 |
| 82 size_t m_iBlockSize; | 83 size_t m_iBlockSize; |
| 83 size_t m_iDefChunkSize; | 84 size_t m_iDefChunkSize; |
| 84 FX_FIXEDSTORECHUNK* m_pChunk; | 85 FX_FIXEDSTORECHUNK* m_pChunk; |
| 85 }; | 86 }; |
| 86 | 87 |
| 87 } // namespace | 88 } // namespace |
| 88 | 89 |
| 89 #define FX_4BYTEALIGN(size) (((size) + 3) & ~3) | 90 #define FX_4BYTEALIGN(size) (((size) + 3) & ~3) |
| 90 | 91 |
| 91 IFX_MemoryAllocator* IFX_MemoryAllocator::Create(FX_ALLOCTYPE eType, | 92 std::unique_ptr<IFX_MemoryAllocator> IFX_MemoryAllocator::Create( |
| 92 size_t chunkSize, | 93 FX_ALLOCTYPE eType, |
| 93 size_t blockSize) { | 94 size_t chunkSize, |
| 95 size_t blockSize) { |
| 94 switch (eType) { | 96 switch (eType) { |
| 95 case FX_ALLOCTYPE_Static: | 97 case FX_ALLOCTYPE_Static: |
| 96 return new CFX_StaticStore(chunkSize); | 98 return std::unique_ptr<IFX_MemoryAllocator>( |
| 99 new CFX_StaticStore(chunkSize)); |
| 97 case FX_ALLOCTYPE_Fixed: | 100 case FX_ALLOCTYPE_Fixed: |
| 98 return new CFX_FixedStore(blockSize, chunkSize); | 101 return std::unique_ptr<IFX_MemoryAllocator>(new CFX_FixedStore(blockSize,
chunkSize); |
| 99 default: | 102 default: |
| 100 ASSERT(0); | 103 ASSERT(0); |
| 101 return nullptr; | 104 return std::unique_ptr<IFX_MemoryAllocator>(); |
| 102 } | 105 } |
| 103 } | 106 } |
| 104 | 107 |
| 105 CFX_StaticStore::CFX_StaticStore(size_t iDefChunkSize) | 108 CFX_StaticStore::CFX_StaticStore(size_t iDefChunkSize) |
| 106 : m_iAllocatedSize(0), | 109 : m_iAllocatedSize(0), |
| 107 m_iDefChunkSize(iDefChunkSize), | 110 m_iDefChunkSize(iDefChunkSize), |
| 108 m_pChunk(nullptr), | 111 m_pChunk(nullptr), |
| 109 m_pLastChunk(nullptr) { | 112 m_pLastChunk(nullptr) { |
| 110 ASSERT(m_iDefChunkSize != 0); | 113 ASSERT(m_iDefChunkSize != 0); |
| 111 } | 114 } |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 } | 247 } |
| 245 } | 248 } |
| 246 size_t CFX_FixedStore::SetDefChunkSize(size_t iChunkSize) { | 249 size_t CFX_FixedStore::SetDefChunkSize(size_t iChunkSize) { |
| 247 ASSERT(iChunkSize != 0); | 250 ASSERT(iChunkSize != 0); |
| 248 size_t v = m_iDefChunkSize; | 251 size_t v = m_iDefChunkSize; |
| 249 m_iDefChunkSize = FX_4BYTEALIGN(iChunkSize); | 252 m_iDefChunkSize = FX_4BYTEALIGN(iChunkSize); |
| 250 return v; | 253 return v; |
| 251 } | 254 } |
| 252 | 255 |
| 253 #endif // MEMORY_TOOL_REPLACES_ALLOCATOR | 256 #endif // MEMORY_TOOL_REPLACES_ALLOCATOR |
| OLD | NEW |