LayoutLib: downsize the SparseArray when possible.

Change-Id: I570b93ab161414b7729f8d2dce8ddadb706f186b
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java
index 22f1609..4d0c9ce 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java
@@ -119,8 +119,6 @@
     }
 
     private void gc() {
-        // Log.e("SparseArray", "gc start with " + mSize);
-
         int n = mSize;
         int o = 0;
         int[] keys = mKeys;
@@ -144,7 +142,17 @@
         mGarbage = false;
         mSize = o;
 
-        // Log.e("SparseArray", "gc end with " + mSize);
+        int newSize = ArrayUtils.idealIntArraySize(mSize);
+        if (newSize < mKeys.length) {
+            int[] nkeys = new int[newSize];
+            WeakReference<?>[] nvalues = new WeakReference[newSize];
+
+            System.arraycopy(mKeys, 0, nkeys, 0, newSize);
+            System.arraycopy(mValues, 0, nvalues, 0, newSize);
+
+            mKeys = nkeys;
+            mValues = nvalues;
+        }
     }
 
     /**