Remove unnecessary framework allocations

These allocations were frequently triggered by the home screen. This change
removes dozens of allocations during page scrolls on home.

Change-Id: I7289efa28ecf5bd62459042b10062aa9cf0432dd
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index d1d036c..0837cf4 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -9187,7 +9187,7 @@
     }
 
     public final boolean getLocalVisibleRect(Rect r) {
-        Point offset = new Point();
+        final Point offset = mAttachInfo != null ? mAttachInfo.mPoint : new Point();
         if (getGlobalVisibleRect(r, offset)) {
             r.offset(-offset.x, -offset.y); // make r local
             return true;
@@ -17007,6 +17007,11 @@
         final boolean mDebugLayout = SystemProperties.getBoolean(DEBUG_LAYOUT_PROPERTY, false);
 
         /**
+         * Point used to compute visible regions.
+         */
+        final Point mPoint = new Point();
+
+        /**
          * Creates a new set of attachment information with the specified
          * events handler and thread.
          *
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index eb8d0ac..f3f18d5 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -211,6 +211,7 @@
     private boolean mOnlyIndeterminate;
     private Transformation mTransformation;
     private AlphaAnimation mAnimation;
+    private boolean mHasAnimation;
     private Drawable mIndeterminateDrawable;
     private Drawable mProgressDrawable;
     private Drawable mCurrentDrawable;
@@ -670,18 +671,14 @@
         if (mUiThreadId == Thread.currentThread().getId()) {
             doRefreshProgress(id, progress, fromUser, true);
         } else {
-            RefreshProgressRunnable r;
-            if (mRefreshProgressRunnable != null) {
-                // Use cached RefreshProgressRunnable if available
-                r = mRefreshProgressRunnable;
-            } else {
-                // Make a new one
-                r = new RefreshProgressRunnable();
+            if (mRefreshProgressRunnable == null) {
+                mRefreshProgressRunnable = new RefreshProgressRunnable();
             }
+
             final RefreshData rd = RefreshData.obtain(id, progress, fromUser);
             mRefreshData.add(rd);
             if (mAttached && !mRefreshIsPosted) {
-                post(r);
+                post(mRefreshProgressRunnable);
                 mRefreshIsPosted = true;
             }
         }
@@ -860,14 +857,26 @@
 
         if (mIndeterminateDrawable instanceof Animatable) {
             mShouldStartAnimationDrawable = true;
-            mAnimation = null;
+            mHasAnimation = false;
         } else {
+            mHasAnimation = true;
+
             if (mInterpolator == null) {
                 mInterpolator = new LinearInterpolator();
             }
     
-            mTransformation = new Transformation();
-            mAnimation = new AlphaAnimation(0.0f, 1.0f);
+            if (mTransformation == null) {
+                mTransformation = new Transformation();
+            } else {
+                mTransformation.clear();
+            }
+            
+            if (mAnimation == null) {
+                mAnimation = new AlphaAnimation(0.0f, 1.0f);
+            } else {
+                mAnimation.reset();
+            }
+
             mAnimation.setRepeatMode(mBehavior);
             mAnimation.setRepeatCount(Animation.INFINITE);
             mAnimation.setDuration(mDuration);
@@ -881,8 +890,7 @@
      * <p>Stop the indeterminate progress animation.</p>
      */
     void stopAnimation() {
-        mAnimation = null;
-        mTransformation = null;
+        mHasAnimation = false;
         if (mIndeterminateDrawable instanceof Animatable) {
             ((Animatable) mIndeterminateDrawable).stop();
             mShouldStartAnimationDrawable = false;
@@ -1030,7 +1038,7 @@
             canvas.save();
             canvas.translate(mPaddingLeft, mPaddingTop);
             long time = getDrawingTime();
-            if (mAnimation != null) {
+            if (mHasAnimation) {
                 mAnimation.getTransformation(time, mTransformation);
                 float scale = mTransformation.getAlpha();
                 try {