diff --git a/indra/llcommon/llprofiler.h b/indra/llcommon/llprofiler.h
index c414350e8eae400ab4230f172e1d5f817d6a0830..8cb6f6784022036781bca92cd4f03c8c87807dc0 100644
--- a/indra/llcommon/llprofiler.h
+++ b/indra/llcommon/llprofiler.h
@@ -88,12 +88,15 @@ extern thread_local bool gProfilerEnabled;
 
         // Mutually exclusive with detailed memory tracing
     	#define LL_PROFILER_ENABLE_TRACY_MEMORY 0
-        #define LL_PROFILER_ENABLE_TRACY_OPENGL 0
+        #define LL_PROFILER_ENABLE_TRACY_OPENGL 1
     #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 );    gProfilerEnabled = true;
+        #define LL_PROFILER_THREAD_BEGIN(name)          FrameMarkStart(name)
+        #define LL_PROFILER_THREAD_END(name)            FrameMarkEnd(name)
+
         #define LL_RECORD_BLOCK_TIME(name)              ZoneNamedN( ___tracy_scoped_zone, #name, true);
         #define LL_PROFILE_ZONE_NAMED(name)             ZoneNamedN( ___tracy_scoped_zone, name, true );
         #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ); // RGB
@@ -110,7 +113,9 @@ extern thread_local bool gProfilerEnabled;
     #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_PROFILER_SET_THREAD_NAME(name)     (void)(name)
+        #define LL_PROFILER_THREAD_BEGIN(name)          (void)(name)
+        #define LL_PROFILER_THREAD_END(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__);
         #define LL_PROFILE_ZONE_NAMED(name)             // LL_PROFILE_ZONE_NAMED is a no-op when Tracy is disabled
         #define LL_PROFILE_ZONE_SCOPED                  // LL_PROFILE_ZONE_SCOPED is a no-op when Tracy is disabled
@@ -128,6 +133,9 @@ extern thread_local bool gProfilerEnabled;
     #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 );    gProfilerEnabled = true;
+        #define LL_PROFILER_THREAD_BEGIN(name)          FrameMarkStart(name)
+        #define LL_PROFILER_THREAD_END(name)            FrameMarkEnd(name)
+
         #define LL_RECORD_BLOCK_TIME(name)              ZoneNamedN(___tracy_scoped_zone, #name, true);   const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__);
         #define LL_PROFILE_ZONE_NAMED(name)             ZoneNamedN( ___tracy_scoped_zone, name, true );
         #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ); // RGB
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 3eeca6fd2ecb94808fc9ced61c6eae04a0803086..d4f5f9456bb86d9ac4b9263e4ce5000f26443929 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -507,9 +507,11 @@ void LLQueuedThread::run()
 
 		mIdleThread = false;
 
+        LL_PROFILER_THREAD_BEGIN(mName.c_str());
 		threadedUpdate();
-		
+
 		int pending_work = processNextRequest();
+        LL_PROFILER_THREAD_END(mName.c_str());
 
 		if (pending_work == 0)
 		{
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index c6f2b5e1456af891119a7031e6c4059fb577211d..1b2e0ded6e4d031ddcb5a59cb8a3edfd21783213 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -150,7 +150,9 @@ void LLThread::threadRun()
     {
         try
         {
+            LL_PROFILER_THREAD_BEGIN(mName.c_str());
             run();
+            LL_PROFILER_THREAD_END(mName.c_str());
         }
         catch (const LLContinueError &e)
         {
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index cd1a20d0631e1dcfc02a375ce9b7848ba23ce3ca..46beb46a6a38fd69df91f828faccfe82791ad56d 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -1061,7 +1061,7 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);
     #define glGetQueryObjectiv  glGetQueryObjectivARB
     #include <tracy/TracyOpenGL.hpp>
 
-    #define LL_PROFILER_GPU_ZONEC(name,color) TracyGpuZoneC(name,color);
+    #define LL_PROFILER_GPU_ZONEC(name,color) TracyGpuZoneC(name,color)
     #define LL_PROFILER_GPU_COLLECT           TracyGpuCollect
     #define LL_PROFILER_GPU_CONTEXT           TracyGpuContext
 #else
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index 728070c238048087de48cd7c2530e0d237b901dd..297ea04a9847c8a1fe954fd37bef98f030fb686e 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -472,13 +472,13 @@ void LLRenderTarget::bindTarget()
 									GL_COLOR_ATTACHMENT1,
 									GL_COLOR_ATTACHMENT2,
 									GL_COLOR_ATTACHMENT3};
-			LL_PROFILER_GPU_ZONEC( "gl.DrawBuffersARB", 0x4000FF )
+			LL_PROFILER_GPU_ZONEC( "gl.DrawBuffersARB", 0x4000FF );
 			glDrawBuffersARB(mTex.size(), drawbuffers);
 		}
 			
 		if (mTex.empty())
 		{ //no color buffer to draw to
-			LL_PROFILER_GPU_ZONEC( "gl.DrawBuffer", 0x0000FF )
+			LL_PROFILER_GPU_ZONEC( "gl.DrawBuffer", 0x0000FF );
 			glDrawBuffer(GL_NONE);
 			glReadBuffer(GL_NONE);
 		}
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 014b9c16c01af87e58bbcfdbb373ae302c42ae01..6430f81cee07c3e5695f65a1404f5fdec8d8b88f 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -744,7 +744,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi
 
 	stop_glerror();
 	LLGLSLShader::startProfile();
-    LL_PROFILER_GPU_ZONEC( "gl.DrawRangeElements", 0xFFFF00 )
+    LL_PROFILER_GPU_ZONEC( "gl.DrawRangeElements", 0xFFFF00 );
 	glDrawRangeElements(sGLMode[mode], start, end, count, GL_UNSIGNED_SHORT, 
 		idx);
 	LLGLSLShader::stopProfile(count, mode);
@@ -762,7 +762,7 @@ void LLVertexBuffer::drawRangeFast(U32 mode, U32 start, U32 end, U32 count, U32
 
     U16* idx = ((U16*)getIndicesPointer()) + indices_offset;
 
-    LL_PROFILER_GPU_ZONEC("gl.DrawRangeElements", 0xFFFF00)
+    LL_PROFILER_GPU_ZONEC("gl.DrawRangeElements", 0xFFFF00);
         glDrawRangeElements(sGLMode[mode], start, end, count, GL_UNSIGNED_SHORT,
             idx);
 }
@@ -808,7 +808,7 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
 
 	stop_glerror();
 	LLGLSLShader::startProfile();
-    LL_PROFILER_GPU_ZONEC( "gl.DrawElements", 0xA0FFA0 )
+    LL_PROFILER_GPU_ZONEC( "gl.DrawElements", 0xA0FFA0 );
 	glDrawElements(sGLMode[mode], count, GL_UNSIGNED_SHORT,
 		((U16*) getIndicesPointer()) + indices_offset);
 	LLGLSLShader::stopProfile(count, mode);
@@ -856,7 +856,7 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
 
     LLGLSLShader::startProfile();
     {
-        LL_PROFILER_GPU_ZONEC("gl.DrawArrays", 0xFF4040)
+        LL_PROFILER_GPU_ZONEC("gl.DrawArrays", 0xFF4040);
             glDrawArrays(sGLMode[mode], first, count);
     }
     LLGLSLShader::stopProfile(count, mode);
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index f19b0eb98e8b7e5799e880c5f6bef25976b7e8a0..891a4d3f976c2c8643366210a16fd7cb27887730 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -1730,8 +1730,6 @@ const	S32   max_format  = (S32)num_formats - 1;
 		return FALSE;
 	}
 
-	LL_PROFILER_GPU_CONTEXT
-
 	if (!gGLManager.initGL())
 	{
 		OSMessageBox(mCallbacks->translateString("MBVideoDrvErr"), mCallbacks->translateString("MBError"), OSMB_OK);
@@ -1739,6 +1737,8 @@ const	S32   max_format  = (S32)num_formats - 1;
 		return FALSE;
 	}
 	
+	LL_PROFILER_GPU_CONTEXT
+
 	// Disable vertical sync for swap
     toggleVSync(enable_vsync);
 
@@ -2289,9 +2289,6 @@ void LLWindowWin32::gatherInput()
 	updateCursor();
 }
 
-static LLTrace::BlockTimerStatHandle FTM_KEYHANDLER("Handle Keyboard");
-static LLTrace::BlockTimerStatHandle FTM_MOUSEHANDLER("Handle Mouse");
-
 #define WINDOW_IMP_POST(x) window_imp->post([=]() { x; })
 
 LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_param, LPARAM l_param)
@@ -2581,9 +2578,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
             // intentional fall-through here
         case WM_KEYUP:
         {
-            LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_KEYUP");
             window_imp->post([=]()
             {
+				LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_KEYUP");
                 window_imp->mKeyScanCode = (l_param >> 16) & 0xff;
                 window_imp->mKeyVirtualKey = w_param;
                 window_imp->mRawMsg = u_msg;
@@ -2591,8 +2588,6 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
                 window_imp->mRawLParam = l_param;
 
                 {
-                    LL_RECORD_BLOCK_TIME(FTM_KEYHANDLER);
-
                     if (debug_window_proc)
                     {
                         LL_INFOS("Window") << "Debug WindowProc WM_KEYUP "
@@ -2722,9 +2717,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
         }
         case WM_LBUTTONDOWN:
         {
-            LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_LBUTTONDOWN");
             {
-                LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
+				LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_LBUTTONDOWN");
                 window_imp->postMouseButtonEvent([=]()
                     {
                         sHandleLeftMouseUp = true;
@@ -2768,11 +2762,10 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
         }
         case WM_LBUTTONUP:
         {
-            LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_LBUTTONUP");
             {
                 window_imp->postMouseButtonEvent([=]()
                     {
-                        LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
+						LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_LBUTTONUP");
                         if (!sHandleLeftMouseUp)
                         {
                             sHandleLeftMouseUp = true;
@@ -2794,7 +2787,6 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
         {
             LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_RBUTTONDOWN");
             {
-                LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
                 window_imp->post([=]()
                     {
                         if (LLWinImm::isAvailable() && window_imp->mPreeditor)
@@ -2817,7 +2809,6 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
         {
             LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_RBUTTONUP");
             {
-                LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
                 window_imp->postMouseButtonEvent([=]()
                     {
                         MASK mask = gKeyboard->currentMask(TRUE);
@@ -2832,7 +2823,6 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
         {
             LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_MBUTTONDOWN");
             {
-                LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
                 window_imp->postMouseButtonEvent([=]()
                     {
                         if (LLWinImm::isAvailable() && window_imp->mPreeditor)
@@ -2849,12 +2839,11 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
 
         case WM_MBUTTONUP:
         {
-            LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_MBUTTONUP");
             {
-                LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
                 window_imp->postMouseButtonEvent([=]()
                     {
-                        MASK mask = gKeyboard->currentMask(TRUE);
+						LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_MBUTTONUP");
+						MASK mask = gKeyboard->currentMask(TRUE);
                         window_imp->mCallbacks->handleMiddleMouseUp(window_imp, window_imp->mCursorPosition.convert(), mask);
                     });
             }
@@ -2862,10 +2851,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
         break;
         case WM_XBUTTONDOWN:
         {
-            LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_XBUTTONDOWN");
             window_imp->postMouseButtonEvent([=]()
                 {
-                    LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
+                    LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_XBUTTONDOWN");
                     S32 button = GET_XBUTTON_WPARAM(w_param);
                     if (LLWinImm::isAvailable() && window_imp->mPreeditor)
                     {
@@ -2882,11 +2870,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
 
         case WM_XBUTTONUP:
         {
-            LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_XBUTTONUP");
             window_imp->postMouseButtonEvent([=]()
                 {
-
-                    LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
+					LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("mwp - WM_XBUTTONUP");
 
                     S32 button = GET_XBUTTON_WPARAM(w_param);
                     MASK mask = gKeyboard->currentMask(TRUE);
@@ -3742,7 +3728,7 @@ void LLWindowWin32::swapBuffers()
     glFlush(); //superstitious flush for maybe frame stall removal?
 	SwapBuffers(mhDC);
 
-    LL_PROFILER_GPU_COLLECT
+    LL_PROFILER_GPU_COLLECT;
 }