0

Remove gc root from PowerSaveBlocker

Views used by PowerSaveBlocker should be allowed to be garbage
collected. WebView relies on this in order to not leak.

Bug: 1004166
Change-Id: I95a996f4de21ab437650cb4ac039adb56e21815e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1816797
Commit-Queue: Bo <boliu@chromium.org>
Auto-Submit: Bo <boliu@chromium.org>
Reviewed-by: Colin Blundell <blundell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#698497}
This commit is contained in:
Bo Liu
2019-09-20 15:34:45 +00:00
committed by Commit Bot
parent 98ebdbf3d5
commit 63eae2891e

@ -10,13 +10,13 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.WeakHashMap;
@JNINamespace("device")
class PowerSaveBlocker {
// Counter associated to a view to know how many PowerSaveBlocker are
// currently registered.
private static HashMap<View, Integer> sBlockViewCounter = new HashMap<View, Integer>();
// currently registered. Using WeakHashMap to prevent leaks in Android WebView.
private static WeakHashMap<View, Integer> sBlockViewCounter = new WeakHashMap<View, Integer>();
// WeakReference to prevent leaks in Android WebView.
private WeakReference<View> mKeepScreenOnView;
@ -54,6 +54,9 @@ class PowerSaveBlocker {
View view = mKeepScreenOnView.get();
mKeepScreenOnView = null;
// View has been garbage collected. No need to worry about clean up.
if (view == null) return;
Integer prev_counter = sBlockViewCounter.get(view);
assert prev_counter != null;
assert prev_counter.intValue() > 0;