Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Taudul <wolf@nereid.pl>2022-07-26 00:24:59 +0300
committerBartosz Taudul <wolf@nereid.pl>2022-07-28 01:24:46 +0300
commit002eb6ae2da980d397f5ace174f3d404f4ccff81 (patch)
tree362f4184b01ab762c8a4ffe728d6ca8dddd2a8db /profiler
parenta35634078300e4a0cbbd8d7f4c2bbc0845573eff (diff)
Extract filtering connections functionality.
Diffstat (limited to 'profiler')
-rw-r--r--profiler/build/win32/Tracy.vcxproj2
-rw-r--r--profiler/build/win32/Tracy.vcxproj.filters6
-rw-r--r--profiler/src/Filters.cpp87
-rw-r--r--profiler/src/Filters.hpp28
-rw-r--r--profiler/src/main.cpp71
5 files changed, 135 insertions, 59 deletions
diff --git a/profiler/build/win32/Tracy.vcxproj b/profiler/build/win32/Tracy.vcxproj
index 7dea1ca6..cbfd688f 100644
--- a/profiler/build/win32/Tracy.vcxproj
+++ b/profiler/build/win32/Tracy.vcxproj
@@ -196,6 +196,7 @@
<ClCompile Include="..\..\..\zstd\dictBuilder\fastcover.c" />
<ClCompile Include="..\..\..\zstd\dictBuilder\zdict.c" />
<ClCompile Include="..\..\src\ConnectionHistory.cpp" />
+ <ClCompile Include="..\..\src\Filters.cpp" />
<ClCompile Include="..\..\src\Fonts.cpp" />
<ClCompile Include="..\..\src\HttpRequest.cpp" />
<ClCompile Include="..\..\src\imgui\imgui_impl_glfw.cpp" />
@@ -316,6 +317,7 @@
<ClInclude Include="..\..\..\zstd\zstd.h" />
<ClInclude Include="..\..\..\zstd\zstd_errors.h" />
<ClInclude Include="..\..\src\ConnectionHistory.hpp" />
+ <ClInclude Include="..\..\src\Filters.hpp" />
<ClInclude Include="..\..\src\Fonts.hpp" />
<ClInclude Include="..\..\src\font\DroidSans.hpp" />
<ClInclude Include="..\..\src\font\FiraCodeRetina.hpp" />
diff --git a/profiler/build/win32/Tracy.vcxproj.filters b/profiler/build/win32/Tracy.vcxproj.filters
index 89433012..0eae1031 100644
--- a/profiler/build/win32/Tracy.vcxproj.filters
+++ b/profiler/build/win32/Tracy.vcxproj.filters
@@ -345,6 +345,9 @@
<ClCompile Include="..\..\src\ConnectionHistory.cpp">
<Filter>src</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\Filters.cpp">
+ <Filter>src</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\server\TracyEvent.hpp">
@@ -701,6 +704,9 @@
<ClInclude Include="..\..\src\ConnectionHistory.hpp">
<Filter>src</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\Filters.hpp">
+ <Filter>src</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Natvis Include="DebugVis.natvis" />
diff --git a/profiler/src/Filters.cpp b/profiler/src/Filters.cpp
new file mode 100644
index 00000000..c004df30
--- /dev/null
+++ b/profiler/src/Filters.cpp
@@ -0,0 +1,87 @@
+#include <inttypes.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include "Filters.hpp"
+
+#include "../../server/TracyStorage.hpp"
+
+
+Filters::Filters()
+ : m_fn( tracy::GetSavePath( "client.filters" ) )
+{
+ FILE* f = fopen( m_fn.c_str(), "rb" );
+ if( !f ) return;
+
+ uint8_t sz;
+ fread( &sz, 1, sizeof( sz ), f );
+ fread( m_addrFilter.InputBuf, 1, sz, f );
+ m_addrFilter.Build();
+
+ fread( &sz, 1, sizeof( sz ), f );
+ fread( m_portFilter.InputBuf, 1, sz, f );
+ m_portFilter.Build();
+
+ fread( &sz, 1, sizeof( sz ), f );
+ fread( m_progFilter.InputBuf, 1, sz, f );
+ m_progFilter.Build();
+
+ fclose( f );
+}
+
+Filters::~Filters()
+{
+ FILE* f = fopen( m_fn.c_str(), "wb" );
+ if( !f ) return;
+
+ uint8_t sz = strlen( m_addrFilter.InputBuf );
+ fwrite( &sz, 1, sizeof( sz ), f );
+ fwrite( m_addrFilter.InputBuf, 1, sz, f );
+
+ sz = strlen( m_portFilter.InputBuf );
+ fwrite( &sz, 1, sizeof( sz ), f );
+ fwrite( m_portFilter.InputBuf, 1, sz, f );
+
+ sz = strlen( m_progFilter.InputBuf );
+ fwrite( &sz, 1, sizeof( sz ), f );
+ fwrite( m_progFilter.InputBuf, 1, sz, f );
+
+ fclose( f );
+}
+
+void Filters::Clear()
+{
+ m_addrFilter.Clear();
+ m_portFilter.Clear();
+ m_progFilter.Clear();
+}
+
+void Filters::Draw( float w )
+{
+ m_addrFilter.Draw( "Address filter", w );
+ m_portFilter.Draw( "Port filter", w );
+ m_progFilter.Draw( "Program filter", w );
+}
+
+bool Filters::IsActive() const
+{
+ return m_addrFilter.IsActive() || m_portFilter.IsActive() || m_progFilter.IsActive();
+}
+
+bool Filters::FailAddr( const char* addr )
+{
+ return m_addrFilter.IsActive() && !m_addrFilter.PassFilter( addr );
+}
+
+bool Filters::FailPort( uint16_t port )
+{
+ if( !m_portFilter.IsActive() ) return false;
+ char buf[32];
+ sprintf( buf, "%" PRIu16, port );
+ return !m_portFilter.PassFilter( buf );
+}
+
+bool Filters::FailProg( const char* prog )
+{
+ return m_progFilter.IsActive() && !m_progFilter.PassFilter( prog );
+}
diff --git a/profiler/src/Filters.hpp b/profiler/src/Filters.hpp
new file mode 100644
index 00000000..e001fd0c
--- /dev/null
+++ b/profiler/src/Filters.hpp
@@ -0,0 +1,28 @@
+#ifndef __FILTERS_HPP__
+#define __FILTERS_HPP__
+
+#include <imgui.h>
+#include <string>
+
+class Filters
+{
+public:
+ Filters();
+ ~Filters();
+
+ void Clear();
+ void Draw( float w );
+
+ bool IsActive() const;
+
+ bool FailAddr( const char* addr );
+ bool FailPort( uint16_t port );
+ bool FailProg( const char* prog );
+
+private:
+ std::string m_fn;
+
+ ImGuiTextFilter m_addrFilter, m_portFilter, m_progFilter;
+};
+
+#endif
diff --git a/profiler/src/main.cpp b/profiler/src/main.cpp
index b4fdf7b5..3fa607d7 100644
--- a/profiler/src/main.cpp
+++ b/profiler/src/main.cpp
@@ -49,8 +49,10 @@
#include "../../server/IconsFontAwesome5.h"
#include "icon.hpp"
-#include "Fonts.hpp"
+
#include "ConnectionHistory.hpp"
+#include "Filters.hpp"
+#include "Fonts.hpp"
#include "HttpRequest.hpp"
#include "NativeWindow.hpp"
#include "ResolvService.hpp"
@@ -108,7 +110,7 @@ static ConnectionHistory* connHist;
static std::atomic<ViewShutdown> viewShutdown { ViewShutdown::False };
static double animTime = 0;
static float dpiScale = 1.f;
-static ImGuiTextFilter addrFilter, portFilter, progFilter;
+static Filters* filt;
static RunQueue mainThreadTasks;
static uint32_t updateVersion = 0;
static bool showReleaseNotes = false;
@@ -189,30 +191,10 @@ int main( int argc, char** argv )
WindowPosition winPos;
ConnectionHistory connHistory;
+ Filters filters;
connHist = &connHistory;
-
- std::string filtersFile = tracy::GetSavePath( "client.filters" );
- {
- FILE* f = fopen( filtersFile.c_str(), "rb" );
- if( f )
- {
- uint8_t sz;
- fread( &sz, 1, sizeof( sz ), f );
- fread( addrFilter.InputBuf, 1, sz, f );
- addrFilter.Build();
-
- fread( &sz, 1, sizeof( sz ), f );
- fread( portFilter.InputBuf, 1, sz, f );
- portFilter.Build();
-
- fread( &sz, 1, sizeof( sz ), f );
- fread( progFilter.InputBuf, 1, sz, f );
- progFilter.Build();
-
- fclose( f );
- }
- }
+ filt = &filters;
updateThread = std::thread( [] {
HttpRequest( "nereid.pl", "/tracy/version", 8099, [] ( int size, char* data ) {
@@ -360,26 +342,6 @@ int main( int argc, char** argv )
glfwTerminate();
- {
- FILE* f = fopen( filtersFile.c_str(), "wb" );
- if( f )
- {
- uint8_t sz = strlen( addrFilter.InputBuf );
- fwrite( &sz, 1, sizeof( sz ), f );
- fwrite( addrFilter.InputBuf, 1, sz, f );
-
- sz = strlen( portFilter.InputBuf );
- fwrite( &sz, 1, sizeof( sz ), f );
- fwrite( portFilter.InputBuf, 1, sz, f );
-
- sz = strlen( progFilter.InputBuf );
- fwrite( &sz, 1, sizeof( sz ), f );
- fwrite( progFilter.InputBuf, 1, sz, f );
-
- fclose( f );
- }
- }
-
return 0;
}
@@ -707,7 +669,7 @@ static void DrawContents()
ImGui::TextUnformatted( "Discovered clients:" );
ImGui::SameLine();
tracy::SmallToggleButton( ICON_FA_FILTER " Filter", showFilter );
- if( addrFilter.IsActive() || portFilter.IsActive() || progFilter.IsActive() )
+ if( filt->IsActive() )
{
ImGui::SameLine();
tracy::TextColoredUnformatted( 0xFF00FFFF, ICON_FA_EXCLAMATION_TRIANGLE );
@@ -717,9 +679,7 @@ static void DrawContents()
ImGui::SameLine();
if( ImGui::SmallButton( ICON_FA_BACKSPACE " Clear" ) )
{
- addrFilter.Clear();
- portFilter.Clear();
- progFilter.Clear();
+ filt->Clear();
}
}
}
@@ -727,9 +687,7 @@ static void DrawContents()
{
const auto w = ImGui::GetTextLineHeight() * 12;
ImGui::Separator();
- addrFilter.Draw( "Address filter", w );
- portFilter.Draw( "Port filter", w );
- progFilter.Draw( "Program filter", w );
+ filt->Draw( w );
}
ImGui::Separator();
static bool widthSet = false;
@@ -751,14 +709,9 @@ static void DrawContents()
bool sel = false;
const auto& name = resolvMap.find( v.second.address );
assert( name != resolvMap.end() );
- if( addrFilter.IsActive() && !addrFilter.PassFilter( name->second.c_str() ) && !addrFilter.PassFilter( v.second.address.c_str() ) ) continue;
- if( portFilter.IsActive() )
- {
- char buf[32];
- sprintf( buf, "%" PRIu16, v.second.port );
- if( !portFilter.PassFilter( buf ) ) continue;
- }
- if( progFilter.IsActive() && !progFilter.PassFilter( v.second.procName.c_str() ) ) continue;
+ if( filt->FailAddr( name->second.c_str() ) && filt->FailAddr( v.second.address.c_str() ) ) continue;
+ if( filt->FailPort( v.second.port ) ) continue;
+ if( filt->FailProg( v.second.procName.c_str() ) ) continue;
ImGuiSelectableFlags flags = ImGuiSelectableFlags_SpanAllColumns;
if( badProto ) flags |= ImGuiSelectableFlags_Disabled;
ImGui::PushID( idx++ );