Merge "Pause drawing when not visible" into ics-mr1
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index c80994a..03d6511 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -3254,6 +3254,26 @@
             if (mHTML5VideoViewProxy != null) {
                 mHTML5VideoViewProxy.pauseAndDispatch();
             }
+            if (mNativeClass != 0) {
+                nativeSetPauseDrawing(mNativeClass, true);
+            }
+        }
+    }
+
+    @Override
+    protected void onWindowVisibilityChanged(int visibility) {
+        super.onWindowVisibilityChanged(visibility);
+        updateDrawingState();
+    }
+
+    void updateDrawingState() {
+        if (mNativeClass == 0 || mIsPaused) return;
+        if (getWindowVisibility() != VISIBLE) {
+            nativeSetPauseDrawing(mNativeClass, true);
+        } else if (getVisibility() != VISIBLE) {
+            nativeSetPauseDrawing(mNativeClass, true);
+        } else {
+            nativeSetPauseDrawing(mNativeClass, false);
         }
     }
 
@@ -3265,6 +3285,9 @@
         if (mIsPaused) {
             mIsPaused = false;
             mWebViewCore.sendMessage(EventHub.ON_RESUME);
+            if (mNativeClass != 0) {
+                nativeSetPauseDrawing(mNativeClass, false);
+            }
         }
     }
 
@@ -5599,6 +5622,7 @@
         if (visibility != View.VISIBLE && mZoomManager != null) {
             mZoomManager.dismissZoomPicker();
         }
+        updateDrawingState();
     }
 
     /**
@@ -8403,6 +8427,9 @@
                         setNewPicture(mDelaySetPicture, true);
                         mDelaySetPicture = null;
                     }
+                    if (mIsPaused) {
+                        nativeSetPauseDrawing(mNativeClass, true);
+                    }
                     break;
                 case UPDATE_TEXTFIELD_TEXT_MSG_ID:
                     // Make sure that the textfield is currently focused
@@ -9581,4 +9608,5 @@
      * See {@link ComponentCallbacks2} for the trim levels and descriptions
      */
     private static native void     nativeOnTrimMemory(int level);
+    private static native void nativeSetPauseDrawing(int instance, boolean pause);
 }