Index: ui/surface/accelerated_surface_win.cc |
diff --git a/ui/surface/accelerated_surface_win.cc b/ui/surface/accelerated_surface_win.cc |
index 8e6e8094b84737f750296fb209e38c54fb8c4c6f..2b71aa598e1ca406b28f25683f5d0dd4012caf10 100644 |
--- a/ui/surface/accelerated_surface_win.cc |
+++ b/ui/surface/accelerated_surface_win.cc |
@@ -23,6 +23,7 @@ |
#include "base/threading/thread_restrictions.h" |
#include "base/time.h" |
#include "base/win/wrapped_window_proc.h" |
+#include "ui/base/win/dpi.h" |
#include "ui/base/win/hwnd_util.h" |
#include "ui/gfx/rect.h" |
#include "ui/gl/gl_switches.h" |
@@ -489,7 +490,19 @@ void AcceleratedPresenter::DoPresentAndAcknowledge( |
// If the window is a different size than the swap chain that is being |
// presented then drop the frame. |
gfx::Size window_size = GetWindowSize(); |
- if (hidden_ && size != window_size) { |
+#if defined(ENABLE_HIDPI) |
+ // Check if the size mismatch is within allowable round off or truncation |
+ // error. |
+ gfx::Size dip_size = ui::win::ScreenToDIPSize(window_size); |
+ gfx::Size pixel_size = ui::win::DIPToScreenSize(dip_size); |
+ bool size_mismatch = abs(window_size.width() - size.width()) > |
+ abs(window_size.width() - pixel_size.width()) || |
+ abs(window_size.height() - size.height()) > |
+ abs(window_size.height() - pixel_size.height()); |
+#else |
+ bool size_mismatch = size != window_size; |
+#endif |
+ if (hidden_ && size_mismatch) { |
TRACE_EVENT2("gpu", "EarlyOut_WrongWindowSize", |
"backwidth", size.width(), "backheight", size.height()); |
TRACE_EVENT2("gpu", "EarlyOut_WrongWindowSize2", |