Factor building a MessageHeader out
We want to reuse this for message_bridge.
Change-Id: I7f45c83d0d40496273ad8987d4627b7ccb78913a
diff --git a/aos/events/logging/logger.cc b/aos/events/logging/logger.cc
index 584c68d..01f75ec 100644
--- a/aos/events/logging/logger.cc
+++ b/aos/events/logging/logger.cc
@@ -155,6 +155,25 @@
});
}
+flatbuffers::Offset<MessageHeader> PackMessage(
+ flatbuffers::FlatBufferBuilder *fbb, const Context &context,
+ int channel_index) {
+ flatbuffers::Offset<flatbuffers::Vector<uint8_t>> data_offset =
+ fbb->CreateVector(static_cast<uint8_t *>(context.data), context.size);
+
+ MessageHeader::Builder message_header_builder(*fbb);
+ message_header_builder.add_channel_index(channel_index);
+ message_header_builder.add_monotonic_sent_time(
+ context.monotonic_sent_time.time_since_epoch().count());
+ message_header_builder.add_realtime_sent_time(
+ context.realtime_sent_time.time_since_epoch().count());
+
+ message_header_builder.add_queue_index(context.queue_index);
+
+ message_header_builder.add_data(data_offset);
+ return message_header_builder.Finish();
+}
+
void Logger::DoLogData() {
// We want to guarentee that messages aren't out of order by more than
// max_out_of_order_duration. To do this, we need sync points. Every write
@@ -200,31 +219,12 @@
max_header_size_);
fbb.ForceDefaults(1);
- flatbuffers::Offset<flatbuffers::Vector<uint8_t>> data_offset =
- fbb.CreateVector(
- static_cast<uint8_t *>(f.fetcher->context().data),
- f.fetcher->context().size);
+ fbb.FinishSizePrefixed(
+ PackMessage(&fbb, f.fetcher->context(), channel_index));
VLOG(1) << "Writing data for channel "
<< FlatbufferToJson(f.fetcher->channel());
- MessageHeader::Builder message_header_builder(fbb);
- message_header_builder.add_channel_index(channel_index);
- message_header_builder.add_monotonic_sent_time(
- f.fetcher->context()
- .monotonic_sent_time.time_since_epoch()
- .count());
- message_header_builder.add_realtime_sent_time(
- f.fetcher->context()
- .realtime_sent_time.time_since_epoch()
- .count());
-
- message_header_builder.add_queue_index(
- f.fetcher->context().queue_index);
-
- message_header_builder.add_data(data_offset);
-
- fbb.FinishSizePrefixed(message_header_builder.Finish());
max_header_size_ = std::max(
max_header_size_, fbb.GetSize() - f.fetcher->context().size);
writer_->QueueSizedFlatbuffer(&fbb);
diff --git a/aos/events/logging/logger.h b/aos/events/logging/logger.h
index f03aa64..db23767 100644
--- a/aos/events/logging/logger.h
+++ b/aos/events/logging/logger.h
@@ -45,6 +45,11 @@
std::vector<struct iovec> iovec_;
};
+// Packes a message pointed to by the context into a MessageHeader.
+flatbuffers::Offset<MessageHeader> PackMessage(
+ flatbuffers::FlatBufferBuilder *fbb, const Context &context,
+ int channel_index);
+
// Logs all channels available in the event loop to disk every 100 ms.
// Start by logging one message per channel to capture any state and
// configuration that is sent rately on a channel and would affect execution.