From 71d54207cc6983a56f99773c690a287fafd657c9 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Wed, 12 Aug 2020 15:01:47 +0300
Subject: [PATCH] Config options for builder buffer sizes

---
 .../streams/include/ftl/streams/builder.hpp      |  6 ++++--
 components/streams/src/receiver.cpp              | 16 ++++++++++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/components/streams/include/ftl/streams/builder.hpp b/components/streams/include/ftl/streams/builder.hpp
index 466399b4a..345727704 100644
--- a/components/streams/include/ftl/streams/builder.hpp
+++ b/components/streams/include/ftl/streams/builder.hpp
@@ -33,6 +33,8 @@ class BaseBuilder : public ftl::data::Generator {
 	void setID(uint32_t id) { id_ = id; }
 	void setPool(ftl::data::Pool *p) { pool_ = p; }
 	void setBufferSize(size_t s) { bufferSize_ = s; }
+	void setMaxBufferSize(size_t s) { max_buffer_size_ = s; }
+	void setCompletionSize(size_t s) { completion_size_ = s; }
 
 	inline ftl::Handle onFrameSet(const ftl::data::FrameSetCallback &cb) override { return cb_.on(cb); }
 
@@ -53,6 +55,8 @@ class BaseBuilder : public ftl::data::Generator {
 	int id_;
 	size_t size_;
 	size_t bufferSize_ = 1;
+	size_t max_buffer_size_ = 16;
+	size_t completion_size_ = 8;
 	ftl::Handler<const ftl::data::FrameSetPtr&> cb_;
 	ftl::data::ChangeType ctype_ = ftl::data::ChangeType::COMPLETED;
 };
@@ -153,8 +157,6 @@ class ForeignBuilder : public BaseBuilder {
 	std::atomic<int> jobs_;
 	volatile bool skip_;
 	ftl::Handle main_id_;
-	size_t max_buffer_size_ = 16;
-	size_t completion_size_ = 8;
 
 	std::string name_;
 
diff --git a/components/streams/src/receiver.cpp b/components/streams/src/receiver.cpp
index 67945bbf4..58171e8be 100644
--- a/components/streams/src/receiver.cpp
+++ b/components/streams/src/receiver.cpp
@@ -36,6 +36,20 @@ Receiver::Receiver(nlohmann::json &config, ftl::data::Pool *p) : ftl::Configurab
 			i.second->setBufferSize(bsize);
 		}
 	});
+
+	on("max_buffer_size", [this]() {
+		size_t bsize = value("max_buffer_size", 16);
+		for (auto &i : builders_) {
+			i.second->setMaxBufferSize(bsize);
+		}
+	});
+
+	on("completion_size", [this]() {
+		size_t bsize = value("completion_size", 8);
+		for (auto &i : builders_) {
+			i.second->setCompletionSize(bsize);
+		}
+	});
 }
 
 Receiver::~Receiver() {
@@ -56,6 +70,8 @@ ftl::streams::BaseBuilder &Receiver::builder(uint32_t id) {
 		b->setID(id);
 		b->setPool(pool_);
 		fb->setBufferSize(value("frameset_buffer_size", 0));
+		fb->setBufferSize(value("max_buffer_size", 16));
+		fb->setBufferSize(value("completion_size", 8));
 		handles_[id] = std::move(fb->onFrameSet([this](const ftl::data::FrameSetPtr& fs) {
 			callback_.trigger(fs);
 			return true;
-- 
GitLab