diff options
Diffstat (limited to 'profcollectd/libprofcollectd/lib.rs')
-rw-r--r-- | profcollectd/libprofcollectd/lib.rs | 51 |
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), ); } |