mirror of
https://github.com/wolfpld/tracy
synced 2025-04-29 20:33:52 +00:00
Extract filtering connections functionality.
This commit is contained in:
parent
a356340783
commit
002eb6ae2d
@ -196,6 +196,7 @@
|
|||||||
<ClCompile Include="..\..\..\zstd\dictBuilder\fastcover.c" />
|
<ClCompile Include="..\..\..\zstd\dictBuilder\fastcover.c" />
|
||||||
<ClCompile Include="..\..\..\zstd\dictBuilder\zdict.c" />
|
<ClCompile Include="..\..\..\zstd\dictBuilder\zdict.c" />
|
||||||
<ClCompile Include="..\..\src\ConnectionHistory.cpp" />
|
<ClCompile Include="..\..\src\ConnectionHistory.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\Filters.cpp" />
|
||||||
<ClCompile Include="..\..\src\Fonts.cpp" />
|
<ClCompile Include="..\..\src\Fonts.cpp" />
|
||||||
<ClCompile Include="..\..\src\HttpRequest.cpp" />
|
<ClCompile Include="..\..\src\HttpRequest.cpp" />
|
||||||
<ClCompile Include="..\..\src\imgui\imgui_impl_glfw.cpp" />
|
<ClCompile Include="..\..\src\imgui\imgui_impl_glfw.cpp" />
|
||||||
@ -316,6 +317,7 @@
|
|||||||
<ClInclude Include="..\..\..\zstd\zstd.h" />
|
<ClInclude Include="..\..\..\zstd\zstd.h" />
|
||||||
<ClInclude Include="..\..\..\zstd\zstd_errors.h" />
|
<ClInclude Include="..\..\..\zstd\zstd_errors.h" />
|
||||||
<ClInclude Include="..\..\src\ConnectionHistory.hpp" />
|
<ClInclude Include="..\..\src\ConnectionHistory.hpp" />
|
||||||
|
<ClInclude Include="..\..\src\Filters.hpp" />
|
||||||
<ClInclude Include="..\..\src\Fonts.hpp" />
|
<ClInclude Include="..\..\src\Fonts.hpp" />
|
||||||
<ClInclude Include="..\..\src\font\DroidSans.hpp" />
|
<ClInclude Include="..\..\src\font\DroidSans.hpp" />
|
||||||
<ClInclude Include="..\..\src\font\FiraCodeRetina.hpp" />
|
<ClInclude Include="..\..\src\font\FiraCodeRetina.hpp" />
|
||||||
|
@ -345,6 +345,9 @@
|
|||||||
<ClCompile Include="..\..\src\ConnectionHistory.cpp">
|
<ClCompile Include="..\..\src\ConnectionHistory.cpp">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\Filters.cpp">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\server\TracyEvent.hpp">
|
<ClInclude Include="..\..\..\server\TracyEvent.hpp">
|
||||||
@ -701,6 +704,9 @@
|
|||||||
<ClInclude Include="..\..\src\ConnectionHistory.hpp">
|
<ClInclude Include="..\..\src\ConnectionHistory.hpp">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\Filters.hpp">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Natvis Include="DebugVis.natvis" />
|
<Natvis Include="DebugVis.natvis" />
|
||||||
|
87
profiler/src/Filters.cpp
Normal file
87
profiler/src/Filters.cpp
Normal file
@ -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 );
|
||||||
|
}
|
28
profiler/src/Filters.hpp
Normal file
28
profiler/src/Filters.hpp
Normal file
@ -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
|
@ -49,8 +49,10 @@
|
|||||||
#include "../../server/IconsFontAwesome5.h"
|
#include "../../server/IconsFontAwesome5.h"
|
||||||
|
|
||||||
#include "icon.hpp"
|
#include "icon.hpp"
|
||||||
#include "Fonts.hpp"
|
|
||||||
#include "ConnectionHistory.hpp"
|
#include "ConnectionHistory.hpp"
|
||||||
|
#include "Filters.hpp"
|
||||||
|
#include "Fonts.hpp"
|
||||||
#include "HttpRequest.hpp"
|
#include "HttpRequest.hpp"
|
||||||
#include "NativeWindow.hpp"
|
#include "NativeWindow.hpp"
|
||||||
#include "ResolvService.hpp"
|
#include "ResolvService.hpp"
|
||||||
@ -108,7 +110,7 @@ static ConnectionHistory* connHist;
|
|||||||
static std::atomic<ViewShutdown> viewShutdown { ViewShutdown::False };
|
static std::atomic<ViewShutdown> viewShutdown { ViewShutdown::False };
|
||||||
static double animTime = 0;
|
static double animTime = 0;
|
||||||
static float dpiScale = 1.f;
|
static float dpiScale = 1.f;
|
||||||
static ImGuiTextFilter addrFilter, portFilter, progFilter;
|
static Filters* filt;
|
||||||
static RunQueue mainThreadTasks;
|
static RunQueue mainThreadTasks;
|
||||||
static uint32_t updateVersion = 0;
|
static uint32_t updateVersion = 0;
|
||||||
static bool showReleaseNotes = false;
|
static bool showReleaseNotes = false;
|
||||||
@ -189,30 +191,10 @@ int main( int argc, char** argv )
|
|||||||
|
|
||||||
WindowPosition winPos;
|
WindowPosition winPos;
|
||||||
ConnectionHistory connHistory;
|
ConnectionHistory connHistory;
|
||||||
|
Filters filters;
|
||||||
|
|
||||||
connHist = &connHistory;
|
connHist = &connHistory;
|
||||||
|
filt = &filters;
|
||||||
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 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updateThread = std::thread( [] {
|
updateThread = std::thread( [] {
|
||||||
HttpRequest( "nereid.pl", "/tracy/version", 8099, [] ( int size, char* data ) {
|
HttpRequest( "nereid.pl", "/tracy/version", 8099, [] ( int size, char* data ) {
|
||||||
@ -360,26 +342,6 @@ int main( int argc, char** argv )
|
|||||||
|
|
||||||
glfwTerminate();
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -707,7 +669,7 @@ static void DrawContents()
|
|||||||
ImGui::TextUnformatted( "Discovered clients:" );
|
ImGui::TextUnformatted( "Discovered clients:" );
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
tracy::SmallToggleButton( ICON_FA_FILTER " Filter", showFilter );
|
tracy::SmallToggleButton( ICON_FA_FILTER " Filter", showFilter );
|
||||||
if( addrFilter.IsActive() || portFilter.IsActive() || progFilter.IsActive() )
|
if( filt->IsActive() )
|
||||||
{
|
{
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
tracy::TextColoredUnformatted( 0xFF00FFFF, ICON_FA_EXCLAMATION_TRIANGLE );
|
tracy::TextColoredUnformatted( 0xFF00FFFF, ICON_FA_EXCLAMATION_TRIANGLE );
|
||||||
@ -717,9 +679,7 @@ static void DrawContents()
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if( ImGui::SmallButton( ICON_FA_BACKSPACE " Clear" ) )
|
if( ImGui::SmallButton( ICON_FA_BACKSPACE " Clear" ) )
|
||||||
{
|
{
|
||||||
addrFilter.Clear();
|
filt->Clear();
|
||||||
portFilter.Clear();
|
|
||||||
progFilter.Clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -727,9 +687,7 @@ static void DrawContents()
|
|||||||
{
|
{
|
||||||
const auto w = ImGui::GetTextLineHeight() * 12;
|
const auto w = ImGui::GetTextLineHeight() * 12;
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
addrFilter.Draw( "Address filter", w );
|
filt->Draw( w );
|
||||||
portFilter.Draw( "Port filter", w );
|
|
||||||
progFilter.Draw( "Program filter", w );
|
|
||||||
}
|
}
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
static bool widthSet = false;
|
static bool widthSet = false;
|
||||||
@ -751,14 +709,9 @@ static void DrawContents()
|
|||||||
bool sel = false;
|
bool sel = false;
|
||||||
const auto& name = resolvMap.find( v.second.address );
|
const auto& name = resolvMap.find( v.second.address );
|
||||||
assert( name != resolvMap.end() );
|
assert( name != resolvMap.end() );
|
||||||
if( addrFilter.IsActive() && !addrFilter.PassFilter( name->second.c_str() ) && !addrFilter.PassFilter( v.second.address.c_str() ) ) continue;
|
if( filt->FailAddr( name->second.c_str() ) && filt->FailAddr( v.second.address.c_str() ) ) continue;
|
||||||
if( portFilter.IsActive() )
|
if( filt->FailPort( v.second.port ) ) continue;
|
||||||
{
|
if( filt->FailProg( v.second.procName.c_str() ) ) continue;
|
||||||
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;
|
|
||||||
ImGuiSelectableFlags flags = ImGuiSelectableFlags_SpanAllColumns;
|
ImGuiSelectableFlags flags = ImGuiSelectableFlags_SpanAllColumns;
|
||||||
if( badProto ) flags |= ImGuiSelectableFlags_Disabled;
|
if( badProto ) flags |= ImGuiSelectableFlags_Disabled;
|
||||||
ImGui::PushID( idx++ );
|
ImGui::PushID( idx++ );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user