summaryrefslogtreecommitdiffstats
path: root/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp')
m---------src/Runtime/ogl-runtime0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp298
2 files changed, 0 insertions, 298 deletions
diff --git a/src/Runtime/ogl-runtime b/src/Runtime/ogl-runtime
new file mode 160000
+Subproject 2025912174c4cf99270b7439ec3b021e1d089ae
diff --git a/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp
deleted file mode 100644
index 44545d45..00000000
--- a/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 1993-2009 NVIDIA Corporation.
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt 3D Studio.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "SystemPrefix.h"
-
-//==============================================================================
-// Includes
-//==============================================================================
-#include "Qt3DSMemoryPool.h"
-#include "Qt3DSMemoryHeap.h"
-
-//==============================================================================
-// Namespace
-//==============================================================================
-namespace Q3DStudio {
-
-//==============================================================================
-/**
- * Create a new memory pool.
- *
- */
-CMemoryPool::CMemoryPool()
- : m_ChunkSize(0)
- , m_ChunkCount(0)
- , m_Ceiling(NULL)
- , m_Memory(NULL)
- , m_Top(NULL)
- , m_Hole(NULL)
-{
- m_Description[0] = '\0';
-}
-
-//==============================================================================
-/**
- * Release the memory pool.
- *
- * Nobody better point to this pool because it's illegal after this.
- * We could blast the memory in debug mode to trigger bugs early but most
- * compilers already do this.
- */
-CMemoryPool::~CMemoryPool()
-{
- Release();
-}
-
-//==============================================================================
-/**
- * Configure the memory pool.
- *
- * The pool will allocate inChunkSize * inChunkCount bytes of memory from
- * the heap using Q3DStudio_new, aligned on 4 byte boundaries.
- *
- * @param inName short description of pool - used in tracker
- * @param inChunkSize size in bytes of each memory block, aka chunk
- * @param inChunkCount number of chunks the pool holds
- */
-void CMemoryPool::Initialize(const CHAR *inName, const INT32 inChunkSize, const INT32 inChunkCount)
-{
- Q3DStudio_ASSERT(!m_Memory);
-
- // Round up chunk size to the next even pointer size
- // It needs to be at least pointer size to store the hole linked list
- INT32 theRoundedChunkSize =
- static_cast<INT32>(((inChunkSize + sizeof(void *) - 1) / sizeof(void *)) * sizeof(void *));
-
- // Create pool description
- Q3DStudio_sprintf(m_Description, sizeof(m_Description), "POOL: %s(%dx%d)", inName,
- theRoundedChunkSize, inChunkCount);
-
- // Reserve memory pool
- m_ChunkSize = theRoundedChunkSize;
- m_ChunkCount = inChunkCount;
- m_Memory = reinterpret_cast<INT8 *>(
- Q3DStudio_heap_allocate(m_ChunkSize * m_ChunkCount, m_Description));
- m_Top = m_Memory;
- m_Ceiling = m_Memory + m_ChunkSize * m_ChunkCount;
-}
-
-//==============================================================================
-/**
- * Release all the memory allocated in Initialize - essentially "uninitialize".
- */
-void CMemoryPool::Release()
-{
- Q3DStudio_heap_free(m_Memory, m_ChunkSize * m_ChunkCount);
-
- m_ChunkSize = 0, m_ChunkCount = 0;
- m_Ceiling = NULL;
- m_Memory = NULL;
- m_Top = NULL;
- m_Hole = NULL;
-}
-
-//==============================================================================
-// ALLOCATION AND DEALLOCATION
-//==============================================================================
-
-//==============================================================================
-/**
- * Fetch a new chunk of memory.
- *
- * If there is a pool hole we use that, otherwise feed of the head.
- * Every alloction is tracked in m_Statistics.
- * @return a pointer to inChunkSize bytes of usable memory
- */
-void *CMemoryPool::Allocate()
-{
- if (m_Hole)
- return PopHole();
- else
- return UseTop();
-}
-
-//==============================================================================
-/**
- * Release a chunk of memory and track changes in statistics
- * @param inChunk a pointer to memory to be reused
- */
-void CMemoryPool::Free(void *inChunk)
-{
- Q3DStudio_ASSERT(OwnsChunk(inChunk));
- PushHole(inChunk);
-}
-
-//==============================================================================
-/**
- * Verify that a pointer is owned by a specific pool
- * @param inChunk a pointer to be checked
- * @return BOOL true if the chunk is owned by this pool
- */
-BOOL CMemoryPool::OwnsChunk(const void *inChunk) const
-{
-#ifdef _DEBUG
- // Scan all holes to prevent double releasing memory
- if (!(inChunk >= m_Ceiling || inChunk < m_Memory)) {
- // No freeing anything above the top?
- Q3DStudio_ASSERT(inChunk < m_Top);
-
- // Not freeing any holes?
- void *theHoleChunk = m_Hole;
- while (theHoleChunk) {
- Q3DStudio_ASSERT(inChunk != theHoleChunk);
- theHoleChunk = reinterpret_cast<void *>(*reinterpret_cast<size_t *>(theHoleChunk));
- }
- }
-#endif // DEBUG
-
- return !(inChunk >= m_Ceiling || inChunk < m_Memory);
-}
-
-//==============================================================================
-/**
- * Quick check to see if there are chunks available
- * @return BOOL true if the pool has available chunks
- */
-BOOL CMemoryPool::IsFull() const
-{
- return m_Hole == NULL && GetFreeTops() == 0;
-}
-
-//==============================================================================
-/**
- * Get the total number of free chunks in this pool.
- * @return INT32 is the nunber of free chunks
- */
-INT32 CMemoryPool::GetFreeChunks() const
-{
- return GetFreeTops() + GetFreeHoles();
-}
-
-//==============================================================================
-/**
- * Get the number of holes in this pool.
- * @return INT32 is the nunber of holes
- */
-INT32 CMemoryPool::GetFreeHoles() const
-{
- INT32 theHoleCounter = 0;
- void *theHoleChunk = m_Hole;
-
- // Walk the hole list until there are no more holes
- while (theHoleChunk) {
- theHoleChunk = reinterpret_cast<void *>(*reinterpret_cast<size_t *>(theHoleChunk));
- ++theHoleCounter;
- }
-
- return theHoleCounter;
-}
-
-//==============================================================================
-/**
- * Get the number of chunks left at the top.
- * @return INT32 is the nunber of continous chunks at the top
- */
-INT32 CMemoryPool::GetFreeTops() const
-{
- return static_cast<INT32>((m_Ceiling - m_Top)) / m_ChunkSize;
-}
-
-//==============================================================================
-// IMPLEMENTATION
-//==============================================================================
-
-//==============================================================================
-/**
- * Return a chunch from the top.
- *
- * The top is only used if no pool holes are available.
- * @return a pointer to the chunk at the top
- */
-void *CMemoryPool::UseTop()
-{
- // Out of memory?
- // This is not assert since it may happen during normal runtime.
- if (m_Top >= m_Ceiling)
- return NULL;
-
- void *theChunk = m_Top;
- m_Top += m_ChunkSize;
-
-#if Q3DStudio_MEMORY_POOLTRACKING
- m_Probe.Allocate(m_ChunkSize);
-#endif // Q3DStudio_MEMORY_POOLTRACKING
- return theChunk;
-}
-
-//==============================================================================
-/**
- * Add a new hole to the pool list.
- *
- * The holes are used in a stack-like fashion so the chunk we push in most
- * recently is the first one to be returned next New call.
- * The holes are linked by using the first four bytes to point to the next
- * chunk. We are hijacking them to create a linked list of free chunks.
- * @param inChunk is the just deleted chunk
- */
-void CMemoryPool::PushHole(void *inChunk)
-{
-#if Q3DStudio_MEMORY_POOLTRACKING
- m_Probe.Free(m_ChunkSize);
-#endif // Q3DStudio_MEMORY_POOLTRACKING
-
- // Set the pushed chunk to be the new top hole after we
- // link the content of the new chunk to the last top.
- *reinterpret_cast<size_t *>(inChunk) = reinterpret_cast<size_t>(m_Hole);
- m_Hole = inChunk;
-}
-
-//==============================================================================
-/**
- * Get the topmost hole as our chunk.
- *
- * Return the latest hole and relink the list of holes to the top.
- * @return void* is the most recently deleted chunk
- */
-void *CMemoryPool::PopHole()
-{
- Q3DStudio_ASSERT(m_Hole);
-
- // Return the old hole as our new chunk after we
- // set the hole to the second hole in the list.
- void *theChunk = m_Hole;
- m_Hole = reinterpret_cast<void *>(*reinterpret_cast<size_t *>(m_Hole));
-
-#if Q3DStudio_MEMORY_POOLTRACKING
- m_Probe.Allocate(m_ChunkSize);
-#endif // Q3DStudio_MEMORY_POOLTRACKING
- return theChunk;
-}
-
-} // namespace Q3DStudio