tracy/server/TracyTimelineItemThread.hpp
Bartosz Taudul e3ec455aba
Decouple check for existence from building draw lists.
We need to know if samples, context switches and messages are present to be
able to correctly calculate thread height. However, if the thread is not
visible, it is not necessary to provide a list of items to draw.
2023-03-25 16:52:27 +01:00

65 lines
2.0 KiB
C++

#ifndef __TRACYTIMELINEITEMTHREAD_HPP__
#define __TRACYTIMELINEITEMTHREAD_HPP__
#include "TracyEvent.hpp"
#include "TracyTimelineItem.hpp"
#include "TracyTimelineDraw.hpp"
namespace tracy
{
class TimelineItemThread final : public TimelineItem
{
public:
TimelineItemThread( View& view, Worker& worker, const ThreadData* plot );
protected:
uint32_t HeaderColor() const override;
uint32_t HeaderColorInactive() const override;
uint32_t HeaderLineColor() const override;
const char* HeaderLabel() const override;
int64_t RangeBegin() const override;
int64_t RangeEnd() const override;
void HeaderTooltip( const char* label ) const override;
void HeaderExtraContents( const TimelineContext& ctx, int offset, float labelWidth ) override;
bool DrawContents( const TimelineContext& ctx, int& offset ) override;
void DrawOverlay( const ImVec2& ul, const ImVec2& dr ) override;
void DrawFinished() override;
bool IsEmpty() const override;
void Preprocess( const TimelineContext& ctx, TaskDispatch& td, bool visible ) override;
private:
#ifndef TRACY_NO_STATISTICS
int PreprocessGhostLevel( const TimelineContext& ctx, const Vector<GhostZone>& vec, int depth );
#endif
int PreprocessZoneLevel( const TimelineContext& ctx, const Vector<short_ptr<ZoneEvent>>& vec, int depth );
template<typename Adapter, typename V>
int PreprocessZoneLevel( const TimelineContext& ctx, const V& vec, int depth );
void PreprocessContextSwitches( const TimelineContext& ctx, const ContextSwitch& ctxSwitch );
void PreprocessSamples( const TimelineContext& ctx, const Vector<SampleData>& vec );
void PreprocessMessages( const TimelineContext& ctx, const Vector<short_ptr<MessageData>>& vec, uint64_t tid );
const ThreadData* m_thread;
bool m_ghost;
std::vector<SamplesDraw> m_samplesDraw;
std::vector<ContextSwitchDraw> m_ctxDraw;
std::vector<TimelineDraw> m_draw;
std::vector<MessagesDraw> m_msgDraw;
int m_depth;
bool m_hasCtxSwitch;
bool m_hasSamples;
bool m_hasMessages;
};
}
#endif