Compare commits

...

5 Commits

Author SHA1 Message Date
Bartosz Taudul
9b6328f962 Release 0.5.0. 2019-08-10 22:14:14 +02:00
Bartosz Taudul
530f293c49 Better way to handle auto scrolling. 2019-08-10 22:06:51 +02:00
Bartosz Taudul
6fca188603 Update tech docs. 2019-08-08 19:25:35 +02:00
Bartosz Taudul
4d2c7899ab Allow skipping invariant TSC check. 2019-08-08 19:21:39 +02:00
Bartosz Taudul
3a221dafde Display error messages on console, if available. 2019-08-08 19:18:05 +02:00
8 changed files with 52 additions and 25 deletions

5
NEWS
View File

@@ -6,9 +6,12 @@ Note: Release numbers are nothing more than numbers. There are some
"missing" versions due to trace file changes during development. This is not
a mistake.
v0.5 (xxxx-xx-xx)
v0.5 (2019-08-10)
-----------------
This is the last release which will be able to load pre-v0.4 traces. Use the
update utility to convert your old traces now!
- Major decrease of trace dump file size.
- Major optimizations across the board.
- Vcpkg is now used for library management on Windows.

View File

@@ -24,7 +24,8 @@ The following platforms are confirmed to be working (this is not a complete list
[Introduction to Tracy Profiler v0.2](https://www.youtube.com/watch?v=fB5B46lbapc)
[New features in Tracy Profiler v0.3](https://www.youtube.com/watch?v=3SXpDpDh2Uo)
[New features in Tracy Profiler v0.4](https://www.youtube.com/watch?v=eAkgkaO8B9o)
[New features in Tracy Profiler v0.4](https://www.youtube.com/watch?v=eAkgkaO8B9o)
[New features in Tracy Profiler v0.5](https://www.youtube.com/watch?v=P6E7qLMmzTQ)
[A quick FAQ.](FAQ.md)
[List of changes.](NEWS)

View File

@@ -245,7 +245,35 @@ static inline void CpuId( uint32_t* regs, uint32_t leaf )
static void InitFailure( const char* msg )
{
#if defined _WIN32 || defined __CYGWIN__
MessageBoxA( nullptr, msg, "Tracy Profiler initialization failure", MB_ICONSTOP );
bool hasConsole = false;
bool reopen = false;
const auto attached = AttachConsole( ATTACH_PARENT_PROCESS );
if( attached )
{
hasConsole = true;
reopen = true;
}
else
{
const auto err = GetLastError();
if( err == ERROR_ACCESS_DENIED )
{
hasConsole = true;
}
}
if( hasConsole )
{
fprintf( stderr, "Tracy Profiler initialization failure: %s\n", msg );
if( reopen )
{
freopen( "CONOUT$", "w", stderr );
fprintf( stderr, "Tracy Profiler initialization failure: %s\n", msg );
}
}
else
{
MessageBoxA( nullptr, msg, "Tracy Profiler initialization failure", MB_ICONSTOP );
}
#else
fprintf( stderr, "Tracy Profiler initialization failure: %s\n", msg );
#endif
@@ -258,7 +286,14 @@ static int64_t SetupHwTimer()
CpuId( regs, 0x80000001 );
if( !( regs[3] & ( 1 << 27 ) ) ) InitFailure( "CPU doesn't support RDTSCP instruction." );
CpuId( regs, 0x80000007 );
if( !( regs[3] & ( 1 << 8 ) ) ) InitFailure( "CPU doesn't support invariant TSC." );
if( !( regs[3] & ( 1 << 8 ) ) )
{
const char* noCheck = getenv( "TRACY_NO_INVARIANT_CHECK" );
if( !noCheck || noCheck[0] != '1' )
{
InitFailure( "CPU doesn't support invariant TSC.\nDefine TRACY_NO_INVARIANT_CHECK=1 to ignore this error, *if you know what you are doing*." );
}
}
return Profiler::GetTime();
}

View File

@@ -188,7 +188,7 @@ The Microsoft compiler is very insistent on writing the CPU core identifier to t
\subsubsection{Misinformation about \texttt{rdtscp}}
In various internet sources you can find warnings that the \texttt{rdtscp} readings are not reliable, can vary between CPU cores, or can be affected by the CPU frequency adjustments. While this was a sound advice a long time ago, it is no longer valid since the Intel Sandy Bridge microarchitecture (released in 2011) introduced \emph{invariant TSC}. Tracy will check for this feature and refuse to run, if it is not found.
In various internet sources you can find warnings that the \texttt{rdtscp} readings are not reliable, can vary between CPU cores, or can be affected by the CPU frequency adjustments. While this was a sound advice a long time ago, it is no longer valid since the Intel Sandy Bridge microarchitecture (released in 2011) introduced \emph{invariant TSC}. Tracy will check for this feature and refuse to run, if it is not found\footnote{Invariant TSC might be not available in specific scenarios, e.g. in some virtual environments. You may set the environment variable \texttt{TRACY\_NO\_INVARIANT\_CHECK=1} to skip this check, \emph{only if you know what you are doing}.}.
While there could be a timer dispatch function, similar to the one on ARM CPUs, it would incur additional cost, which would be paid by everyone, while benefiting (almost) no one. If need be, an optional macro should be added to enable such dispatch.

View File

@@ -404,6 +404,10 @@ int main( int argc, char** argv )
{
OpenWebpage( "https://www.youtube.com/watch?v=eAkgkaO8B9o" );
}
if( ImGui::Selectable( ICON_FA_VIDEO " New features in Tracy Profiler v0.5" ) )
{
OpenWebpage( "https://www.youtube.com/watch?v=P6E7qLMmzTQ" );
}
ImGui::EndPopup();
}
ImGui::Separator();

View File

@@ -6,8 +6,8 @@ namespace tracy
namespace Version
{
enum { Major = 0 };
enum { Minor = 4 };
enum { Patch = 11 };
enum { Minor = 5 };
enum { Patch = 0 };
}
}

View File

@@ -5964,24 +5964,10 @@ void View::DrawMessages()
}
m_visibleMessages = msgcnt;
if( !filterActive )
if( ImGui::GetScrollY() >= ImGui::GetScrollMaxY() )
{
const auto maxScroll = ImGui::GetScrollMaxY();
if( maxScroll != 0 )
{
const auto msgssize = msgs.size();
if( m_prevMessages == msgssize && !m_messageFilterWasActive )
{
m_messagesScrollBottom = ImGui::GetScrollY() == maxScroll;
}
else
{
m_prevMessages = msgssize;
if( m_messagesScrollBottom ) ImGui::SetScrollHereY();
}
}
ImGui::SetScrollHereY( 1.f );
}
m_messageFilterWasActive = filterActive;
ImGui::EndColumns();
ImGui::EndChild();

View File

@@ -267,9 +267,7 @@ private:
ZoneEvent* m_zoneHover = nullptr;
int m_frameHover = -1;
bool m_messagesScrollBottom;
size_t m_prevMessages = 0;
ImGuiTextFilter m_messageFilter;
bool m_messageFilterWasActive = false;
int m_visibleMessages = 0;
bool m_disconnectIssued = false;