Make Copier and Encoder support writing partial messages

Along with changes to DummyEncoder, this gets us nicely setup to create
nice round buffer sizes for both DummyEncoder and LzmaEncoder.  Those
can be written using O_DIRECT in a follow on commit for much more
efficient IO.

To do this, we need to introduce both start and stop bytes to Copier,
and then teach Encoder how to return what it was able to encode, and
then to restart part way through a message.

--flush_size now sets the buffer size.

Change-Id: I7a26d2ce677a28bd0e73333514302dc0612195c2
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/aos/events/logging/buffer_encoder_test.cc b/aos/events/logging/buffer_encoder_test.cc
index 5f3ecab..d5e2e5d 100644
--- a/aos/events/logging/buffer_encoder_test.cc
+++ b/aos/events/logging/buffer_encoder_test.cc
@@ -13,9 +13,12 @@
 
 class DummyEncoderTest : public BufferEncoderBaseTest {};
 
+constexpr size_t kEncoderBufferSize = 4 * 1024 * 1024;
+
 // Tests that buffers are concatenated without being modified.
 TEST_F(DummyEncoderTest, QueuesBuffersAsIs) {
-  DummyEncoder encoder(BufferEncoderBaseTest::kMaxMessageSize);
+  DummyEncoder encoder(BufferEncoderBaseTest::kMaxMessageSize,
+                       kEncoderBufferSize);
   const auto expected = CreateAndEncode(100, &encoder);
   std::vector<uint8_t> data = Flatten(expected);
 
@@ -26,7 +29,8 @@
 
 // Tests that buffers are concatenated without being modified.
 TEST_F(DummyEncoderTest, CoppiesBuffersAsIs) {
-  DummyEncoder encoder(BufferEncoderBaseTest::kMaxMessageSize);
+  DummyEncoder encoder(BufferEncoderBaseTest::kMaxMessageSize,
+                       kEncoderBufferSize);
   const auto expected = CreateAndEncode(100, &encoder);
   std::vector<uint8_t> data = Flatten(expected);
 
@@ -108,7 +112,8 @@
 INSTANTIATE_TEST_SUITE_P(
     Dummy, BufferEncoderTest,
     ::testing::Combine(::testing::Values([](size_t max_buffer_size) {
-                         return std::make_unique<DummyEncoder>(max_buffer_size);
+                         return std::make_unique<DummyEncoder>(
+                             max_buffer_size, kEncoderBufferSize);
                        }),
                        ::testing::Values([](std::string_view filename) {
                          return std::make_unique<DummyDecoder>(filename);