| /* | |
| * Copyright (C) 2024 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| //! # Debug Store Crate | |
| /// The Debug Store Crate provides functionalities for storing debug events. | |
| /// It allows logging and retrieval of debug events, and associated data. | |
| mod core; | |
| mod event; | |
| mod event_type; | |
| mod storage; | |
| pub use core::*; | |
| pub use event::*; | |
| use cxx::{CxxString, CxxVector}; | |
| #[cxx::bridge(namespace = "android::debugstore")] | |
| #[allow(unsafe_op_in_unsafe_fn)] | |
| mod cxxffi { | |
| extern "Rust" { | |
| fn debug_store_to_string() -> String; | |
| fn debug_store_record(name: &CxxString, data: &CxxVector<CxxString>); | |
| fn debug_store_begin(name: &CxxString, data: &CxxVector<CxxString>) -> u64; | |
| fn debug_store_end(id: u64, data: &CxxVector<CxxString>); | |
| } | |
| #[namespace = "android"] | |
| unsafe extern "C++" { | |
| include!("utils/SystemClock.h"); | |
| fn uptimeMillis() -> i64; | |
| } | |
| } | |
| fn debug_store_to_string() -> String { | |
| DebugStore::get_instance().to_string() | |
| } | |
| fn debug_store_record(name: &CxxString, data: &CxxVector<CxxString>) { | |
| DebugStore::get_instance().record(name.to_string_lossy().into_owned(), cxx_vec_to_pairs(data)); | |
| } | |
| fn debug_store_begin(name: &CxxString, data: &CxxVector<CxxString>) -> u64 { | |
| DebugStore::get_instance().begin(name.to_string_lossy().into_owned(), cxx_vec_to_pairs(data)) | |
| } | |
| fn debug_store_end(id: u64, data: &CxxVector<CxxString>) { | |
| DebugStore::get_instance().end(id, cxx_vec_to_pairs(data)); | |
| } | |
| fn cxx_vec_to_pairs(vec: &CxxVector<CxxString>) -> Vec<(String, String)> { | |
| vec.iter() | |
| .map(|s| s.to_string_lossy().into_owned()) | |
| .collect::<Vec<_>>() | |
| .chunks(2) | |
| .filter_map(|chunk| match chunk { | |
| [k, v] => Some((k.clone(), v.clone())), | |
| _ => None, | |
| }) | |
| .collect() | |
| } |