diff --git a/expectations/gm/ignored-tests.txt b/expectations/gm/ignored-tests.txt
index 58bc895..443626c 100644
--- a/expectations/gm/ignored-tests.txt
+++ b/expectations/gm/ignored-tests.txt
@@ -38,20 +38,3 @@
 
 # reed
 matrixconvolution
-
-#humper: https://codereview.chromium.org/470233002/
-downsamplebitmap_checkerboard_high_512_256
-downsamplebitmap_image_high_mandrill_512.png
-downsamplebitmap_text_high_72.00pt
-filterbitmap_checkerboard_192_192
-filterbitmap_checkerboard_32_2
-filterbitmap_checkerboard_32_32
-filterbitmap_checkerboard_32_8
-filterbitmap_checkerboard_4_4
-filterbitmap_image_mandrill_128.png
-filterbitmap_image_mandrill_16.png
-filterbitmap_image_mandrill_256.png
-filterbitmap_image_mandrill_32.png
-filterbitmap_image_mandrill_64.png
-filterbitmap_text_3.00pt
-filterbitmap_text_7.00pt
diff --git a/gyp/skia_for_chromium_defines.gypi b/gyp/skia_for_chromium_defines.gypi
index 53fc7b9..93674ef 100644
--- a/gyp/skia_for_chromium_defines.gypi
+++ b/gyp/skia_for_chromium_defines.gypi
@@ -13,7 +13,6 @@
     # If these become 'permanent', they should be moved into skia_common.gypi
     #
     'skia_for_chromium_defines': [
-      'SK_IGNORE_PROPER_FRACTIONAL_SCALING',
       'SK_SUPPORT_LEGACY_PICTURE_CLONE',
       'SK_SUPPORT_LEGACY_GETDEVICE',
       'SK_IGNORE_ETC1_SUPPORT',
diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp
index 2583cb5..7640573 100644
--- a/src/core/SkBitmapProcState.cpp
+++ b/src/core/SkBitmapProcState.cpp
@@ -149,34 +149,21 @@
 bool SkBitmapProcState::possiblyScaleImage() {
     SkASSERT(NULL == fBitmap);
 
-    fAdjustedMatrix = false;
-
     if (fFilterLevel <= SkPaint::kLow_FilterLevel) {
         return false;
     }
     // Check to see if the transformation matrix is simple, and if we're
     // doing high quality scaling.  If so, do the bitmap scale here and
-    // remove the (non-fractional) scaling component from the matrix.
-
-    SkScalar invScaleX = fInvMatrix.getScaleX();
-    SkScalar invScaleY = fInvMatrix.getScaleY();
-
-    float trueDestWidth  = fOrigBitmap.width() / invScaleX;
-    float trueDestHeight = fOrigBitmap.height() / invScaleY;
-
-#ifndef SK_IGNORE_PROPER_FRACTIONAL_SCALING
-    float roundedDestWidth = SkScalarRoundToScalar(trueDestWidth);
-    float roundedDestHeight = SkScalarRoundToScalar(trueDestHeight);
-#else
-    float roundedDestWidth = trueDestWidth;
-    float roundedDestHeight = trueDestHeight;
-#endif
+    // remove the scaling component from the matrix.
 
     if (SkPaint::kHigh_FilterLevel == fFilterLevel &&
         fInvMatrix.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask) &&
         kN32_SkColorType == fOrigBitmap.colorType() &&
         cache_size_okay(fOrigBitmap, fInvMatrix)) {
 
+        SkScalar invScaleX = fInvMatrix.getScaleX();
+        SkScalar invScaleY = fInvMatrix.getScaleY();
+
         if (SkScalarNearlyEqual(invScaleX,1.0f) &&
             SkScalarNearlyEqual(invScaleY,1.0f)) {
             // short-circuit identity scaling; the output is supposed to
@@ -193,14 +180,17 @@
             return false;
         }
 
-        if (!SkBitmapCache::Find(fOrigBitmap, roundedDestWidth, roundedDestHeight, &fScaledBitmap)) {
+        if (!SkBitmapCache::Find(fOrigBitmap, invScaleX, invScaleY, &fScaledBitmap)) {
+            float dest_width  = fOrigBitmap.width() / invScaleX;
+            float dest_height = fOrigBitmap.height() / invScaleY;
+
             // All the criteria are met; let's make a new bitmap.
 
             if (!SkBitmapScaler::Resize(&fScaledBitmap,
                                         fOrigBitmap,
                                         SkBitmapScaler::RESIZE_BEST,
-                                        roundedDestWidth,
-                                        roundedDestHeight,
+                                        dest_width,
+                                        dest_height,
                                         SkScaledImageCache::GetAllocator())) {
                 // we failed to create fScaledBitmap, so just return and let
                 // the scanline proc handle it.
@@ -209,7 +199,7 @@
             }
 
             SkASSERT(NULL != fScaledBitmap.getPixels());
-            SkBitmapCache::Add(fOrigBitmap, roundedDestWidth, roundedDestHeight, fScaledBitmap);
+            SkBitmapCache::Add(fOrigBitmap, invScaleX, invScaleY, fScaledBitmap);
         }
 
         SkASSERT(NULL != fScaledBitmap.getPixels());
@@ -219,19 +209,9 @@
         fInvMatrix.setTranslate(fInvMatrix.getTranslateX() / fInvMatrix.getScaleX(),
                                 fInvMatrix.getTranslateY() / fInvMatrix.getScaleY());
 
-#ifndef SK_IGNORE_PROPER_FRACTIONAL_SCALING
-        // reintroduce any fractional scaling missed by our integral scale done above.
-
-        float fractionalScaleX = trueDestWidth/roundedDestWidth;
-        float fractionalScaleY = trueDestHeight/roundedDestHeight;
-
-        fInvMatrix.postScale(fractionalScaleX, fractionalScaleY);
-#endif
-        fAdjustedMatrix = true;
-
         // Set our filter level to low -- the only post-filtering this
         // image might require is some interpolation if the translation
-        // is fractional or if there's any remaining scaling to be done.
+        // is fractional.
         fFilterLevel = SkPaint::kLow_FilterLevel;
         return true;
     }
@@ -387,7 +367,7 @@
     bool clampClamp = SkShader::kClamp_TileMode == fTileModeX &&
                       SkShader::kClamp_TileMode == fTileModeY;
 
-    if (!(fAdjustedMatrix || clampClamp || trivialMatrix)) {
+    if (!(clampClamp || trivialMatrix)) {
         fInvMatrix.postIDiv(fOrigBitmap.width(), fOrigBitmap.height());
     }
 
diff --git a/src/core/SkBitmapProcState.h b/src/core/SkBitmapProcState.h
index 4e4eded..64dda2e 100644
--- a/src/core/SkBitmapProcState.h
+++ b/src/core/SkBitmapProcState.h
@@ -144,7 +144,6 @@
     SkBitmap            fScaledBitmap;      // chooseProcs
 
     SkAutoTUnref<const SkMipMap> fCurrMip;
-    bool                fAdjustedMatrix;    // set by possiblyScaleImage
 
     MatrixProc chooseMatrixProc(bool trivial_matrix);
     bool chooseProcs(const SkMatrix& inv, const SkPaint&);
diff --git a/tests/ScaledImageCache.cpp b/tests/ScaledImageCache.cpp
index ffab2ad..276a3cc 100644
--- a/tests/ScaledImageCache.cpp
+++ b/tests/ScaledImageCache.cpp
@@ -17,9 +17,7 @@
                                      SkScalar xScale,
                                      SkScalar yScale) {
     SkBitmap scaled;
-    float roundedImageWidth = SkScalarRoundToScalar(orig.width() * xScale);
-    float roundedImageHeight = SkScalarRoundToScalar(orig.height() * xScale);
-    return SkBitmapCache::Find(orig, roundedImageWidth, roundedImageHeight, &scaled);
+    return SkBitmapCache::Find(orig, SkScalarInvert(xScale), SkScalarInvert(yScale), &scaled);
 }
 
 // Draw a scaled bitmap, then return true iff it has been cached.
