Merge "perfetto: bump max cpu buffer size in ftrace"
diff --git a/src/ftrace_reader/ftrace_config_muxer.cc b/src/ftrace_reader/ftrace_config_muxer.cc
index 81c4bc3..331ddc3 100644
--- a/src/ftrace_reader/ftrace_config_muxer.cc
+++ b/src/ftrace_reader/ftrace_config_muxer.cc
@@ -33,8 +33,8 @@
 // trace_clocks in preference order.
 constexpr const char* kClocks[] = {"boot", "global", "local"};
 
-constexpr int kDefaultPerCpuBufferSizeKb = 512;   // 512kb
-constexpr int kMaxPerCpuBufferSizeKb = 2 * 1024;  // 2mb
+constexpr int kDefaultPerCpuBufferSizeKb = 512;    // 512kb
+constexpr int kMaxPerCpuBufferSizeKb = 64 * 1024;  // 64mb
 
 std::vector<std::string> difference(const std::set<std::string>& a,
                                     const std::set<std::string>& b) {
@@ -209,8 +209,12 @@
 size_t ComputeCpuBufferSizeInPages(size_t requested_buffer_size_kb) {
   if (requested_buffer_size_kb == 0)
     requested_buffer_size_kb = kDefaultPerCpuBufferSizeKb;
-  if (requested_buffer_size_kb > kMaxPerCpuBufferSizeKb)
-    requested_buffer_size_kb = kDefaultPerCpuBufferSizeKb;
+  if (requested_buffer_size_kb > kMaxPerCpuBufferSizeKb) {
+    PERFETTO_ELOG(
+        "The requested ftrace buf size (%zu KB) is too big, capping to %d KB",
+        requested_buffer_size_kb, kMaxPerCpuBufferSizeKb);
+    requested_buffer_size_kb = kMaxPerCpuBufferSizeKb;
+  }
 
   size_t pages = requested_buffer_size_kb / (base::kPageSize / 1024);
   if (pages == 0)
diff --git a/src/ftrace_reader/ftrace_config_muxer_unittest.cc b/src/ftrace_reader/ftrace_config_muxer_unittest.cc
index 673422c..8042117 100644
--- a/src/ftrace_reader/ftrace_config_muxer_unittest.cc
+++ b/src/ftrace_reader/ftrace_config_muxer_unittest.cc
@@ -134,12 +134,13 @@
 }
 
 TEST(FtraceConfigMuxerTest, ComputeCpuBufferSizeInPages) {
+  static constexpr size_t kMaxBufSizeInPages = 16 * 1024u;
   // No buffer size given: good default (128 pages = 512kb).
   EXPECT_EQ(ComputeCpuBufferSizeInPages(0), 128u);
   // Buffer size given way too big: good default.
-  EXPECT_EQ(ComputeCpuBufferSizeInPages(10 * 1024 * 1024), 128u);
-  // The limit is 2mb per CPU, 3mb is too much.
-  EXPECT_EQ(ComputeCpuBufferSizeInPages(3 * 1024), 128u);
+  EXPECT_EQ(ComputeCpuBufferSizeInPages(10 * 1024 * 1024), kMaxBufSizeInPages);
+  // The limit is 64mb per CPU, 512mb is too much.
+  EXPECT_EQ(ComputeCpuBufferSizeInPages(512 * 1024), kMaxBufSizeInPages);
   // Your size ends up with less than 1 page per cpu -> 1 page.
   EXPECT_EQ(ComputeCpuBufferSizeInPages(3), 1u);
   // You picked a good size -> your size rounded to nearest page.
diff --git a/src/ftrace_reader/ftrace_controller_unittest.cc b/src/ftrace_reader/ftrace_controller_unittest.cc
index 5e3163d..361c0a6 100644
--- a/src/ftrace_reader/ftrace_controller_unittest.cc
+++ b/src/ftrace_reader/ftrace_controller_unittest.cc
@@ -516,21 +516,21 @@
   }
 
   {
-    // Way too big buffer size -> good default.
+    // Way too big buffer size -> max size.
     EXPECT_CALL(*controller->procfs(),
-                WriteToFile("/root/buffer_size_kb", "512"));
+                WriteToFile("/root/buffer_size_kb", "65536"));
     FtraceConfig config = CreateFtraceConfig({"foo"});
     config.set_buffer_size_kb(10 * 1024 * 1024);
     auto sink = controller->CreateSink(config, &delegate);
   }
 
   {
-    // The limit is 8mb, 9mb is too much.
+    // The limit is 64mb, 65mb is too much.
     EXPECT_CALL(*controller->procfs(),
-                WriteToFile("/root/buffer_size_kb", "512"));
+                WriteToFile("/root/buffer_size_kb", "65536"));
     FtraceConfig config = CreateFtraceConfig({"foo"});
     ON_CALL(*controller->procfs(), NumberOfCpus()).WillByDefault(Return(2));
-    config.set_buffer_size_kb(9 * 1024);
+    config.set_buffer_size_kb(65 * 1024);
     auto sink = controller->CreateSink(config, &delegate);
   }