langtools/test/tools/javac/lib/JavacTestingAbstractThreadedTest.java
changeset 32566 1b91995d38a7
parent 32565 77ad9375337e
parent 32457 2050b3a0aadc
child 32567 18cbcab4b68f
--- a/langtools/test/tools/javac/lib/JavacTestingAbstractThreadedTest.java	Wed Aug 12 13:10:16 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-import javax.tools.JavaCompiler;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-/**
- * An abstract superclass for threaded tests.
- *
- * This class will try to read a property named test.concurrency.
- * The property can be provided by passing this option to jtreg:
- * -javaoption:-Dtest.concurrency=#
- *
- * If the property is not set the class will use a heuristic to determine the
- * maximum number of threads that can be fired to execute a given test.
- *
- * This code will have to be revisited if jprt starts using concurrency for
- * for running jtreg tests.
- */
-public abstract class JavacTestingAbstractThreadedTest {
-
-    protected static AtomicInteger numberOfThreads = new AtomicInteger();
-
-    protected static int getThreadPoolSize() {
-        Integer testConc = Integer.getInteger("test.concurrency");
-        if (testConc != null) return testConc;
-        int cores = Runtime.getRuntime().availableProcessors();
-        numberOfThreads.set(Math.max(2, Math.min(8, cores / 2)));
-        return numberOfThreads.get();
-    }
-
-    protected static void checkAfterExec() throws InterruptedException {
-        checkAfterExec(true);
-    };
-
-    protected static boolean throwAssertionOnError = true;
-
-    protected static boolean printAll = false;
-
-    protected static StringWriter errSWriter = new StringWriter();
-    protected static PrintWriter errWriter = new PrintWriter(errSWriter);
-
-    protected static StringWriter outSWriter = new StringWriter();
-    protected static PrintWriter outWriter = new PrintWriter(outSWriter);
-
-    protected static void checkAfterExec(boolean printCheckCount)
-            throws InterruptedException {
-        pool.shutdown();
-        pool.awaitTermination(15, TimeUnit.MINUTES);
-        if (errCount.get() > 0) {
-            if (throwAssertionOnError) {
-                closePrinters();
-                System.err.println(errSWriter.toString());
-                throw new AssertionError(
-                    String.format("%d errors found", errCount.get()));
-            } else {
-                System.err.println(
-                        String.format("%d errors found", errCount.get()));
-            }
-        } else if (printCheckCount) {
-            outWriter.println("Total check executed: " + checkCount.get());
-        }
-        /*
-         * This output is for supporting debugging. It does not mean that a given
-         * test had executed that number of threads concurrently. The value printed
-         * here is the maximum possible amount.
-         */
-        closePrinters();
-        if (printAll) {
-            System.out.println(errSWriter.toString());
-            System.out.println(outSWriter.toString());
-        }
-        System.out.println("Total number of threads in thread pool: " +
-                numberOfThreads.get());
-    }
-
-    protected static void closePrinters() {
-        errWriter.close();
-        outWriter.close();
-    }
-
-    protected static void processException(Throwable t) {
-        errCount.incrementAndGet();
-        t.printStackTrace(errWriter);
-        pool.shutdown();
-    }
-
-    //number of checks executed
-    protected static AtomicInteger checkCount = new AtomicInteger();
-
-    //number of errors found while running combo tests
-    protected static AtomicInteger errCount = new AtomicInteger();
-
-    //create default shared JavaCompiler - reused across multiple compilations
-    protected static JavaCompiler comp = ToolProvider.getSystemJavaCompiler();
-
-    protected static ExecutorService pool = Executors.newFixedThreadPool(
-            getThreadPoolSize(), new ThreadFactory() {
-        @Override
-        public Thread newThread(Runnable r) {
-            Thread t = new Thread(r);
-            t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
-                @Override
-                public void uncaughtException(Thread t, Throwable e) {
-                    pool.shutdown();
-                    errCount.incrementAndGet();
-                    e.printStackTrace(System.err);
-                }
-            });
-            return t;
-        }
-    });
-
-    /*
-     * File manager is not thread-safe so it cannot be re-used across multiple
-     * threads. However we cache per-thread FileManager to avoid excessive
-     * object creation
-     */
-    protected static final ThreadLocal<StandardJavaFileManager> fm =
-        new ThreadLocal<StandardJavaFileManager>() {
-            @Override protected StandardJavaFileManager initialValue() {
-                return comp.getStandardFileManager(null, null, null);
-            }
-        };
-
-}