diff options
author | Alex Light <allight@google.com> | 2018-02-06 21:52:29 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-02-06 21:52:29 +0000 |
commit | 946112c103bd27acdcd4a3e2f1d761f5aa70c6f1 (patch) | |
tree | c3b719069c63d7a711a9153ce9ae0be394af6496 | |
parent | 9a39d46efd9847faa9529040f5a7e1a58586eb18 (diff) | |
parent | 535be396135f05886bd0b4bcd043fb5ce48fe24e (diff) | |
download | apache-harmony-946112c103bd27acdcd4a3e2f1d761f5aa70c6f1.tar.gz |
Merge "Make EnableCollection using tests more robust" am: db8df4ae01 am: a971ccfd0f
am: 535be39613
Change-Id: I50f88c230fac5a4ec1dd882b7ebb67e464df1bb9
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(); + } +} |