summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/CMakeLists.txt1
-rw-r--r--lib/block.cpp41
-rw-r--r--lib/block_allocator.cpp2
-rw-r--r--lib/block_config.cpp29
-rw-r--r--lib/block_handlers.cpp12
-rw-r--r--lib/gras_impl/block_data.hpp3
-rw-r--r--lib/task_main.cpp2
-rw-r--r--lib/top_block.cpp6
8 files changed, 52 insertions, 44 deletions
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index b5ed2d5..5f31731 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -49,6 +49,7 @@ list(APPEND GRAS_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/buffer_queue_pool.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tags.cpp
${CMAKE_CURRENT_SOURCE_DIR}/block.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/block_config.cpp
${CMAKE_CURRENT_SOURCE_DIR}/block_message.cpp
${CMAKE_CURRENT_SOURCE_DIR}/block_consume.cpp
${CMAKE_CURRENT_SOURCE_DIR}/block_produce.cpp
diff --git a/lib/block.cpp b/lib/block.cpp
index 00238ba..7cd7392 100644
--- a/lib/block.cpp
+++ b/lib/block.cpp
@@ -7,23 +7,6 @@
using namespace gras;
-InputPortConfig::InputPortConfig(void)
-{
- item_size = 1;
- reserve_items = 1;
- maximum_items = 0;
- inline_buffer = false;
- preload_items = 0;
- force_done = true;
-}
-
-OutputPortConfig::OutputPortConfig(void)
-{
- item_size = 1;
- reserve_items = 1;
- maximum_items = 0;
-}
-
Block::Block(void)
{
//NOP
@@ -43,10 +26,6 @@ Block::Block(const std::string &name):
//setup some state variables
(*this)->block_data->block_state = BLOCK_STATE_INIT;
-
- //call block methods to init stuff
- this->set_interruptible_work(false);
- this->set_buffer_affinity(-1);
}
Block::~Block(void)
@@ -142,6 +121,16 @@ typename V::value_type &vector_get_resize(V &v, const size_t index)
return v[index];
}
+const GlobalBlockConfig &Block::global_config(void) const
+{
+ return (*this)->block_data->global_config;
+}
+
+GlobalBlockConfig &Block::global_config(void)
+{
+ return (*this)->block_data->global_config;
+}
+
InputPortConfig &Block::input_config(const size_t which_input)
{
return vector_get_resize((*this)->block_data->input_configs, which_input);
@@ -202,13 +191,3 @@ void Block::set_thread_pool(const ThreadPool &thread_pool)
(*this)->setup_actor();
wait_actor_idle((*this)->repr, *old_actor);
}
-
-void Block::set_buffer_affinity(const long affinity)
-{
- (*this)->block_data->buffer_affinity = affinity;
-}
-
-void Block::set_interruptible_work(const bool enb)
-{
- (*this)->block_data->interruptible_work = enb;
-}
diff --git a/lib/block_allocator.cpp b/lib/block_allocator.cpp
index aa97405..3168bc2 100644
--- a/lib/block_allocator.cpp
+++ b/lib/block_allocator.cpp
@@ -74,7 +74,7 @@ void BlockActor::handle_top_alloc(const TopAllocMessage &, const Theron::Address
SBufferConfig config;
config.memory = NULL;
config.length = bytes;
- config.affinity = data->buffer_affinity;
+ config.affinity = data->global_config.buffer_affinity;
config.token = token;
BufferQueueSptr queue = data->block->output_buffer_allocator(i, config);
diff --git a/lib/block_config.cpp b/lib/block_config.cpp
new file mode 100644
index 0000000..04d37f1
--- /dev/null
+++ b/lib/block_config.cpp
@@ -0,0 +1,29 @@
+// Copyright (C) by Josh Blum. See LICENSE.txt for licensing information.
+
+#include <gras/block_config.hpp>
+
+using namespace gras;
+
+GlobalBlockConfig::GlobalBlockConfig(void)
+{
+ maximum_output_items = 0;
+ buffer_affinity = -1;
+ interruptible_work = false;
+}
+
+InputPortConfig::InputPortConfig(void)
+{
+ item_size = 1;
+ reserve_items = 1;
+ maximum_items = 0;
+ inline_buffer = false;
+ preload_items = 0;
+ force_done = true;
+}
+
+OutputPortConfig::OutputPortConfig(void)
+{
+ item_size = 1;
+ reserve_items = 1;
+ maximum_items = 0;
+}
diff --git a/lib/block_handlers.cpp b/lib/block_handlers.cpp
index c52d974..4cb03ab 100644
--- a/lib/block_handlers.cpp
+++ b/lib/block_handlers.cpp
@@ -92,9 +92,15 @@ void BlockActor::handle_top_config(
}
//overwrite with global node affinity setting for buffers if not set
- if (data->buffer_affinity == -1)
+ if (data->global_config.buffer_affinity == -1)
{
- data->buffer_affinity = message.buffer_affinity;
+ data->global_config.buffer_affinity = message.buffer_affinity;
+ }
+
+ //overwrite with global interruptable setting for work if not set
+ if (data->global_config.interruptible_work == false)
+ {
+ data->global_config.interruptible_work = message.interruptible_work;
}
this->Send(0, from); //ACK
@@ -111,7 +117,7 @@ void BlockActor::handle_top_thread_group(
//spawn a new thread if this block is a source
data->thread_group = message;
data->interruptible_thread.reset(); //erase old one
- if (data->interruptible_work)
+ if (data->global_config.interruptible_work)
{
data->interruptible_thread = boost::make_shared<InterruptibleThread>(
data->thread_group, boost::bind(&BlockActor::task_work, this)
diff --git a/lib/gras_impl/block_data.hpp b/lib/gras_impl/block_data.hpp
index 4b6e8de..9300d9f 100644
--- a/lib/gras_impl/block_data.hpp
+++ b/lib/gras_impl/block_data.hpp
@@ -67,13 +67,12 @@ struct BlockData
std::vector<std::vector<PMCC> > input_msgs;
//interruptible thread stuff
- bool interruptible_work;
SharedThreadGroup thread_group;
boost::shared_ptr<InterruptibleThread> interruptible_thread;
//is the fg running?
BlockState block_state;
- long buffer_affinity;
+ GlobalBlockConfig global_config;
std::vector<std::vector<OutputHintMessage> > output_allocation_hints;
diff --git a/lib/task_main.cpp b/lib/task_main.cpp
index cb3e0ee..f4f0053 100644
--- a/lib/task_main.cpp
+++ b/lib/task_main.cpp
@@ -47,7 +47,7 @@ void BlockActor::task_main(void)
buff.unique() and
data->input_configs[i].inline_buffer and
output_inline_index < num_outputs and
- buff.get_affinity() == data->buffer_affinity
+ buff.get_affinity() == data->global_config.buffer_affinity
){
data->output_queues.set_inline(output_inline_index++, buff);
}
diff --git a/lib/top_block.cpp b/lib/top_block.cpp
index 12055f8..240f417 100644
--- a/lib/top_block.cpp
+++ b/lib/top_block.cpp
@@ -6,12 +6,6 @@
using namespace gras;
-GlobalBlockConfig::GlobalBlockConfig(void)
-{
- maximum_output_items = 0;
- buffer_affinity = -1;
-}
-
TopBlock::TopBlock(void)
{
//NOP