Merge "simpleperf: adjust sample freq instead of checking it."
am: 6dd50e65b7

Change-Id: Id445154d4530b9d4a9c3d237a21e3da6f16612e2
diff --git a/simpleperf/cmd_record.cpp b/simpleperf/cmd_record.cpp
index 390535c..4e7276c 100644
--- a/simpleperf/cmd_record.cpp
+++ b/simpleperf/cmd_record.cpp
@@ -505,9 +505,7 @@
         LOG(ERROR) << "Invalid sample frequency: " << args[i];
         return false;
       }
-      if (!CheckSampleFrequency(sample_freq_)) {
-        return false;
-      }
+      sample_freq_ = AdjustSampleFrequency(sample_freq_);
       use_sample_freq_ = true;
     } else if (args[i] == "-g") {
       fp_callchain_sampling_ = false;
diff --git a/simpleperf/cmd_record_test.cpp b/simpleperf/cmd_record_test.cpp
index d888a58..5f42137 100644
--- a/simpleperf/cmd_record_test.cpp
+++ b/simpleperf/cmd_record_test.cpp
@@ -72,6 +72,7 @@
 TEST(record_cmd, freq_option) {
   ASSERT_TRUE(RunRecordCmd({"-f", "99"}));
   ASSERT_TRUE(RunRecordCmd({"-F", "99"}));
+  ASSERT_TRUE(RunRecordCmd({"-f", std::to_string(UINT_MAX)}));
 }
 
 TEST(record_cmd, output_file_option) {
diff --git a/simpleperf/environment.cpp b/simpleperf/environment.cpp
index bf5e663..604798a 100644
--- a/simpleperf/environment.cpp
+++ b/simpleperf/environment.cpp
@@ -432,22 +432,22 @@
   return true;
 }
 
-bool CheckSampleFrequency(uint64_t sample_freq) {
+uint64_t AdjustSampleFrequency(uint64_t sample_freq) {
   if (sample_freq == 0) {
-    LOG(ERROR) << "Sample frequency can't be zero.";
-    return false;
+    LOG(WARNING) << "Sample frequency can't be zero, adjust it to 1";
+    return 1u;
   }
   uint64_t max_sample_freq;
   if (!GetMaxSampleFrequency(&max_sample_freq)) {
     // Omit the check if can't read perf_event_max_sample_rate.
-    return true;
+    return sample_freq;
   }
   if (sample_freq > max_sample_freq) {
-    LOG(ERROR) << "Sample frequency " << sample_freq << " is out of range [1, "
-        << max_sample_freq << "]";
-    return false;
+    LOG(WARNING) << "Sample frequency " << sample_freq << " is out of range [1, "
+        << max_sample_freq << "], adjust it to " << max_sample_freq;
+    return max_sample_freq;
   }
-  return true;
+  return sample_freq;
 }
 
 bool CheckKernelSymbolAddresses() {
diff --git a/simpleperf/environment.h b/simpleperf/environment.h
index b1c52ea..52d0a7c 100644
--- a/simpleperf/environment.h
+++ b/simpleperf/environment.h
@@ -70,7 +70,7 @@
 
 bool CheckPerfEventLimit();
 bool GetMaxSampleFrequency(uint64_t* max_sample_freq);
-bool CheckSampleFrequency(uint64_t sample_freq);
+uint64_t AdjustSampleFrequency(uint64_t sample_freq);
 bool CheckKernelSymbolAddresses();
 bool CanRecordRawData();