gpui: Optimize coalesce float sign checking (#28072)
Optimize away a multiplication during in the `coalesce` function. Our goal is to check whether the sign of two floats is the same. Instead of multiplying each `.signum()` and checking that the result is positive, we can simply check that the signum's are the same. This removes a float multiplication. ```rust a.signum() * b.signum() >= 0.0 ``` turns into ```rust a.signum() == b.signum() ``` Release Notes: - Fix documentation for `Pixels::signum`
This commit is contained in:
parent
804066a047
commit
24d4f8ca18
2 changed files with 4 additions and 5 deletions
|
@ -2622,7 +2622,6 @@ impl Pixels {
|
||||||
/// Returns:
|
/// Returns:
|
||||||
/// * `1.0` if the value is positive
|
/// * `1.0` if the value is positive
|
||||||
/// * `-1.0` if the value is negative
|
/// * `-1.0` if the value is negative
|
||||||
/// * `0.0` if the value is zero
|
|
||||||
pub fn signum(&self) -> f32 {
|
pub fn signum(&self) -> f32 {
|
||||||
self.0.signum()
|
self.0.signum()
|
||||||
}
|
}
|
||||||
|
|
|
@ -311,13 +311,13 @@ impl ScrollDelta {
|
||||||
pub fn coalesce(self, other: ScrollDelta) -> ScrollDelta {
|
pub fn coalesce(self, other: ScrollDelta) -> ScrollDelta {
|
||||||
match (self, other) {
|
match (self, other) {
|
||||||
(ScrollDelta::Pixels(a), ScrollDelta::Pixels(b)) => {
|
(ScrollDelta::Pixels(a), ScrollDelta::Pixels(b)) => {
|
||||||
let x = if a.x.signum() * b.x.signum() >= 0. {
|
let x = if a.x.signum() == b.x.signum() {
|
||||||
a.x + b.x
|
a.x + b.x
|
||||||
} else {
|
} else {
|
||||||
b.x
|
b.x
|
||||||
};
|
};
|
||||||
|
|
||||||
let y = if a.y.signum() * b.y.signum() >= 0. {
|
let y = if a.y.signum() == b.y.signum() {
|
||||||
a.y + b.y
|
a.y + b.y
|
||||||
} else {
|
} else {
|
||||||
b.y
|
b.y
|
||||||
|
@ -327,13 +327,13 @@ impl ScrollDelta {
|
||||||
}
|
}
|
||||||
|
|
||||||
(ScrollDelta::Lines(a), ScrollDelta::Lines(b)) => {
|
(ScrollDelta::Lines(a), ScrollDelta::Lines(b)) => {
|
||||||
let x = if a.x.signum() * b.x.signum() >= 0. {
|
let x = if a.x.signum() == b.x.signum() {
|
||||||
a.x + b.x
|
a.x + b.x
|
||||||
} else {
|
} else {
|
||||||
b.x
|
b.x
|
||||||
};
|
};
|
||||||
|
|
||||||
let y = if a.y.signum() * b.y.signum() >= 0. {
|
let y = if a.y.signum() == b.y.signum() {
|
||||||
a.y + b.y
|
a.y + b.y
|
||||||
} else {
|
} else {
|
||||||
b.y
|
b.y
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue