summaryrefslogtreecommitdiff
path: root/profcollectd
diff options
context:
space:
mode:
authorYi Kong <yikong@google.com>2021-12-14 15:57:01 +0800
committerYi Kong <yikong@google.com>2021-12-14 15:59:35 +0800
commitc0065856552f4d11606b5b6dbfb0640222dcca1d (patch)
treedac7e14ed500888abff82d76ed3fb2566df1be16 /profcollectd
parentbe1e683c0b6698015c734f08de4b227d8127fdee (diff)
downloadextras-c0065856552f4d11606b5b6dbfb0640222dcca1d.tar.gz
profcollectd: Refactor for better code clarity
NFCI. Test: presubmit Change-Id: Iec62d8118cd5508626c0f1021ce8d20195d8f061
Diffstat (limited to 'profcollectd')
-rw-r--r--profcollectd/libprofcollectd/scheduler.rs24
-rw-r--r--profcollectd/libprofcollectd/simpleperf_etm_trace_provider.rs42
2 files changed, 35 insertions, 31 deletions
diff --git a/profcollectd/libprofcollectd/scheduler.rs b/profcollectd/libprofcollectd/scheduler.rs
index d083612e..31a495a5 100644
--- a/profcollectd/libprofcollectd/scheduler.rs
+++ b/profcollectd/libprofcollectd/scheduler.rs
@@ -110,18 +110,18 @@ impl Scheduler {
/// Run if space usage is under limit.
fn check_space_limit(path: &Path, config: &Config) -> Result<bool> {
- let ret = dir_size(path)? <= config.max_trace_limit;
- if !ret {
+ // Returns the size of a directory, non-recursive.
+ let dir_size = |path| -> Result<u64> {
+ fs::read_dir(path)?.try_fold(0, |acc, file| {
+ let metadata = file?.metadata()?;
+ let size = if metadata.is_file() { metadata.len() } else { 0 };
+ Ok(acc + size)
+ })
+ };
+
+ if dir_size(path)? > config.max_trace_limit {
log::error!("trace storage exhausted.");
+ return Ok(false);
}
- Ok(ret)
-}
-
-/// Returns the size of a directory, non-recursive.
-fn dir_size(path: &Path) -> Result<u64> {
- fs::read_dir(path)?.try_fold(0, |acc, file| {
- let metadata = file?.metadata()?;
- let size = if metadata.is_file() { metadata.len() } else { 0 };
- Ok(acc + size)
- })
+ Ok(true)
}
diff --git a/profcollectd/libprofcollectd/simpleperf_etm_trace_provider.rs b/profcollectd/libprofcollectd/simpleperf_etm_trace_provider.rs
index b993007b..14fb7509 100644
--- a/profcollectd/libprofcollectd/simpleperf_etm_trace_provider.rs
+++ b/profcollectd/libprofcollectd/simpleperf_etm_trace_provider.rs
@@ -45,28 +45,32 @@ impl TraceProvider for SimpleperfEtmTraceProvider {
}
fn process(&self, trace_dir: &Path, profile_dir: &Path, binary_filter: &str) -> Result<()> {
+ let is_etm_extension = |file: &PathBuf| {
+ file.extension()
+ .and_then(|f| f.to_str())
+ .filter(|ext| ext == &ETM_TRACEFILE_EXTENSION)
+ .is_some()
+ };
+
+ let process_trace_file = |trace_file: PathBuf| {
+ let mut profile_file = PathBuf::from(profile_dir);
+ profile_file.push(
+ trace_file
+ .file_name()
+ .ok_or_else(|| anyhow!("Malformed trace path: {}", trace_file.display()))?,
+ );
+ profile_file.set_extension(ETM_PROFILE_EXTENSION);
+ simpleperf_profcollect::process(&trace_file, &profile_file, binary_filter);
+ remove_file(&trace_file)?;
+ Ok(())
+ };
+
read_dir(trace_dir)?
.filter_map(|e| e.ok())
.map(|e| e.path())
- .filter(|e| {
- e.is_file()
- && e.extension()
- .and_then(|f| f.to_str())
- .filter(|ext| ext == &ETM_TRACEFILE_EXTENSION)
- .is_some()
- })
- .try_for_each(|trace_file| -> Result<()> {
- let mut profile_file = PathBuf::from(profile_dir);
- profile_file.push(
- trace_file
- .file_name()
- .ok_or_else(|| anyhow!("Malformed trace path: {}", trace_file.display()))?,
- );
- profile_file.set_extension(ETM_PROFILE_EXTENSION);
- simpleperf_profcollect::process(&trace_file, &profile_file, binary_filter);
- remove_file(&trace_file)?;
- Ok(())
- })
+ .filter(|e| e.is_file())
+ .filter(is_etm_extension)
+ .try_for_each(process_trace_file)
}
}