summaryrefslogtreecommitdiffstats
path: root/test/074-gc-thrash
diff options
context:
space:
mode:
authorSebastien Hertz <shertz@google.com>2015-02-24 17:39:50 +0100
committerSebastien Hertz <shertz@google.com>2015-07-09 11:23:13 +0200
commit5ee9454dfee08a70dec62b0ed0fd4ad274274937 (patch)
tree0d59bfc38f70c677d8ecd066618ed17dd838259b /test/074-gc-thrash
parentc2bf1255ebf360d009dd0763dcea8d2c9b9c676e (diff)
downloadandroid_art-5ee9454dfee08a70dec62b0ed0fd4ad274274937.tar.gz
android_art-5ee9454dfee08a70dec62b0ed0fd4ad274274937.tar.bz2
android_art-5ee9454dfee08a70dec62b0ed0fd4ad274274937.zip
Support compiling run-tests with jack
This CL adds support to compile run-test source files with jack. When a test needs to rely on class files, we use jill to convert them to a jack library. We need to pass the full classpath to jack containing at least core classes (like java.lang.Object). This means the Android tree must have been compiled with jack first so we find all the necessary classes.jack files. Some tests still rely on dex files generated with the old toolchain. We keep building them this way for the moment and will update them later, when they get ready for Jack. Also updates a few tests dealing with garbage collection to avoid a situation where a reference can be retained by a local DEX register. Bug: 19467889 (cherry picked from commit 19ac0276208f0afef6ba8a4ab34b74a59b8d11d7) Change-Id: Ia5a989b83430ffe8298a869a1da970b756721bb0
Diffstat (limited to 'test/074-gc-thrash')
-rw-r--r--test/074-gc-thrash/src/Main.java32
1 files changed, 21 insertions, 11 deletions
diff --git a/test/074-gc-thrash/src/Main.java b/test/074-gc-thrash/src/Main.java
index 238e73a6b2..f947d0b3dc 100644
--- a/test/074-gc-thrash/src/Main.java
+++ b/test/074-gc-thrash/src/Main.java
@@ -218,17 +218,7 @@ class Deep extends Thread {
return;
}
- /*
- * Check the results of the last trip through. Everything in
- * "weak" should be matched in "strong", and the two should be
- * equivalent (object-wise, not just string-equality-wise).
- */
- for (int i = 0; i < MAX_DEPTH; i++) {
- if (strong[i] != weak[i].get()) {
- System.err.println("Deep: " + i + " strong=" + strong[i] +
- ", weak=" + weak[i].get());
- }
- }
+ checkStringReferences();
/*
* Wipe "strong", do a GC, see if "weak" got collected.
@@ -248,6 +238,26 @@ class Deep extends Thread {
System.out.println("Deep: iters=" + iter / MAX_DEPTH);
}
+
+ /**
+ * Check the results of the last trip through. Everything in
+ * "weak" should be matched in "strong", and the two should be
+ * equivalent (object-wise, not just string-equality-wise).
+ *
+ * We do that check in a separate method to avoid retaining these
+ * String references in local DEX registers. In interpreter mode,
+ * they would retain these references until the end of the method
+ * or until they are updated to another value.
+ */
+ private static void checkStringReferences() {
+ for (int i = 0; i < MAX_DEPTH; i++) {
+ if (strong[i] != weak[i].get()) {
+ System.err.println("Deep: " + i + " strong=" + strong[i] +
+ ", weak=" + weak[i].get());
+ }
+ }
+ }
+
/**
* Recursively dive down, setting one or more local variables.
*