blob: b6350a581bdc2f83dfac9f6edbfd1f52693c47d8 [file] [log] [blame]
Brian Silvermanf51499a2020-09-21 12:49:08 -07001#include "aos/events/logging/buffer_encoder.h"
2
3#include <fcntl.h>
4#include <sys/stat.h>
5#include <sys/types.h>
6
Austin Schuh99f7c6a2024-06-25 22:07:44 -07007#include "absl/log/check.h"
8#include "absl/log/log.h"
Brian Silvermanf51499a2020-09-21 12:49:08 -07009
Philipp Schrader790cb542023-07-05 21:06:52 -070010#include "aos/flatbuffers.h"
11
Brian Silvermanf51499a2020-09-21 12:49:08 -070012namespace aos::logger {
13
Austin Schuh8bdfc492023-02-11 12:53:13 -080014DummyEncoder::DummyEncoder(size_t /*max_message_size*/, size_t buffer_size) {
Austin Schuh48d10d62022-10-16 22:19:23 -070015 // Round up to the nearest page size.
Austin Schuh8bdfc492023-02-11 12:53:13 -080016 input_buffer_.reserve(buffer_size);
Austin Schuh48d10d62022-10-16 22:19:23 -070017 return_queue_.resize(1);
18}
Brian Silvermanf51499a2020-09-21 12:49:08 -070019
Austin Schuh8bdfc492023-02-11 12:53:13 -080020size_t DummyEncoder::space() const {
21 return input_buffer_.capacity() - input_buffer_.size();
Austin Schuh48d10d62022-10-16 22:19:23 -070022}
23
Austin Schuh8bdfc492023-02-11 12:53:13 -080024bool DummyEncoder::HasSpace(size_t request) const { return request <= space(); }
25
Maxwell Gumleyd26e6292024-04-24 10:45:07 -060026size_t DummyEncoder::Encode(Copier *copy, size_t start_byte,
27 std::chrono::nanoseconds * /*encode_duration*/) {
Austin Schuh48d10d62022-10-16 22:19:23 -070028 const size_t input_buffer_initial_size = input_buffer_.size();
29
Austin Schuh8bdfc492023-02-11 12:53:13 -080030 size_t expected_write_size =
31 std::min(input_buffer_.capacity() - input_buffer_initial_size,
32 copy->size() - start_byte);
33 input_buffer_.resize(input_buffer_initial_size + expected_write_size);
34 const size_t written_size =
35 copy->Copy(input_buffer_.data() + input_buffer_initial_size, start_byte,
36 expected_write_size + start_byte);
Austin Schuh48d10d62022-10-16 22:19:23 -070037
38 total_bytes_ += written_size;
Austin Schuh8bdfc492023-02-11 12:53:13 -080039
40 return written_size;
Brian Silvermanf51499a2020-09-21 12:49:08 -070041}
42
43void DummyEncoder::Clear(const int n) {
44 CHECK_GE(n, 0);
45 CHECK_LE(static_cast<size_t>(n), queue_size());
Austin Schuh48d10d62022-10-16 22:19:23 -070046 if (n != 0) {
47 input_buffer_.resize(0u);
48 }
Brian Silvermanf51499a2020-09-21 12:49:08 -070049}
50
Austin Schuh48d10d62022-10-16 22:19:23 -070051absl::Span<const absl::Span<const uint8_t>> DummyEncoder::queue() {
52 if (input_buffer_.size() != 0) {
53 return_queue_[0] =
54 absl::Span<const uint8_t>(input_buffer_.data(), input_buffer_.size());
55 return return_queue_;
56 } else {
57 return absl::Span<const absl::Span<const uint8_t>>();
Brian Silvermanf51499a2020-09-21 12:49:08 -070058 }
Brian Silvermanf51499a2020-09-21 12:49:08 -070059}
60
Austin Schuh48d10d62022-10-16 22:19:23 -070061size_t DummyEncoder::queued_bytes() const { return input_buffer_.size(); }
Brian Silvermanf51499a2020-09-21 12:49:08 -070062
63DummyDecoder::DummyDecoder(std::string_view filename)
Tyler Chatow2015bc62021-08-04 21:15:09 -070064 : filename_(filename), fd_(open(filename_.c_str(), O_RDONLY | O_CLOEXEC)) {
Brian Silvermanf51499a2020-09-21 12:49:08 -070065 PCHECK(fd_ != -1) << ": Failed to open " << filename;
66}
67
68DummyDecoder::~DummyDecoder() {
69 int status = close(fd_);
70 if (status != 0) {
71 PLOG(ERROR) << "DummyDecoder: Failed to close file";
72 }
73}
74
75size_t DummyDecoder::Read(uint8_t *begin, uint8_t *end) {
76 if (end_of_file_) {
77 return 0;
78 }
79 const ssize_t count = read(fd_, begin, end - begin);
80 PCHECK(count >= 0) << ": Failed to read from file";
81 if (count == 0) {
82 end_of_file_ = true;
83 }
84 return static_cast<size_t>(count);
85}
86
87} // namespace aos::logger