Allowing partial jtreg samejvm safe runs

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Allowing partial jtreg samejvm safe runs

Mark Wielaard
Hi,

Jonathan Gibbons has been extending jtreg so that tests can be run in
the same vm. He also made it so that most langtools tests are run that
way. That brings an enormous speed up. Since running all jdk tests takes
ages it would be great if we could use this same speedup there.

Problem is that -samevm only works if all tests have been adapted to
behave well (or marked as needing /othervm). So my idea was to add a
"whitelist mechanism" so you can indicate which (sub)dirs are ready to
be run with samevm.

Luckily jtreg has mostly been setup for this already. All Actions ask
their Script whether or not they should be running in an othervm. So we
hook into that to check the scripts location against a whitelist.

I choose the TEST.ROOT file as the location of the whitelist. Since that
is also the root of the test suite. I made the code so that the
whitelist is only used when running the full test suite from the root.
That way you can still experiment with -samevm or -othervm when running
subtrees of tests.

Also CCed [hidden email] since that address is mentioned in the
TEST.ROOT file with an request to contact them if you change anything in
that file.

Below is the implementation as I checked into icedtea6 (patch also
attached).

2008-11-23  Mark Wielaard  <[hidden email]>

    * test/jtreg/com/sun/javatest/regtest/Main.java
    (createParameters): Set same jvm safe dirs when non-null.
    (getSameJVMSafeDirs): New method that reads samejvmsafe property
    from TEST.ROOT.
    (sameJVMSafeDirs): New private field.
    * test/jtreg/com/sun/javatest/regtest/RegressionParameters.java
    (SAME_JVM_SAFE_DIRS): New static final field.
    (load): Read same jvm safe dirs.
    (save0): Write same jvm safe dirs.
    (getSameJVMSafeDirs): New method.
    (setSameJVMSafeDirs): New method.
    * test/jtreg/com/sun/javatest/regtest/RegressionScript.java
    (run): Set testDirPath.
    (isOtherJVM): Take same jvm safe into account.
    (isSameJVMSafe): New method.
    (testDirPath): New private field.

For icedtea6 I did a quick scan of the openjdk/jdk/test subdirs and
listed an initial set that work with -samejvm and added a patch to
augment the TEST.ROOT file (attached).

2008-11-23  Mark Wielaard  <[hidden email]>

    * patches/icedtea-samejvm-safe.patch: New patch.
    * Makefile.am (ICEDTEA_PATCHES): Add new patch.
    (check-jdk): Run jtreg with -samevm.
    * HACKING: Document new patch.

Comments on the idea and the implementation very appreciated.

With this 'make check-jdk' takes a little bit less than 3 hours on my
machine now. It was almost 3.5 hours, so it already saves a lot of time.
But we need to make much more tests work with samevm to bring the total
test running time down to something an ordinary developer would be
comfortable with running every day.

We have to see whether or not that is really possible. It seems jdi, rmi
and awt take up a lot of the time needed to run all tests, and I am not
sure those tests can be speed up much.

Cheers,

Mark

diff -r 9aae858397f9 test/jtreg/com/sun/javatest/regtest/Main.java
--- a/test/jtreg/com/sun/javatest/regtest/Main.java Fri Nov 21 18:35:27 2008 -0500
+++ b/test/jtreg/com/sun/javatest/regtest/Main.java Sun Nov 23 16:56:34 2008 +0100
@@ -29,6 +29,7 @@
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
@@ -52,6 +53,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.TreeMap;
 
 import com.sun.javatest.CompositeFilter;
@@ -1354,6 +1356,10 @@
             if (ignoreKind != null)
                 rp.setIgnoreKind(ignoreKind);
 
+            sameJVMSafeDirs = getSameJVMSafeDirs(ts);
+            if (sameJVMSafeDirs != null)
+                rp.setSameJVMSafeDirs(sameJVMSafeDirs);
+
             return rp;
         } catch (TestSuite.Fault f) {
             f.printStackTrace();
@@ -1372,6 +1378,35 @@
         } catch (IOException e) {
             return file.getAbsoluteFile();
         }
+    }
+
+    // Returns directory (prefix) for tests that are same jvm safe
+    // read from amejvmsafe property in TEST.ROOT file. Returning null
+    // means all tests are considered same jvm safe. null is returned
+    // when there is no samejvmsafe property, or there was a problem
+    // reading it, and when anything else than the test root was given
+    // as test file argument. Meaning that this only returns something
+    // non-null if anything was actually specified as same jvm safe and
+    // the whole test suite is being tested.
+    private List<String> getSameJVMSafeDirs(File testRoot) {
+ // Only use the same jvm safe dirs when running from the root.
+ if (testFileArgs.size() != 1
+    || !canon(testFileArgs.iterator().next()).equals(canon(testRoot)))
+    return null;
+
+ try {
+    File file = new File(testRoot, "TEST.ROOT");
+            if (file.exists()) {
+ Properties testRootProps = new Properties();
+ testRootProps.load(new FileInputStream(file));
+ String safedirs = testRootProps.getProperty("samejvmsafe");
+ if ((safedirs != null) && (safedirs.trim().length() > 0))
+    return Arrays.asList(StringArray.splitWS(safedirs));
+    }
+ } catch (IOException ioe) {
+    // Bah, then just assume everything is safe.
+ }
+ return null;
     }
 
     private String getRelativePath(File base, File f) {
@@ -1762,6 +1797,7 @@
     // these args are jtreg extras
     private File baseDirArg;
     private boolean sameJVMFlag;
+    private List<String> sameJVMSafeDirs;
     private JDK jdk;
     private boolean guiFlag;
     private boolean reportOnlyFlag;
diff -r 9aae858397f9 test/jtreg/com/sun/javatest/regtest/RegressionParameters.java
--- a/test/jtreg/com/sun/javatest/regtest/RegressionParameters.java Fri Nov 21 18:35:27 2008 -0500
+++ b/test/jtreg/com/sun/javatest/regtest/RegressionParameters.java Sun Nov 23 16:56:34 2008 +0100
@@ -139,6 +139,7 @@
     private static final String TEST_JAVA_OPTIONS = ".testJavaOpts";
     private static final String IGNORE = ".ignore";
     private static final String RETAIN_ARGS = ".retain";
+    private static final String SAME_JVM_SAFE_DIRS = ".samejvmsafedirs";
     
     @Override
     public void load(Map data, boolean checkChecksum) throws Interview.Fault {
@@ -182,6 +183,10 @@
         v = (String) data.get(prefix + RETAIN_ARGS);
         if (v != null)
             setRetainArgs(Arrays.asList(StringArray.splitSeparator("\n", v)));
+
+        v = (String) data.get(prefix + SAME_JVM_SAFE_DIRS);
+        if (v != null)
+            setSameJVMSafeDirs(Arrays.asList(StringArray.splitSeparator("\n", v)));
     }
     
     @SuppressWarnings("unchecked")
@@ -203,6 +208,9 @@
         
         if (jdk != null)
             data.put(prefix + JDK, jdk.getPath());
+        
+        if (sameJVMSafeDirs != null)
+            data.put(prefix + SAME_JVM_SAFE_DIRS, StringUtils.join(sameJVMSafeDirs, "\n"));
         
         if (retainArgs != null)
             data.put(prefix + RETAIN_ARGS, StringUtils.join(retainArgs, "\n"));
@@ -592,6 +600,18 @@
     private Pattern retainFilesPattern;
 
     //---------------------------------------------------------------------
+    
+    List<String> getSameJVMSafeDirs() {
+        return sameJVMSafeDirs;
+    }
+    
+    void setSameJVMSafeDirs(List<String> sameJVMSafeDirs) {
+        this.sameJVMSafeDirs= sameJVMSafeDirs;
+    }
+
+    private List<String> sameJVMSafeDirs;
+
+    //---------------------------------------------------------------------
 
     private static final String PATHSEP  = System.getProperty("path.separator");
     private static final String LINESEP  = System.getProperty("line.separator");
diff -r 9aae858397f9 test/jtreg/com/sun/javatest/regtest/RegressionScript.java
--- a/test/jtreg/com/sun/javatest/regtest/RegressionScript.java Fri Nov 21 18:35:27 2008 -0500
+++ b/test/jtreg/com/sun/javatest/regtest/RegressionScript.java Sun Nov 23 16:56:34 2008 +0100
@@ -69,6 +69,10 @@
     public Status run(String[] argv, TestDescription td, TestEnvironment env) {
         if (!(env instanceof RegressionEnvironment))
             throw new AssertionError();
+
+ String testFilePath = td.getRootRelativePath();
+ int lastSlash = testFilePath.lastIndexOf('/');
+ testDirPath = testFilePath.substring(0, lastSlash);
         
         regEnv = (RegressionEnvironment) env;
         params = regEnv.params;
@@ -833,7 +837,26 @@
     }
 
     boolean isOtherJVM() {
-        return params.isOtherJVM();
+ boolean samevm = !params.isOtherJVM();
+ if (samevm)
+    return !isSameJVMSafe();
+ else
+    return true;
+    }
+
+    // Whether the actions of this script can safely run in the same jvm.
+    // No same jvm safe dirs given means they are all assumed safe.
+    // If our actions come from a file in a subdir of a safe dir that is ok.
+    boolean isSameJVMSafe() {
+        List<String> dirs = params.getSameJVMSafeDirs();
+ if (dirs == null)
+    return true;
+
+ for (String dir : dirs)
+    if (testDirPath.startsWith(dir))
+ return true;
+
+ return false;
     }
 
     String getJavaProg() {
@@ -921,5 +944,6 @@
 
     private RegressionEnvironment regEnv;
     private RegressionParameters params;
+    private String testDirPath;
 }
 

icedtea-samejvm-safe.patch (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Allowing partial jtreg samejvm safe runs

Mark Wielaard
On Sun, 2008-11-23 at 18:17 +0100, Mark Wielaard wrote:
> Also CCed [hidden email] since that address is mentioned in the
> TEST.ROOT file with an request to contact them if you change anything in
> that file.

This address bounces. Should we change it to [hidden email]?

Cheers,

Mark

Reply | Threaded
Open this post in threaded view
|

Re: Allowing partial jtreg samejvm safe runs

jonathan.gibbons
In reply to this post by Mark Wielaard
Mark,

I like this approach in that we don't mess up the tests with /othervm  
keywords
unnecessarily.  I think it is worth distinguishing tests which are  
inherently
"othervm" from those which are "currently othervm but potentially  
samevm with
a bit of effort".

-- Jon

On Nov 23, 2008, at 9:17 AM, Mark Wielaard wrote:

> Hi,
>
> Jonathan Gibbons has been extending jtreg so that tests can be run in
> the same vm. He also made it so that most langtools tests are run that
> way. That brings an enormous speed up. Since running all jdk tests  
> takes
> ages it would be great if we could use this same speedup there.
>
> Problem is that -samevm only works if all tests have been adapted to
> behave well (or marked as needing /othervm). So my idea was to add a
> "whitelist mechanism" so you can indicate which (sub)dirs are ready to
> be run with samevm.
>
> Luckily jtreg has mostly been setup for this already. All Actions ask
> their Script whether or not they should be running in an othervm. So  
> we
> hook into that to check the scripts location against a whitelist.
>
> I choose the TEST.ROOT file as the location of the whitelist. Since  
> that
> is also the root of the test suite. I made the code so that the
> whitelist is only used when running the full test suite from the root.
> That way you can still experiment with -samevm or -othervm when  
> running
> subtrees of tests.
>
> Also CCed [hidden email] since that address is mentioned in the
> TEST.ROOT file with an request to contact them if you change  
> anything in
> that file.
>
> Below is the implementation as I checked into icedtea6 (patch also
> attached).
>
> 2008-11-23  Mark Wielaard  <[hidden email]>
>
>    * test/jtreg/com/sun/javatest/regtest/Main.java
>    (createParameters): Set same jvm safe dirs when non-null.
>    (getSameJVMSafeDirs): New method that reads samejvmsafe property
>    from TEST.ROOT.
>    (sameJVMSafeDirs): New private field.
>    * test/jtreg/com/sun/javatest/regtest/RegressionParameters.java
>    (SAME_JVM_SAFE_DIRS): New static final field.
>    (load): Read same jvm safe dirs.
>    (save0): Write same jvm safe dirs.
>    (getSameJVMSafeDirs): New method.
>    (setSameJVMSafeDirs): New method.
>    * test/jtreg/com/sun/javatest/regtest/RegressionScript.java
>    (run): Set testDirPath.
>    (isOtherJVM): Take same jvm safe into account.
>    (isSameJVMSafe): New method.
>    (testDirPath): New private field.
>
> For icedtea6 I did a quick scan of the openjdk/jdk/test subdirs and
> listed an initial set that work with -samejvm and added a patch to
> augment the TEST.ROOT file (attached).
>
> 2008-11-23  Mark Wielaard  <[hidden email]>
>
>    * patches/icedtea-samejvm-safe.patch: New patch.
>    * Makefile.am (ICEDTEA_PATCHES): Add new patch.
>    (check-jdk): Run jtreg with -samevm.
>    * HACKING: Document new patch.
>
> Comments on the idea and the implementation very appreciated.
>
> With this 'make check-jdk' takes a little bit less than 3 hours on my
> machine now. It was almost 3.5 hours, so it already saves a lot of  
> time.
> But we need to make much more tests work with samevm to bring the  
> total
> test running time down to something an ordinary developer would be
> comfortable with running every day.
>
> We have to see whether or not that is really possible. It seems jdi,  
> rmi
> and awt take up a lot of the time needed to run all tests, and I am  
> not
> sure those tests can be speed up much.
>
> Cheers,
>
> Mark
> diff -r 9aae858397f9 test/jtreg/com/sun/javatest/regtest/Main.java
> --- a/test/jtreg/com/sun/javatest/regtest/Main.java Fri Nov 21  
> 18:35:27 2008 -0500
> +++ b/test/jtreg/com/sun/javatest/regtest/Main.java Sun Nov 23  
> 16:56:34 2008 +0100
> @@ -29,6 +29,7 @@
> import java.io.BufferedReader;
> import java.io.BufferedWriter;
> import java.io.File;
> +import java.io.FileInputStream;
> import java.io.FileNotFoundException;
> import java.io.FileReader;
> import java.io.FileWriter;
> @@ -52,6 +53,7 @@
> import java.util.Iterator;
> import java.util.List;
> import java.util.Map;
> +import java.util.Properties;
> import java.util.TreeMap;
>
> import com.sun.javatest.CompositeFilter;
> @@ -1354,6 +1356,10 @@
>             if (ignoreKind != null)
>                 rp.setIgnoreKind(ignoreKind);
>
> +            sameJVMSafeDirs = getSameJVMSafeDirs(ts);
> +            if (sameJVMSafeDirs != null)
> +                rp.setSameJVMSafeDirs(sameJVMSafeDirs);
> +
>             return rp;
>         } catch (TestSuite.Fault f) {
>             f.printStackTrace();
> @@ -1372,6 +1378,35 @@
>         } catch (IOException e) {
>             return file.getAbsoluteFile();
>         }
> +    }
> +
> +    // Returns directory (prefix) for tests that are same jvm safe
> +    // read from amejvmsafe property in TEST.ROOT file. Returning  
> null
> +    // means all tests are considered same jvm safe. null is returned
> +    // when there is no samejvmsafe property, or there was a problem
> +    // reading it, and when anything else than the test root was  
> given
> +    // as test file argument. Meaning that this only returns  
> something
> +    // non-null if anything was actually specified as same jvm safe  
> and
> +    // the whole test suite is being tested.
> +    private List<String> getSameJVMSafeDirs(File testRoot) {
> + // Only use the same jvm safe dirs when running from the root.
> + if (testFileArgs.size() != 1
> +    || !
> canon(testFileArgs.iterator().next()).equals(canon(testRoot)))
> +    return null;
> +
> + try {
> +    File file = new File(testRoot, "TEST.ROOT");
> +            if (file.exists()) {
> + Properties testRootProps = new Properties();
> + testRootProps.load(new FileInputStream(file));
> + String safedirs = testRootProps.getProperty("samejvmsafe");
> + if ((safedirs != null) && (safedirs.trim().length() > 0))
> +    return Arrays.asList(StringArray.splitWS(safedirs));
> +    }
> + } catch (IOException ioe) {
> +    // Bah, then just assume everything is safe.
> + }
> + return null;
>     }
>
>     private String getRelativePath(File base, File f) {
> @@ -1762,6 +1797,7 @@
>     // these args are jtreg extras
>     private File baseDirArg;
>     private boolean sameJVMFlag;
> +    private List<String> sameJVMSafeDirs;
>     private JDK jdk;
>     private boolean guiFlag;
>     private boolean reportOnlyFlag;
> diff -r 9aae858397f9 test/jtreg/com/sun/javatest/regtest/
> RegressionParameters.java
> --- a/test/jtreg/com/sun/javatest/regtest/RegressionParameters.java
> Fri Nov 21 18:35:27 2008 -0500
> +++ b/test/jtreg/com/sun/javatest/regtest/RegressionParameters.java
> Sun Nov 23 16:56:34 2008 +0100
> @@ -139,6 +139,7 @@
>     private static final String TEST_JAVA_OPTIONS = ".testJavaOpts";
>     private static final String IGNORE = ".ignore";
>     private static final String RETAIN_ARGS = ".retain";
> +    private static final String SAME_JVM_SAFE_DIRS =  
> ".samejvmsafedirs";
>
>     @Override
>     public void load(Map data, boolean checkChecksum) throws  
> Interview.Fault {
> @@ -182,6 +183,10 @@
>         v = (String) data.get(prefix + RETAIN_ARGS);
>         if (v != null)
>              
> setRetainArgs(Arrays.asList(StringArray.splitSeparator("\n", v)));
> +
> +        v = (String) data.get(prefix + SAME_JVM_SAFE_DIRS);
> +        if (v != null)
> +            
> setSameJVMSafeDirs(Arrays.asList(StringArray.splitSeparator("\n",  
> v)));
>     }
>
>     @SuppressWarnings("unchecked")
> @@ -203,6 +208,9 @@
>
>         if (jdk != null)
>             data.put(prefix + JDK, jdk.getPath());
> +
> +        if (sameJVMSafeDirs != null)
> +            data.put(prefix + SAME_JVM_SAFE_DIRS,  
> StringUtils.join(sameJVMSafeDirs, "\n"));
>
>         if (retainArgs != null)
>             data.put(prefix + RETAIN_ARGS,  
> StringUtils.join(retainArgs, "\n"));
> @@ -592,6 +600,18 @@
>     private Pattern retainFilesPattern;
>
>     //---------------------------------------------------------------------
> +
> +    List<String> getSameJVMSafeDirs() {
> +        return sameJVMSafeDirs;
> +    }
> +
> +    void setSameJVMSafeDirs(List<String> sameJVMSafeDirs) {
> +        this.sameJVMSafeDirs= sameJVMSafeDirs;
> +    }
> +
> +    private List<String> sameJVMSafeDirs;
> +
> +
>     //---------------------------------------------------------------------
>
>     private static final String PATHSEP  =  
> System.getProperty("path.separator");
>     private static final String LINESEP  =  
> System.getProperty("line.separator");
> diff -r 9aae858397f9 test/jtreg/com/sun/javatest/regtest/
> RegressionScript.java
> --- a/test/jtreg/com/sun/javatest/regtest/RegressionScript.java Fri  
> Nov 21 18:35:27 2008 -0500
> +++ b/test/jtreg/com/sun/javatest/regtest/RegressionScript.java Sun  
> Nov 23 16:56:34 2008 +0100
> @@ -69,6 +69,10 @@
>     public Status run(String[] argv, TestDescription td,  
> TestEnvironment env) {
>         if (!(env instanceof RegressionEnvironment))
>             throw new AssertionError();
> +
> + String testFilePath = td.getRootRelativePath();
> + int lastSlash = testFilePath.lastIndexOf('/');
> + testDirPath = testFilePath.substring(0, lastSlash);
>
>         regEnv = (RegressionEnvironment) env;
>         params = regEnv.params;
> @@ -833,7 +837,26 @@
>     }
>
>     boolean isOtherJVM() {
> -        return params.isOtherJVM();
> + boolean samevm = !params.isOtherJVM();
> + if (samevm)
> +    return !isSameJVMSafe();
> + else
> +    return true;
> +    }
> +
> +    // Whether the actions of this script can safely run in the  
> same jvm.
> +    // No same jvm safe dirs given means they are all assumed safe.
> +    // If our actions come from a file in a subdir of a safe dir  
> that is ok.
> +    boolean isSameJVMSafe() {
> +        List<String> dirs = params.getSameJVMSafeDirs();
> + if (dirs == null)
> +    return true;
> +
> + for (String dir : dirs)
> +    if (testDirPath.startsWith(dir))
> + return true;
> +
> + return false;
>     }
>
>     String getJavaProg() {
> @@ -921,5 +944,6 @@
>
>     private RegressionEnvironment regEnv;
>     private RegressionParameters params;
> +    private String testDirPath;
> }
>
> <icedtea-samejvm-safe.patch>

Reply | Threaded
Open this post in threaded view
|

Re: Allowing partial jtreg samejvm safe runs

jonathan.gibbons
In reply to this post by Mark Wielaard
Mark,

Thanks for the idea behind this patch, and for the patch too.

To you and other jtreg users,

I'd be interested in comments regarding the relative merits of
white-listing vs black-listing.  

I'd also be interested in comments regarding the feature of
only using the whitelist when running the whole test suite.
An alternative proposal would be to only use the whitelist
in a default mode, where neither -othervm or -samevm is
defined.  Specifying either switch would disable the whitelist
(or blacklist?) lookup.

-- Jon




Mark Wielaard wrote:

> Hi,
>
> Jonathan Gibbons has been extending jtreg so that tests can be run in
> the same vm. He also made it so that most langtools tests are run that
> way. That brings an enormous speed up. Since running all jdk tests takes
> ages it would be great if we could use this same speedup there.
>
> Problem is that -samevm only works if all tests have been adapted to
> behave well (or marked as needing /othervm). So my idea was to add a
> "whitelist mechanism" so you can indicate which (sub)dirs are ready to
> be run with samevm.
>
> Luckily jtreg has mostly been setup for this already. All Actions ask
> their Script whether or not they should be running in an othervm. So we
> hook into that to check the scripts location against a whitelist.
>
> I choose the TEST.ROOT file as the location of the whitelist. Since that
> is also the root of the test suite. I made the code so that the
> whitelist is only used when running the full test suite from the root.
> That way you can still experiment with -samevm or -othervm when running
> subtrees of tests.
>
> Also CCed [hidden email] since that address is mentioned in the
> TEST.ROOT file with an request to contact them if you change anything in
> that file.
>
> Below is the implementation as I checked into icedtea6 (patch also
> attached).
>
> 2008-11-23  Mark Wielaard  <[hidden email]>
>
>     * test/jtreg/com/sun/javatest/regtest/Main.java
>     (createParameters): Set same jvm safe dirs when non-null.
>     (getSameJVMSafeDirs): New method that reads samejvmsafe property
>     from TEST.ROOT.
>     (sameJVMSafeDirs): New private field.
>     * test/jtreg/com/sun/javatest/regtest/RegressionParameters.java
>     (SAME_JVM_SAFE_DIRS): New static final field.
>     (load): Read same jvm safe dirs.
>     (save0): Write same jvm safe dirs.
>     (getSameJVMSafeDirs): New method.
>     (setSameJVMSafeDirs): New method.
>     * test/jtreg/com/sun/javatest/regtest/RegressionScript.java
>     (run): Set testDirPath.
>     (isOtherJVM): Take same jvm safe into account.
>     (isSameJVMSafe): New method.
>     (testDirPath): New private field.
>
> For icedtea6 I did a quick scan of the openjdk/jdk/test subdirs and
> listed an initial set that work with -samejvm and added a patch to
> augment the TEST.ROOT file (attached).
>
> 2008-11-23  Mark Wielaard  <[hidden email]>
>
>     * patches/icedtea-samejvm-safe.patch: New patch.
>     * Makefile.am (ICEDTEA_PATCHES): Add new patch.
>     (check-jdk): Run jtreg with -samevm.
>     * HACKING: Document new patch.
>
> Comments on the idea and the implementation very appreciated.
>
> With this 'make check-jdk' takes a little bit less than 3 hours on my
> machine now. It was almost 3.5 hours, so it already saves a lot of time.
> But we need to make much more tests work with samevm to bring the total
> test running time down to something an ordinary developer would be
> comfortable with running every day.
>
> We have to see whether or not that is really possible. It seems jdi, rmi
> and awt take up a lot of the time needed to run all tests, and I am not
> sure those tests can be speed up much.
>
> Cheers,
>
> Mark
>