Improved testing/profiling code for CACHED_CONTAINER. Switched from wxLogDebug to wxLogTrace. Adjusted CACHED_CONTAINER_TEST levels required for certain tests. Added a test to check used space in the container.
This commit is contained in:
parent
54f3105cfb
commit
5a8adcdf52
|
@ -145,7 +145,7 @@ VERTEX* CACHED_CONTAINER::Allocate( unsigned int aSize )
|
||||||
// The content has to be updated
|
// The content has to be updated
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
|
|
||||||
#if CACHED_CONTAINER_TEST > 1
|
#if CACHED_CONTAINER_TEST > 0
|
||||||
test();
|
test();
|
||||||
#endif
|
#endif
|
||||||
#if CACHED_CONTAINER_TEST > 2
|
#if CACHED_CONTAINER_TEST > 2
|
||||||
|
@ -181,7 +181,7 @@ void CACHED_CONTAINER::Delete( VERTEX_ITEM* aItem )
|
||||||
|
|
||||||
m_items.erase( aItem );
|
m_items.erase( aItem );
|
||||||
|
|
||||||
#if CACHED_CONTAINER_TEST > 1
|
#if CACHED_CONTAINER_TEST > 0
|
||||||
test();
|
test();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -356,10 +356,10 @@ void CACHED_CONTAINER::mergeFreeChunks()
|
||||||
if( m_freeChunks.size() <= 1 ) // There are no chunks that can be merged
|
if( m_freeChunks.size() <= 1 ) // There are no chunks that can be merged
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if CACHED_CONTAINER_TEST > 0
|
#ifdef __WXDEBUG__
|
||||||
prof_counter totalTime;
|
prof_counter totalTime;
|
||||||
prof_start( &totalTime );
|
prof_start( &totalTime );
|
||||||
#endif
|
#endif /* __WXDEBUG__ */
|
||||||
|
|
||||||
// Reversed free chunks map - this one stores chunk size with its offset as the key
|
// Reversed free chunks map - this one stores chunk size with its offset as the key
|
||||||
std::list<CHUNK> freeChunks;
|
std::list<CHUNK> freeChunks;
|
||||||
|
@ -401,12 +401,12 @@ void CACHED_CONTAINER::mergeFreeChunks()
|
||||||
// Add the last one
|
// Add the last one
|
||||||
m_freeChunks.insert( std::make_pair( size, offset ) );
|
m_freeChunks.insert( std::make_pair( size, offset ) );
|
||||||
|
|
||||||
#if CACHED_CONTAINER_TEST > 0
|
#ifdef __WXDEBUG__
|
||||||
prof_end( &totalTime );
|
prof_end( &totalTime );
|
||||||
|
|
||||||
wxLogDebug( wxT( "Merged free chunks / %.1f ms" ), totalTime.msecs() );
|
wxLogDebug( wxT( "Merged free chunks / %.1f ms" ), totalTime.msecs() );
|
||||||
#endif
|
#endif /* __WXDEBUG__ */
|
||||||
#if CACHED_CONTAINER_TEST > 1
|
#if CACHED_CONTAINER_TEST > 0
|
||||||
test();
|
test();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -414,19 +414,17 @@ void CACHED_CONTAINER::mergeFreeChunks()
|
||||||
|
|
||||||
bool CACHED_CONTAINER::defragmentResize( unsigned int aNewSize )
|
bool CACHED_CONTAINER::defragmentResize( unsigned int aNewSize )
|
||||||
{
|
{
|
||||||
#if CACHED_CONTAINER_TEST > 0
|
wxLogTrace( "GAL_CACHED_CONTAINER",
|
||||||
wxLogDebug( wxT( "Resizing container from %d to %d" ), m_currentSize, aNewSize );
|
wxT( "Resizing container from %d to %d" ), m_currentSize, aNewSize );
|
||||||
#endif
|
|
||||||
|
|
||||||
// No shrinking if we cannot fit all the data
|
// No shrinking if we cannot fit all the data
|
||||||
if( aNewSize < m_currentSize && usedSpace() > aNewSize )
|
if( aNewSize < m_currentSize && usedSpace() > aNewSize )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#if CACHED_CONTAINER_TEST > 0
|
#ifdef __WXDEBUG__
|
||||||
wxLogDebug( wxT( "Defragmenting" ) );
|
|
||||||
prof_counter totalTime;
|
prof_counter totalTime;
|
||||||
prof_start( &totalTime );
|
prof_start( &totalTime );
|
||||||
#endif
|
#endif /* __WXDEBUG__ */
|
||||||
|
|
||||||
GLuint newBuffer;
|
GLuint newBuffer;
|
||||||
|
|
||||||
|
@ -442,6 +440,8 @@ bool CACHED_CONTAINER::defragmentResize( unsigned int aNewSize )
|
||||||
if( ( m_freeChunks.size() == 0 )
|
if( ( m_freeChunks.size() == 0 )
|
||||||
|| ( m_freeChunks.size() == 1 && m_freeChunks.begin()->second == usedSpace() ) )
|
|| ( m_freeChunks.size() == 1 && m_freeChunks.begin()->second == usedSpace() ) )
|
||||||
{
|
{
|
||||||
|
assert( aNewSize != m_currentSize );
|
||||||
|
|
||||||
glCopyBufferSubData( GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER,
|
glCopyBufferSubData( GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER,
|
||||||
0, 0, usedSpace() * VertexSize );
|
0, 0, usedSpace() * VertexSize );
|
||||||
}
|
}
|
||||||
|
@ -475,12 +475,13 @@ bool CACHED_CONTAINER::defragmentResize( unsigned int aNewSize )
|
||||||
checkGlError( "switching buffers during defragmentation" );
|
checkGlError( "switching buffers during defragmentation" );
|
||||||
Map();
|
Map();
|
||||||
|
|
||||||
#if CACHED_CONTAINER_TEST > 0
|
#ifdef __WXDEBUG__
|
||||||
prof_end( &totalTime );
|
prof_end( &totalTime );
|
||||||
|
|
||||||
wxLogDebug( wxT( "Defragmented the container storing %d vertices / %.1f ms" ),
|
wxLogTrace( "GAL_CACHED_CONTAINER",
|
||||||
|
wxT( "Defragmented container storing %d vertices / %.1f ms" ),
|
||||||
m_currentSize - m_freeSpace, totalTime.msecs() );
|
m_currentSize - m_freeSpace, totalTime.msecs() );
|
||||||
#endif
|
#endif /* __WXDEBUG__ */
|
||||||
|
|
||||||
m_freeSpace += ( aNewSize - m_currentSize );
|
m_freeSpace += ( aNewSize - m_currentSize );
|
||||||
m_currentSize = aNewSize;
|
m_currentSize = aNewSize;
|
||||||
|
@ -505,6 +506,7 @@ void CACHED_CONTAINER::addFreeChunk( unsigned int aOffset, unsigned int aSize )
|
||||||
|
|
||||||
void CACHED_CONTAINER::showFreeChunks()
|
void CACHED_CONTAINER::showFreeChunks()
|
||||||
{
|
{
|
||||||
|
#ifdef __WXDEBUG__
|
||||||
FREE_CHUNK_MAP::iterator it;
|
FREE_CHUNK_MAP::iterator it;
|
||||||
|
|
||||||
wxLogDebug( wxT( "Free chunks:" ) );
|
wxLogDebug( wxT( "Free chunks:" ) );
|
||||||
|
@ -518,11 +520,13 @@ void CACHED_CONTAINER::showFreeChunks()
|
||||||
wxLogDebug( wxT( "[0x%08x-0x%08x] (size %d)" ),
|
wxLogDebug( wxT( "[0x%08x-0x%08x] (size %d)" ),
|
||||||
offset, offset + size - 1, size );
|
offset, offset + size - 1, size );
|
||||||
}
|
}
|
||||||
|
#endif /* __WXDEBUG__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CACHED_CONTAINER::showUsedChunks()
|
void CACHED_CONTAINER::showUsedChunks()
|
||||||
{
|
{
|
||||||
|
#ifdef __WXDEBUG__
|
||||||
ITEMS::iterator it;
|
ITEMS::iterator it;
|
||||||
|
|
||||||
wxLogDebug( wxT( "Used chunks:" ) );
|
wxLogDebug( wxT( "Used chunks:" ) );
|
||||||
|
@ -537,11 +541,13 @@ void CACHED_CONTAINER::showUsedChunks()
|
||||||
wxLogDebug( wxT( "[0x%08x-0x%08x] @ 0x%08lx (size %d)" ),
|
wxLogDebug( wxT( "[0x%08x-0x%08x] @ 0x%08lx (size %d)" ),
|
||||||
offset, offset + size - 1, (long) item, size );
|
offset, offset + size - 1, (long) item, size );
|
||||||
}
|
}
|
||||||
|
#endif /* __WXDEBUG__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CACHED_CONTAINER::test()
|
void CACHED_CONTAINER::test()
|
||||||
{
|
{
|
||||||
|
#ifdef __WXDEBUG__
|
||||||
// Free space check
|
// Free space check
|
||||||
unsigned int freeSpace = 0;
|
unsigned int freeSpace = 0;
|
||||||
FREE_CHUNK_MAP::iterator itf;
|
FREE_CHUNK_MAP::iterator itf;
|
||||||
|
@ -552,14 +558,20 @@ void CACHED_CONTAINER::test()
|
||||||
assert( freeSpace == m_freeSpace );
|
assert( freeSpace == m_freeSpace );
|
||||||
|
|
||||||
// Used space check
|
// Used space check
|
||||||
/*unsigned int usedSpace = 0;
|
unsigned int usedSpace = 0;
|
||||||
ITEMS::iterator itr;
|
ITEMS::iterator itr;
|
||||||
for( itr = m_items.begin(); itr != m_items.end(); ++itr )
|
for( itr = m_items.begin(); itr != m_items.end(); ++itr )
|
||||||
usedSpace += ( *itr )->GetSize();
|
usedSpace += ( *itr )->GetSize();
|
||||||
usedSpace += m_itemSize; // Add the current chunk size
|
|
||||||
|
|
||||||
assert( ( freeSpace + usedSpace ) == m_currentSize );*/
|
// If we have a chunk assigned, then there must be an item edited
|
||||||
|
assert( m_chunkSize == 0 || m_item );
|
||||||
|
|
||||||
// Overlapping check TBD
|
// Currently reserved chunk is also counted as used
|
||||||
|
usedSpace += m_chunkSize;
|
||||||
|
|
||||||
|
assert( ( m_freeSpace + usedSpace ) == m_currentSize );
|
||||||
|
|
||||||
|
// Overlapping check TODO
|
||||||
|
#endif /* __WXDEBUG__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,6 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
// Debug messages verbosity level
|
|
||||||
// #define CACHED_CONTAINER_TEST 1
|
|
||||||
|
|
||||||
namespace KIGFX
|
namespace KIGFX
|
||||||
{
|
{
|
||||||
class VERTEX_ITEM;
|
class VERTEX_ITEM;
|
||||||
|
|
Loading…
Reference in New Issue