diff --git a/src/protozero/proto_decoder_unittest.cc b/src/protozero/proto_decoder_unittest.cc
index 580e959..5f40a89 100644
--- a/src/protozero/proto_decoder_unittest.cc
+++ b/src/protozero/proto_decoder_unittest.cc
@@ -61,29 +61,25 @@
   const uint64_t data_size = 4096 + kPayloadSize;
   std::unique_ptr<uint8_t, perfetto::base::FreeDeleter> data(
       static_cast<uint8_t*>(malloc(data_size)));
-
-  StaticBufferDelegate delegate(data.get(), data_size);
-  ScatteredStreamWriter writer(&delegate);
-  Message message;
-  message.Reset(&writer);
+  StaticBuffered<Message> message(data.get(), data_size);
 
   // Append a valid field.
-  message.AppendVarInt(/*field_id=*/1, 11);
+  message->AppendVarInt(/*field_id=*/1, 11);
 
   // Append a very large field that will be skipped.
   uint8_t raw[10];
   uint8_t* wptr = raw;
   wptr = WriteVarInt(MakeTagLengthDelimited(2), wptr);
   wptr = WriteVarInt(kPayloadSize, wptr);
-  message.AppendRawProtoBytes(raw, static_cast<size_t>(wptr - raw));
+  message->AppendRawProtoBytes(raw, static_cast<size_t>(wptr - raw));
   const uint8_t padding[1024 * 128]{};
   for (size_t i = 0; i < kPayloadSize / sizeof(padding); i++)
-    message.AppendRawProtoBytes(padding, sizeof(padding));
+    message->AppendRawProtoBytes(padding, sizeof(padding));
 
   // Append another valid field.
-  message.AppendVarInt(/*field_id=*/3, 13);
+  message->AppendVarInt(/*field_id=*/3, 13);
 
-  ProtoDecoder decoder(data.get(), static_cast<size_t>(writer.written()));
+  ProtoDecoder decoder(data.get(), message.Finalize());
   Field field = decoder.ReadField();
   ASSERT_EQ(1u, field.id());
   ASSERT_EQ(11, field.as_int32());
@@ -97,16 +93,10 @@
 }
 
 TEST(ProtoDecoderTest, SingleRepeatedField) {
-  Message message;
-  ScatteredHeapBuffer delegate(512, 512);
-  ScatteredStreamWriter writer(&delegate);
-  delegate.set_writer(&writer);
-  message.Reset(&writer);
-  message.AppendVarInt(/*field_id=*/2, 10);
-  delegate.AdjustUsedSizeOfCurrentSlice();
-  auto used_range = delegate.slices()[0].GetUsedRange();
-
-  TypedProtoDecoder<2, true> tpd(used_range.begin, used_range.size());
+  HeapBuffered<Message> message;
+  message->AppendVarInt(/*field_id=*/2, 10);
+  auto data = message.SerializeAsArray();
+  TypedProtoDecoder<2, true> tpd(data.data(), data.size());
   auto it = tpd.GetRepeated<int32_t>(/*field_id=*/2);
   EXPECT_TRUE(it);
   EXPECT_EQ(it.field().as_int32(), 10);
@@ -137,16 +127,11 @@
 }
 
 TEST(ProtoDecoderTest, SingleRepeatedFieldWithExpansion) {
-  Message message;
-  ScatteredHeapBuffer delegate(512, 512);
-  ScatteredStreamWriter writer(&delegate);
-  delegate.set_writer(&writer);
-  message.Reset(&writer);
+  HeapBuffered<Message> message;
   for (int i = 0; i < 2000; i++) {
-    message.AppendVarInt(/*field_id=*/2, i);
+    message->AppendVarInt(/*field_id=*/2, i);
   }
-  std::vector<uint8_t> data = delegate.StitchSlices();
-
+  auto data = message.SerializeAsArray();
   TypedProtoDecoder<2, true> tpd(data.data(), data.size());
   auto it = tpd.GetRepeated<int32_t>(/*field_id=*/2);
   for (int i = 0; i < 2000; i++) {
@@ -166,26 +151,20 @@
 }
 
 TEST(ProtoDecoderTest, RepeatedFields) {
-  Message message;
-  ScatteredHeapBuffer delegate(512, 512);
-  ScatteredStreamWriter writer(&delegate);
-  delegate.set_writer(&writer);
-  message.Reset(&writer);
+  HeapBuffered<Message> message;
 
-  message.AppendVarInt(1, 10);
-  message.AppendVarInt(2, 20);
-  message.AppendVarInt(3, 30);
+  message->AppendVarInt(1, 10);
+  message->AppendVarInt(2, 20);
+  message->AppendVarInt(3, 30);
 
-  message.AppendVarInt(1, 11);
-  message.AppendVarInt(2, 21);
-  message.AppendVarInt(2, 22);
-
-  delegate.AdjustUsedSizeOfCurrentSlice();
-  auto used_range = delegate.slices()[0].GetUsedRange();
+  message->AppendVarInt(1, 11);
+  message->AppendVarInt(2, 21);
+  message->AppendVarInt(2, 22);
 
   // When iterating with the simple decoder we should just see fields in parsing
   // order.
-  ProtoDecoder decoder(used_range.begin, used_range.size());
+  auto data = message.SerializeAsArray();
+  ProtoDecoder decoder(data.data(), data.size());
   std::string fields_seen;
   for (auto fld = decoder.ReadField(); fld.valid(); fld = decoder.ReadField()) {
     fields_seen +=
@@ -193,7 +172,7 @@
   }
   EXPECT_EQ(fields_seen, "1:10;2:20;3:30;1:11;2:21;2:22;");
 
-  TypedProtoDecoder<4, true> tpd(used_range.begin, used_range.size());
+  TypedProtoDecoder<4, true> tpd(data.data(), data.size());
 
   // When parsing with the one-shot decoder and querying the single field id, we
   // should see the last value for each of them, not the first one. This is the
@@ -557,18 +536,14 @@
 // This is a regression test for b/145339282 (DataSourceConfig.for_testing
 // having a very large ID == 268435455 until Android R).
 TEST(ProtoDecoderTest, SkipBigFieldIds) {
-  Message message;
-  ScatteredHeapBuffer delegate(512, 512);
-  ScatteredStreamWriter writer(&delegate);
-  delegate.set_writer(&writer);
-  message.Reset(&writer);
-  message.AppendVarInt(/*field_id=*/1, 11);
-  message.AppendVarInt(/*field_id=*/1000000, 0);  // Will be skipped
-  message.AppendVarInt(/*field_id=*/65535, 99);
-  message.AppendVarInt(/*field_id=*/268435455, 0);  // Will be skipped
-  message.AppendVarInt(/*field_id=*/2, 12);
-  message.AppendVarInt(/*field_id=*/2000000, 0);  // Will be skipped
-  std::vector<uint8_t> data = delegate.StitchSlices();
+  HeapBuffered<Message> message;
+  message->AppendVarInt(/*field_id=*/1, 11);
+  message->AppendVarInt(/*field_id=*/1000000, 0);  // Will be skipped
+  message->AppendVarInt(/*field_id=*/65535, 99);
+  message->AppendVarInt(/*field_id=*/268435455, 0);  // Will be skipped
+  message->AppendVarInt(/*field_id=*/2, 12);
+  message->AppendVarInt(/*field_id=*/2000000, 0);  // Will be skipped
+  auto data = message.SerializeAsArray();
 
   // Check the iterator-based ProtoDecoder.
   {
@@ -606,13 +581,9 @@
 // very big id. Test that we skip it and return an invalid field, instead of
 // geetting stuck in some loop.
 TEST(ProtoDecoderTest, OneBigFieldIdOnly) {
-  Message message;
-  ScatteredHeapBuffer delegate(512, 512);
-  ScatteredStreamWriter writer(&delegate);
-  delegate.set_writer(&writer);
-  message.Reset(&writer);
-  message.AppendVarInt(/*field_id=*/268435455, 0);
-  std::vector<uint8_t> data = delegate.StitchSlices();
+  HeapBuffered<Message> message;
+  message->AppendVarInt(/*field_id=*/268435455, 0);
+  auto data = message.SerializeAsArray();
 
   // Check the iterator-based ProtoDecoder.
   ProtoDecoder decoder(data.data(), data.size());
diff --git a/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc b/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
index a6be8b6..a4e7913 100644
--- a/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
+++ b/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
@@ -230,18 +230,13 @@
     RegisterAdditionalModules(&context_);
   }
 
-  void ResetTraceBuffers() {
-    heap_buf_.reset(new protozero::ScatteredHeapBuffer());
-    stream_writer_.reset(new protozero::ScatteredStreamWriter(heap_buf_.get()));
-    heap_buf_->set_writer(stream_writer_.get());
-    trace_.Reset(stream_writer_.get());
-  }
+  void ResetTraceBuffers() { trace_.Reset(); }
 
   void SetUp() override { ResetTraceBuffers(); }
 
   util::Status Tokenize() {
-    trace_.Finalize();
-    std::vector<uint8_t> trace_bytes = heap_buf_->StitchSlices();
+    trace_->Finalize();
+    std::vector<uint8_t> trace_bytes = trace_.SerializeAsArray();
     std::unique_ptr<uint8_t[]> raw_trace(new uint8_t[trace_bytes.size()]);
     memcpy(raw_trace.get(), trace_bytes.data(), trace_bytes.size());
     context_.chunk_reader.reset(new ProtoTraceTokenizer(&context_));
@@ -273,9 +268,7 @@
     return std::unique_ptr<TraceParser>(new ProtoTraceParser(&context_));
   }
 
-  std::unique_ptr<protozero::ScatteredHeapBuffer> heap_buf_;
-  std::unique_ptr<protozero::ScatteredStreamWriter> stream_writer_;
-  protos::pbzero::Trace trace_;
+  protozero::HeapBuffered<protos::pbzero::Trace> trace_;
   TraceProcessorContext context_;
   MockEventTracker* event_;
   MockSchedEventTracker* sched_;
@@ -288,7 +281,7 @@
 // TODO(eseckler): Refactor these into a new file for ftrace tests.
 
 TEST_F(ProtoTraceParserTest, LoadSingleEvent) {
-  auto* bundle = trace_.add_packet()->set_ftrace_events();
+  auto* bundle = trace_->add_packet()->set_ftrace_events();
   bundle->set_cpu(10);
 
   auto* event = bundle->add_event();
@@ -313,7 +306,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadEventsIntoRaw) {
-  auto* bundle = trace_.add_packet()->set_ftrace_events();
+  auto* bundle = trace_->add_packet()->set_ftrace_events();
   bundle->set_cpu(10);
 
   // This event is unknown and will only appear in
@@ -365,7 +358,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadGenericFtrace) {
-  auto* packet = trace_.add_packet();
+  auto* packet = trace_->add_packet();
   packet->set_timestamp(100);
 
   auto* bundle = packet->set_ftrace_events();
@@ -418,7 +411,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadMultipleEvents) {
-  auto* bundle = trace_.add_packet()->set_ftrace_events();
+  auto* bundle = trace_->add_packet()->set_ftrace_events();
   bundle->set_cpu(10);
 
   auto* event = bundle->add_event();
@@ -461,7 +454,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadMultiplePackets) {
-  auto* bundle = trace_.add_packet()->set_ftrace_events();
+  auto* bundle = trace_->add_packet()->set_ftrace_events();
   bundle->set_cpu(10);
 
   auto* event = bundle->add_event();
@@ -479,7 +472,7 @@
   sched_switch->set_next_pid(100);
   sched_switch->set_next_prio(1024);
 
-  bundle = trace_.add_packet()->set_ftrace_events();
+  bundle = trace_->add_packet()->set_ftrace_events();
   bundle->set_cpu(10);
 
   event = bundle->add_event();
@@ -506,7 +499,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, RepeatedLoadSinglePacket) {
-  auto* bundle = trace_.add_packet()->set_ftrace_events();
+  auto* bundle = trace_->add_packet()->set_ftrace_events();
   bundle->set_cpu(10);
   auto* event = bundle->add_event();
   event->set_timestamp(1000);
@@ -526,7 +519,7 @@
                               32, 100, base::StringView(kProcName1), 1024));
   Tokenize();
 
-  bundle = trace_.add_packet()->set_ftrace_events();
+  bundle = trace_->add_packet()->set_ftrace_events();
   bundle->set_cpu(10);
   event = bundle->add_event();
   event->set_timestamp(1001);
@@ -547,7 +540,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadCpuFreq) {
-  auto* bundle = trace_.add_packet()->set_ftrace_events();
+  auto* bundle = trace_->add_packet()->set_ftrace_events();
   bundle->set_cpu(12);
   auto* event = bundle->add_event();
   event->set_timestamp(1000);
@@ -563,7 +556,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadMemInfo) {
-  auto* packet = trace_.add_packet();
+  auto* packet = trace_->add_packet();
   uint64_t ts = 1000;
   packet->set_timestamp(ts);
   auto* bundle = packet->set_sys_stats();
@@ -580,7 +573,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadVmStats) {
-  auto* packet = trace_.add_packet();
+  auto* packet = trace_->add_packet();
   uint64_t ts = 1000;
   packet->set_timestamp(ts);
   auto* bundle = packet->set_sys_stats();
@@ -597,7 +590,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadProcessPacket) {
-  auto* tree = trace_.add_packet()->set_process_tree();
+  auto* tree = trace_->add_packet()->set_process_tree();
   auto* process = tree->add_processes();
   static const char kProcName1[] = "proc1";
 
@@ -612,7 +605,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadProcessPacket_FirstCmdline) {
-  auto* tree = trace_.add_packet()->set_process_tree();
+  auto* tree = trace_->add_packet()->set_process_tree();
   auto* process = tree->add_processes();
   static const char kProcName1[] = "proc1";
   static const char kProcName2[] = "proc2";
@@ -629,7 +622,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, LoadThreadPacket) {
-  auto* tree = trace_.add_packet()->set_process_tree();
+  auto* tree = trace_->add_packet()->set_process_tree();
   auto* thread = tree->add_threads();
   thread->set_tid(1);
   thread->set_tgid(2);
@@ -642,7 +635,7 @@
   context_.sorter.reset(new TraceSorter(
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* process_desc = packet->set_process_descriptor();
@@ -650,7 +643,7 @@
     process_desc->set_process_name("OldProcessName");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* process_desc = packet->set_process_descriptor();
@@ -658,7 +651,7 @@
     process_desc->set_process_name("NewProcessName");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(2);
     packet->set_incremental_state_cleared(true);
     auto* process_desc = packet->set_process_descriptor();
@@ -687,7 +680,7 @@
   context_.sorter.reset(new TraceSorter(
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -698,7 +691,7 @@
     thread_desc->set_thread_name("OldThreadName");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -709,7 +702,7 @@
     thread_desc->set_thread_name("NewThreadName");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(2);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -744,7 +737,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -754,7 +747,7 @@
     thread_desc->set_reference_thread_time_us(2000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -765,7 +758,7 @@
     legacy_event->set_phase('B');
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1020.
@@ -776,7 +769,7 @@
     legacy_event->set_phase('E');
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_absolute_us(1005);
@@ -838,7 +831,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -848,7 +841,7 @@
     thread_desc->set_reference_thread_time_us(2000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -859,7 +852,7 @@
     legacy_event->set_name_iid(1);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1020.
@@ -870,7 +863,7 @@
     legacy_event->set_name_iid(1);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_absolute_us(1015);
@@ -929,7 +922,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -940,7 +933,7 @@
     thread_desc->set_reference_thread_instruction_count(3000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);              // absolute: 1010.
@@ -960,7 +953,7 @@
     ev1->set_name("ev1");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_absolute_us(1040);
@@ -972,7 +965,7 @@
     legacy_event->set_phase('I');
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_absolute_us(1050);
@@ -984,7 +977,7 @@
         protos::pbzero::TrackEvent::LegacyEvent::SCOPE_PROCESS);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);              // absolute: 1020.
@@ -996,7 +989,7 @@
     legacy_event->set_phase('E');
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_absolute_us(1005);
@@ -1111,7 +1104,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -1122,7 +1115,7 @@
     thread_desc->set_reference_thread_instruction_count(3000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);              // absolute: 1010.
@@ -1144,7 +1137,7 @@
     ev1->set_name("ev1");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);              // absolute: 1020.
@@ -1158,7 +1151,7 @@
     legacy_event->set_use_async_tts(true);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_absolute_us(1015);
@@ -1175,7 +1168,7 @@
   }
   {
     // Different category but same global_id -> separate track.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_absolute_us(1018);
@@ -1191,7 +1184,7 @@
     cat2->set_name("cat2");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_absolute_us(1030);
@@ -1268,7 +1261,7 @@
 
   // Sequence 1.
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     packet->set_timestamp(1000000);
@@ -1280,7 +1273,7 @@
     thread_desc->set_tid(16);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_timestamp(1000000);
     auto* track_desc = packet->set_track_descriptor();
@@ -1289,7 +1282,7 @@
   }
   {
     // Async event started on "Async track 1".
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_timestamp(1010000);
     auto* event = packet->set_track_event();
@@ -1312,7 +1305,7 @@
   }
   {
     // Instant event on "Thread track 1".
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_timestamp(1015000);
     auto* event = packet->set_track_event();
@@ -1333,7 +1326,7 @@
 
   // Sequence 2.
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(2);
     packet->set_incremental_state_cleared(true);
     packet->set_timestamp(1000000);
@@ -1346,7 +1339,7 @@
   }
   {
     // Async event completed on "Async track 1".
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(2);
     packet->set_timestamp(1020000);
     auto* event = packet->set_track_event();
@@ -1359,7 +1352,7 @@
   }
   {
     // Instant event on "Thread track 2".
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(2);
     packet->set_timestamp(1016000);
     auto* event = packet->set_track_event();
@@ -1461,7 +1454,7 @@
   // in the order they appear here, but then resorted before parsing to appear
   // after the events below.
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     packet->set_timestamp(3000);
@@ -1479,7 +1472,7 @@
     track_event_defaults->add_extra_counter_track_uuids(10);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_timestamp(3000);
     auto* track_desc = packet->set_track_descriptor();
@@ -1496,7 +1489,7 @@
     // counter values should still be imported as counter values and as args for
     // JSON export. Should appear on default track "t1" with
     // extra_counter_values for "c1".
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_sequence_flags(
         protos::pbzero::TracePacket::SEQ_NEEDS_INCREMENTAL_STATE);
@@ -1509,7 +1502,7 @@
   }
   {
     // End for "ev1".
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_timestamp(1100);
     auto* event = packet->set_track_event();
@@ -1563,7 +1556,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* thread_desc = packet->set_thread_descriptor();
     thread_desc->set_pid(15);
@@ -1574,7 +1567,7 @@
   {
     // Event should be discarded because delta timestamps require valid
     // incremental state + thread descriptor.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -1587,7 +1580,7 @@
   {
     // Event should be discarded because it specifies
     // SEQ_NEEDS_INCREMENTAL_STATE.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_timestamp(2000000);
     packet->set_trusted_packet_sequence_id(1);
     packet->set_sequence_flags(
@@ -1600,7 +1593,7 @@
   {
     // Event should be accepted because it does not specify
     // SEQ_NEEDS_INCREMENTAL_STATE and uses absolute timestamps.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_timestamp(2100000);
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
@@ -1626,7 +1619,7 @@
   {
     // Event should be discarded because it specifies delta timestamps and no
     // thread descriptor was seen yet.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* event = packet->set_track_event();
@@ -1640,7 +1633,7 @@
   {
     // Events that specify SEQ_NEEDS_INCREMENTAL_STATE should be accepted even
     // if there's no valid thread descriptor.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_timestamp(2000000);
     packet->set_trusted_packet_sequence_id(1);
     packet->set_sequence_flags(
@@ -1666,7 +1659,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -1675,7 +1668,7 @@
     thread_desc->set_reference_timestamp_us(1000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -1686,7 +1679,7 @@
   }
   {
     // Event should be dropped because data loss occurred before.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_previous_packet_dropped(true);  // Data loss occurred.
     auto* event = packet->set_track_event();
@@ -1698,7 +1691,7 @@
   }
   {
     // Event should be dropped because incremental state is invalid.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);
@@ -1709,7 +1702,7 @@
   }
   {
     // Event should be dropped because no new thread descriptor was seen yet.
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* event = packet->set_track_event();
@@ -1720,7 +1713,7 @@
     legacy_event->set_phase('E');
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* thread_desc = packet->set_thread_descriptor();
     thread_desc->set_pid(15);
@@ -1728,7 +1721,7 @@
     thread_desc->set_reference_timestamp_us(2000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 2010.
@@ -1760,7 +1753,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -1769,7 +1762,7 @@
     thread_desc->set_reference_timestamp_us(1000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -1787,7 +1780,7 @@
     ev1->set_name("ev1");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(2);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -1796,7 +1789,7 @@
     thread_desc->set_reference_timestamp_us(995);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(2);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1005.
@@ -1814,7 +1807,7 @@
     ev2->set_name("ev2");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1020.
@@ -1824,7 +1817,7 @@
     legacy_event->set_phase('E');
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(2);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1015.
@@ -1871,7 +1864,7 @@
   MockBoundInserter inserter;
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -1880,7 +1873,7 @@
     thread_desc->set_reference_timestamp_us(1000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -1932,7 +1925,7 @@
     an2->set_name("an2");
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1020.
@@ -2072,7 +2065,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -2081,7 +2074,7 @@
     thread_desc->set_reference_timestamp_us(1000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -2138,7 +2131,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -2147,7 +2140,7 @@
     thread_desc->set_reference_timestamp_us(1000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -2215,7 +2208,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -2225,7 +2218,7 @@
     thread_desc->set_reference_thread_time_us(2000);
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);   // absolute: 1010.
@@ -2333,7 +2326,7 @@
                        {protos::pbzero::BUILTIN_CLOCK_MONOTONIC, 1000000}});
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
     auto* thread_desc = packet->set_thread_descriptor();
@@ -2342,7 +2335,7 @@
     thread_desc->set_reference_timestamp_us(1000);  // MONOTONIC.
   }
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* event = packet->set_track_event();
     event->set_timestamp_delta_us(10);  // absolute: 1010 (mon), 10 (boot).
@@ -2375,7 +2368,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_timestamp(1000);
     packet->set_timestamp_clock_id(3);
     packet->set_trusted_packet_sequence_id(1);
@@ -2404,7 +2397,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_timestamp(1000);
     packet->set_timestamp_clock_id(3);
     packet->set_trusted_packet_sequence_id(1);
@@ -2443,7 +2436,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* bundle = packet->set_chrome_events();
     bundle->add_legacy_ftrace_output(kDataPart0);
@@ -2473,7 +2466,7 @@
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* bundle = packet->set_chrome_events();
     auto* user_trace = bundle->add_legacy_json_trace();
@@ -2506,7 +2499,7 @@
   context_.sorter.reset(new TraceSorter(
       CreateParser(), std::numeric_limits<int64_t>::max() /*window size*/));
 
-  auto* metadata = trace_.add_packet()->set_chrome_benchmark_metadata();
+  auto* metadata = trace_->add_packet()->set_chrome_benchmark_metadata();
   metadata->set_benchmark_name(kName);
   metadata->add_story_tags(kTag1);
   metadata->add_story_tags(kTag2);
@@ -2534,7 +2527,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, AndroidPackagesList) {
-  auto* packet = trace_.add_packet();
+  auto* packet = trace_->add_packet();
   auto* pkg_list = packet->set_packages_list();
 
   pkg_list->set_read_error(false);
@@ -2586,7 +2579,7 @@
 }
 
 TEST_F(ProtoTraceParserTest, AndroidPackagesListDuplicate) {
-  auto* packet = trace_.add_packet();
+  auto* packet = trace_->add_packet();
   auto* pkg_list = packet->set_packages_list();
 
   pkg_list->set_read_error(false);
@@ -2632,7 +2625,7 @@
 
 TEST_F(ProtoTraceParserTest, ParseCPUProfileSamplesIntoTable) {
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
 
@@ -2672,7 +2665,7 @@
   }
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
 
     auto* samples = packet->set_streaming_profile_packet();
@@ -2685,7 +2678,7 @@
   }
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     auto* samples = packet->set_streaming_profile_packet();
 
@@ -2728,7 +2721,7 @@
 
 TEST_F(ProtoTraceParserTest, CPUProfileSamplesTimestampsAreClockMonotonic) {
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(0);
 
     // 1000 us monotonic == 10000 us boottime.
@@ -2742,7 +2735,7 @@
   }
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
     packet->set_incremental_state_cleared(true);
 
@@ -2773,7 +2766,7 @@
   }
 
   {
-    auto* packet = trace_.add_packet();
+    auto* packet = trace_->add_packet();
     packet->set_trusted_packet_sequence_id(1);
 
     auto* samples = packet->set_streaming_profile_packet();
diff --git a/src/traced/probes/ftrace/cpu_reader_unittest.cc b/src/traced/probes/ftrace/cpu_reader_unittest.cc
index c59b027..43c574a 100644
--- a/src/traced/probes/ftrace/cpu_reader_unittest.cc
+++ b/src/traced/probes/ftrace/cpu_reader_unittest.cc
@@ -112,24 +112,20 @@
 template <class ZeroT, class ProtoT>
 class ProtoProvider {
  public:
-  explicit ProtoProvider(size_t chunk_size)
-      : chunk_size_(chunk_size), delegate_(chunk_size_), stream_(&delegate_) {
-    delegate_.set_writer(&stream_);
-    writer_.Reset(&stream_);
-  }
+  explicit ProtoProvider(size_t chunk_size) : chunk_size_(chunk_size) {}
   ~ProtoProvider() = default;
 
-  ZeroT* writer() { return &writer_; }
+  ZeroT* writer() { return writer_.get(); }
+  void ResetWriter() { writer_.Reset(); }
 
   // Stitch together the scattered chunks into a single buffer then attempt
   // to parse the buffer as a FtraceEventBundle. Returns the FtraceEventBundle
   // on success and nullptr on failure.
   std::unique_ptr<ProtoT> ParseProto() {
     auto bundle = std::unique_ptr<ProtoT>(new ProtoT());
-    std::vector<uint8_t> buffer = delegate_.StitchSlices();
-    if (!bundle->ParseFromArray(buffer.data(), buffer.size())) {
+    std::vector<uint8_t> buffer = writer_.SerializeAsArray();
+    if (!bundle->ParseFromArray(buffer.data(), buffer.size()))
       return nullptr;
-    }
     return bundle;
   }
 
@@ -138,9 +134,7 @@
   ProtoProvider& operator=(const ProtoProvider&) = delete;
 
   size_t chunk_size_;
-  protozero::ScatteredHeapBuffer delegate_;
-  protozero::ScatteredStreamWriter stream_;
-  ZeroT writer_;
+  protozero::HeapBuffered<ZeroT> writer_;
 };
 
 using BundleProvider = ProtoProvider<protos::pbzero::FtraceEventBundle,
@@ -846,6 +840,7 @@
   ASSERT_TRUE(bundle);
   EXPECT_EQ(0u, bundle->event().size());
   EXPECT_FALSE(bundle->has_compact_sched());
+  bundle_provider.ResetWriter();
 
   // Instead, sched switch fields were buffered:
   EXPECT_LT(0u, compact_buffer.sched_switch().size());
