Cherry-pick: aw: Invalidate view on hardware teardown

Clean cherry-pick of chromium
crrev.com/f06145bfa6fb8bb4bbff86d8bd38e6e7c4a5078e

BUG: 17415765

Original description:

This is a new requirement in L during functor teardown.

Review URL: https://codereview.chromium.org/561553002

Change-Id: Ic37699f5d73bb9451458a4301cbf6bd34880c537
Cr-Commit-Position: refs/heads/master@{#294201}
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index cd4b145..7e64190 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -2032,6 +2032,13 @@
         }
     }
 
+    // Call postInvalidateOnAnimation for invalidations. This is only used to synchronize
+    // draw functor destruction.
+    @CalledByNative
+    private void invalidateOnFunctorDestroy() {
+        mContainerView.invalidate();
+    }
+
     @CalledByNative
     private int[] getLocationOnScreen() {
         int[] result = new int[2];
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 97e6a8b..19ed04f 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -899,6 +899,11 @@
 void AwContents::ReleaseHardwareDrawIfNeeded() {
   InsideHardwareReleaseReset inside_reset(&shared_renderer_state_);
 
+  JNIEnv* env = AttachCurrentThread();
+  ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+  if (!obj.is_null())
+    Java_AwContents_invalidateOnFunctorDestroy(env, obj.obj());
+
   bool hardware_initialized = browser_view_renderer_.hardware_enabled();
   if (hardware_initialized) {
     bool draw_functor_succeeded = RequestDrawGL(NULL, true);