1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Serial queue dequeuing.

This commit is contained in:
Bartosz Taudul 2018-04-01 20:04:35 +02:00
parent 860e0e1809
commit 794f199bdc
2 changed files with 32 additions and 4 deletions

View File

@ -16,6 +16,7 @@
#include <chrono>
#include <limits>
#include <memory>
#include <mutex>
#include <stdlib.h>
#include <string.h>
@ -213,11 +214,12 @@ void Profiler::Worker()
for(;;)
{
const auto status = Dequeue( token );
if( status == ConnectionLost )
const auto serialStatus = DequeueSerial();
if( status == ConnectionLost || serialStatus == ConnectionLost )
{
break;
}
else if( status == QueueEmpty )
else if( status == QueueEmpty && serialStatus == QueueEmpty )
{
if( ShouldExit() ) break;
if( m_bufferOffset != m_bufferStart ) CommitData();
@ -235,11 +237,12 @@ void Profiler::Worker()
for(;;)
{
const auto status = Dequeue( token );
if( status == ConnectionLost )
const auto serialStatus = DequeueSerial();
if( status == ConnectionLost || serialStatus == ConnectionLost )
{
break;
}
else if( status == QueueEmpty )
else if( status == QueueEmpty && serialStatus == QueueEmpty )
{
if( m_bufferOffset != m_bufferStart ) CommitData();
break;
@ -267,6 +270,7 @@ void Profiler::Worker()
}
}
while( Dequeue( token ) == Success ) {}
while( DequeueSerial() == Success ) {}
if( m_bufferOffset != m_bufferStart )
{
if( !CommitData() ) return;
@ -326,6 +330,29 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
return Success;
}
Profiler::DequeueStatus Profiler::DequeueSerial()
{
std::lock_guard<NonRecursiveBenaphore> lock( m_serialLock );
const auto sz = m_serialQueue.size();
if( sz > 0 )
{
auto item = m_serialQueue.data();
auto end = item + sz;
while( item != end )
{
const auto idx = MemRead( &item->hdr.idx );
if( !AppendData( item, QueueDataSize[idx] ) ) return ConnectionLost;
item++;
}
m_serialQueue.clear();
}
else
{
return QueueEmpty;
}
return Success;
}
bool Profiler::AppendData( const void* data, size_t len )
{
auto ret = true;

View File

@ -229,6 +229,7 @@ private:
void Worker();
DequeueStatus Dequeue( moodycamel::ConsumerToken& token );
DequeueStatus DequeueSerial();
bool AppendData( const void* data, size_t len );
bool CommitData();
bool NeedDataSize( size_t len );