View's m_wasActive is used concurrently.

This commit is contained in:
Bartosz Taudul
2026-02-01 16:55:46 +01:00
parent d1e831f69d
commit aba3ae2869
6 changed files with 19 additions and 15 deletions

View File

@@ -758,7 +758,7 @@ bool View::DrawImpl()
}
const auto& io = ImGui::GetIO();
m_wasActive = false;
m_wasActive.store( false, std::memory_order_release );
assert( m_shortcut == ShortcutAction::None );
if( io.KeyCtrl )
@@ -1254,14 +1254,18 @@ bool View::DrawImpl()
}
}
m_wasActive |= m_callstackBuzzAnim.Update( io.DeltaTime );
m_wasActive |= m_sampleParentBuzzAnim.Update( io.DeltaTime );
m_wasActive |= m_callstackTreeBuzzAnim.Update( io.DeltaTime );
m_wasActive |= m_zoneinfoBuzzAnim.Update( io.DeltaTime );
m_wasActive |= m_findZoneBuzzAnim.Update( io.DeltaTime );
m_wasActive |= m_optionsLockBuzzAnim.Update( io.DeltaTime );
m_wasActive |= m_lockInfoAnim.Update( io.DeltaTime );
m_wasActive |= m_statBuzzAnim.Update( io.DeltaTime );
bool active = m_wasActive.load( std::memory_order_acquire );
active |= m_callstackBuzzAnim.Update( io.DeltaTime );
active |= m_sampleParentBuzzAnim.Update( io.DeltaTime );
active |= m_callstackTreeBuzzAnim.Update( io.DeltaTime );
active |= m_zoneinfoBuzzAnim.Update( io.DeltaTime );
active |= m_findZoneBuzzAnim.Update( io.DeltaTime );
active |= m_optionsLockBuzzAnim.Update( io.DeltaTime );
active |= m_lockInfoAnim.Update( io.DeltaTime );
active |= m_statBuzzAnim.Update( io.DeltaTime );
m_wasActive.store( active, std::memory_order_release );
if( m_firstFrame )
{
@@ -1494,7 +1498,7 @@ void View::SelectThread( uint64_t thread )
bool View::WasActive() const
{
return m_wasActive ||
return m_wasActive.load( std::memory_order_acquire ) ||
m_zoomAnim.active ||
m_notificationTime > 0 ||
!m_playback.pause ||

View File

@@ -658,7 +658,7 @@ private:
std::vector<std::unique_ptr<Annotation>> m_annotations;
UserData m_userData;
bool m_wasActive = false;
alignas(64) std::atomic<bool> m_wasActive { false };
bool m_reconnectRequested = false;
bool m_firstFrame = true;
std::chrono::time_point<std::chrono::high_resolution_clock> m_firstFrameTime;

View File

@@ -1410,7 +1410,7 @@ void View::DrawFindZone()
const auto c = uint32_t( ( sin( s_time * 10 ) * 0.25 + 0.75 ) * 255 );
const auto color = 0xFF000000 | ( c << 16 ) | ( c << 8 ) | c;
DrawLine( draw, ImVec2( dpos.x + zonePos, dpos.y ), ImVec2( dpos.x + zonePos, dpos.y+Height-2 ), color );
m_wasActive = true;
m_wasActive.store( true, std::memory_order_release );
}
}
}

View File

@@ -454,7 +454,7 @@ int View::DrawLocks( const TimelineContext& ctx, const std::vector<std::unique_p
{
const auto t = uint8_t( ( sin( std::chrono::duration_cast<std::chrono::milliseconds>( std::chrono::system_clock::now().time_since_epoch() ).count() * 0.01 ) * 0.5 + 0.5 ) * 255 );
draw->AddRect( wpos + ImVec2( std::max( px0, -10.0 ), offset ), wpos + ImVec2( std::min( px1, double( w + 10 ) ), offset + ty ), 0x00FFFFFF | ( t << 24 ), 0.f, -1, 2.f );
m_wasActive = true;
m_wasActive.store( true, std::memory_order_release );
}
else if( v.condensed == 0 )
{

View File

@@ -676,7 +676,7 @@ void View::DrawInfo()
const auto c = uint32_t( ( sin( s_time * 10 ) * 0.25 + 0.75 ) * 255 );
const auto color = 0xFF000000 | ( c << 16 ) | ( c << 8 ) | c;
DrawLine( draw, ImVec2( dpos.x + framePos, dpos.y ), ImVec2( dpos.x + framePos, dpos.y+Height-2 ), color );
m_wasActive = true;
m_wasActive.store( true, std::memory_order_release );
}
}
}

View File

@@ -130,7 +130,7 @@ void View::DrawThreadMessagesList( const TimelineContext& ctx, const std::vector
if( !isMsgHovered )
{
animOff = -fabs( sin( s_time * 8 ) ) * th;
m_wasActive = true;
m_wasActive.store( true, std::memory_order_release );
}
}