Просмотр исходного кода

Merge pull request #2318 from yuriks/trace-opt

VideoCore: Inline IsPicaTracing
bunnei 9 лет назад
Родитель
Сommit
3a1eaf2efc

+ 4 - 1
src/video_core/command_processor.cpp

@@ -59,7 +59,10 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
 
 
     regs[id] = (old_value & ~write_mask) | (value & write_mask);
     regs[id] = (old_value & ~write_mask) | (value & write_mask);
 
 
-    DebugUtils::OnPicaRegWrite({(u16)id, (u16)mask, regs[id]});
+    // Double check for is_pica_tracing to avoid call overhead
+    if (DebugUtils::IsPicaTracing()) {
+        DebugUtils::OnPicaRegWrite({(u16)id, (u16)mask, regs[id]});
+    }
 
 
     if (g_debug_context)
     if (g_debug_context)
         g_debug_context->OnEvent(DebugContext::Event::PicaCommandLoaded,
         g_debug_context->OnEvent(DebugContext::Event::PicaCommandLoaded,

+ 6 - 14
src/video_core/debug_utils/debug_utils.cpp

@@ -276,10 +276,10 @@ void DumpShader(const std::string& filename, const Regs::ShaderConfig& config,
 
 
 static std::unique_ptr<PicaTrace> pica_trace;
 static std::unique_ptr<PicaTrace> pica_trace;
 static std::mutex pica_trace_mutex;
 static std::mutex pica_trace_mutex;
-static int is_pica_tracing = false;
+bool g_is_pica_tracing = false;
 
 
 void StartPicaTracing() {
 void StartPicaTracing() {
-    if (is_pica_tracing) {
+    if (g_is_pica_tracing) {
         LOG_WARNING(HW_GPU, "StartPicaTracing called even though tracing already running!");
         LOG_WARNING(HW_GPU, "StartPicaTracing called even though tracing already running!");
         return;
         return;
     }
     }
@@ -287,34 +287,26 @@ void StartPicaTracing() {
     std::lock_guard<std::mutex> lock(pica_trace_mutex);
     std::lock_guard<std::mutex> lock(pica_trace_mutex);
     pica_trace = std::make_unique<PicaTrace>();
     pica_trace = std::make_unique<PicaTrace>();
 
 
-    is_pica_tracing = true;
-}
-
-bool IsPicaTracing() {
-    return is_pica_tracing != 0;
+    g_is_pica_tracing = true;
 }
 }
 
 
 void OnPicaRegWrite(PicaTrace::Write write) {
 void OnPicaRegWrite(PicaTrace::Write write) {
-    // Double check for is_pica_tracing to avoid pointless locking overhead
-    if (!is_pica_tracing)
-        return;
-
     std::lock_guard<std::mutex> lock(pica_trace_mutex);
     std::lock_guard<std::mutex> lock(pica_trace_mutex);
 
 
-    if (!is_pica_tracing)
+    if (!g_is_pica_tracing)
         return;
         return;
 
 
     pica_trace->writes.push_back(write);
     pica_trace->writes.push_back(write);
 }
 }
 
 
 std::unique_ptr<PicaTrace> FinishPicaTracing() {
 std::unique_ptr<PicaTrace> FinishPicaTracing() {
-    if (!is_pica_tracing) {
+    if (!g_is_pica_tracing) {
         LOG_WARNING(HW_GPU, "FinishPicaTracing called even though tracing isn't running!");
         LOG_WARNING(HW_GPU, "FinishPicaTracing called even though tracing isn't running!");
         return {};
         return {};
     }
     }
 
 
     // signalize that no further tracing should be performed
     // signalize that no further tracing should be performed
-    is_pica_tracing = false;
+    g_is_pica_tracing = false;
 
 
     // Wait until running tracing is finished
     // Wait until running tracing is finished
     std::lock_guard<std::mutex> lock(pica_trace_mutex);
     std::lock_guard<std::mutex> lock(pica_trace_mutex);

+ 5 - 1
src/video_core/debug_utils/debug_utils.h

@@ -196,8 +196,12 @@ struct PicaTrace {
     std::vector<Write> writes;
     std::vector<Write> writes;
 };
 };
 
 
+extern bool g_is_pica_tracing;
+
 void StartPicaTracing();
 void StartPicaTracing();
-bool IsPicaTracing();
+inline bool IsPicaTracing() {
+    return g_is_pica_tracing;
+}
 void OnPicaRegWrite(PicaTrace::Write write);
 void OnPicaRegWrite(PicaTrace::Write write);
 std::unique_ptr<PicaTrace> FinishPicaTracing();
 std::unique_ptr<PicaTrace> FinishPicaTracing();