diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 86ed677..c99066d 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -598,7 +598,7 @@
     jclass bitmap_class = env->FindClass("android/graphics/Bitmap");
     SkASSERT(bitmap_class);
     gBitmap_nativeBitmapFieldID = getFieldIDCheck(env, bitmap_class, "mNativeBitmap", "J");
-    gBitmap_layoutBoundsFieldID = getFieldIDCheck(env, bitmap_class, "mLayoutBounds", "[I");
+    gBitmap_layoutBoundsFieldID = getFieldIDCheck(env, bitmap_class, "mOpticalInsets", "[I");
     int ret = AndroidRuntime::registerNativeMethods(env,
                                     "android/graphics/BitmapFactory$Options",
                                     gOptionsMethods,
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 9d7ef45..9561ac4 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -16,6 +16,7 @@
 
 package android.graphics;
 
+import android.annotation.NonNull;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.DisplayMetrics;
@@ -73,7 +74,7 @@
     private boolean mRequestPremultiplied;
 
     private byte[] mNinePatchChunk;   // may be null
-    private int[] mLayoutBounds;   // may be null
+    private int[] mOpticalInsets;     // may be null
     private int mWidth;
     private int mHeight;
     private boolean mRecycled;
@@ -110,7 +111,7 @@
     @SuppressWarnings({"UnusedDeclaration"}) // called from JNI
     Bitmap(long nativeBitmap, byte[] buffer, int width, int height, int density,
             boolean isMutable, boolean requestPremultiplied,
-            byte[] ninePatchChunk, int[] layoutBounds) {
+            byte[] ninePatchChunk, int[] opticalInsets) {
         if (nativeBitmap == 0) {
             throw new RuntimeException("internal error: native bitmap is 0");
         }
@@ -125,7 +126,7 @@
         mFinalizer = new BitmapFinalizer(nativeBitmap);
 
         mNinePatchChunk = ninePatchChunk;
-        mLayoutBounds = layoutBounds;
+        mOpticalInsets = opticalInsets;
         if (density >= 0) {
             mDensity = density;
         }
@@ -292,16 +293,6 @@
     }
 
     /**
-     * Sets the layout bounds as an array of left, top, right, bottom integers
-     * @param bounds the array containing the padding values
-     *
-     * @hide
-     */
-    public void setLayoutBounds(int[] bounds) {
-        mLayoutBounds = bounds;
-    }
-
-    /**
      * Free the native object associated with this bitmap, and clear the
      * reference to the pixel data. This will not free the pixel data synchronously;
      * it simply allows it to be garbage collected if there are no other references.
@@ -949,11 +940,20 @@
     }
 
     /**
+     * Populates a rectangle with the bitmap's optical insets.
+     *
+     * @param outInsets Rect to populate with optical insets
      * @hide
-     * @return the layout padding [left, right, top, bottom]
      */
-    public int[] getLayoutBounds() {
-        return mLayoutBounds;
+    public void getOpticalInsets(@NonNull Rect outInsets) {
+        if (mOpticalInsets == null) {
+            outInsets.setEmpty();
+        } else {
+            outInsets.left = mOpticalInsets[0];
+            outInsets.top = mOpticalInsets[1];
+            outInsets.right = mOpticalInsets[2];
+            outInsets.bottom = mOpticalInsets[3];
+        }
     }
 
     /**
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index c4cfd4a..c2759ec 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -948,13 +948,10 @@
                 np = null;
                 pad = null;
             }
-            int[] layoutBounds = bm.getLayoutBounds();
-            Rect layoutBoundsRect = null;
-            if (layoutBounds != null) {
-                layoutBoundsRect = new Rect(layoutBounds[0], layoutBounds[1],
-                                             layoutBounds[2], layoutBounds[3]);
-            }
-            return drawableFromBitmap(res, bm, np, pad, layoutBoundsRect, srcName);
+
+            final Rect opticalInsets = new Rect();
+            bm.getOpticalInsets(opticalInsets);
+            return drawableFromBitmap(res, bm, np, pad, opticalInsets, srcName);
         }
         return null;
     }
diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java
index eed86f6..e91ffb1 100644
--- a/graphics/java/android/graphics/drawable/InsetDrawable.java
+++ b/graphics/java/android/graphics/drawable/InsetDrawable.java
@@ -188,6 +188,16 @@
         }
     }
 
+    /** @hide */
+    @Override
+    public Insets getOpticalInsets() {
+        final Insets contentInsets = super.getOpticalInsets();
+        return Insets.of(contentInsets.left + mInsetState.mInsetLeft,
+                contentInsets.top + mInsetState.mInsetTop,
+                contentInsets.right + mInsetState.mInsetRight,
+                contentInsets.bottom + mInsetState.mInsetBottom);
+    }
+
     @Override
     public void setHotspot(float x, float y) {
         mInsetState.mDrawable.setHotspot(x, y);
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index 28335ea..6642bdd 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -23,12 +23,10 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.ColorFilter;
 import android.graphics.Insets;
 import android.graphics.NinePatch;
 import android.graphics.Paint;
-import android.graphics.Paint.Style;
 import android.graphics.PixelFormat;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuff.Mode;
@@ -419,6 +417,9 @@
                         ": <nine-patch> requires a valid 9-patch source image");
             }
 
+            // Hey, now might be a good time to actually load optical bounds!
+            bitmap.getOpticalInsets(opticalInsets);
+
             state.mNinePatch = new NinePatch(bitmap, bitmap.getNinePatchChunk());
             state.mPadding = padding;
             state.mOpticalInsets = Insets.of(opticalInsets);
