summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Light <allight@google.com>2018-02-06 21:52:29 +0000
committerandroid-build-merger <android-build-merger@google.com>2018-02-06 21:52:29 +0000
commit946112c103bd27acdcd4a3e2f1d761f5aa70c6f1 (patch)
treec3b719069c63d7a711a9153ce9ae0be394af6496
parent9a39d46efd9847faa9529040f5a7e1a58586eb18 (diff)
parent535be396135f05886bd0b4bcd043fb5ce48fe24e (diff)
downloadapache-harmony-946112c103bd27acdcd4a3e2f1d761f5aa70c6f1.tar.gz
Merge "Make EnableCollection using tests more robust" am: db8df4ae01 am: a971ccfd0f
am: 535be39613 Change-Id: I50f88c230fac5a4ec1dd882b7ebb67e464df1bb9
-rw-r--r--jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java8
-rw-r--r--jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java9
-rw-r--r--jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java11
-rw-r--r--jdwp/src/test/java/org/apache/harmony/jpda/tests/share/GcMarker.java58
4 files changed, 77 insertions, 9 deletions
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java
index 8656ee8..c14f839 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java
@@ -25,6 +25,7 @@
*/
package org.apache.harmony.jpda.tests.jdwp.MultiSession;
+import org.apache.harmony.jpda.tests.share.GcMarker;
import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
import org.apache.harmony.jpda.tests.share.SyncDebuggee;
@@ -35,12 +36,15 @@ public class EnableCollectionDebuggee extends SyncDebuggee {
static EnableCollectionObject001_02 patternObject;
static boolean patternObject_Finalized = false;
+ static GcMarker marker;
+
@Override
public void run() {
logWriter.println("--> Debuggee: EnableCollectionDebuggee: START");
checkedObject = new EnableCollectionObject001_01();
patternObject = new EnableCollectionObject001_02();
+ marker = new GcMarker();
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
String messageFromTest = synchronizer.receiveMessage();
@@ -75,7 +79,9 @@ public void run() {
logWriter.println("--> Debuggee: OutOfMemoryError!!!");
}
longArray = null;
- System.gc();
+
+ marker.waitForGc();
+
logWriter.println("--> Debuggee: AFTER System.gc():");
logWriter.println("--> Debuggee: checkedObject = " +
checkedObject);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java
index dae5522..402d447 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java
@@ -25,6 +25,7 @@
*/
package org.apache.harmony.jpda.tests.jdwp.ObjectReference;
+import org.apache.harmony.jpda.tests.share.GcMarker;
import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
import org.apache.harmony.jpda.tests.share.SyncDebuggee;
@@ -35,6 +36,8 @@ public class EnableCollectionDebuggee extends SyncDebuggee {
static EnableCollectionObject001_02 patternObject;
static boolean patternObject_Finalized = false;
+ static GcMarker marker;
+
@Override
public void run() {
logWriter.println("--> Debuggee: EnableCollectionDebuggee: START");
@@ -42,6 +45,7 @@ public class EnableCollectionDebuggee extends SyncDebuggee {
// Allocates test objects to be sure there is no local reference
// to them.
allocateTestObjects();
+ marker = new GcMarker();
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
String messageFromTest = synchronizer.receiveMessage();
@@ -57,10 +61,7 @@ public class EnableCollectionDebuggee extends SyncDebuggee {
// Allocates many objects to increase the heap.
causeMemoryDepletion();
- // Requests GC and finalization of objects.
- System.gc();
- System.runFinalization();
- System.gc();
+ marker.waitForGc();
logWriter.println("--> Debuggee: AFTER System.gc():");
logWriter.println("--> Debuggee: checkedObject = " + checkedObject);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java
index 9dcc3f9..e7437c7 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java
@@ -25,6 +25,7 @@
*/
package org.apache.harmony.jpda.tests.jdwp.ObjectReference;
+import org.apache.harmony.jpda.tests.share.GcMarker;
import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
import org.apache.harmony.jpda.tests.share.SyncDebuggee;
@@ -37,6 +38,8 @@ public class IsCollectedDebuggee extends SyncDebuggee {
static IsCollectedObject001_03 checkedObject_03;
static volatile boolean checkedObject_03_Finalized = false;
+ static GcMarker marker;
+
@Override
public void run() {
logWriter.println("--> Debuggee: IsCollectedDebuggee: START");
@@ -44,6 +47,7 @@ public class IsCollectedDebuggee extends SyncDebuggee {
checkedObject_01 = new IsCollectedObject001_01();
checkedObject_02 = new IsCollectedObject001_02();
checkedObject_03 = new IsCollectedObject001_03();
+ marker = new GcMarker();
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
String messageFromTest = synchronizer.receiveMessage();
@@ -70,10 +74,9 @@ public class IsCollectedDebuggee extends SyncDebuggee {
// logWriter.println("--> Debuggee: i = " + i);
}
longArray = null;
- Runtime.getRuntime().gc();
- System.runFinalization(); // Make sure that the finalizers are finished running.
- // Make sure the JNI weak globals are cleared, need to do this after runFinalization.
- Runtime.getRuntime().gc();
+
+ marker.waitForGc();
+
logWriter.println("--> Debuggee: AFTER System.gc():");
logWriter.println("--> Debuggee: checkedObject_01 = " +
checkedObject_01);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/GcMarker.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/GcMarker.java
new file mode 100644
index 0000000..c41066c
--- /dev/null
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/GcMarker.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.jpda.tests.share;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * A class that allows one to observe GCs.
+ */
+public class GcMarker {
+ private Object marker;
+ private WeakReference<Object> markerRef;
+
+ public GcMarker() {
+ reset();
+ }
+
+ private boolean isLive() {
+ return markerRef.get() != null;
+ }
+
+ private void allowCollection() {
+ marker = null;
+ }
+
+ private void reset() {
+ marker = new Object();
+ markerRef = new WeakReference<Object>(marker);
+ }
+
+ public void waitForGc() {
+ allowCollection();
+ // Requests GC and finalization of objects.
+ do {
+ try { Thread.sleep(10); } catch (Exception e) {}
+ System.gc();
+ System.runFinalization();
+ System.gc();
+ } while (isLive());
+ reset();
+ }
+}