Commit 63eae289 authored by Bo Liu's avatar Bo Liu Committed by Commit Bot

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: default avatarColin Blundell <blundell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#698497}
parent 98ebdbf3
...@@ -10,13 +10,13 @@ import org.chromium.base.annotations.CalledByNative; ...@@ -10,13 +10,13 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.HashMap; import java.util.WeakHashMap;
@JNINamespace("device") @JNINamespace("device")
class PowerSaveBlocker { class PowerSaveBlocker {
// Counter associated to a view to know how many PowerSaveBlocker are // Counter associated to a view to know how many PowerSaveBlocker are
// currently registered. // currently registered. Using WeakHashMap to prevent leaks in Android WebView.
private static HashMap<View, Integer> sBlockViewCounter = new HashMap<View, Integer>(); private static WeakHashMap<View, Integer> sBlockViewCounter = new WeakHashMap<View, Integer>();
// WeakReference to prevent leaks in Android WebView. // WeakReference to prevent leaks in Android WebView.
private WeakReference<View> mKeepScreenOnView; private WeakReference<View> mKeepScreenOnView;
...@@ -54,6 +54,9 @@ class PowerSaveBlocker { ...@@ -54,6 +54,9 @@ class PowerSaveBlocker {
View view = mKeepScreenOnView.get(); View view = mKeepScreenOnView.get();
mKeepScreenOnView = null; mKeepScreenOnView = null;
// View has been garbage collected. No need to worry about clean up.
if (view == null) return;
Integer prev_counter = sBlockViewCounter.get(view); Integer prev_counter = sBlockViewCounter.get(view);
assert prev_counter != null; assert prev_counter != null;
assert prev_counter.intValue() > 0; assert prev_counter.intValue() > 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment