diff --git a/crates/one-assets/assets/icons/alinux_color.svg b/crates/one-assets/assets/icons/alinux_color.svg index 370ea93d4..3286ef057 100644 --- a/crates/one-assets/assets/icons/alinux_color.svg +++ b/crates/one-assets/assets/icons/alinux_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/almalinux_color.svg b/crates/one-assets/assets/icons/almalinux_color.svg index ad32ef688..5c512c050 100644 --- a/crates/one-assets/assets/icons/almalinux_color.svg +++ b/crates/one-assets/assets/icons/almalinux_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/alpine_color.svg b/crates/one-assets/assets/icons/alpine_color.svg index db4e7815c..53de26f54 100644 --- a/crates/one-assets/assets/icons/alpine_color.svg +++ b/crates/one-assets/assets/icons/alpine_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/amazon_color.svg b/crates/one-assets/assets/icons/amazon_color.svg index 3b8b975f4..e82f3e202 100644 --- a/crates/one-assets/assets/icons/amazon_color.svg +++ b/crates/one-assets/assets/icons/amazon_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/arch_color.svg b/crates/one-assets/assets/icons/arch_color.svg index 468dca46c..908e15ad4 100644 --- a/crates/one-assets/assets/icons/arch_color.svg +++ b/crates/one-assets/assets/icons/arch_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/centos_color.svg b/crates/one-assets/assets/icons/centos_color.svg index 05dc41763..7605684a6 100644 --- a/crates/one-assets/assets/icons/centos_color.svg +++ b/crates/one-assets/assets/icons/centos_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/cisco_color.svg b/crates/one-assets/assets/icons/cisco_color.svg index 65564ea16..73299de86 100644 --- a/crates/one-assets/assets/icons/cisco_color.svg +++ b/crates/one-assets/assets/icons/cisco_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/debian_color.svg b/crates/one-assets/assets/icons/debian_color.svg index f216e9145..6d82d6ede 100644 --- a/crates/one-assets/assets/icons/debian_color.svg +++ b/crates/one-assets/assets/icons/debian_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/docker_color.svg b/crates/one-assets/assets/icons/docker_color.svg index 58b4e2c75..c454f3b1f 100644 --- a/crates/one-assets/assets/icons/docker_color.svg +++ b/crates/one-assets/assets/icons/docker_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/fedora_color.svg b/crates/one-assets/assets/icons/fedora_color.svg index 6b48cb409..1a6f69a1b 100644 --- a/crates/one-assets/assets/icons/fedora_color.svg +++ b/crates/one-assets/assets/icons/fedora_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/fortinet_color.svg b/crates/one-assets/assets/icons/fortinet_color.svg index fc25f3d13..2de5dd287 100644 --- a/crates/one-assets/assets/icons/fortinet_color.svg +++ b/crates/one-assets/assets/icons/fortinet_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/freebsd_color.svg b/crates/one-assets/assets/icons/freebsd_color.svg index 71981f90f..dcf6e7537 100644 --- a/crates/one-assets/assets/icons/freebsd_color.svg +++ b/crates/one-assets/assets/icons/freebsd_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/h3c_color.svg b/crates/one-assets/assets/icons/h3c_color.svg index 8643f408b..7ed2a657f 100644 --- a/crates/one-assets/assets/icons/h3c_color.svg +++ b/crates/one-assets/assets/icons/h3c_color.svg @@ -1,4 +1,4 @@ - + + diff --git a/crates/one-assets/assets/icons/huawei_color.svg b/crates/one-assets/assets/icons/huawei_color.svg index fcb6584c2..2cdaaddd9 100644 --- a/crates/one-assets/assets/icons/huawei_color.svg +++ b/crates/one-assets/assets/icons/huawei_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/juniper_color.svg b/crates/one-assets/assets/icons/juniper_color.svg index 27a7194c1..63c0e2359 100644 --- a/crates/one-assets/assets/icons/juniper_color.svg +++ b/crates/one-assets/assets/icons/juniper_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/kali_color.svg b/crates/one-assets/assets/icons/kali_color.svg index 856791f2a..ac2338ecf 100644 --- a/crates/one-assets/assets/icons/kali_color.svg +++ b/crates/one-assets/assets/icons/kali_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/linux_penguin_color.svg b/crates/one-assets/assets/icons/linux_penguin_color.svg index 4a703b387..3d92412c4 100644 --- a/crates/one-assets/assets/icons/linux_penguin_color.svg +++ b/crates/one-assets/assets/icons/linux_penguin_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/macos_color.svg b/crates/one-assets/assets/icons/macos_color.svg index f0762d1ea..9ffb68d12 100644 --- a/crates/one-assets/assets/icons/macos_color.svg +++ b/crates/one-assets/assets/icons/macos_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/mikrotik_color.svg b/crates/one-assets/assets/icons/mikrotik_color.svg index 68fcdc348..1df0947c0 100644 --- a/crates/one-assets/assets/icons/mikrotik_color.svg +++ b/crates/one-assets/assets/icons/mikrotik_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/openeuler_color.svg b/crates/one-assets/assets/icons/openeuler_color.svg index 86041613d..f9b3d3d2e 100644 --- a/crates/one-assets/assets/icons/openeuler_color.svg +++ b/crates/one-assets/assets/icons/openeuler_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/opensuse_color.svg b/crates/one-assets/assets/icons/opensuse_color.svg index 536dc6a53..f9b9fbb6e 100644 --- a/crates/one-assets/assets/icons/opensuse_color.svg +++ b/crates/one-assets/assets/icons/opensuse_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/paloalto_color.svg b/crates/one-assets/assets/icons/paloalto_color.svg index 1ca4c9e3a..5974e4e5f 100644 --- a/crates/one-assets/assets/icons/paloalto_color.svg +++ b/crates/one-assets/assets/icons/paloalto_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/redhat_color.svg b/crates/one-assets/assets/icons/redhat_color.svg index 3f6d08584..559accb66 100644 --- a/crates/one-assets/assets/icons/redhat_color.svg +++ b/crates/one-assets/assets/icons/redhat_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/rocky_color.svg b/crates/one-assets/assets/icons/rocky_color.svg index 98f9e13b3..a68c804f9 100644 --- a/crates/one-assets/assets/icons/rocky_color.svg +++ b/crates/one-assets/assets/icons/rocky_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/ubuntu_color.svg b/crates/one-assets/assets/icons/ubuntu_color.svg index 7b084f500..d5339865e 100644 --- a/crates/one-assets/assets/icons/ubuntu_color.svg +++ b/crates/one-assets/assets/icons/ubuntu_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/windows_color.svg b/crates/one-assets/assets/icons/windows_color.svg index 8887b3995..bdc03ed74 100644 --- a/crates/one-assets/assets/icons/windows_color.svg +++ b/crates/one-assets/assets/icons/windows_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/assets/icons/zyxel_color.svg b/crates/one-assets/assets/icons/zyxel_color.svg index 4f0242c58..4db06bc0d 100644 --- a/crates/one-assets/assets/icons/zyxel_color.svg +++ b/crates/one-assets/assets/icons/zyxel_color.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/one-assets/src/lib.rs b/crates/one-assets/src/lib.rs index 4186003ce..68bd7bcd6 100644 --- a/crates/one-assets/src/lib.rs +++ b/crates/one-assets/src/lib.rs @@ -131,4 +131,41 @@ mod tests { assert_eq!(IconName::MongoDB.path().as_ref(), "icons/mongodb.svg"); assert_eq!(IconName::ArrowUp.path().as_ref(), "icons/arrow-up.svg"); } + + // Color icons go through gpui-component's `img(...)` path, which decodes + // SVGs at their intrinsic size and rasterizes at 2x (SMOOTH_SVG_SCALE_FACTOR). + // A 1024x1024 icon costs ~16 MiB of retained BGRA memory per icon. Keep + // intrinsic dimensions small; see issue #185. + #[test] + fn icon_assets_are_not_oversized() { + const MAX_DIMENSION: f32 = 256.0; + let dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("assets/icons"); + for entry in std::fs::read_dir(&dir).expect("read icons dir") { + let path = entry.expect("dir entry").path(); + if path.extension().and_then(|ext| ext.to_str()) != Some("svg") { + continue; + } + let svg = std::fs::read_to_string(&path).expect("read svg"); + let root = svg + .split_once("')) + .map(|(tag, _)| tag) + .expect("svg root tag"); + for attr in ["width", "height"] { + let prefix = format!("{attr}=\""); + let value = root + .split_whitespace() + .find_map(|part| part.strip_prefix(&prefix)) + .and_then(|rest| rest.split('"').next()) + .and_then(|value| value.parse::().ok()); + if let Some(value) = value { + assert!( + value <= MAX_DIMENSION, + "{} has intrinsic {attr}={value}; oversized color icons leak memory (issue #185)", + path.display() + ); + } + } + } + } }