Three root causes, all fixed and verified on the Pixel 9 Pro: 1. Present phase (backend + renderer): VSYNC_LOCKED_RENDER defers the render to the vsync wake; RENDER_AHEAD presents the previous frame at the start of render() (phase = wake + ~1.1 ms) and holds the new frame one slot. Crash fix: a held wgpu frame must be PRESENTED, never merely dropped, before the next acquire (AlreadyAcquired panic at launch otherwise); discard_pending_frame presents too. 2. Full-res prefetch churn (src/lib.rs): the 8-slot full cache cycled through a ~20-cell viewport forever (137 decodes/20 s) and each eviction free()'d a 50 MB Vec on the UI thread (20-52 ms CPU spikes, ~7/s = the residual SLOWEV NonMain jank). Fix: 60 s tombstone cooldown on evicted paths (idle prefetch skips, urgent tap bypasses) + off-thread reaper for the freed blobs (insert: 21 ms -> 4 us). 3. (earlier) Skia final flush + Mailbox present mode (vendor, M3). Instrumentation (all behind --features perf): OTHR/INVK/INVK_TAG/FLCK lines for cross-thread closure timing and push-site tagging. Warm measured swipe, 8580-file grid: cadence median 8.33 ms (exact 120 Hz), p99 15.5 ms, 5/552 gaps >16.7 ms (0.9%, max 28.3 ms, zero >33 ms); PRES phase median ~994 us, zero late frames. Docs updated (docs/BUGS/scroll-jank-120hz.md, full scorecard + line reference). Also: vendored i-slint-core + wgpu-hal (vkshim interposition patch), vkshim profiling tooling, backend made a non-optional dep, debuggable flag for simpleperf (REMOVE before shipping).
503 lines
9.3 KiB
TOML
503 lines
9.3 KiB
TOML
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
|
#
|
|
# When uploading crates to the registry Cargo will automatically
|
|
# "normalize" Cargo.toml files for maximal compatibility
|
|
# with all versions of Cargo and also rewrite `path` dependencies
|
|
# to registry (e.g., crates.io) dependencies.
|
|
#
|
|
# If you are reading this file be aware that the original Cargo.toml
|
|
# will likely look very different (and much more reasonable).
|
|
# See Cargo.toml.orig for the original contents.
|
|
|
|
[package]
|
|
edition = "2024"
|
|
rust-version = "1.92"
|
|
name = "i-slint-core"
|
|
version = "1.18.1"
|
|
authors = ["Slint Developers <info@slint.dev>"]
|
|
build = false
|
|
autolib = false
|
|
autobins = false
|
|
autoexamples = false
|
|
autotests = false
|
|
autobenches = false
|
|
description = "Internal Slint Runtime Library."
|
|
homepage = "https://slint.dev"
|
|
documentation = "https://slint.dev/docs"
|
|
readme = "README.md"
|
|
keywords = [
|
|
"gui",
|
|
"toolkit",
|
|
"graphics",
|
|
"design",
|
|
"ui",
|
|
]
|
|
categories = [
|
|
"gui",
|
|
"development-tools",
|
|
"no-std",
|
|
]
|
|
license = "GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0"
|
|
repository = "https://github.com/slint-ui/slint"
|
|
|
|
[package.metadata.docs.rs]
|
|
rustdoc-args = ["--generate-link-to-definition"]
|
|
|
|
[features]
|
|
32-bit-color = []
|
|
accessibility-text = [
|
|
"std",
|
|
"shared-parley",
|
|
"dep:accesskit",
|
|
"parley?/accesskit",
|
|
]
|
|
box-shadow-cache = []
|
|
default = [
|
|
"std",
|
|
"unicode",
|
|
"shared-parley",
|
|
]
|
|
ffi = [
|
|
"dep:static_assertions",
|
|
"i-slint-core-macros/ffi",
|
|
]
|
|
image-decoders = [
|
|
"dep:image",
|
|
"dep:clru",
|
|
]
|
|
image-default-formats = ["image?/default-formats"]
|
|
libm = [
|
|
"num-traits/libm",
|
|
"euclid/libm",
|
|
]
|
|
log = ["dep:log"]
|
|
path = [
|
|
"dep:lyon_path",
|
|
"dep:lyon_geom",
|
|
"dep:lyon_algorithms",
|
|
"dep:lyon_extra",
|
|
]
|
|
raw-window-handle-06 = ["dep:raw-window-handle-06"]
|
|
rtti = []
|
|
shared-fontique = ["i-slint-common/shared-fontique"]
|
|
shared-parley = [
|
|
"shared-fontique",
|
|
"dep:parley",
|
|
"dep:skrifa",
|
|
"dep:icu_normalizer",
|
|
]
|
|
shared-swash = ["dep:swash"]
|
|
std = [
|
|
"euclid/std",
|
|
"once_cell/std",
|
|
"dep:web-time",
|
|
"path",
|
|
"raw-window-handle-06?/std",
|
|
"chrono/std",
|
|
"chrono/wasmbind",
|
|
"chrono/clock",
|
|
"dep:sys-locale",
|
|
"shared-fontique",
|
|
"i-slint-common/locale-decimal-separator",
|
|
"i-slint-common/color-parsing",
|
|
"i-slint-common/markdown",
|
|
"taffy/std",
|
|
]
|
|
svg = [
|
|
"dep:resvg",
|
|
"i-slint-common/svg-text",
|
|
]
|
|
system-tray = [
|
|
"dep:ksni",
|
|
"dep:async-channel",
|
|
"ksni/async-io",
|
|
"ksni/blocking",
|
|
]
|
|
testing = []
|
|
tr = ["dep:tr"]
|
|
unicode = [
|
|
"unicode-script",
|
|
"unicode-linebreak",
|
|
]
|
|
unsafe-single-threaded = []
|
|
unstable-wgpu-29 = ["wgpu-29"]
|
|
unstable-wgpu-30 = ["wgpu-30"]
|
|
wgpu-29 = ["dep:wgpu-29"]
|
|
wgpu-30 = ["dep:wgpu-30"]
|
|
|
|
[lib]
|
|
name = "i_slint_core"
|
|
path = "lib.rs"
|
|
|
|
[[bench]]
|
|
name = "string"
|
|
path = "benches/string.rs"
|
|
harness = false
|
|
|
|
[dependencies.accesskit]
|
|
version = "0.24"
|
|
optional = true
|
|
|
|
[dependencies.bitflags]
|
|
version = "2.4.2"
|
|
|
|
[dependencies.cfg-if]
|
|
version = "1"
|
|
|
|
[dependencies.chrono]
|
|
version = "0.4"
|
|
features = ["alloc"]
|
|
default-features = false
|
|
|
|
[dependencies.clru]
|
|
version = "0.6.0"
|
|
optional = true
|
|
|
|
[dependencies.const-field-offset]
|
|
version = "0.2.1"
|
|
|
|
[dependencies.derive_more]
|
|
version = "2.0.0"
|
|
features = [
|
|
"deref",
|
|
"deref_mut",
|
|
"into",
|
|
"from",
|
|
"add",
|
|
"add_assign",
|
|
"mul",
|
|
"not",
|
|
"display",
|
|
"error",
|
|
"deref",
|
|
"deref_mut",
|
|
]
|
|
default-features = false
|
|
|
|
[dependencies.euclid]
|
|
version = "0.22.1"
|
|
default-features = false
|
|
|
|
[dependencies.i-slint-common]
|
|
version = "=1.18.1"
|
|
features = ["default"]
|
|
default-features = false
|
|
|
|
[dependencies.i-slint-core-macros]
|
|
version = "=1.18.1"
|
|
features = ["default"]
|
|
default-features = false
|
|
|
|
[dependencies.icu_normalizer]
|
|
version = "2"
|
|
features = ["compiled_data"]
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.image]
|
|
version = "0.25"
|
|
features = [
|
|
"png",
|
|
"jpeg",
|
|
]
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.log]
|
|
version = "0.4.17"
|
|
optional = true
|
|
|
|
[dependencies.lyon_algorithms]
|
|
version = "1.0"
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.lyon_extra]
|
|
version = "1.1"
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.lyon_geom]
|
|
version = "1.0"
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.lyon_path]
|
|
version = "1.0"
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.num-traits]
|
|
version = "0.2"
|
|
default-features = false
|
|
|
|
[dependencies.once_cell]
|
|
version = "1.5"
|
|
features = ["critical-section"]
|
|
default-features = false
|
|
|
|
[dependencies.pin-project]
|
|
version = "1"
|
|
|
|
[dependencies.pin-weak]
|
|
version = "1.1"
|
|
default-features = false
|
|
|
|
[dependencies.portable-atomic]
|
|
version = "1"
|
|
features = ["critical-section"]
|
|
|
|
[dependencies.raw-window-handle-06]
|
|
version = "0.6"
|
|
features = ["alloc"]
|
|
optional = true
|
|
package = "raw-window-handle"
|
|
|
|
[dependencies.resvg]
|
|
version = "0.48.1"
|
|
features = [
|
|
"text",
|
|
"raster-images",
|
|
"svgz",
|
|
]
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.rgb]
|
|
version = "0.8.27"
|
|
|
|
[dependencies.scopeguard]
|
|
version = "1.1.0"
|
|
default-features = false
|
|
|
|
[dependencies.serde]
|
|
version = "1.0.163"
|
|
features = ["derive"]
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.skrifa]
|
|
version = "0.44"
|
|
optional = true
|
|
|
|
[dependencies.slab]
|
|
version = "0.4.3"
|
|
default-features = false
|
|
|
|
[dependencies.static_assertions]
|
|
version = "1.1"
|
|
optional = true
|
|
|
|
[dependencies.strum]
|
|
version = "0.28"
|
|
features = ["derive"]
|
|
default-features = false
|
|
|
|
[dependencies.swash]
|
|
version = "0.2.7"
|
|
features = ["scale"]
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.sys-locale]
|
|
version = "0.3.2"
|
|
features = ["js"]
|
|
optional = true
|
|
|
|
[dependencies.taffy]
|
|
version = "0.10"
|
|
features = [
|
|
"flexbox",
|
|
"taffy_tree",
|
|
"alloc",
|
|
]
|
|
default-features = false
|
|
|
|
[dependencies.tr]
|
|
version = "0.1"
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.unicode-linebreak]
|
|
version = "0.1.5"
|
|
optional = true
|
|
|
|
[dependencies.unicode-script]
|
|
version = "0.5.7"
|
|
optional = true
|
|
|
|
[dependencies.unicode-segmentation]
|
|
version = "1.12.0"
|
|
|
|
[dependencies.vtable]
|
|
version = "0.5"
|
|
|
|
[dependencies.wgpu-29]
|
|
version = "29.0.4"
|
|
optional = true
|
|
default-features = false
|
|
package = "wgpu"
|
|
|
|
[dependencies.wgpu-30]
|
|
version = "30"
|
|
optional = true
|
|
default-features = false
|
|
package = "wgpu"
|
|
|
|
[dev-dependencies.async-compat]
|
|
version = "0.2.4"
|
|
|
|
[dev-dependencies.criterion]
|
|
version = "0.8"
|
|
|
|
[dev-dependencies.fontique]
|
|
version = "0.11.1"
|
|
|
|
[dev-dependencies.rustybuzz]
|
|
version = "0.20.0"
|
|
|
|
[dev-dependencies.serde_json]
|
|
version = "1.0.96"
|
|
|
|
[dev-dependencies.tempfile]
|
|
version = "3.12.0"
|
|
|
|
[dev-dependencies.tiny-skia]
|
|
version = "0.12.0"
|
|
|
|
[dev-dependencies.tokio]
|
|
version = "1.35"
|
|
features = [
|
|
"rt-multi-thread",
|
|
"macros",
|
|
"time",
|
|
"net",
|
|
"io-util",
|
|
]
|
|
|
|
[dev-dependencies.ttf-parser]
|
|
version = "0.25"
|
|
|
|
[target.'cfg(all(target_family = "unix", not(target_vendor = "apple"), not(target_os = "android")))'.dependencies.async-channel]
|
|
version = "2"
|
|
optional = true
|
|
|
|
[target.'cfg(all(target_family = "unix", not(target_vendor = "apple"), not(target_os = "android")))'.dependencies.ksni]
|
|
version = "0.3.3"
|
|
optional = true
|
|
default-features = false
|
|
|
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.parley]
|
|
version = "0.11.1"
|
|
features = ["complex-scripts"]
|
|
optional = true
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.clru]
|
|
version = "0.6.0"
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.js-sys]
|
|
version = "0.3"
|
|
features = ["std"]
|
|
default-features = false
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.parley]
|
|
version = "0.11.1"
|
|
optional = true
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.wasm-bindgen]
|
|
version = "0.2"
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
|
|
version = "0.3.72"
|
|
features = [
|
|
"HtmlImageElement",
|
|
"Navigator",
|
|
"Blob",
|
|
"BlobPropertyBag",
|
|
"Url",
|
|
"DomParser",
|
|
"SupportedType",
|
|
"Document",
|
|
"Element",
|
|
]
|
|
default-features = false
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.web-time]
|
|
version = "1.0"
|
|
optional = true
|
|
|
|
[target.'cfg(target_family = "unix")'.dependencies.gettext-rs]
|
|
version = "0.7.1"
|
|
features = ["gettext-system"]
|
|
optional = true
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies.image]
|
|
version = "0.25"
|
|
features = [
|
|
"png",
|
|
"jpeg",
|
|
"png",
|
|
]
|
|
default-features = false
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies.objc2]
|
|
version = "0.6.3"
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies.objc2-app-kit]
|
|
version = "0.3.2"
|
|
features = [
|
|
"std",
|
|
"NSStatusBar",
|
|
"NSStatusItem",
|
|
"NSStatusBarButton",
|
|
"NSButton",
|
|
"NSControl",
|
|
"NSResponder",
|
|
"NSView",
|
|
"NSImage",
|
|
"NSMenu",
|
|
"NSMenuItem",
|
|
"NSApplication",
|
|
"NSAppearance",
|
|
"objc2-core-foundation",
|
|
]
|
|
default-features = false
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies.objc2-foundation]
|
|
version = "0.3.2"
|
|
features = [
|
|
"std",
|
|
"NSArray",
|
|
"NSData",
|
|
"NSDictionary",
|
|
"NSKeyValueObserving",
|
|
"NSString",
|
|
"NSGeometry",
|
|
"NSObjCRuntime",
|
|
]
|
|
default-features = false
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies.windows]
|
|
version = "0.62"
|
|
features = [
|
|
"Win32_Foundation",
|
|
"Win32_Graphics_Gdi",
|
|
"Win32_System_LibraryLoader",
|
|
"Win32_UI_Shell",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
]
|
|
|
|
[lints.clippy.unnecessary_cast]
|
|
level = "allow"
|
|
priority = 0
|
|
|
|
[lints.rust.unexpected_cfgs]
|
|
level = "warn"
|
|
priority = 0
|
|
check-cfg = [
|
|
"cfg(slint_debug_property)",
|
|
"cfg(cbindgen)",
|
|
"cfg(slint_int_coord)",
|
|
"cfg(slint_nightly_test)",
|
|
]
|