Migrate CPU data to timeline item system.

This commit is contained in:
Bartosz Taudul 2022-09-04 14:29:32 +02:00
parent 827b390e34
commit ad2fc03125
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3
7 changed files with 430 additions and 396 deletions

View File

@ -138,6 +138,7 @@
<ClCompile Include="..\..\..\server\TracyThreadCompress.cpp" /> <ClCompile Include="..\..\..\server\TracyThreadCompress.cpp" />
<ClCompile Include="..\..\..\server\TracyTimelineController.cpp" /> <ClCompile Include="..\..\..\server\TracyTimelineController.cpp" />
<ClCompile Include="..\..\..\server\TracyTimelineItem.cpp" /> <ClCompile Include="..\..\..\server\TracyTimelineItem.cpp" />
<ClCompile Include="..\..\..\server\TracyTimelineItemCpuData.cpp" />
<ClCompile Include="..\..\..\server\TracyTimelineItemGpu.cpp" /> <ClCompile Include="..\..\..\server\TracyTimelineItemGpu.cpp" />
<ClCompile Include="..\..\..\server\TracyTimelineItemPlot.cpp" /> <ClCompile Include="..\..\..\server\TracyTimelineItemPlot.cpp" />
<ClCompile Include="..\..\..\server\TracyTimelineItemThread.cpp" /> <ClCompile Include="..\..\..\server\TracyTimelineItemThread.cpp" />
@ -279,6 +280,7 @@
<ClInclude Include="..\..\..\server\TracyThreadCompress.hpp" /> <ClInclude Include="..\..\..\server\TracyThreadCompress.hpp" />
<ClInclude Include="..\..\..\server\TracyTimelineController.hpp" /> <ClInclude Include="..\..\..\server\TracyTimelineController.hpp" />
<ClInclude Include="..\..\..\server\TracyTimelineItem.hpp" /> <ClInclude Include="..\..\..\server\TracyTimelineItem.hpp" />
<ClInclude Include="..\..\..\server\TracyTimelineItemCpuData.hpp" />
<ClInclude Include="..\..\..\server\TracyTimelineItemGpu.hpp" /> <ClInclude Include="..\..\..\server\TracyTimelineItemGpu.hpp" />
<ClInclude Include="..\..\..\server\TracyTimelineItemPlot.hpp" /> <ClInclude Include="..\..\..\server\TracyTimelineItemPlot.hpp" />
<ClInclude Include="..\..\..\server\TracyTimelineItemThread.hpp" /> <ClInclude Include="..\..\..\server\TracyTimelineItemThread.hpp" />

View File

@ -372,6 +372,9 @@
<ClCompile Include="..\..\..\server\TracyView_GpuTimeline.cpp"> <ClCompile Include="..\..\..\server\TracyView_GpuTimeline.cpp">
<Filter>server</Filter> <Filter>server</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\server\TracyTimelineItemCpuData.cpp">
<Filter>server</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\..\server\TracyEvent.hpp"> <ClInclude Include="..\..\..\server\TracyEvent.hpp">
@ -752,6 +755,9 @@
<ClInclude Include="..\..\..\server\TracyTimelineItemGpu.hpp"> <ClInclude Include="..\..\..\server\TracyTimelineItemGpu.hpp">
<Filter>server</Filter> <Filter>server</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\server\TracyTimelineItemCpuData.hpp">
<Filter>server</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Natvis Include="DebugVis.natvis" /> <Natvis Include="DebugVis.natvis" />

View File

@ -0,0 +1,46 @@
#include "TracyImGui.hpp"
#include "TracyPrint.hpp"
#include "TracyTimelineItemCpuData.hpp"
#include "TracyUtility.hpp"
#include "TracyView.hpp"
#include "TracyWorker.hpp"
namespace tracy
{
TimelineItemCpuData::TimelineItemCpuData( View& view, Worker& worker, void* )
: TimelineItem( view, worker )
{
}
void TimelineItemCpuData::SetVisible( bool visible )
{
m_view.GetViewData().drawCpuData = visible;
}
bool TimelineItemCpuData::IsVisible() const
{
return m_view.GetViewData().drawCpuData;
}
bool TimelineItemCpuData::IsEmpty() const
{
return m_worker.GetCpuDataCpuCount() == 0;
}
int64_t TimelineItemCpuData::RangeBegin() const
{
return -1;
}
int64_t TimelineItemCpuData::RangeEnd() const
{
return -1;
}
bool TimelineItemCpuData::DrawContents( double pxns, int& offset, const ImVec2& wpos, bool hover, float yMin, float yMax )
{
return m_view.DrawCpuData( pxns, offset, wpos, hover, yMin, yMax );
}
}

View File

@ -0,0 +1,34 @@
#ifndef __TRACYTIMELINEITEMCPUDATA_HPP__
#define __TRACYTIMELINEITEMCPUDATA_HPP__
#include "TracyEvent.hpp"
#include "TracyTimelineItem.hpp"
namespace tracy
{
class TimelineItemCpuData final : public TimelineItem
{
public:
TimelineItemCpuData( View& view, Worker& worker, void* );
void SetVisible( bool visible ) override;
bool IsVisible() const override;
protected:
uint32_t HeaderColor() const override { return 0xFFDD88DD; }
uint32_t HeaderColorInactive() const override { return 0xFF6E446E; }
uint32_t HeaderLineColor() const override { return 0x66DD88DD; }
const char* HeaderLabel() const override { return "CPU data"; }
int64_t RangeBegin() const override;
int64_t RangeEnd() const override;
bool DrawContents( double pxns, int& offset, const ImVec2& wpos, bool hover, float yMin, float yMax ) override;
bool IsEmpty() const override;
};
}
#endif

View File

@ -123,6 +123,7 @@ public:
void DrawThreadMessages( const ThreadData& thread, double pxns, int offset, const ImVec2& wpos, bool hover ); void DrawThreadMessages( const ThreadData& thread, double pxns, int offset, const ImVec2& wpos, bool hover );
void DrawThreadOverlays( const ThreadData& thread, const ImVec2& ul, const ImVec2& dr ); void DrawThreadOverlays( const ThreadData& thread, const ImVec2& ul, const ImVec2& dr );
bool DrawGpu( const GpuCtxData& gpu, double pxns, int& offset, const ImVec2& wpos, bool hover, float yMin, float yMax ); bool DrawGpu( const GpuCtxData& gpu, double pxns, int& offset, const ImVec2& wpos, bool hover, float yMin, float yMax );
bool DrawCpuData( double pxns, int& offset, const ImVec2& wpos, bool hover, float yMin, float yMax );
bool m_showRanges = false; bool m_showRanges = false;
Range m_statRange; Range m_statRange;
@ -222,7 +223,6 @@ private:
int DrawLocks( uint64_t tid, bool hover, double pxns, const ImVec2& wpos, int offset, LockHighlight& highlight, float yMin, float yMax ); int DrawLocks( uint64_t tid, bool hover, double pxns, const ImVec2& wpos, int offset, LockHighlight& highlight, float yMin, float yMax );
void DrawPlotPoint( const ImVec2& wpos, float x, float y, int offset, uint32_t color, bool hover, bool hasPrev, const PlotItem* item, double prev, bool merged, PlotType type, PlotValueFormatting format, float PlotHeight, uint64_t name ); void DrawPlotPoint( const ImVec2& wpos, float x, float y, int offset, uint32_t color, bool hover, bool hasPrev, const PlotItem* item, double prev, bool merged, PlotType type, PlotValueFormatting format, float PlotHeight, uint64_t name );
void DrawPlotPoint( const ImVec2& wpos, float x, float y, int offset, uint32_t color, bool hover, bool hasPrev, double val, double prev, bool merged, PlotValueFormatting format, float PlotHeight ); void DrawPlotPoint( const ImVec2& wpos, float x, float y, int offset, uint32_t color, bool hover, bool hasPrev, double val, double prev, bool merged, PlotValueFormatting format, float PlotHeight );
int DrawCpuData( int offset, double pxns, const ImVec2& wpos, bool hover, float yMin, float yMax );
void DrawOptions(); void DrawOptions();
void DrawMessages(); void DrawMessages();
void DrawMessageLine( const MessageData& msg, bool hasCallstack, int& idx ); void DrawMessageLine( const MessageData& msg, bool hasCallstack, int& idx );

View File

@ -11,11 +11,11 @@ namespace tracy
constexpr float MinVisSize = 3; constexpr float MinVisSize = 3;
int View::DrawCpuData( int offset, double pxns, const ImVec2& wpos, bool hover, float yMin, float yMax ) bool View::DrawCpuData( double pxns, int& offset, const ImVec2& wpos, bool hover, float yMin, float yMax )
{ {
auto cpuData = m_worker.GetCpuData(); auto cpuData = m_worker.GetCpuData();
const auto cpuCnt = m_worker.GetCpuDataCpuCount(); const auto cpuCnt = m_worker.GetCpuDataCpuCount();
if( cpuCnt == 0 ) return offset; assert( cpuCnt != 0 );
const auto w = ImGui::GetContentRegionAvail().x - 1; const auto w = ImGui::GetContentRegionAvail().x - 1;
const auto ty = ImGui::GetTextLineHeight(); const auto ty = ImGui::GetTextLineHeight();
@ -27,45 +27,6 @@ int View::DrawCpuData( int offset, double pxns, const ImVec2& wpos, bool hover,
const auto th = ( ty - to ) * sqrt( 3 ) * 0.5; const auto th = ( ty - to ) * sqrt( 3 ) * 0.5;
const auto dpos = wpos + ImVec2( 0.5f, 0.5f ); const auto dpos = wpos + ImVec2( 0.5f, 0.5f );
static int cpuDataVisStub;
auto& vis = m_tc.Vis( &cpuDataVisStub );
bool& showFull = vis.showFull;
ImGui::PushID( &vis );
const auto yPos = m_tc.AdjustThreadPosition( vis, wpos.y, offset );
const auto oldOffset = offset;
ImGui::PushClipRect( wpos, wpos + ImVec2( w, offset + vis.height ), true );
if( yPos + ty >= yMin && yPos <= yMax )
{
if( showFull )
{
draw->AddTriangleFilled( wpos + ImVec2( to/2, offset + to/2 ), wpos + ImVec2( ty - to/2, offset + to/2 ), wpos + ImVec2( ty * 0.5, offset + to/2 + th ), 0xFFDD88DD );
}
else
{
draw->AddTriangle( wpos + ImVec2( to/2, offset + to/2 ), wpos + ImVec2( to/2, offset + ty - to/2 ), wpos + ImVec2( to/2 + th, offset + ty * 0.5 ), 0xFF6E446E, 2.0f );
}
float txtx = ImGui::CalcTextSize( "CPU data" ).x;
DrawTextContrast( draw, wpos + ImVec2( ty, offset ), showFull ? 0xFFDD88DD : 0xFF6E446E, "CPU data" );
DrawLine( draw, dpos + ImVec2( 0, offset + ty - 1 ), dpos + ImVec2( w, offset + ty - 1 ), 0x66DD88DD );
if( hover && ImGui::IsMouseHoveringRect( wpos + ImVec2( 0, offset ), wpos + ImVec2( ty + txtx, offset + ty ) ) )
{
if( IsMouseClicked( 0 ) )
{
showFull = !showFull;
}
if( IsMouseClicked( 1 ) )
{
ImGui::OpenPopup( "menuPopup" );
}
}
}
offset += ostep;
if( showFull )
{
#ifdef TRACY_NO_STATISTICS #ifdef TRACY_NO_STATISTICS
if( m_vd.drawCpuUsageGraph ) if( m_vd.drawCpuUsageGraph )
#else #else
@ -452,24 +413,7 @@ int View::DrawCpuData( int offset, double pxns, const ImVec2& wpos, bool hover,
} }
ImGui::PopFont(); ImGui::PopFont();
} return true;
if( ImGui::BeginPopup( "menuPopup" ) )
{
if( ImGui::MenuItem( ICON_FA_EYE_SLASH " Hide" ) )
{
m_vd.drawCpuData = false;
ImGui::CloseCurrentPopup();
}
ImGui::EndPopup();
}
offset += ostep * 0.2f;
m_tc.AdjustThreadHeight( vis, oldOffset, offset );
ImGui::PopClipRect();
ImGui::PopID();
return offset;
} }
void View::DrawCpuDataWindow() void View::DrawCpuDataWindow()

View File

@ -4,6 +4,7 @@
#include "TracyMouse.hpp" #include "TracyMouse.hpp"
#include "TracyPrint.hpp" #include "TracyPrint.hpp"
#include "TracySourceView.hpp" #include "TracySourceView.hpp"
#include "TracyTimelineItemCpuData.hpp"
#include "TracyTimelineItemGpu.hpp" #include "TracyTimelineItemGpu.hpp"
#include "TracyTimelineItemPlot.hpp" #include "TracyTimelineItemPlot.hpp"
#include "TracyTimelineItemThread.hpp" #include "TracyTimelineItemThread.hpp"
@ -349,7 +350,8 @@ void View::DrawTimeline()
} }
if( m_vd.drawCpuData && m_worker.HasContextSwitches() ) if( m_vd.drawCpuData && m_worker.HasContextSwitches() )
{ {
offset = DrawCpuData( offset, pxns, wpos, hover, yMin, yMax ); static char uptr;
m_tc.AddItem<TimelineItemCpuData>( &uptr );
} }
if( m_vd.drawZones ) if( m_vd.drawZones )
{ {