summaryrefslogtreecommitdiffstats
path: root/ui/surface/accelerated_surface_win.cc
diff options
context:
space:
mode:
authorkevers@chromium.org <kevers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-31 17:24:42 +0000
committerkevers@chromium.org <kevers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-31 17:24:42 +0000
commit7408e92fafcfa8c839c49953a9d3d10f6948098d (patch)
treeac64446c921220256bbba2824edce38d73889416 /ui/surface/accelerated_surface_win.cc
parent4623bfce16966ddf87053875b2756002590a3911 (diff)
downloadchromium_src-7408e92fafcfa8c839c49953a9d3d10f6948098d.zip
chromium_src-7408e92fafcfa8c839c49953a9d3d10f6948098d.tar.gz
chromium_src-7408e92fafcfa8c839c49953a9d3d10f6948098d.tar.bz2
Fix high-DPI on Windows to make use of DIP scaling in WebKit.
BUG=149881 Review URL: https://chromiumcodereview.appspot.com/11953054 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@179899 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/surface/accelerated_surface_win.cc')
-rw-r--r--ui/surface/accelerated_surface_win.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/ui/surface/accelerated_surface_win.cc b/ui/surface/accelerated_surface_win.cc
index abd0745..8692fa3 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/base/win/shell.h"
#include "ui/gfx/rect.h"
@@ -495,7 +496,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",