Skip to content

Commit 7c72a8f

Browse files
jreckAndroid (Google) Code Review
authored andcommitted
Merge "Fix perf regression from scale/density mismatch" into jb-mr1-dev
2 parents 3dc0b80 + 3f5a59a commit 7c72a8f

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

core/java/android/webkit/BrowserFrame.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,7 @@ private String getRawResFilename(int id) {
10251025
}
10261026

10271027
private float density() {
1028-
return mContext.getResources().getDisplayMetrics().density;
1028+
return WebViewCore.getFixedDisplayDensity(mContext);
10291029
}
10301030

10311031
/**

core/java/android/webkit/WebViewClassic.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,7 +1664,7 @@ private void init() {
16641664
mTouchSlopSquare = slop * slop;
16651665
slop = configuration.getScaledDoubleTapSlop();
16661666
mDoubleTapSlopSquare = slop * slop;
1667-
final float density = mContext.getResources().getDisplayMetrics().density;
1667+
final float density = WebViewCore.getFixedDisplayDensity(mContext);
16681668
// use one line height, 16 based on our current default font, for how
16691669
// far we allow a touch be away from the edge of a link
16701670
mNavSlop = (int) (16 * density);
@@ -1809,7 +1809,7 @@ public void setOverScrollMode(int mode) {
18091809
}
18101810

18111811
/* package */ void adjustDefaultZoomDensity(int zoomDensity) {
1812-
final float density = mContext.getResources().getDisplayMetrics().density
1812+
final float density = WebViewCore.getFixedDisplayDensity(mContext)
18131813
* 100 / zoomDensity;
18141814
updateDefaultZoomDensity(density);
18151815
}

core/java/android/webkit/WebViewCore.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2479,6 +2479,13 @@ private void updateViewport() {
24792479
setupViewport(true);
24802480
}
24812481

2482+
static float getFixedDisplayDensity(Context context) {
2483+
// We make bad assumptions about multiplying and dividing density by 100,
2484+
// force them to be true with this hack
2485+
float density = context.getResources().getDisplayMetrics().density;
2486+
return ((int) (density * 100)) / 100.0f;
2487+
}
2488+
24822489
private void setupViewport(boolean updateViewState) {
24832490
if (mWebViewClassic == null || mSettings == null) {
24842491
// We've been destroyed or are being destroyed, return early
@@ -2523,14 +2530,13 @@ private void setupViewport(boolean updateViewState) {
25232530
// adjust the default scale to match the densityDpi
25242531
float adjust = 1.0f;
25252532
if (mViewportDensityDpi == -1) {
2526-
adjust = mContext.getResources().getDisplayMetrics().density;
2533+
adjust = getFixedDisplayDensity(mContext);
25272534
} else if (mViewportDensityDpi > 0) {
25282535
adjust = (float) mContext.getResources().getDisplayMetrics().densityDpi
25292536
/ mViewportDensityDpi;
2537+
adjust = ((int) (adjust * 100)) / 100.0f;
25302538
}
2531-
// We make bad assumptions about multiplying and dividing by 100, force
2532-
// them to be true with this hack
2533-
adjust = ((int) (adjust * 100)) / 100.0f;
2539+
25342540
// Remove any update density messages in flight.
25352541
// If the density is indeed different from WebView's default scale,
25362542
// a new message will be queued.

0 commit comments

Comments
 (0)