summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vaibhav Devmurari <vdevmurari@google.com> 2024-09-02 19:24:40 +0000
committer Vaibhav Devmurari <vdevmurari@google.com> 2024-09-03 19:53:53 +0000
commit6eb21601649ffe2ac114f1d0f5c63747e9992cd1 (patch)
treea9a9e3a05ff9c491fce1cfb196630e4712cefa31
parent53a8ef0537e22c082e58b9e4f1491e6362040873 (diff)
Add dump for Input filter rust components
Test: None Bug: 245989146 Flag: EXEMPT bugfix Change-Id: I214e6c1e017a720fa38c55b7dd83a653db71381f
-rw-r--r--services/inputflinger/InputFilter.cpp6
-rw-r--r--services/inputflinger/InputManager.cpp4
-rw-r--r--services/inputflinger/aidl/com/android/server/inputflinger/IInputFilter.aidl2
-rw-r--r--services/inputflinger/rust/bounce_keys_filter.rs9
-rw-r--r--services/inputflinger/rust/input_filter.rs26
-rw-r--r--services/inputflinger/rust/slow_keys_filter.rs10
-rw-r--r--services/inputflinger/rust/sticky_keys_filter.rs8
7 files changed, 63 insertions, 2 deletions
diff --git a/services/inputflinger/InputFilter.cpp b/services/inputflinger/InputFilter.cpp
index 2d5803b8ae..2ef94fbb07 100644
--- a/services/inputflinger/InputFilter.cpp
+++ b/services/inputflinger/InputFilter.cpp
@@ -146,6 +146,12 @@ void InputFilter::notifyConfigurationChangedLocked() {
void InputFilter::dump(std::string& dump) {
dump += "InputFilter:\n";
+ if (isFilterEnabled()) {
+ std::string result;
+ LOG_ALWAYS_FATAL_IF(!mInputFilterRust->dumpFilter(&result).isOk());
+ dump += result;
+ dump += "\n";
+ }
}
} // namespace android
diff --git a/services/inputflinger/InputManager.cpp b/services/inputflinger/InputManager.cpp
index 41e5247b50..b155122749 100644
--- a/services/inputflinger/InputManager.cpp
+++ b/services/inputflinger/InputManager.cpp
@@ -250,6 +250,10 @@ void InputManager::dump(std::string& dump) {
mCollector->dump(dump);
dump += '\n';
}
+ if (ENABLE_INPUT_FILTER_RUST) {
+ mInputFilter->dump(dump);
+ dump += '\n';
+ }
mDispatcher->dump(dump);
dump += '\n';
}
diff --git a/services/inputflinger/aidl/com/android/server/inputflinger/IInputFilter.aidl b/services/inputflinger/aidl/com/android/server/inputflinger/IInputFilter.aidl
index 994d1c4b1a..31b72319ac 100644
--- a/services/inputflinger/aidl/com/android/server/inputflinger/IInputFilter.aidl
+++ b/services/inputflinger/aidl/com/android/server/inputflinger/IInputFilter.aidl
@@ -54,5 +54,7 @@ interface IInputFilter {
/** Notifies when configuration changes */
void notifyConfigurationChanged(in InputFilterConfiguration config);
+
+ String dumpFilter();
}
diff --git a/services/inputflinger/rust/bounce_keys_filter.rs b/services/inputflinger/rust/bounce_keys_filter.rs
index dc4f1df2c3..dbee388957 100644
--- a/services/inputflinger/rust/bounce_keys_filter.rs
+++ b/services/inputflinger/rust/bounce_keys_filter.rs
@@ -130,6 +130,15 @@ impl Filter for BounceKeysFilter {
fn destroy(&mut self) {
self.next.destroy();
}
+
+ fn dump(&mut self, dump_str: String) -> String {
+ let mut result = "Bounce Keys filter: \n".to_string();
+ result += &format!("\tthreshold = {:?}ns\n", self.bounce_key_threshold_ns);
+ result += &format!("\tkey_event_map = {:?}\n", self.key_event_map);
+ result += &format!("\tblocked_events = {:?}\n", self.blocked_events);
+ result += &format!("\tsupported_devices = {:?}\n", self.supported_devices);
+ self.next.dump(dump_str + &result)
+ }
}
#[cfg(test)]
diff --git a/services/inputflinger/rust/input_filter.rs b/services/inputflinger/rust/input_filter.rs
index f166723253..e2212449aa 100644
--- a/services/inputflinger/rust/input_filter.rs
+++ b/services/inputflinger/rust/input_filter.rs
@@ -43,6 +43,7 @@ pub trait Filter {
fn notify_key(&mut self, event: &KeyEvent);
fn notify_devices_changed(&mut self, device_infos: &[DeviceInfo]);
fn destroy(&mut self);
+ fn dump(&mut self, dump_str: String) -> String;
}
struct InputFilterState {
@@ -122,18 +123,30 @@ impl IInputFilter for InputFilter {
self.input_filter_thread.clone(),
));
state.enabled = true;
- info!("Slow keys filter is installed");
+ info!(
+ "Slow keys filter is installed, threshold = {:?}ns",
+ config.slowKeysThresholdNs
+ );
}
if config.bounceKeysThresholdNs > 0 {
first_filter =
Box::new(BounceKeysFilter::new(first_filter, config.bounceKeysThresholdNs));
state.enabled = true;
- info!("Bounce keys filter is installed");
+ info!(
+ "Bounce keys filter is installed, threshold = {:?}ns",
+ config.bounceKeysThresholdNs
+ );
}
state.first_filter = first_filter;
}
Result::Ok(())
}
+
+ fn dumpFilter(&self) -> binder::Result<String> {
+ let first_filter = &mut self.state.lock().unwrap().first_filter;
+ let dump_str = first_filter.dump(String::new());
+ Result::Ok(dump_str)
+ }
}
struct BaseFilter {
@@ -161,6 +174,11 @@ impl Filter for BaseFilter {
fn destroy(&mut self) {
// do nothing
}
+
+ fn dump(&mut self, dump_str: String) -> String {
+ // do nothing
+ dump_str
+ }
}
/// This struct wraps around IInputFilterCallbacks restricting access to only
@@ -397,6 +415,10 @@ pub mod test_filter {
fn destroy(&mut self) {
self.inner().is_destroy_called = true;
}
+ fn dump(&mut self, dump_str: String) -> String {
+ // do nothing
+ dump_str
+ }
}
}
diff --git a/services/inputflinger/rust/slow_keys_filter.rs b/services/inputflinger/rust/slow_keys_filter.rs
index 3e242d8107..3fe4c6f4a9 100644
--- a/services/inputflinger/rust/slow_keys_filter.rs
+++ b/services/inputflinger/rust/slow_keys_filter.rs
@@ -186,6 +186,16 @@ impl Filter for SlowKeysFilter {
slow_filter.input_filter_thread.unregister_thread_callback(Box::new(self.clone()));
slow_filter.next.destroy();
}
+
+ fn dump(&mut self, dump_str: String) -> String {
+ let mut slow_filter = self.write_inner();
+ let mut result = "Slow Keys filter: \n".to_string();
+ result += &format!("\tthreshold = {:?}ns\n", slow_filter.slow_key_threshold_ns);
+ result += &format!("\tongoing_down_events = {:?}\n", slow_filter.ongoing_down_events);
+ result += &format!("\tpending_down_events = {:?}\n", slow_filter.pending_down_events);
+ result += &format!("\tsupported_devices = {:?}\n", slow_filter.supported_devices);
+ slow_filter.next.dump(dump_str + &result)
+ }
}
impl ThreadCallback for SlowKeysFilter {
diff --git a/services/inputflinger/rust/sticky_keys_filter.rs b/services/inputflinger/rust/sticky_keys_filter.rs
index dfcea799b0..161a5fca60 100644
--- a/services/inputflinger/rust/sticky_keys_filter.rs
+++ b/services/inputflinger/rust/sticky_keys_filter.rs
@@ -134,6 +134,14 @@ impl Filter for StickyKeysFilter {
fn destroy(&mut self) {
self.next.destroy();
}
+
+ fn dump(&mut self, dump_str: String) -> String {
+ let mut result = "Sticky Keys filter: \n".to_string();
+ result += &format!("\tmodifier_state = {:?}\n", self.modifier_state);
+ result += &format!("\tlocked_modifier_state = {:?}\n", self.locked_modifier_state);
+ result += &format!("\tcontributing_devices = {:?}\n", self.contributing_devices);
+ self.next.dump(dump_str + &result)
+ }
}
fn is_modifier_key(keycode: i32) -> bool {