improv: call malloc_trim after view and update calls

This commit is contained in:
Michael Aaron Murphy 2025-02-19 18:13:24 +01:00
parent 76348bb985
commit 1f826e38b9
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
2 changed files with 28 additions and 5 deletions

View file

@ -117,13 +117,18 @@ where
&mut self,
message: super::Message<T::Message>,
) -> iced::Task<super::Message<T::Message>> {
match message {
let message = match message {
super::Message::App(message) => self.app.update(message),
super::Message::Cosmic(message) => self.cosmic_update(message),
super::Message::None => iced::Task::none(),
#[cfg(feature = "single-instance")]
super::Message::DbusActivation(message) => self.app.dbus_activation(message),
}
};
#[cfg(target_env = "gnu")]
crate::malloc::trim(0);
message
}
#[cfg(not(feature = "multi-window"))]
@ -291,16 +296,26 @@ where
return self.app.view_window(id).map(super::Message::App);
}
if self.app.core().window.use_template {
let view = if self.app.core().window.use_template {
self.app.view_main()
} else {
self.app.view().map(super::Message::App)
}
};
#[cfg(target_env = "gnu")]
crate::malloc::trim(0);
view
}
#[cfg(not(feature = "multi-window"))]
pub fn view(&self) -> Element<super::Message<T::Message>> {
self.app.view_main()
let view = self.app.view_main();
#[cfg(target_env = "gnu")]
crate::malloc::trim(0);
view
}
}

View file

@ -3,9 +3,17 @@ use std::os::raw::c_int;
const M_MMAP_THRESHOLD: c_int = -3;
extern "C" {
fn malloc_trim(pad: usize);
fn mallopt(param: c_int, value: c_int) -> c_int;
}
pub fn trim(pad: usize) {
unsafe {
malloc_trim(pad);
}
}
/// Prevents glibc from hoarding memory via memory fragmentation.
pub fn limit_mmap_threshold(threshold: i32) {
unsafe {