mirror of
https://github.com/slint-ui/slint.git
synced 2025-08-04 10:50:00 +00:00
Use SmolStr in more places of the compiler infrastructure
This removes a lot of allocations and speeds up the compiler step a bit. Sadly, this patch is very invasive as it touches a lot of files. That said, each individual hunk is pretty trivial. For a non-trivial real-world example, the impact is significant, we get rid of ~29% of all allocations and improve the runtime by about 4.8% (measured until the viewer loop would start). Before: ``` Benchmark 1: ./target/release/slint-viewer ../slint-perf/app.slint Time (mean ± σ): 664.2 ms ± 6.7 ms [User: 589.2 ms, System: 74.0 ms] Range (min … max): 659.0 ms … 682.4 ms 10 runs allocations: 4886888 temporary allocations: 857508 ``` After: ``` Benchmark 1: ./target/release/slint-viewer ../slint-perf/app.slint Time (mean ± σ): 639.5 ms ± 17.8 ms [User: 556.9 ms, System: 76.2 ms] Range (min … max): 621.4 ms … 666.5 ms 10 runs allocations: 3544318 temporary allocations: 495685 ```
This commit is contained in:
parent
08a3a6cc4a
commit
0f6c3a4fd7
75 changed files with 679 additions and 555 deletions
|
@ -130,7 +130,7 @@ impl NamedReference {
|
|||
.borrow()
|
||||
.property_analysis
|
||||
.borrow_mut()
|
||||
.entry(self.name().to_owned())
|
||||
.entry(self.name().into())
|
||||
.or_default()
|
||||
.is_set = true;
|
||||
mark_property_set_derived_in_base(element, self.name())
|
||||
|
@ -230,7 +230,7 @@ pub(crate) fn mark_property_set_derived_in_base(mut element: ElementRc, name: &s
|
|||
if element.borrow().property_declarations.contains_key(name) {
|
||||
return;
|
||||
};
|
||||
match c.root_element.borrow().property_analysis.borrow_mut().entry(name.to_owned()) {
|
||||
match c.root_element.borrow().property_analysis.borrow_mut().entry(name.into()) {
|
||||
std::collections::hash_map::Entry::Occupied(e) if e.get().is_set_externally => {
|
||||
return;
|
||||
}
|
||||
|
@ -256,7 +256,7 @@ pub(crate) fn mark_property_read_derived_in_base(mut element: ElementRc, name: &
|
|||
if element.borrow().property_declarations.contains_key(name) {
|
||||
return;
|
||||
};
|
||||
match c.root_element.borrow().property_analysis.borrow_mut().entry(name.to_owned()) {
|
||||
match c.root_element.borrow().property_analysis.borrow_mut().entry(name.into()) {
|
||||
std::collections::hash_map::Entry::Occupied(e) if e.get().is_read_externally => {
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue