summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-09-06 21:15:32 -0400
committerRusty Wagner <rusty@vector35.com>2016-09-06 21:15:32 -0400
commitf5e59b13b726a0d154dbe9351010ed3bd4b2b9e6 (patch)
treeaf2e1c90555e486dc35820d557ca06c2d68cedff
parent2e2c0fad51051871642f10f57cc0db96dd58a2ad (diff)
Add APIs for interactive work queue and worker thread count
-rw-r--r--binaryninjaapi.cpp36
-rw-r--r--binaryninjaapi.h5
-rw-r--r--binaryninjacore.h4
-rw-r--r--python/__init__.py12
4 files changed, 56 insertions, 1 deletions
diff --git a/binaryninjaapi.cpp b/binaryninjaapi.cpp
index 1a9f5713..e1dab528 100644
--- a/binaryninjaapi.cpp
+++ b/binaryninjaapi.cpp
@@ -201,3 +201,39 @@ void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function<vo
context.func();
});
}
+
+
+void BinaryNinja::WorkerInteractiveEnqueue(const function<void()>& action)
+{
+ WorkerThreadActionContext* ctxt = new WorkerThreadActionContext;
+ ctxt->action = action;
+ BNWorkerInteractiveEnqueue(ctxt, WorkerActionCallback);
+}
+
+
+void BinaryNinja::WorkerInteractiveEnqueue(RefCountObject* owner, const function<void()>& action)
+{
+ struct
+ {
+ Ref<RefCountObject> owner;
+ function<void()> func;
+ } context;
+ context.owner = owner;
+ context.func = action;
+
+ WorkerInteractiveEnqueue([=]() {
+ context.func();
+ });
+}
+
+
+size_t BinaryNinja::GetWorkerThreadCount()
+{
+ return BNGetWorkerThreadCount();
+}
+
+
+void BinaryNinja::SetWorkerThreadCount(size_t count)
+{
+ BNSetWorkerThreadCount(count);
+}
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index ff505527..a86f1067 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -375,6 +375,11 @@ namespace BinaryNinja
void WorkerEnqueue(RefCountObject* owner, const std::function<void()>& action);
void WorkerPriorityEnqueue(const std::function<void()>& action);
void WorkerPriorityEnqueue(RefCountObject* owner, const std::function<void()>& action);
+ void WorkerInteractiveEnqueue(const std::function<void()>& action);
+ void WorkerInteractiveEnqueue(RefCountObject* owner, const std::function<void()>& action);
+
+ size_t GetWorkerThreadCount();
+ void SetWorkerThreadCount(size_t count);
class DataBuffer
{
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 1fe0ad5a..960390fa 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -1968,6 +1968,10 @@ extern "C"
// Worker thread queue management
BINARYNINJACOREAPI void BNWorkerEnqueue(void* ctxt, void (*action)(void* ctxt));
BINARYNINJACOREAPI void BNWorkerPriorityEnqueue(void* ctxt, void (*action)(void* ctxt));
+ BINARYNINJACOREAPI void BNWorkerInteractiveEnqueue(void* ctxt, void (*action)(void* ctxt));
+
+ BINARYNINJACOREAPI size_t BNGetWorkerThreadCount(void);
+ BINARYNINJACOREAPI void BNSetWorkerThreadCount(size_t count);
#ifdef __cplusplus
}
diff --git a/python/__init__.py b/python/__init__.py
index d5eca84a..e36670cc 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -10097,7 +10097,17 @@ def worker_enqueue(func):
def worker_priority_enqueue(func):
action = _ThreadActionContext(func)
- core.BNWorkerEnqueue(0, action.callback)
+ core.BNWorkerPriorityEnqueue(0, action.callback)
+
+def worker_interactive_enqueue(func):
+ action = _ThreadActionContext(func)
+ core.BNWorkerInteractiveEnqueue(0, action.callback)
+
+def get_worker_thread_count():
+ return core.BNGetWorkerThreadCount()
+
+def set_worker_thread_count(count):
+ core.BNSetWorkerThreadCount(count)
bundled_plugin_path = core.BNGetBundledPluginDirectory()
user_plugin_path = core.BNGetUserPluginDirectory()