perf: cache each file's icon to avoid redundant calculations at rendering

This commit is contained in:
sxyazi 2024-04-20 14:49:25 +08:00
parent 80000cfd86
commit 331d3185f3
No known key found for this signature in database
12 changed files with 33 additions and 29 deletions

View file

@ -1,7 +1,7 @@
use serde::{Deserialize, Deserializer}; use serde::{Deserialize, Deserializer};
use yazi_shared::fs::File; use yazi_shared::{fs::File, theme::{Color, Style, StyleShadow}};
use super::{Color, Is, Style, StyleShadow}; use super::Is;
use crate::Pattern; use crate::Pattern;
pub struct Filetype { pub struct Filetype {

View file

@ -1,12 +1,11 @@
use serde::{Deserialize, Deserializer}; use serde::{Deserialize, Deserializer};
use yazi_shared::fs::File; use yazi_shared::{fs::File, theme::{Color, Style, StyleShadow}};
use super::Style; use crate::{preset::Preset, theme::Is, Pattern};
use crate::{preset::Preset, theme::{Color, Is, StyleShadow}, Pattern};
pub struct Icon { pub struct Icon {
pub is: Is, is: Is,
pub name: Pattern, name: Pattern,
pub text: String, pub text: String,
pub style: Style, pub style: Style,
} }

View file

@ -1,15 +1,11 @@
mod color;
mod filetype; mod filetype;
mod flavor; mod flavor;
mod icon; mod icon;
mod is; mod is;
mod style;
mod theme; mod theme;
pub use color::*;
pub use filetype::*; pub use filetype::*;
pub use flavor::*; pub use flavor::*;
pub use icon::*; pub use icon::*;
pub use is::*; pub use is::*;
pub use style::*;
pub use theme::*; pub use theme::*;

View file

@ -2,9 +2,9 @@ use std::path::PathBuf;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use validator::Validate; use validator::Validate;
use yazi_shared::{fs::expand_path, Xdg}; use yazi_shared::{fs::expand_path, theme::Style, Xdg};
use super::{Filetype, Flavor, Icon, Style}; use super::{Filetype, Flavor, Icon};
use crate::{validation::check_validation, MERGED_THEME}; use crate::{validation::check_validation, MERGED_THEME};
#[derive(Deserialize, Serialize)] #[derive(Deserialize, Serialize)]

View file

@ -1,5 +1,5 @@
use mlua::{AnyUserData, ExternalError, FromLua, Lua, Table, UserData, UserDataMethods, Value}; use mlua::{AnyUserData, ExternalError, FromLua, Lua, Table, UserData, UserDataMethods, Value};
use yazi_config::theme::Color; use yazi_shared::theme::Color;
use super::Style; use super::Style;

View file

@ -1,7 +1,7 @@
use std::str::FromStr; use std::str::FromStr;
use mlua::{AnyUserData, ExternalError, ExternalResult, Lua, Table, UserData, UserDataMethods, Value}; use mlua::{AnyUserData, ExternalError, ExternalResult, Lua, Table, UserData, UserDataMethods, Value};
use yazi_config::theme::Color; use yazi_shared::theme::Color;
#[derive(Clone, Copy, Default)] #[derive(Clone, Copy, Default)]
pub struct Style(pub(super) ratatui::style::Style); pub struct Style(pub(super) ratatui::style::Style);
@ -17,8 +17,8 @@ impl Style {
} }
} }
impl From<yazi_config::theme::Style> for Style { impl From<yazi_shared::theme::Style> for Style {
fn from(value: yazi_config::theme::Style) -> Self { Self(value.into()) } fn from(value: yazi_shared::theme::Style) -> Self { Self(value.into()) }
} }
impl<'a> TryFrom<Table<'a>> for Style { impl<'a> TryFrom<Table<'a>> for Style {

View file

@ -0,0 +1 @@
pub struct Icon {}

View file

@ -1,6 +1,7 @@
mod cha; mod cha;
mod file; mod file;
mod fns; mod fns;
mod icon;
mod op; mod op;
mod path; mod path;
mod url; mod url;
@ -8,6 +9,7 @@ mod url;
pub use cha::*; pub use cha::*;
pub use file::*; pub use file::*;
pub use fns::*; pub use fns::*;
pub use icon::*;
pub use op::*; pub use op::*;
pub use path::*; pub use path::*;
pub use url::*; pub use url::*;

View file

@ -13,6 +13,7 @@ mod number;
mod os; mod os;
mod ro_cell; mod ro_cell;
pub mod term; pub mod term;
pub mod theme;
mod throttle; mod throttle;
mod time; mod time;
mod xdg; mod xdg;

View file

@ -0,0 +1,5 @@
mod color;
mod style;
pub use color::*;
pub use style::*;

View file

@ -37,29 +37,29 @@ impl From<Style> for ratatui::style::Style {
} }
#[derive(Default, Deserialize)] #[derive(Default, Deserialize)]
pub(super) struct StyleShadow { pub struct StyleShadow {
#[serde(default)] #[serde(default)]
pub(super) fg: Option<Color>, pub fg: Option<Color>,
#[serde(default)] #[serde(default)]
pub(super) bg: Option<Color>, pub bg: Option<Color>,
#[serde(default)] #[serde(default)]
pub(super) bold: bool, pub bold: bool,
#[serde(default)] #[serde(default)]
pub(super) dim: bool, pub dim: bool,
#[serde(default)] #[serde(default)]
pub(super) italic: bool, pub italic: bool,
#[serde(default)] #[serde(default)]
pub(super) underline: bool, pub underline: bool,
#[serde(default)] #[serde(default)]
pub(super) blink: bool, pub blink: bool,
#[serde(default)] #[serde(default)]
pub(super) blink_rapid: bool, pub blink_rapid: bool,
#[serde(default)] #[serde(default)]
pub(super) reversed: bool, pub reversed: bool,
#[serde(default)] #[serde(default)]
pub(super) hidden: bool, pub hidden: bool,
#[serde(default)] #[serde(default)]
pub(super) crossed: bool, pub crossed: bool,
} }
impl From<StyleShadow> for Style { impl From<StyleShadow> for Style {