Merge "ui: Fix unit tests" into main
diff --git a/src/traced/probes/ftrace/ftrace_config_muxer.cc b/src/traced/probes/ftrace/ftrace_config_muxer.cc
index 97969be..3e2b9ab 100644
--- a/src/traced/probes/ftrace/ftrace_config_muxer.cc
+++ b/src/traced/probes/ftrace/ftrace_config_muxer.cc
@@ -625,12 +625,12 @@
     // Set up the rest of the tracefs state, without starting it.
     // Notes:
     // * resizing buffers can be quite slow (up to hundreds of ms).
-    // * resizing buffers doesn't clear their existing contents, which matters
-    // to the preserve_ftrace_buffer option.
+    // * resizing buffers may truncate existing contents if the new size is
+    // smaller, which matters to the preserve_ftrace_buffer option.
     if (!request.preserve_ftrace_buffer()) {
       SetupClock(request);
+      SetupBufferSize(request);
     }
-    SetupBufferSize(request);
   }
 
   std::set<GroupAndName> events = GetFtraceEvents(request, table_);
diff --git a/src/traced/probes/ftrace/ftrace_config_muxer_unittest.cc b/src/traced/probes/ftrace/ftrace_config_muxer_unittest.cc
index d5d7f05..3ef5635 100644
--- a/src/traced/probes/ftrace/ftrace_config_muxer_unittest.cc
+++ b/src/traced/probes/ftrace/ftrace_config_muxer_unittest.cc
@@ -1385,5 +1385,28 @@
   ASSERT_FALSE(model.SetupConfig(/* id= */ 73, config));
 }
 
+TEST_F(FtraceConfigMuxerTest, PreserveFtraceBufferNotSetBufferSizeKb) {
+  auto fake_table = CreateFakeTable();
+  NiceMock<MockFtraceProcfs> ftrace;
+  FtraceConfigMuxer model(&ftrace, fake_table.get(), GetSyscallTable(), {},
+                          /* secondary_instance= */ false);
+
+  FtraceConfig config = CreateFtraceConfig({"sched/sched_switch"});
+
+  config.set_preserve_ftrace_buffer(true);
+  EXPECT_CALL(ftrace, ReadOneCharFromFile("/root/tracing_on"))
+      .WillOnce(Return('1'));
+  ON_CALL(ftrace, ReadFileIntoString("/root/trace_clock"))
+      .WillByDefault(Return("[local] global boot"));
+  EXPECT_CALL(ftrace, ReadFileIntoString("/root/trace_clock"))
+      .Times(AnyNumber());
+  EXPECT_CALL(ftrace, WriteToFile("/root/buffer_size_kb", _)).Times(0);
+  EXPECT_CALL(ftrace,
+              WriteToFile("/root/events/sched/sched_switch/enable", "1"));
+
+  FtraceConfigId id = 44;
+  ASSERT_TRUE(model.SetupConfig(id, config));
+}
+
 }  // namespace
 }  // namespace perfetto