improv: call malloc_trim after view and update calls
This commit is contained in:
parent
76348bb985
commit
1f826e38b9
2 changed files with 28 additions and 5 deletions
|
|
@ -117,13 +117,18 @@ where
|
||||||
&mut self,
|
&mut self,
|
||||||
message: super::Message<T::Message>,
|
message: super::Message<T::Message>,
|
||||||
) -> iced::Task<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::App(message) => self.app.update(message),
|
||||||
super::Message::Cosmic(message) => self.cosmic_update(message),
|
super::Message::Cosmic(message) => self.cosmic_update(message),
|
||||||
super::Message::None => iced::Task::none(),
|
super::Message::None => iced::Task::none(),
|
||||||
#[cfg(feature = "single-instance")]
|
#[cfg(feature = "single-instance")]
|
||||||
super::Message::DbusActivation(message) => self.app.dbus_activation(message),
|
super::Message::DbusActivation(message) => self.app.dbus_activation(message),
|
||||||
}
|
};
|
||||||
|
|
||||||
|
#[cfg(target_env = "gnu")]
|
||||||
|
crate::malloc::trim(0);
|
||||||
|
|
||||||
|
message
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "multi-window"))]
|
#[cfg(not(feature = "multi-window"))]
|
||||||
|
|
@ -291,16 +296,26 @@ where
|
||||||
return self.app.view_window(id).map(super::Message::App);
|
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()
|
self.app.view_main()
|
||||||
} else {
|
} else {
|
||||||
self.app.view().map(super::Message::App)
|
self.app.view().map(super::Message::App)
|
||||||
}
|
};
|
||||||
|
|
||||||
|
#[cfg(target_env = "gnu")]
|
||||||
|
crate::malloc::trim(0);
|
||||||
|
|
||||||
|
view
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "multi-window"))]
|
#[cfg(not(feature = "multi-window"))]
|
||||||
pub fn view(&self) -> Element<super::Message<T::Message>> {
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,17 @@ use std::os::raw::c_int;
|
||||||
const M_MMAP_THRESHOLD: c_int = -3;
|
const M_MMAP_THRESHOLD: c_int = -3;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
fn malloc_trim(pad: usize);
|
||||||
|
|
||||||
fn mallopt(param: c_int, value: c_int) -> c_int;
|
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.
|
/// Prevents glibc from hoarding memory via memory fragmentation.
|
||||||
pub fn limit_mmap_threshold(threshold: i32) {
|
pub fn limit_mmap_threshold(threshold: i32) {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue