diff options
| author | Glenn Smith <glenn@vector35.com> | 2023-05-09 22:06:31 -0400 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2023-05-10 17:49:22 -0400 |
| commit | 0819449391714365703940844657418578461507 (patch) | |
| tree | 12bb53534db74f9870b9afe0df5483ce378950f7 | |
| parent | a0af66644235cc8300f4b443ae90da84f901569d (diff) | |
Add name to worker tasks for debugging
| -rw-r--r-- | binaryninjaapi.cpp | 24 | ||||
| -rw-r--r-- | binaryninjaapi.h | 12 | ||||
| -rw-r--r-- | binaryninjacore.h | 3 | ||||
| -rw-r--r-- | 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<void()>& action) +void BinaryNinja::WorkerEnqueue(const function<void()>& 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<void()>& action) +void BinaryNinja::WorkerEnqueue(RefCountObject* owner, const function<void()>& action, const std::string& name) { struct { @@ -301,19 +301,19 @@ void BinaryNinja::WorkerEnqueue(RefCountObject* owner, const function<void()>& a context.owner = owner; context.func = action; - WorkerEnqueue([=]() { context.func(); }); + WorkerEnqueue([=]() { context.func(); }, name); } -void BinaryNinja::WorkerPriorityEnqueue(const function<void()>& action) +void BinaryNinja::WorkerPriorityEnqueue(const function<void()>& 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<void()>& action) +void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function<void()>& action, const std::string& name) { struct { @@ -323,19 +323,19 @@ void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function<vo context.owner = owner; context.func = action; - WorkerPriorityEnqueue([=]() { context.func(); }); + WorkerPriorityEnqueue([=]() { context.func(); }, name); } -void BinaryNinja::WorkerInteractiveEnqueue(const function<void()>& action) +void BinaryNinja::WorkerInteractiveEnqueue(const function<void()>& 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<void()>& action) +void BinaryNinja::WorkerInteractiveEnqueue(RefCountObject* owner, const function<void()>& 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<void()>& action); + void WorkerEnqueue(const std::function<void()>& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerEnqueue(RefCountObject* owner, const std::function<void()>& action); + void WorkerEnqueue(RefCountObject* owner, const std::function<void()>& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerPriorityEnqueue(const std::function<void()>& action); + void WorkerPriorityEnqueue(const std::function<void()>& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerPriorityEnqueue(RefCountObject* owner, const std::function<void()>& action); + void WorkerPriorityEnqueue(RefCountObject* owner, const std::function<void()>& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerInteractiveEnqueue(const std::function<void()>& action); + void WorkerInteractiveEnqueue(const std::function<void()>& action, const std::string& name = ""); /*! \ingroup mainthread */ - void WorkerInteractiveEnqueue(RefCountObject* owner, const std::function<void()>& action); + void WorkerInteractiveEnqueue(RefCountObject* owner, const std::function<void()>& 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(): |
