Use ResizeableBuffer for FlatbufferVector
This speeds up fastbuild log reading a lot.
Change-Id: I4452096a9a1d5b0330cbfeed5762dcc4f15d0d20
diff --git a/aos/events/logging/logfile_utils.cc b/aos/events/logging/logfile_utils.cc
index c7f013d..9d8145d 100644
--- a/aos/events/logging/logfile_utils.cc
+++ b/aos/events/logging/logfile_utils.cc
@@ -300,8 +300,10 @@
<< ": Failed to read header from: " << filename;
// And copy the config so we have it forever, removing the size prefix.
- std::vector<uint8_t> data(
- config_data.begin() + sizeof(flatbuffers::uoffset_t), config_data.end());
+ ResizeableBuffer data;
+ data.resize(config_data.size() - sizeof(flatbuffers::uoffset_t));
+ memcpy(data.data(), config_data.begin() + sizeof(flatbuffers::uoffset_t),
+ data.size());
return FlatbufferVector<LogFileHeader>(std::move(data));
}
@@ -317,9 +319,11 @@
<< ": Failed to read data from: " << filename;
}
- // And copy the data so we have it forever.
- std::vector<uint8_t> data(data_span.begin() + sizeof(flatbuffers::uoffset_t),
- data_span.end());
+ // And copy the config so we have it forever, removing the size prefix.
+ ResizeableBuffer data;
+ data.resize(data_span.size() - sizeof(flatbuffers::uoffset_t));
+ memcpy(data.data(), data_span.begin() + sizeof(flatbuffers::uoffset_t),
+ data.size());
return FlatbufferVector<MessageHeader>(std::move(data));
}
@@ -334,8 +338,11 @@
<< ": Failed to read header from: " << filename;
// And copy the header data so we have it forever.
- std::vector<uint8_t> header_data_copy(
- header_data.begin() + sizeof(flatbuffers::uoffset_t), header_data.end());
+ ResizeableBuffer header_data_copy;
+ header_data_copy.resize(header_data.size() - sizeof(flatbuffers::uoffset_t));
+ memcpy(header_data_copy.data(),
+ header_data.begin() + sizeof(flatbuffers::uoffset_t),
+ header_data_copy.size());
raw_log_file_header_ =
FlatbufferVector<LogFileHeader>(std::move(header_data_copy));
@@ -352,8 +359,12 @@
return std::nullopt;
}
- FlatbufferVector<MessageHeader> result{std::vector<uint8_t>(
- msg_data.begin() + sizeof(flatbuffers::uoffset_t), msg_data.end())};
+ ResizeableBuffer result_buffer;
+ result_buffer.resize(msg_data.size() - sizeof(flatbuffers::uoffset_t));
+ memcpy(result_buffer.data(),
+ msg_data.begin() + sizeof(flatbuffers::uoffset_t),
+ result_buffer.size());
+ FlatbufferVector<MessageHeader> result(std::move(result_buffer));
const monotonic_clock::time_point timestamp = monotonic_clock::time_point(
chrono::nanoseconds(result.message().monotonic_sent_time()));