diff options
Diffstat (limited to 'simpleperf/environment.cpp')
-rw-r--r-- | simpleperf/environment.cpp | 25 |
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 << "]"; |