summaryrefslogtreecommitdiff
path: root/simpleperf/environment.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'simpleperf/environment.cpp')
-rw-r--r--simpleperf/environment.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/simpleperf/environment.cpp b/simpleperf/environment.cpp
index 69f7c144..ed161c23 100644
--- a/simpleperf/environment.cpp
+++ b/simpleperf/environment.cpp
@@ -406,23 +406,30 @@ bool CheckPerfEventLimit() {
return true;
}
-bool CheckSampleFrequency(uint64_t sample_freq) {
- if (sample_freq == 0) {
- LOG(ERROR) << "Sample frequency can't be zero.";
- return false;
- }
+bool GetMaxSampleFrequency(uint64_t* max_sample_freq) {
std::string s;
if (!android::base::ReadFileToString("/proc/sys/kernel/perf_event_max_sample_rate", &s)) {
PLOG(DEBUG) << "failed to read /proc/sys/kernel/perf_event_max_sample_rate";
- // Omit the check if perf_event_max_sample_rate doesn't exist.
- return true;
+ return false;
}
s = android::base::Trim(s);
- uint64_t max_sample_freq;
- if (!android::base::ParseUint(s.c_str(), &max_sample_freq)) {
+ if (!android::base::ParseUint(s.c_str(), max_sample_freq)) {
LOG(ERROR) << "failed to parse /proc/sys/kernel/perf_event_max_sample_rate: " << s;
return false;
}
+ return true;
+}
+
+bool CheckSampleFrequency(uint64_t sample_freq) {
+ if (sample_freq == 0) {
+ LOG(ERROR) << "Sample frequency can't be zero.";
+ return false;
+ }
+ uint64_t max_sample_freq;
+ if (!GetMaxSampleFrequency(&max_sample_freq)) {
+ // Omit the check if can't read perf_event_max_sample_rate.
+ return true;
+ }
if (sample_freq > max_sample_freq) {
LOG(ERROR) << "Sample frequency " << sample_freq << " is out of range [1, "
<< max_sample_freq << "]";