Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8016)

Unified Diff: base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java

Issue 2865963003: [Suggestions UI] Drop Bitmap references from articles under memory pressure. (Closed)
Patch Set: remove annotation Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java
diff --git a/base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java b/base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..48a23b567a4032a0fd580661341330e34dd02eb1
--- /dev/null
+++ b/base/android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java
@@ -0,0 +1,78 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.base;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.DiscardableReferencePool.DiscardableReference;
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Tests for {@link DiscardableReferencePool}.
+ */
+@RunWith(LocalRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class DiscardableReferencePoolTest {
+ /**
+ * Tests that draining the pool clears references and allows objects to be garbage collected.
+ */
+ @Test
+ public void testDrain() {
+ DiscardableReferencePool pool = new DiscardableReferencePool();
+
+ Object object = new Object();
+ WeakReference<Object> weakReference = new WeakReference<>(object);
+
+ DiscardableReference<Object> discardableReference = pool.put(object);
+ Assert.assertEquals(object, discardableReference.get());
+
+ // Drop reference to the object itself, to allow it to be garbage-collected.
+ object = null;
+
+ pool.drain();
+
+ // The discardable reference should be null now.
+ Assert.assertNull(discardableReference.get());
+
+ // The object is not (strongly) reachable anymore, so the weak reference may or may not be
+ // null (it could be if a GC has happened since the pool was drained).
+ // After an explicit GC call it definitely should be null.
+ Runtime.getRuntime().gc();
+
+ Assert.assertNull(weakReference.get());
+ }
+
+ /**
+ * Tests that dropping the (last) discardable reference to an object allows it to be regularly
+ * garbage collected.
+ */
+ @Test
+ public void testReferenceGCd() {
+ DiscardableReferencePool pool = new DiscardableReferencePool();
+
+ Object object = new Object();
+ WeakReference<Object> weakReference = new WeakReference<>(object);
+
+ DiscardableReference<Object> discardableReference = pool.put(object);
+ Assert.assertEquals(object, discardableReference.get());
+
+ // Drop reference to the object itself and to the discardable reference, allowing the object
+ // to be garbage-collected.
+ object = null;
+ discardableReference = null;
+
+ // The object is not (strongly) reachable anymore, so the weak reference may or may not be
+ // null (it could be if a GC has happened since the pool was drained).
+ // After an explicit GC call it definitely should be null.
+ Runtime.getRuntime().gc();
+
+ Assert.assertNull(weakReference.get());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698