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:
|
||||
/// * `1.0` if the value is positive
|
||||
/// * `-1.0` if the value is negative
|
||||
/// * `0.0` if the value is zero
|
||||
pub fn signum(&self) -> f32 {
|
||||
self.0.signum()
|
||||
}
|
||||
|
|
|
@ -311,13 +311,13 @@ impl ScrollDelta {
|
|||
pub fn coalesce(self, other: ScrollDelta) -> ScrollDelta {
|
||||
match (self, other) {
|
||||
(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
|
||||
} else {
|
||||
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
|
||||
} else {
|
||||
b.y
|
||||
|
@ -327,13 +327,13 @@ impl ScrollDelta {
|
|||
}
|
||||
|
||||
(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
|
||||
} else {
|
||||
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
|
||||
} else {
|
||||
b.y
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue