perf: set static mmap threshold on gnu target env by default
This commit is contained in:
parent
9426a985c6
commit
f59eb77252
5 changed files with 34 additions and 6 deletions
|
|
@ -138,7 +138,11 @@ pub(crate) fn iced_settings<App: Application>(
|
||||||
///
|
///
|
||||||
/// Returns error on application failure.
|
/// Returns error on application failure.
|
||||||
pub fn run<App: Application>(settings: Settings, flags: App::Flags) -> iced::Result {
|
pub fn run<App: Application>(settings: Settings, flags: App::Flags) -> iced::Result {
|
||||||
let default_font = settings.default_font;
|
#[cfg(target_env = "gnu")]
|
||||||
|
if let Some(threshold) = settings.default_mmap_threshold {
|
||||||
|
crate::malloc::limit_mmap_threshold(threshold);
|
||||||
|
}
|
||||||
|
|
||||||
let (settings, mut flags, window_settings) = iced_settings::<App>(settings, flags);
|
let (settings, mut flags, window_settings) = iced_settings::<App>(settings, flags);
|
||||||
#[cfg(not(feature = "multi-window"))]
|
#[cfg(not(feature = "multi-window"))]
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,9 @@ pub struct Settings {
|
||||||
/// Default size of fonts.
|
/// Default size of fonts.
|
||||||
pub(crate) default_text_size: f32,
|
pub(crate) default_text_size: f32,
|
||||||
|
|
||||||
|
/// Set the default mmap threshold for malloc with mallopt.
|
||||||
|
pub(crate) default_mmap_threshold: Option<i32>,
|
||||||
|
|
||||||
/// Whether the window should be resizable or not.
|
/// Whether the window should be resizable or not.
|
||||||
/// and the size of the window border which can be dragged for a resize
|
/// and the size of the window border which can be dragged for a resize
|
||||||
pub(crate) resizable: Option<f64>,
|
pub(crate) resizable: Option<f64>,
|
||||||
|
|
@ -85,6 +88,7 @@ impl Default for Settings {
|
||||||
default_font: font::default(),
|
default_font: font::default(),
|
||||||
default_icon_theme: None,
|
default_icon_theme: None,
|
||||||
default_text_size: 14.0,
|
default_text_size: 14.0,
|
||||||
|
default_mmap_threshold: Some(128 * 1024),
|
||||||
resizable: Some(8.0),
|
resizable: Some(8.0),
|
||||||
scale_factor: std::env::var("COSMIC_SCALE")
|
scale_factor: std::env::var("COSMIC_SCALE")
|
||||||
.ok()
|
.ok()
|
||||||
|
|
|
||||||
|
|
@ -153,7 +153,6 @@ impl Context {
|
||||||
self.size = Size::Hardcoded((width, height));
|
self.size = Size::Hardcoded((width, height));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
|
||||||
#[allow(clippy::cast_precision_loss)]
|
#[allow(clippy::cast_precision_loss)]
|
||||||
pub fn window_settings(&self) -> crate::app::Settings {
|
pub fn window_settings(&self) -> crate::app::Settings {
|
||||||
let (width, height) = self.suggested_size(true);
|
let (width, height) = self.suggested_size(true);
|
||||||
|
|
@ -183,7 +182,6 @@ impl Context {
|
||||||
matches!(self.anchor, PanelAnchor::Top | PanelAnchor::Bottom)
|
matches!(self.anchor, PanelAnchor::Top | PanelAnchor::Bottom)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
|
||||||
pub fn icon_button_from_handle<'a, Message: 'static>(
|
pub fn icon_button_from_handle<'a, Message: 'static>(
|
||||||
&self,
|
&self,
|
||||||
icon: widget::icon::Handle,
|
icon: widget::icon::Handle,
|
||||||
|
|
@ -213,7 +211,6 @@ impl Context {
|
||||||
.class(Button::AppletIcon)
|
.class(Button::AppletIcon)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
|
||||||
pub fn icon_button<'a, Message: 'static>(
|
pub fn icon_button<'a, Message: 'static>(
|
||||||
&self,
|
&self,
|
||||||
icon_name: &'a str,
|
icon_name: &'a str,
|
||||||
|
|
@ -385,6 +382,11 @@ pub fn run<App: Application>(flags: App::Flags) -> iced::Result {
|
||||||
let mut settings = helper.window_settings();
|
let mut settings = helper.window_settings();
|
||||||
settings.resizable = None;
|
settings.resizable = None;
|
||||||
|
|
||||||
|
#[cfg(target_env = "gnu")]
|
||||||
|
if let Some(threshold) = settings.default_mmap_threshold {
|
||||||
|
crate::malloc::limit_mmap_threshold(threshold);
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(icon_theme) = settings.default_icon_theme.clone() {
|
if let Some(icon_theme) = settings.default_icon_theme.clone() {
|
||||||
crate::icon_theme::set_default(icon_theme);
|
crate::icon_theme::set_default(icon_theme);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,9 @@ pub use cosmic_config;
|
||||||
#[doc(inline)]
|
#[doc(inline)]
|
||||||
pub use cosmic_theme;
|
pub use cosmic_theme;
|
||||||
|
|
||||||
|
#[cfg(feature = "desktop")]
|
||||||
|
pub mod desktop;
|
||||||
|
|
||||||
#[cfg(any(feature = "xdg-portal", feature = "rfd"))]
|
#[cfg(any(feature = "xdg-portal", feature = "rfd"))]
|
||||||
pub mod dialog;
|
pub mod dialog;
|
||||||
|
|
||||||
|
|
@ -73,8 +76,9 @@ pub use iced_wgpu;
|
||||||
pub mod icon_theme;
|
pub mod icon_theme;
|
||||||
pub mod keyboard_nav;
|
pub mod keyboard_nav;
|
||||||
|
|
||||||
#[cfg(feature = "desktop")]
|
#[cfg(target_env = "gnu")]
|
||||||
pub mod desktop;
|
pub(crate) mod malloc;
|
||||||
|
|
||||||
#[cfg(all(feature = "process", not(windows)))]
|
#[cfg(all(feature = "process", not(windows)))]
|
||||||
pub mod process;
|
pub mod process;
|
||||||
|
|
||||||
|
|
|
||||||
14
src/malloc.rs
Normal file
14
src/malloc.rs
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
use std::os::raw::c_int;
|
||||||
|
|
||||||
|
const M_MMAP_THRESHOLD: c_int = -3;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
fn mallopt(param: c_int, value: c_int) -> c_int;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Prevents glibc from hoarding memory via memory fragmentation.
|
||||||
|
pub fn limit_mmap_threshold(threshold: i32) {
|
||||||
|
unsafe {
|
||||||
|
mallopt(M_MMAP_THRESHOLD, threshold as c_int);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue