Index: ash/display/multi_display_manager.cc |
diff --git a/ash/display/multi_display_manager.cc b/ash/display/multi_display_manager.cc |
index 5911ae92a06d1bf2cdbd1ec03632f510750ba221..d155aed8e22f4310e88ea87a4a4c8dcca14403cc 100644 |
--- a/ash/display/multi_display_manager.cc |
+++ b/ash/display/multi_display_manager.cc |
@@ -511,7 +511,7 @@ void MultiDisplayManager::EnsurePointerInDisplays() { |
return; |
gfx::Point location_in_screen = Shell::GetScreen()->GetCursorScreenPoint(); |
gfx::Point target_location; |
- int64 closest_distance = -1; |
+ int64 closest_distance_squared = -1; |
for (DisplayList::const_iterator iter = displays_.begin(); |
iter != displays_.end(); ++iter) { |
@@ -522,14 +522,16 @@ void MultiDisplayManager::EnsurePointerInDisplays() { |
break; |
} |
gfx::Point center = display_bounds.CenterPoint(); |
- gfx::Point diff = center.Subtract(location_in_screen); |
- // Use the distance from the center of the dislay. This is not |
+ // Use the distance squared from the center of the dislay. This is not |
// exactly "closest" display, but good enough to pick one |
// appropriate (and there are at most two displays). |
- int64 distance = diff.x() * diff.x() + diff.y() * diff.y(); |
- if (closest_distance < 0 || closest_distance > distance) { |
+ // We don't care about actual distance, only relative to other displays, so |
+ // using the LengthSquared() is cheaper than Length(). |
+ int64 distance_squared = (center - location_in_screen).LengthSquared(); |
+ if (closest_distance_squared < 0 || |
+ closest_distance_squared > distance_squared) { |
target_location = center; |
- closest_distance = distance; |
+ closest_distance_squared = distance_squared; |
} |
} |