summaryrefslogtreecommitdiff
path: root/lib/gras_impl
diff options
context:
space:
mode:
authorJosh Blum2013-06-15 23:33:18 -0700
committerJosh Blum2013-06-15 23:33:18 -0700
commite6d6d285cfd7f4d8f63c45bc77cb53943a04a5eb (patch)
tree904c042399ee0cac75b3f66483269feb836dca27 /lib/gras_impl
parentf6140c831e1585eed07d35c17a2792f214e94636 (diff)
downloadsandhi-e6d6d285cfd7f4d8f63c45bc77cb53943a04a5eb.tar.gz
sandhi-e6d6d285cfd7f4d8f63c45bc77cb53943a04a5eb.tar.bz2
sandhi-e6d6d285cfd7f4d8f63c45bc77cb53943a04a5eb.zip
gras: dont update item counts until after work
This lets API calls like get_consumed/produced keep their values until after work is called. The propagate tags overload need this to work.
Diffstat (limited to 'lib/gras_impl')
-rw-r--r--lib/gras_impl/block_data.hpp6
-rw-r--r--lib/gras_impl/input_buffer_queues.hpp5
2 files changed, 7 insertions, 4 deletions
diff --git a/lib/gras_impl/block_data.hpp b/lib/gras_impl/block_data.hpp
index 170f7c6..8697d48 100644
--- a/lib/gras_impl/block_data.hpp
+++ b/lib/gras_impl/block_data.hpp
@@ -55,7 +55,6 @@ struct BlockData
//buffer queues and ready conditions
InputBufferQueues input_queues;
OutputBufferQueues output_queues;
- std::vector<bool> produce_outputs;
BitSet inputs_available;
std::vector<time_ticks_t> time_input_not_ready;
std::vector<time_ticks_t> time_output_not_ready;
@@ -64,7 +63,10 @@ struct BlockData
std::vector<bool> input_tags_changed;
std::vector<std::vector<Tag> > input_tags;
std::vector<size_t> num_input_msgs_read;
- std::vector<size_t> num_input_bytes_read;
+ std::vector<size_t> num_input_items_read;
+ std::vector<size_t> num_output_items_read;
+ std::vector<size_t> total_items_consumed;
+ std::vector<size_t> total_items_produced;
std::vector<std::vector<PMCC> > input_msgs;
//interruptible thread stuff
diff --git a/lib/gras_impl/input_buffer_queues.hpp b/lib/gras_impl/input_buffer_queues.hpp
index 7d31b9a..b9bd1b7 100644
--- a/lib/gras_impl/input_buffer_queues.hpp
+++ b/lib/gras_impl/input_buffer_queues.hpp
@@ -77,7 +77,7 @@ struct InputBufferQueues
}
//! Call when input bytes consumed by work
- void consume(const size_t i, const size_t bytes_consumed);
+ void consume(const size_t i, const size_t items_consumed);
void resize(const size_t size);
@@ -330,8 +330,9 @@ GRAS_FORCE_INLINE void InputBufferQueues::push(const size_t i, const SBuffer &bu
}
-GRAS_FORCE_INLINE void InputBufferQueues::consume(const size_t i, const size_t bytes_consumed)
+GRAS_FORCE_INLINE void InputBufferQueues::consume(const size_t i, const size_t items_consumed)
{
+ const size_t bytes_consumed = items_consumed * _items_sizes[i];
ASSERT(not _queues[i].empty());
ASSERT((bytes_consumed % _items_sizes[i]) == 0);
SBuffer &front = _queues[i].front();