Reuse display lists at the java level.

Objects are invalidated and reset instead of being nulled out
and recreated. This avoids creating small amounts of garbage for
the display list and canvas objects.

Change-Id: I464fac7ea8944c19ad6d03f13a95d9017e3f4262
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 48f9e81..3cacbe3 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -7783,9 +7783,12 @@
         }
 
         if ((mViewFlags & DRAWING_CACHE_ENABLED) == DRAWING_CACHE_ENABLED &&
-                ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || mDisplayList == null)) {
+                ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 ||
+                        mDisplayList == null || !mDisplayList.isValid())) {
 
-            mDisplayList = mAttachInfo.mHardwareRenderer.createDisplayList();
+            if (mDisplayList == null) {
+                mDisplayList = mAttachInfo.mHardwareRenderer.createDisplayList();
+            }
 
             final HardwareCanvas canvas = mDisplayList.start();
             try {
@@ -7886,7 +7889,7 @@
             mUnscaledDrawingCache = null;
         }
         if (mDisplayList != null) {
-            mDisplayList = null;
+            mDisplayList.invalidate();
         }
     }