mirror of
https://github.com/wolfpld/tracy.git
synced 2025-03-20 07:40:02 +08: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;
|
auto td = tit->second;
|
||||||
assert( !td->zoneIdStack.empty() );
|
assert( !td->zoneIdStack.empty() );
|
||||||
auto zoneId = td->zoneIdStack.back_and_pop();
|
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;
|
td->nextZoneId = 0;
|
||||||
|
|
||||||
auto& stack = td->stack;
|
auto& stack = td->stack;
|
||||||
@ -2320,6 +2324,13 @@ bool Worker::ProcessZoneEnd( const QueueZoneEnd& ev )
|
|||||||
return true;
|
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 )
|
void Worker::ProcessZoneValidation( const QueueZoneValidation& ev )
|
||||||
{
|
{
|
||||||
auto td = NoticeThread( ev.thread );
|
auto td = NoticeThread( ev.thread );
|
||||||
|
|||||||
@ -170,7 +170,19 @@ private:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct FailureData
|
||||||
|
{
|
||||||
|
uint64_t thread;
|
||||||
|
int32_t srcloc;
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum class Failure
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
ZoneStack
|
||||||
|
};
|
||||||
|
|
||||||
Worker( const char* addr );
|
Worker( const char* addr );
|
||||||
Worker( FileRead& f, EventType::Type eventMask = EventType::All );
|
Worker( FileRead& f, EventType::Type eventMask = EventType::All );
|
||||||
~Worker();
|
~Worker();
|
||||||
@ -269,6 +281,10 @@ public:
|
|||||||
static const LoadProgress& GetLoadProgress() { return s_loadProgress; }
|
static const LoadProgress& GetLoadProgress() { return s_loadProgress; }
|
||||||
int64_t GetLoadTime() const { return m_loadTime; }
|
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:
|
private:
|
||||||
void Exec();
|
void Exec();
|
||||||
void ServerQuery( uint8_t type, uint64_t data );
|
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 ProcessZoneBeginImpl( ZoneEvent* zone, const QueueZoneBegin& ev );
|
||||||
tracy_force_inline void ProcessGpuZoneBeginImpl( GpuEvent* zone, const QueueGpuZoneBegin& 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 );
|
tracy_force_inline void CheckSourceLocation( uint64_t ptr );
|
||||||
void NewSourceLocation( uint64_t ptr );
|
void NewSourceLocation( uint64_t ptr );
|
||||||
tracy_force_inline uint32_t ShrinkSourceLocation( uint64_t srcloc );
|
tracy_force_inline uint32_t ShrinkSourceLocation( uint64_t srcloc );
|
||||||
@ -423,6 +441,9 @@ private:
|
|||||||
|
|
||||||
static LoadProgress s_loadProgress;
|
static LoadProgress s_loadProgress;
|
||||||
int64_t m_loadTime;
|
int64_t m_loadTime;
|
||||||
|
|
||||||
|
Failure m_failure = Failure::None;
|
||||||
|
FailureData m_failureData;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user