diff options
author | Yi Kong <yikong@google.com> | 2021-12-14 15:57:01 +0800 |
---|---|---|
committer | Yi Kong <yikong@google.com> | 2021-12-14 15:59:35 +0800 |
commit | c0065856552f4d11606b5b6dbfb0640222dcca1d (patch) | |
tree | dac7e14ed500888abff82d76ed3fb2566df1be16 /profcollectd | |
parent | be1e683c0b6698015c734f08de4b227d8127fdee (diff) | |
download | extras-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.rs | 24 | ||||
-rw-r--r-- | profcollectd/libprofcollectd/simpleperf_etm_trace_provider.rs | 42 |
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) } } |