| 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",
|
|
|