mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-30 01:04:36 +00:00
Gracefully store failure states.
This commit is contained in:
parent
4dc339c933
commit
c3246ca3b5
@ -2282,7 +2282,11 @@ bool Worker::ProcessZoneEnd( const QueueZoneEnd& ev )
|
||||
auto td = tit->second;
|
||||
assert( !td->zoneIdStack.empty() );
|
||||
auto zoneId = td->zoneIdStack.back_and_pop();
|
||||
if( zoneId != td->nextZoneId ) return false;
|
||||
if( zoneId != td->nextZoneId )
|
||||
{
|
||||
ZoneStackFailure( ev.thread, td->stack.back() );
|
||||
return false;
|
||||
}
|
||||
td->nextZoneId = 0;
|
||||
|
||||
auto& stack = td->stack;
|
||||
@ -2320,6 +2324,13 @@ bool Worker::ProcessZoneEnd( const QueueZoneEnd& ev )
|
||||
return true;
|
||||
}
|
||||
|
||||
void Worker::ZoneStackFailure( uint64_t thread, const ZoneEvent* ev )
|
||||
{
|
||||
m_failure = Failure::ZoneStack;
|
||||
m_failureData.thread = thread;
|
||||
m_failureData.srcloc = ev->srcloc;
|
||||
}
|
||||
|
||||
void Worker::ProcessZoneValidation( const QueueZoneValidation& ev )
|
||||
{
|
||||
auto td = NoticeThread( ev.thread );
|
||||
|
@ -170,7 +170,19 @@ private:
|
||||
};
|
||||
};
|
||||
|
||||
struct FailureData
|
||||
{
|
||||
uint64_t thread;
|
||||
int32_t srcloc;
|
||||
};
|
||||
|
||||
public:
|
||||
enum class Failure
|
||||
{
|
||||
None,
|
||||
ZoneStack
|
||||
};
|
||||
|
||||
Worker( const char* addr );
|
||||
Worker( FileRead& f, EventType::Type eventMask = EventType::All );
|
||||
~Worker();
|
||||
@ -269,6 +281,10 @@ public:
|
||||
static const LoadProgress& GetLoadProgress() { return s_loadProgress; }
|
||||
int64_t GetLoadTime() const { return m_loadTime; }
|
||||
|
||||
void ClearFailure() { m_failure = Failure::None; }
|
||||
Failure GetFailureType() const { return m_failure; }
|
||||
const FailureData& GetFailureData() const { return m_failureData; }
|
||||
|
||||
private:
|
||||
void Exec();
|
||||
void ServerQuery( uint8_t type, uint64_t data );
|
||||
@ -314,6 +330,8 @@ private:
|
||||
tracy_force_inline void ProcessZoneBeginImpl( ZoneEvent* zone, const QueueZoneBegin& ev );
|
||||
tracy_force_inline void ProcessGpuZoneBeginImpl( GpuEvent* zone, const QueueGpuZoneBegin& ev );
|
||||
|
||||
void ZoneStackFailure( uint64_t thread, const ZoneEvent* ev );
|
||||
|
||||
tracy_force_inline void CheckSourceLocation( uint64_t ptr );
|
||||
void NewSourceLocation( uint64_t ptr );
|
||||
tracy_force_inline uint32_t ShrinkSourceLocation( uint64_t srcloc );
|
||||
@ -423,6 +441,9 @@ private:
|
||||
|
||||
static LoadProgress s_loadProgress;
|
||||
int64_t m_loadTime;
|
||||
|
||||
Failure m_failure = Failure::None;
|
||||
FailureData m_failureData;
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user