summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2023-05-09 22:06:31 -0400
committerGlenn Smith <glenn@vector35.com>2023-05-10 17:49:22 -0400
commit0819449391714365703940844657418578461507 (patch)
tree12bb53534db74f9870b9afe0df5483ce378950f7
parenta0af66644235cc8300f4b443ae90da84f901569d (diff)
Add name to worker tasks for debugging
-rw-r--r--binaryninjaapi.cpp24
-rw-r--r--binaryninjaapi.h12
-rw-r--r--binaryninjacore.h3
-rw-r--r--python/mainthread.py12
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():