summaryrefslogtreecommitdiff
path: root/profcollectd
diff options
context:
space:
mode:
authorYi Kong <yikong@google.com>2021-11-29 19:57:55 +0800
committerYi Kong <yikong@google.com>2021-11-30 01:02:22 +0800
commit34ebf873fc4d43bc6bb15745085af4c69d76554d (patch)
tree30384879d1d7ce246f3a2ff9cde6555c7263b442 /profcollectd
parent48aa243447438f9926dbdd73b796d22844649c60 (diff)
downloadextras-34ebf873fc4d43bc6bb15745085af4c69d76554d.tar.gz
profcollectd: Remove local files once disabled
This saves storage space on users' devices if profcollect is no longer enabled. Test: manual Change-Id: I04f19ba7ddbf9d9f977bb40ac4bc74a09369350f
Diffstat (limited to 'profcollectd')
-rw-r--r--profcollectd/libprofcollectd/config.rs19
-rw-r--r--profcollectd/libprofcollectd/lib.rs6
-rw-r--r--profcollectd/libprofcollectd/service.rs13
-rw-r--r--profcollectd/profcollectctl.rs7
-rw-r--r--profcollectd/profcollectd.rc12
5 files changed, 42 insertions, 15 deletions
diff --git a/profcollectd/libprofcollectd/config.rs b/profcollectd/libprofcollectd/config.rs
index 0b55d5c9..5f8982cf 100644
--- a/profcollectd/libprofcollectd/config.rs
+++ b/profcollectd/libprofcollectd/config.rs
@@ -22,6 +22,7 @@ use macaddr::MacAddr6;
use rand::Rng;
use serde::{Deserialize, Serialize};
use std::error::Error;
+use std::fs::{read_dir, remove_file};
use std::path::Path;
use std::str::FromStr;
use std::time::Duration;
@@ -31,6 +32,7 @@ const PROFCOLLECT_NODE_ID_PROPERTY: &str = "persist.profcollectd.node_id";
pub const REPORT_RETENTION_SECS: u64 = 14 * 24 * 60 * 60; // 14 days.
+// Static configs that cannot be changed.
lazy_static! {
pub static ref TRACE_OUTPUT_DIR: &'static Path = Path::new("/data/misc/profcollectd/trace/");
pub static ref PROFILE_OUTPUT_DIR: &'static Path = Path::new("/data/misc/profcollectd/output/");
@@ -42,6 +44,7 @@ lazy_static! {
Path::new("/data/misc/profcollectd/output/config.json");
}
+/// Dynamic configs, stored in config.json.
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
pub struct Config {
/// Version of config file scheme, always equals to 1.
@@ -144,3 +147,19 @@ fn generate_random_node_id() -> MacAddr6 {
node_id[0] |= 0x1;
MacAddr6::from(node_id)
}
+
+pub fn clear_data() -> Result<()> {
+ fn remove_files(path: &Path) -> Result<()> {
+ read_dir(path)?
+ .filter_map(|e| e.ok())
+ .map(|e| e.path())
+ .filter(|e| e.is_file())
+ .try_for_each(remove_file)?;
+ Ok(())
+ }
+
+ remove_files(&TRACE_OUTPUT_DIR)?;
+ remove_files(&PROFILE_OUTPUT_DIR)?;
+ remove_files(&REPORT_OUTPUT_DIR)?;
+ Ok(())
+}
diff --git a/profcollectd/libprofcollectd/lib.rs b/profcollectd/libprofcollectd/lib.rs
index d8a8cc8d..abc11272 100644
--- a/profcollectd/libprofcollectd/lib.rs
+++ b/profcollectd/libprofcollectd/lib.rs
@@ -91,6 +91,12 @@ pub fn report() -> Result<String> {
Ok(get_profcollectd_service()?.report()?)
}
+/// Clear all local data.
+pub fn reset() -> Result<()> {
+ config::clear_data()?;
+ Ok(())
+}
+
/// Inits logging for Android
pub fn init_logging() {
let min_log_level = if cfg!(feature = "test") { log::Level::Info } else { log::Level::Error };
diff --git a/profcollectd/libprofcollectd/service.rs b/profcollectd/libprofcollectd/service.rs
index 8f998947..89fa8acb 100644
--- a/profcollectd/libprofcollectd/service.rs
+++ b/profcollectd/libprofcollectd/service.rs
@@ -21,15 +21,15 @@ use binder::public_api::Result as BinderResult;
use binder::Status;
use profcollectd_aidl_interface::aidl::com::android::server::profcollect::IProfCollectd::IProfCollectd;
use std::ffi::CString;
-use std::fs::{copy, create_dir, read_dir, read_to_string, remove_dir_all, remove_file, write};
+use std::fs::{copy, read_dir, read_to_string, remove_file, write};
use std::path::PathBuf;
use std::str::FromStr;
use std::sync::{Mutex, MutexGuard};
use std::time::Duration;
use crate::config::{
- Config, BETTERBUG_CACHE_DIR_PREFIX, BETTERBUG_CACHE_DIR_SUFFIX, CONFIG_FILE,
- PROFILE_OUTPUT_DIR, REPORT_OUTPUT_DIR, REPORT_RETENTION_SECS, TRACE_OUTPUT_DIR,
+ clear_data, Config, BETTERBUG_CACHE_DIR_PREFIX, BETTERBUG_CACHE_DIR_SUFFIX, CONFIG_FILE,
+ PROFILE_OUTPUT_DIR, REPORT_OUTPUT_DIR, REPORT_RETENTION_SECS,
};
use crate::report::{get_report_ts, pack_report};
use crate::scheduler::Scheduler;
@@ -147,11 +147,8 @@ impl ProfcollectdBinderService {
.is_none();
if config_changed {
- log::info!("Config change detected, clearing traces.");
- remove_dir_all(*PROFILE_OUTPUT_DIR)?;
- remove_dir_all(*TRACE_OUTPUT_DIR)?;
- create_dir(*PROFILE_OUTPUT_DIR)?;
- create_dir(*TRACE_OUTPUT_DIR)?;
+ log::info!("Config change detected, resetting profcollect.");
+ clear_data()?;
write(*CONFIG_FILE, &new_config.to_string())?;
}
diff --git a/profcollectd/profcollectctl.rs b/profcollectd/profcollectctl.rs
index c825f550..6778465e 100644
--- a/profcollectd/profcollectctl.rs
+++ b/profcollectd/profcollectctl.rs
@@ -29,8 +29,9 @@ command:
stop Terminate periodic collection.
once Request an one-off trace.
process Convert traces to perf profiles.
- report Create a report containing all profiles.
reconfig Refresh configuration.
+ report Create a report containing all profiles.
+ reset Clear all local data.
help Print this message.
"#;
@@ -65,6 +66,10 @@ fn main() -> Result<()> {
let path = libprofcollectd::report().context("Failed to create profile report.")?;
println!("Report created at: {}", &path);
}
+ "reset" => {
+ libprofcollectd::reset().context("Failed to reset.")?;
+ println!("Reset done.");
+ }
"help" => println!("{}", &HELP_MSG),
arg => bail!("Unknown argument: {}\n{}", &arg, &HELP_MSG),
}
diff --git a/profcollectd/profcollectd.rc b/profcollectd/profcollectd.rc
index fd5bf541..312c7003 100644
--- a/profcollectd/profcollectd.rc
+++ b/profcollectd/profcollectd.rc
@@ -6,15 +6,15 @@ service profcollectd /system/bin/profcollectd
group root shell wakelock
task_profiles ServiceCapacityLow
-on property:persist.device_config.profcollect_native_boot.enabled=true
- start profcollectd
-
-on property:persist.profcollectd.enabled_override=true
- start profcollectd
-
on post-fs-data
# Create directory for profcollectd.
mkdir /data/misc/profcollectd 0770 shell shell
mkdir /data/misc/profcollectd/trace 0770 shell shell
mkdir /data/misc/profcollectd/output 0770 shell shell
mkdir /data/misc/profcollectd/report 0770 shell shell
+
+on boot && property:persist.device_config.profcollect_native_boot.enabled=true
+ start profcollectd
+
+on boot && property:persist.device_config.profcollect_native_boot.enabled=
+ exec_background - root shell -- /system/bin/profcollectctl reset