1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-30 04:43:53 +00:00

Preserve frame graph position and scale.

This commit is contained in:
Bartosz Taudul 2019-08-28 19:52:36 +02:00
parent 17d4a82ca5
commit 28a20e631e
4 changed files with 22 additions and 19 deletions

View File

@ -70,6 +70,8 @@ void UserData::LoadState( ViewData& data )
fread( &data.zvEnd, 1, sizeof( data.zvEnd ), f ); fread( &data.zvEnd, 1, sizeof( data.zvEnd ), f );
fread( &data.zvHeight, 1, sizeof( data.zvHeight ), f ); fread( &data.zvHeight, 1, sizeof( data.zvHeight ), f );
fread( &data.zvScroll, 1, sizeof( data.zvScroll ), f ); fread( &data.zvScroll, 1, sizeof( data.zvScroll ), f );
fread( &data.frameScale, 1, sizeof( data.frameScale ), f );
fread( &data.frameStart, 1, sizeof( data.frameStart ), f );
} }
fclose( f ); fclose( f );
} }
@ -86,6 +88,8 @@ void UserData::SaveState( const ViewData& data )
fwrite( &data.zvEnd, 1, sizeof( data.zvEnd ), f ); fwrite( &data.zvEnd, 1, sizeof( data.zvEnd ), f );
fwrite( &data.zvHeight, 1, sizeof( data.zvHeight ), f ); fwrite( &data.zvHeight, 1, sizeof( data.zvHeight ), f );
fwrite( &data.zvScroll, 1, sizeof( data.zvScroll ), f ); fwrite( &data.zvScroll, 1, sizeof( data.zvScroll ), f );
fwrite( &data.frameScale, 1, sizeof( data.frameScale ), f );
fwrite( &data.frameStart, 1, sizeof( data.frameStart ), f );
fclose( f ); fclose( f );
} }

View File

@ -967,26 +967,26 @@ void View::DrawFrames()
draw->AddRectFilled( wpos, wpos + ImVec2( w, Height ), 0x33FFFFFF ); draw->AddRectFilled( wpos, wpos + ImVec2( w, Height ), 0x33FFFFFF );
const auto wheel = io.MouseWheel; const auto wheel = io.MouseWheel;
const auto prevScale = m_frameScale; const auto prevScale = m_vd.frameScale;
if( hover ) if( hover )
{ {
if( wheel > 0 ) if( wheel > 0 )
{ {
if( m_frameScale >= 0 ) m_frameScale--; if( m_vd.frameScale >= 0 ) m_vd.frameScale--;
} }
else if( wheel < 0 ) else if( wheel < 0 )
{ {
if( m_frameScale < 10 ) m_frameScale++; if( m_vd.frameScale < 10 ) m_vd.frameScale++;
} }
} }
const int fwidth = GetFrameWidth( m_frameScale ); const int fwidth = GetFrameWidth( m_vd.frameScale );
const int group = GetFrameGroup( m_frameScale ); const int group = GetFrameGroup( m_vd.frameScale );
const int total = m_worker.GetFrameCount( *m_frames ); const int total = m_worker.GetFrameCount( *m_frames );
const int onScreen = ( w - 2 ) / fwidth; const int onScreen = ( w - 2 ) / fwidth;
if( !m_pause ) if( !m_pause )
{ {
m_frameStart = ( total < onScreen * group ) ? 0 : total - onScreen * group; m_vd.frameStart = ( total < onScreen * group ) ? 0 : total - onScreen * group;
SetViewToLastFrames(); SetViewToLastFrames();
} }
@ -999,7 +999,7 @@ void View::DrawFrames()
if( abs( delta ) >= fwidth ) if( abs( delta ) >= fwidth )
{ {
const auto d = (int)delta / fwidth; const auto d = (int)delta / fwidth;
m_frameStart = std::max( 0, m_frameStart - d * group ); m_vd.frameStart = std::max( 0, m_vd.frameStart - d * group );
io.MouseClickedPos[1].x = io.MousePos.x + d * fwidth - delta; io.MouseClickedPos[1].x = io.MousePos.x + d * fwidth - delta;
} }
} }
@ -1010,7 +1010,7 @@ void View::DrawFrames()
const auto mo = mx - ( wpos.x + 1 ); const auto mo = mx - ( wpos.x + 1 );
const auto off = mo * group / fwidth; const auto off = mo * group / fwidth;
const int sel = m_frameStart + off; const int sel = m_vd.frameStart + off;
if( sel < total ) if( sel < total )
{ {
ImGui::BeginTooltip(); ImGui::BeginTooltip();
@ -1142,22 +1142,22 @@ void View::DrawFrames()
const int pgroup = GetFrameGroup( prevScale ); const int pgroup = GetFrameGroup( prevScale );
const auto oldoff = mo * pgroup / pfwidth; const auto oldoff = mo * pgroup / pfwidth;
m_frameStart = std::min( total, std::max( 0, m_frameStart - int( off - oldoff ) ) ); m_vd.frameStart = std::min( total, std::max( 0, m_vd.frameStart - int( off - oldoff ) ) );
} }
} }
} }
int i = 0, idx = 0; int i = 0, idx = 0;
while( i < onScreen && m_frameStart + idx < total ) while( i < onScreen && m_vd.frameStart + idx < total )
{ {
auto f = m_worker.GetFrameTime( *m_frames, m_frameStart + idx ); auto f = m_worker.GetFrameTime( *m_frames, m_vd.frameStart + idx );
int g; int g;
if( group > 1 ) if( group > 1 )
{ {
g = std::min( group, total - ( m_frameStart + idx ) ); g = std::min( group, total - ( m_vd.frameStart + idx ) );
for( int j=1; j<g; j++ ) for( int j=1; j<g; j++ )
{ {
f = std::max( f, m_worker.GetFrameTime( *m_frames, m_frameStart + idx + j ) ); f = std::max( f, m_worker.GetFrameTime( *m_frames, m_vd.frameStart + idx + j ) );
} }
} }
@ -1176,10 +1176,10 @@ void View::DrawFrames()
} }
const auto zrange = m_worker.GetFrameRange( *m_frames, m_vd.zvStart, m_vd.zvEnd ); const auto zrange = m_worker.GetFrameRange( *m_frames, m_vd.zvStart, m_vd.zvEnd );
if( zrange.second > m_frameStart && zrange.first < m_frameStart + onScreen * group ) if( zrange.second > m_vd.frameStart && zrange.first < m_vd.frameStart + onScreen * group )
{ {
auto x1 = std::min( onScreen * fwidth, ( zrange.second - m_frameStart ) * fwidth / group ); auto x1 = std::min( onScreen * fwidth, ( zrange.second - m_vd.frameStart ) * fwidth / group );
auto x0 = std::max( 0, ( zrange.first - m_frameStart ) * fwidth / group ); auto x0 = std::max( 0, ( zrange.first - m_vd.frameStart ) * fwidth / group );
if( x0 == x1 ) x1 = x0 + 1; if( x0 == x1 ) x1 = x0 + 1;

View File

@ -243,10 +243,7 @@ private:
Worker m_worker; Worker m_worker;
bool m_staticView; bool m_staticView;
int m_frameScale = 0;
bool m_pause; bool m_pause;
int m_frameStart = 0;
ViewData m_vd; ViewData m_vd;

View File

@ -12,6 +12,8 @@ struct ViewData
int64_t zvEnd = 0; int64_t zvEnd = 0;
int32_t zvHeight = 0; int32_t zvHeight = 0;
int32_t zvScroll = 0; int32_t zvScroll = 0;
int32_t frameScale = 0;
int32_t frameStart = 0;
}; };
} }