From f589fba2747929b9a17d5b55812731a62b8b4bb5 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Tue, 4 Aug 2020 17:14:58 +0200 Subject: [PATCH] Use Range for annotation extent. --- server/TracyUserData.cpp | 8 +++---- server/TracyView.cpp | 50 ++++++++++++++++++++-------------------- server/TracyViewData.hpp | 3 +-- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/server/TracyUserData.cpp b/server/TracyUserData.cpp index 626a7303..0af93261 100644 --- a/server/TracyUserData.cpp +++ b/server/TracyUserData.cpp @@ -184,8 +184,8 @@ void UserData::LoadAnnotations( std::vector>& data ) fread( buf, 1, tsz, f ); ann->text.assign( buf, tsz ); } - fread( &ann->start, 1, sizeof( ann->start ), f ); - fread( &ann->end, 1, sizeof( ann->end ), f ); + fread( &ann->range.min, 1, sizeof( ann->range.min ), f ); + fread( &ann->range.max, 1, sizeof( ann->range.max ), f ); fread( &ann->color, 1, sizeof( ann->color ), f ); data.emplace_back( std::move( ann ) ); @@ -219,8 +219,8 @@ void UserData::SaveAnnotations( const std::vector>& { fwrite( ann->text.c_str(), 1, sz, f ); } - fwrite( &ann->start, 1, sizeof( ann->start ), f ); - fwrite( &ann->end, 1, sizeof( ann->end ), f ); + fwrite( &ann->range.min, 1, sizeof( ann->range.min ), f ); + fwrite( &ann->range.max, 1, sizeof( ann->range.max ), f ); fwrite( &ann->color, 1, sizeof( ann->color ), f ); } fclose( f ); diff --git a/server/TracyView.cpp b/server/TracyView.cpp index 765d35b1..1180ffb2 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -790,12 +790,12 @@ bool View::DrawImpl() auto ann = std::make_unique(); const auto s = std::min( m_setRangePopup.min, m_setRangePopup.max ); const auto e = std::max( m_setRangePopup.min, m_setRangePopup.max ); - ann->start = s; - ann->end = e; + ann->range.min = s; + ann->range.max = e; ann->color = 0x888888; m_selectedAnnotation = ann.get(); m_annotations.emplace_back( std::move( ann ) ); - pdqsort_branchless( m_annotations.begin(), m_annotations.end(), []( const auto& lhs, const auto& rhs ) { return lhs->start < rhs->start; } ); + pdqsort_branchless( m_annotations.begin(), m_annotations.end(), []( const auto& lhs, const auto& rhs ) { return lhs->range.min < rhs->range.min; } ); } ImGui::EndPopup(); } @@ -3145,13 +3145,13 @@ void View::DrawZones() for( auto& ann : m_annotations ) { - if( ann->start < m_vd.zvEnd && ann->end > m_vd.zvStart ) + if( ann->range.min < m_vd.zvEnd && ann->range.max > m_vd.zvStart ) { uint32_t c0 = ( ann->color & 0xFFFFFF ) | ( m_selectedAnnotation == ann.get() ? 0x44000000 : 0x22000000 ); uint32_t c1 = ( ann->color & 0xFFFFFF ) | ( m_selectedAnnotation == ann.get() ? 0x66000000 : 0x44000000 ); - draw->AddRectFilled( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns, 0 ), linepos + ImVec2( ( ann->end - m_vd.zvStart ) * pxns, lineh ), c0 ); - draw->AddRect( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns, 0 ), linepos + ImVec2( ( ann->end - m_vd.zvStart ) * pxns, lineh ), c1 ); - if( drawMouseLine && ImGui::IsMouseHoveringRect( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns, 0 ), linepos + ImVec2( ( ann->end - m_vd.zvStart ) * pxns, lineh ) ) ) + draw->AddRectFilled( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns, 0 ), linepos + ImVec2( ( ann->range.max - m_vd.zvStart ) * pxns, lineh ), c0 ); + draw->AddRect( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns, 0 ), linepos + ImVec2( ( ann->range.max - m_vd.zvStart ) * pxns, lineh ), c1 ); + if( drawMouseLine && ImGui::IsMouseHoveringRect( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns, 0 ), linepos + ImVec2( ( ann->range.max - m_vd.zvStart ) * pxns, lineh ) ) ) { ImGui::BeginTooltip(); if( ann->text.empty() ) @@ -3163,17 +3163,17 @@ void View::DrawZones() ImGui::TextUnformatted( ann->text.c_str() ); } ImGui::Separator(); - TextFocused( "Annotation begin:", TimeToString( ann->start ) ); - TextFocused( "Annotation end:", TimeToString( ann->end ) ); - TextFocused( "Annotation length:", TimeToString( ann->end - ann->start ) ); + TextFocused( "Annotation begin:", TimeToString( ann->range.min ) ); + TextFocused( "Annotation end:", TimeToString( ann->range.max ) ); + TextFocused( "Annotation length:", TimeToString( ann->range.max - ann->range.min ) ); ImGui::EndTooltip(); } - const auto aw = ( ann->end - ann->start ) * pxns; + const auto aw = ( ann->range.max - ann->range.min ) * pxns; if( aw > th * 4 ) { - draw->AddCircleFilled( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns + th * 2, th * 2 ), th, 0x88AABB22 ); - draw->AddCircle( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns + th * 2, th * 2 ), th, 0xAAAABB22 ); - if( drawMouseLine && IsMouseClicked( 0 ) && ImGui::IsMouseHoveringRect( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns + th, th ), linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns + th * 3, th * 3 ) ) ) + draw->AddCircleFilled( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns + th * 2, th * 2 ), th, 0x88AABB22 ); + draw->AddCircle( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns + th * 2, th * 2 ), th, 0xAAAABB22 ); + if( drawMouseLine && IsMouseClicked( 0 ) && ImGui::IsMouseHoveringRect( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns + th, th ), linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns + th * 3, th * 3 ) ) ) { m_selectedAnnotation = ann.get(); } @@ -3183,12 +3183,12 @@ void View::DrawZones() const auto tw = ImGui::CalcTextSize( ann->text.c_str() ).x; if( aw - th*4 > tw ) { - draw->AddText( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns + th * 4, th * 0.5 ), 0xFFFFFFFF, ann->text.c_str() ); + draw->AddText( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns + th * 4, th * 0.5 ), 0xFFFFFFFF, ann->text.c_str() ); } else { - draw->PushClipRect( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns, 0 ), linepos + ImVec2( ( ann->end - m_vd.zvStart ) * pxns, lineh ), true ); - draw->AddText( linepos + ImVec2( ( ann->start - m_vd.zvStart ) * pxns + th * 4, th * 0.5 ), 0xFFFFFFFF, ann->text.c_str() ); + draw->PushClipRect( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns, 0 ), linepos + ImVec2( ( ann->range.max - m_vd.zvStart ) * pxns, lineh ), true ); + draw->AddText( linepos + ImVec2( ( ann->range.min - m_vd.zvStart ) * pxns + th * 4, th * 0.5 ), 0xFFFFFFFF, ann->text.c_str() ); draw->PopClipRect(); } } @@ -14265,7 +14265,7 @@ void View::DrawSelectedAnnotation() ImGui::Begin( "Annotation", &show, ImGuiWindowFlags_AlwaysAutoResize ); if( ImGui::Button( ICON_FA_MICROSCOPE " Zoom to annotation" ) ) { - ZoomToRange( m_selectedAnnotation->start, m_selectedAnnotation->end ); + ZoomToRange( m_selectedAnnotation->range.min, m_selectedAnnotation->range.max ); } ImGui::SameLine(); if( ImGui::Button( ICON_FA_TRASH_ALT " Remove" ) ) @@ -14298,9 +14298,9 @@ void View::DrawSelectedAnnotation() ImGui::ColorEdit3( "Color", &col.x ); m_selectedAnnotation->color = ImGui::ColorConvertFloat4ToU32( col ); ImGui::Separator(); - TextFocused( "Annotation begin:", TimeToString( m_selectedAnnotation->start ) ); - TextFocused( "Annotation end:", TimeToString( m_selectedAnnotation->end ) ); - TextFocused( "Annotation length:", TimeToString( m_selectedAnnotation->end - m_selectedAnnotation->start ) ); + TextFocused( "Annotation begin:", TimeToString( m_selectedAnnotation->range.min ) ); + TextFocused( "Annotation end:", TimeToString( m_selectedAnnotation->range.max ) ); + TextFocused( "Annotation length:", TimeToString( m_selectedAnnotation->range.max - m_selectedAnnotation->range.min ) ); ImGui::End(); if( !show ) m_selectedAnnotation = nullptr; } @@ -14334,7 +14334,7 @@ void View::DrawAnnotationList() ImGui::SameLine(); if( ImGui::Button( ICON_FA_MICROSCOPE ) ) { - ZoomToRange( ann->start, ann->end ); + ZoomToRange( ann->range.min, ann->range.max ); } ImGui::SameLine(); if( ButtonDisablable( ICON_FA_TRASH_ALT, !ctrl ) ) @@ -14708,11 +14708,11 @@ void View::DrawRangeEntry( Range& range, const char* label, uint32_t color, cons ImGui::SameLine(); if( ImGui::Selectable( v->text.c_str() ) ) { - range.min = v->start; - range.max = v->end; + range.min = v->range.min; + range.max = v->range.max; } ImGui::SameLine(); - ImGui::TextDisabled( "%s - %s (%s)", TimeToStringExact( v->start ), TimeToStringExact( v->end ), TimeToString( v->end - v->start ) ); + ImGui::TextDisabled( "%s - %s (%s)", TimeToStringExact( v->range.min ), TimeToStringExact( v->range.max ), TimeToString( v->range.max - v->range.min ) ); } ImGui::EndPopup(); } diff --git a/server/TracyViewData.hpp b/server/TracyViewData.hpp index 7ae24632..7adff222 100644 --- a/server/TracyViewData.hpp +++ b/server/TracyViewData.hpp @@ -58,8 +58,7 @@ struct ViewData struct Annotation { std::string text; - int64_t start; - int64_t end; + Range range; uint32_t color; };