From 0819449391714365703940844657418578461507 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Tue, 9 May 2023 22:06:31 -0400 Subject: Add name to worker tasks for debugging --- binaryninjaapi.cpp | 24 ++++++++++++------------ binaryninjaapi.h | 12 ++++++------ binaryninjacore.h | 3 +++ python/mainthread.py | 12 ++++++------ 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/binaryninjaapi.cpp b/binaryninjaapi.cpp index 70d96f9a..a456f8c2 100644 --- a/binaryninjaapi.cpp +++ b/binaryninjaapi.cpp @@ -283,15 +283,15 @@ static void WorkerActionCallback(void* ctxt) } -void BinaryNinja::WorkerEnqueue(const function& action) +void BinaryNinja::WorkerEnqueue(const function& action, const std::string& name) { WorkerThreadActionContext* ctxt = new WorkerThreadActionContext; ctxt->action = action; - BNWorkerEnqueue(ctxt, WorkerActionCallback); + BNWorkerEnqueueNamed(ctxt, WorkerActionCallback, name.c_str()); } -void BinaryNinja::WorkerEnqueue(RefCountObject* owner, const function& action) +void BinaryNinja::WorkerEnqueue(RefCountObject* owner, const function& action, const std::string& name) { struct { @@ -301,19 +301,19 @@ void BinaryNinja::WorkerEnqueue(RefCountObject* owner, const function& a context.owner = owner; context.func = action; - WorkerEnqueue([=]() { context.func(); }); + WorkerEnqueue([=]() { context.func(); }, name); } -void BinaryNinja::WorkerPriorityEnqueue(const function& action) +void BinaryNinja::WorkerPriorityEnqueue(const function& action, const std::string& name) { WorkerThreadActionContext* ctxt = new WorkerThreadActionContext; ctxt->action = action; - BNWorkerPriorityEnqueue(ctxt, WorkerActionCallback); + BNWorkerPriorityEnqueueNamed(ctxt, WorkerActionCallback, name.c_str()); } -void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function& action) +void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function& action, const std::string& name) { struct { @@ -323,19 +323,19 @@ void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function& action) +void BinaryNinja::WorkerInteractiveEnqueue(const function& action, const std::string& name) { WorkerThreadActionContext* ctxt = new WorkerThreadActionContext; ctxt->action = action; - BNWorkerInteractiveEnqueue(ctxt, WorkerActionCallback); + BNWorkerInteractiveEnqueueNamed(ctxt, WorkerActionCallback, name.c_str()); } -void BinaryNinja::WorkerInteractiveEnqueue(RefCountObject* owner, const function& action) +void BinaryNinja::WorkerInteractiveEnqueue(RefCountObject* owner, const function& action, const std::string& name) { struct { @@ -345,7 +345,7 @@ void BinaryNinja::WorkerInteractiveEnqueue(RefCountObject* owner, const function context.owner = owner; context.func = action; - WorkerInteractiveEnqueue([=]() { context.func(); }); + WorkerInteractiveEnqueue([=]() { context.func(); }, name); } diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 1da9bf3a..21549c92 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1058,32 +1058,32 @@ namespace BinaryNinja { /*! \ingroup mainthread */ - void WorkerEnqueue(const std::function& action); + void WorkerEnqueue(const std::function& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerEnqueue(RefCountObject* owner, const std::function& action); + void WorkerEnqueue(RefCountObject* owner, const std::function& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerPriorityEnqueue(const std::function& action); + void WorkerPriorityEnqueue(const std::function& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerPriorityEnqueue(RefCountObject* owner, const std::function& action); + void WorkerPriorityEnqueue(RefCountObject* owner, const std::function& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerInteractiveEnqueue(const std::function& action); + void WorkerInteractiveEnqueue(const std::function& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerInteractiveEnqueue(RefCountObject* owner, const std::function& action); + void WorkerInteractiveEnqueue(RefCountObject* owner, const std::function& action, const std::string& name = ""); /*! \ingroup mainthread diff --git a/binaryninjacore.h b/binaryninjacore.h index 5d716374..bb5ef1f8 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -5987,8 +5987,11 @@ extern "C" // Worker thread queue management BINARYNINJACOREAPI void BNWorkerEnqueue(void* ctxt, void (*action)(void* ctxt)); + BINARYNINJACOREAPI void BNWorkerEnqueueNamed(void* ctxt, void (*action)(void* ctxt), const char* name); BINARYNINJACOREAPI void BNWorkerPriorityEnqueue(void* ctxt, void (*action)(void* ctxt)); + BINARYNINJACOREAPI void BNWorkerPriorityEnqueueNamed(void* ctxt, void (*action)(void* ctxt), const char* name); BINARYNINJACOREAPI void BNWorkerInteractiveEnqueue(void* ctxt, void (*action)(void* ctxt)); + BINARYNINJACOREAPI void BNWorkerInteractiveEnqueueNamed(void* ctxt, void (*action)(void* ctxt), const char* name); BINARYNINJACOREAPI size_t BNGetWorkerThreadCount(void); BINARYNINJACOREAPI void BNSetWorkerThreadCount(size_t count); diff --git a/python/mainthread.py b/python/mainthread.py index e4911bbb..53b5c4ec 100644 --- a/python/mainthread.py +++ b/python/mainthread.py @@ -37,19 +37,19 @@ def execute_on_main_thread_and_wait(func): core.BNExecuteOnMainThreadAndWait(0, action.callback) -def worker_enqueue(func): +def worker_enqueue(func, name=""): action = scriptingprovider._ThreadActionContext(func) - core.BNWorkerEnqueue(0, action.callback) + core.BNWorkerEnqueueNamed(0, action.callback, "Python " + name) -def worker_priority_enqueue(func): +def worker_priority_enqueue(func, name=""): action = scriptingprovider._ThreadActionContext(func) - core.BNWorkerPriorityEnqueue(0, action.callback) + core.BNWorkerPriorityEnqueueNamed(0, action.callback, "Python " + name) -def worker_interactive_enqueue(func): +def worker_interactive_enqueue(func, name=""): action = scriptingprovider._ThreadActionContext(func) - core.BNWorkerInteractiveEnqueue(0, action.callback) + core.BNWorkerInteractiveEnqueueNamed(0, action.callback, "Python " + name) def get_worker_thread_count(): -- cgit v1.3.1