diff options
author | 2024-09-02 19:24:40 +0000 | |
---|---|---|
committer | 2024-09-03 19:53:53 +0000 | |
commit | 6eb21601649ffe2ac114f1d0f5c63747e9992cd1 (patch) | |
tree | a9a9e3a05ff9c491fce1cfb196630e4712cefa31 | |
parent | 53a8ef0537e22c082e58b9e4f1491e6362040873 (diff) |
Add dump for Input filter rust components
Test: None
Bug: 245989146
Flag: EXEMPT bugfix
Change-Id: I214e6c1e017a720fa38c55b7dd83a653db71381f
-rw-r--r-- | services/inputflinger/InputFilter.cpp | 6 | ||||
-rw-r--r-- | services/inputflinger/InputManager.cpp | 4 | ||||
-rw-r--r-- | services/inputflinger/aidl/com/android/server/inputflinger/IInputFilter.aidl | 2 | ||||
-rw-r--r-- | services/inputflinger/rust/bounce_keys_filter.rs | 9 | ||||
-rw-r--r-- | services/inputflinger/rust/input_filter.rs | 26 | ||||
-rw-r--r-- | services/inputflinger/rust/slow_keys_filter.rs | 10 | ||||
-rw-r--r-- | services/inputflinger/rust/sticky_keys_filter.rs | 8 |
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 { |