From ddf6e23f62b0d95cb19a45dc6d2196cd61157dbf Mon Sep 17 00:00:00 2001 From: "Neil R. Spruit" Date: Wed, 14 Jan 2026 11:39:44 -0800 Subject: [PATCH] Reduce impact of tracing layer enabled with no tracers - Added calls to check the existence of active tracers and callbacks before generating tracing such that the impact of tracing is reduced until enabled. Signed-off-by: Neil R. Spruit --- source/layers/tracing/tracing_imp.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/source/layers/tracing/tracing_imp.h b/source/layers/tracing/tracing_imp.h index 9b42ccf6..3ff3cd81 100644 --- a/source/layers/tracing/tracing_imp.h +++ b/source/layers/tracing/tracing_imp.h @@ -170,7 +170,7 @@ class APITracerCallbackDataImp { currentTracerArray = \ (tracing_layer::tracer_array_t *) \ tracing_layer::pGlobalAPITracerContextImp->getActiveTracersList(); \ - if (currentTracerArray) { \ + if (currentTracerArray && currentTracerArray->tracerArrayCount > 0) { \ for (size_t i = 0; i < currentTracerArray->tracerArrayCount; i++) { \ tracerType prologueCallbackPtr; \ tracerType epilogue_callback_ptr; \ @@ -201,7 +201,7 @@ class APITracerCallbackDataImp { currentTracerArray = \ (tracing_layer::tracer_array_t *) \ tracing_layer::pGlobalAPITracerContextImp->getActiveTracersList(); \ - if (currentTracerArray) { \ + if (currentTracerArray && currentTracerArray->tracerArrayCount > 0) { \ for (size_t i = 0; i < currentTracerArray->tracerArrayCount; i++){ \ tracerType prologueCallbackPtr; \ tracerType epilogue_callback_ptr; \ @@ -237,6 +237,15 @@ APITracerWrapperImp(TFunction_pointer zeApiPtr, TParams paramsStruct, TRet ret {}; std::vector> *callbacks_prologs = &prologCallbacks; + std::vector> *callbacksEpilogs = + &epilogCallbacks; + // Fast path: if no callbacks are registered, directly call the API + if (callbacks_prologs->empty() && callbacksEpilogs->empty()) { + ret = zeApiPtr(args...); + tracing_layer::tracingInProgress = 0; + tracing_layer::pGlobalAPITracerContextImp->releaseActivetracersList(); + return ret; + } std::vector ppTracerInstanceUserData; ppTracerInstanceUserData.resize(callbacks_prologs->size()); @@ -248,8 +257,6 @@ APITracerWrapperImp(TFunction_pointer zeApiPtr, TParams paramsStruct, &ppTracerInstanceUserData[i]); } ret = zeApiPtr(args...); - std::vector> *callbacksEpilogs = - &epilogCallbacks; for (size_t i = 0; i < callbacksEpilogs->size(); i++) { if (callbacksEpilogs->at(i).current_api_callback != nullptr) callbacksEpilogs->at(i).current_api_callback(