OSDN Git Service

Fix perf regression from scale/density mismatch
authorJohn Reck <jreck@google.com>
Thu, 27 Sep 2012 23:31:15 +0000 (16:31 -0700)
committerJohn Reck <jreck@google.com>
Fri, 28 Sep 2012 00:10:49 +0000 (17:10 -0700)
 Bug: 7242941

Change-Id: I8a45e8ae589cecc6215566b995003b9eefb7827e

core/java/android/webkit/BrowserFrame.java
core/java/android/webkit/WebViewClassic.java
core/java/android/webkit/WebViewCore.java

index fea427d..4dbca23 100644 (file)
@@ -1025,7 +1025,7 @@ class BrowserFrame extends Handler {
     }
 
     private float density() {
-        return mContext.getResources().getDisplayMetrics().density;
+        return WebViewCore.getFixedDisplayDensity(mContext);
     }
 
     /**
index 1c47615..d68511c 100644 (file)
@@ -1664,7 +1664,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
         mTouchSlopSquare = slop * slop;
         slop = configuration.getScaledDoubleTapSlop();
         mDoubleTapSlopSquare = slop * slop;
-        final float density = mContext.getResources().getDisplayMetrics().density;
+        final float density = WebViewCore.getFixedDisplayDensity(mContext);
         // use one line height, 16 based on our current default font, for how
         // far we allow a touch be away from the edge of a link
         mNavSlop = (int) (16 * density);
@@ -1809,7 +1809,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
     }
 
     /* package */ void adjustDefaultZoomDensity(int zoomDensity) {
-        final float density = mContext.getResources().getDisplayMetrics().density
+        final float density = WebViewCore.getFixedDisplayDensity(mContext)
                 * 100 / zoomDensity;
         updateDefaultZoomDensity(density);
     }
index 33fe834..3fb3ec6 100644 (file)
@@ -2479,6 +2479,13 @@ public final class WebViewCore {
         setupViewport(true);
     }
 
+    static float getFixedDisplayDensity(Context context) {
+        // We make bad assumptions about multiplying and dividing density by 100,
+        // force them to be true with this hack
+        float density = context.getResources().getDisplayMetrics().density;
+        return ((int) (density * 100)) / 100.0f;
+    }
+
     private void setupViewport(boolean updateViewState) {
         if (mWebViewClassic == null || mSettings == null) {
             // We've been destroyed or are being destroyed, return early
@@ -2523,14 +2530,13 @@ public final class WebViewCore {
         // adjust the default scale to match the densityDpi
         float adjust = 1.0f;
         if (mViewportDensityDpi == -1) {
-            adjust = mContext.getResources().getDisplayMetrics().density;
+            adjust = getFixedDisplayDensity(mContext);
         } else if (mViewportDensityDpi > 0) {
             adjust = (float) mContext.getResources().getDisplayMetrics().densityDpi
                     / mViewportDensityDpi;
+            adjust = ((int) (adjust * 100)) / 100.0f;
         }
-        // We make bad assumptions about multiplying and dividing by 100, force
-        // them to be true with this hack
-        adjust = ((int) (adjust * 100)) / 100.0f;
+
         // Remove any update density messages in flight.
         // If the density is indeed different from WebView's default scale,
         // a new message will be queued.