diff options
| author | Ptolemy <ptolemy@lindenlab.com> | 2021-07-27 15:31:15 -0700 | 
|---|---|---|
| committer | Ptolemy <ptolemy@lindenlab.com> | 2021-09-03 17:53:43 -0700 | 
| commit | df5127136f9f520aa31c06ddb37ac79b6a8dc16d (patch) | |
| tree | f9562fb128f8198907ed73045900e7f89fcfe205 /indra/llcommon | |
| parent | 2e88a3266529714efcf8ae092819a25393540c8a (diff) | |
SL-15709: Add Tracy support to viewer
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | indra/llcommon/linden_common.h | 2 | ||||
| -rw-r--r-- | indra/llcommon/llfasttimer.h | 3 | ||||
| -rw-r--r-- | indra/llcommon/llprofiler.h | 64 | ||||
| -rw-r--r-- | indra/llcommon/llthread.cpp | 2 | 
5 files changed, 72 insertions, 0 deletions
| diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index f1b0506659..28bf5d0c39 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -201,6 +201,7 @@ set(llcommon_HEADER_FILES      llmortician.h      llnametable.h      llpointer.h +    llprofiler.h      llpounceable.h      llpredicate.h      llpreprocessor.h diff --git a/indra/llcommon/linden_common.h b/indra/llcommon/linden_common.h index e5a913a6a9..45ac43910c 100644 --- a/indra/llcommon/linden_common.h +++ b/indra/llcommon/linden_common.h @@ -60,4 +60,6 @@  #include "llerror.h"  #include "llfile.h" +#include "llprofiler.h" // must be before fast timer; needed due to LLThreads potentially needing access to tracy +  #endif diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index dfc63d08a2..c7d5bb3761 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -38,7 +38,10 @@  #define LL_FAST_TIMER_ON 1  #define LL_FASTTIMER_USE_RDTSC 1 +// NOTE: Also see llprofiler.h +#if !defined(LL_PROFILER_CONFIGURATION) // defined(LL_PROFILER_CONFIGURATION) && (LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_FAST_TIMER)  #define LL_RECORD_BLOCK_TIME(timer_stat) const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(timer_stat)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__); +#endif // LL_PROFILER_CONFIGURATION  namespace LLTrace  { diff --git a/indra/llcommon/llprofiler.h b/indra/llcommon/llprofiler.h new file mode 100644 index 0000000000..75954b9a79 --- /dev/null +++ b/indra/llcommon/llprofiler.h @@ -0,0 +1,64 @@ +/** + * @file llprofiler.h + * @brief Wrapper for Tracy and/or other profilers + * + * $LicenseInfo:firstyear=2021&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2021, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifndef LL_PROFILER_H +#define LL_PROFILER_H + +#define LL_PROFILER_CONFIG_NONE             0  // No profiling +#define LL_PROFILER_CONFIG_FAST_TIMER       1  // Profiling on: Only Fast Timers +#define LL_PROFILER_CONFIG_TRACY            2  // Profiling on: Only Tracy +#define LL_PROFILER_CONFIG_TRACY_FAST_TIMER 3  // Profiling on: Fast Timers + Tracy + +#if defined(LL_PROFILER_CONFIGURATION) && (LL_PROFILER_CONFIGURATION > LL_PROFILER_CONFIG_NONE) +    #if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY || LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY_FAST_TIMER +        #define TRACY_ENABLE         1 +        #define TRACY_NO_BROADCAST   1 +        #define TRACY_ONLY_LOCALHOST 1 +        #define TRACY_ONLY_IPV4      1 +        #include "Tracy.hpp" +    #endif + +    #if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY +        #define LL_PROFILER_FRAME_END               FrameMark +        #define LL_PROFILER_SET_THREAD_NAME( name ) tracy::SetThreadName( name ) +        #define LL_RECORD_BLOCK_TIME(name)          ZoneNamedN( ___tracy_scoped_zone, #name, true ); +    #endif +    #if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_FAST_TIMER +        #define LL_PROFILER_FRAME_END +        #define LL_PROFILER_SET_THREAD_NAME( name ) (void)(name) +        #define LL_RECORD_BLOCK_TIME(name)                                                                  const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__); +    #endif +    #if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY_FAST_TIMER +        #define LL_PROFILER_FRAME_END               FrameMark +        #define LL_PROFILER_SET_THREAD_NAME( name ) tracy::SetThreadName( name ) +        #define LL_RECORD_BLOCK_TIME(name)          ZoneNamedN( ___tracy_scoped_zone, #timer_stat, true )   const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__); +    #endif +#else +    #define LL_PROFILER_FRAME_END +    #define LL_PROFILER_SET_THREAD_NAME( name ) (void)(name) +#endif // LL_PROFILER + +#endif // LL_PROFILER_H diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 6d531d842d..a8cc750437 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -135,6 +135,8 @@ void LLThread::threadRun()      set_thread_name(-1, mName.c_str());  #endif +    LL_PROFILER_SET_THREAD_NAME( mName.c_str() ); +      // this is the first point at which we're actually running in the new thread      mID = currentID(); | 
