Rate limit foxglove image converter
This makes live foxglove far more usable
Change-Id: I909c708343a0fd2d7048cce61f7f49410c64093b
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/frc971/vision/foxglove_image_converter_lib.cc b/frc971/vision/foxglove_image_converter_lib.cc
index 920eaf7..649f1bb 100644
--- a/frc971/vision/foxglove_image_converter_lib.cc
+++ b/frc971/vision/foxglove_image_converter_lib.cc
@@ -6,6 +6,8 @@
DEFINE_int32(jpeg_quality, 60,
"Compression quality of JPEGs, 0-100; lower numbers mean lower "
"quality and resulting image sizes.");
+DEFINE_uint32(max_period_ms, 100,
+ "Fastest period at which to convert images, to limit CPU usage.");
namespace frc971::vision {
std::string_view ExtensionForCompression(ImageCompression compression) {
@@ -49,9 +51,13 @@
event_loop_, input_channel,
[this, compression](const cv::Mat image,
const aos::monotonic_clock::time_point eof) {
- auto builder = sender_.MakeBuilder();
- builder.CheckOk(builder.Send(
- CompressImage(image, eof, builder.fbb(), compression)));
+ if (event_loop_->monotonic_now() >
+ (std::chrono::milliseconds(FLAGS_max_period_ms) +
+ sender_.monotonic_sent_time())) {
+ auto builder = sender_.MakeBuilder();
+ builder.CheckOk(builder.Send(
+ CompressImage(image, eof, builder.fbb(), compression)));
+ }
}),
sender_(
event_loop_->MakeSender<foxglove::CompressedImage>(output_channel)) {}