summaryrefslogtreecommitdiff
path: root/profcollectd/libprofcollectd/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'profcollectd/libprofcollectd/lib.rs')
-rw-r--r--profcollectd/libprofcollectd/lib.rs51
1 files changed, 7 insertions, 44 deletions
diff --git a/profcollectd/libprofcollectd/lib.rs b/profcollectd/libprofcollectd/lib.rs
index da178f27..aacbf8e3 100644
--- a/profcollectd/libprofcollectd/lib.rs
+++ b/profcollectd/libprofcollectd/lib.rs
@@ -23,41 +23,15 @@ mod service;
mod simpleperf_etm_trace_provider;
mod trace_provider;
-#[cfg(feature = "test")]
-mod logging_trace_provider;
-
use anyhow::{Context, Result};
use profcollectd_aidl_interface::aidl::com::android::server::profcollect::IProfCollectd::{
self, BnProfCollectd,
};
-use profcollectd_aidl_interface::aidl::com::android::server::profcollect::IProviderStatusCallback::{IProviderStatusCallback, BnProviderStatusCallback};
use profcollectd_aidl_interface::binder::{self, BinderFeatures};
-use service::{err_to_binder_status, ProfcollectdBinderService};
-use std::time::{Duration, Instant};
+use service::ProfcollectdBinderService;
const PROFCOLLECTD_SERVICE_NAME: &str = "profcollectd";
-struct ProviderStatusCallback {
- service_start_time: Instant,
-}
-
-impl binder::Interface for ProviderStatusCallback {}
-
-impl IProviderStatusCallback for ProviderStatusCallback {
- fn onProviderReady(&self) -> binder::Result<()> {
- // If we have waited too long for the provider to be ready, then we have passed
- // boot phase, and no need to collect boot profile.
- // TODO: should we check boottime instead?
- const TIMEOUT_TO_COLLECT_BOOT_PROFILE: Duration = Duration::from_secs(3);
- let elapsed = Instant::now().duration_since(self.service_start_time);
- if elapsed < TIMEOUT_TO_COLLECT_BOOT_PROFILE {
- trace_once("boot").map_err(err_to_binder_status)?;
- }
- schedule().map_err(err_to_binder_status)?;
- Ok(())
- }
-}
-
/// Initialise profcollectd service.
/// * `schedule_now` - Immediately schedule collection after service is initialised.
pub fn init_service(schedule_now: bool) -> Result<()> {
@@ -65,18 +39,15 @@ pub fn init_service(schedule_now: bool) -> Result<()> {
let profcollect_binder_service = ProfcollectdBinderService::new()?;
binder::add_service(
- PROFCOLLECTD_SERVICE_NAME,
+ &PROFCOLLECTD_SERVICE_NAME,
BnProfCollectd::new_binder(profcollect_binder_service, BinderFeatures::default())
.as_binder(),
)
.context("Failed to register service.")?;
if schedule_now {
- let cb = BnProviderStatusCallback::new_binder(
- ProviderStatusCallback { service_start_time: Instant::now() },
- BinderFeatures::default(),
- );
- get_profcollectd_service()?.registerProviderStatusCallback(&cb)?;
+ trace_once("boot")?;
+ schedule()?;
}
binder::ProcessState::join_thread_pool();
@@ -84,7 +55,7 @@ pub fn init_service(schedule_now: bool) -> Result<()> {
}
fn get_profcollectd_service() -> Result<binder::Strong<dyn IProfCollectd::IProfCollectd>> {
- binder::get_interface(PROFCOLLECTD_SERVICE_NAME)
+ binder::get_interface(&PROFCOLLECTD_SERVICE_NAME)
.context("Failed to get profcollectd binder service, is profcollectd running?")
}
@@ -108,7 +79,7 @@ pub fn trace_once(tag: &str) -> Result<()> {
/// Process traces.
pub fn process() -> Result<()> {
- get_profcollectd_service()?.process()?;
+ get_profcollectd_service()?.process(true)?;
Ok(())
}
@@ -117,19 +88,11 @@ 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 };
android_logger::init_once(
android_logger::Config::default()
.with_tag("profcollectd")
- .with_min_level(min_log_level)
- .with_log_id(android_logger::LogId::System),
+ .with_min_level(log::Level::Error),
);
}