changeset 21881:3b5c9d5bfcaa

use a JVMCI service to initialize the underlying PrintStream in TTY
author Doug Simon <doug.simon@oracle.com>
date Tue, 09 Jun 2015 17:25:57 +0200
parents 518052de60d5
children 90e3fecd4143
files jvmci/com.oracle.jvmci.debug/src/com/oracle/jvmci/debug/TTY.java jvmci/com.oracle.jvmci.debug/src/com/oracle/jvmci/debug/TTYStreamProvider.java jvmci/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotJVMCIRuntime.java jvmci/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotTTYStreamProvider.java
diffstat 4 files changed, 78 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/jvmci/com.oracle.jvmci.debug/src/com/oracle/jvmci/debug/TTY.java	Tue Jun 09 17:23:42 2015 +0200
+++ b/jvmci/com.oracle.jvmci.debug/src/com/oracle/jvmci/debug/TTY.java	Tue Jun 09 17:25:57 2015 +0200
@@ -27,6 +27,8 @@
 import java.util.*;
 import java.util.regex.*;
 
+import com.oracle.jvmci.service.*;
+
 /**
  * A collection of static methods for printing debug and informational output to a global
  * {@link LogStream}. The output can be (temporarily) suppressed per thread through use of a
@@ -94,17 +96,13 @@
         }
     }
 
-    public static PrintStream cachedOut;
-
-    public static void initialize(PrintStream ps) {
-        cachedOut = ps;
+    public static final PrintStream cachedOut;
+    static {
+        TTYStreamProvider p = Services.loadSingle(TTYStreamProvider.class, false);
+        cachedOut = p == null ? System.out : p.getStream();
     }
 
     private static LogStream createLog() {
-        if (cachedOut == null) {
-            // In case initialize() was not called.
-            cachedOut = System.out;
-        }
         return new LogStream(cachedOut);
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jvmci/com.oracle.jvmci.debug/src/com/oracle/jvmci/debug/TTYStreamProvider.java	Tue Jun 09 17:25:57 2015 +0200
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015, 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.
+ */
+package com.oracle.jvmci.debug;
+
+import java.io.*;
+
+import com.oracle.jvmci.service.*;
+
+/**
+ * Provides a {@link PrintStream} that writes to the underlying log stream of the VM.
+ */
+public interface TTYStreamProvider extends Service {
+    PrintStream getStream();
+}
--- a/jvmci/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotJVMCIRuntime.java	Tue Jun 09 17:23:42 2015 +0200
+++ b/jvmci/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotJVMCIRuntime.java	Tue Jun 09 17:25:57 2015 +0200
@@ -30,7 +30,6 @@
 
 import com.oracle.jvmci.code.*;
 import com.oracle.jvmci.common.*;
-import com.oracle.jvmci.debug.*;
 import com.oracle.jvmci.hotspot.logging.*;
 import com.oracle.jvmci.meta.*;
 import com.oracle.jvmci.options.*;
@@ -68,7 +67,6 @@
      * Do deferred initialization.
      */
     public void completeInitialization() {
-        TTY.initialize(Options.LogFile.getStream(compilerToVm));
 
         // Proxies for the VM/Compiler interfaces cannot be initialized
         // in the constructor as proxy creation causes static
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jvmci/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotTTYStreamProvider.java	Tue Jun 09 17:25:57 2015 +0200
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2015, 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.
+ */
+package com.oracle.jvmci.hotspot;
+
+import java.io.*;
+
+import com.oracle.jvmci.debug.*;
+import com.oracle.jvmci.hotspot.HotSpotJVMCIRuntime.Options;
+import com.oracle.jvmci.service.*;
+
+@ServiceProvider(TTYStreamProvider.class)
+class HotSpotTTYStreamProvider implements TTYStreamProvider {
+
+    public PrintStream getStream() {
+        CompilerToVM compilerToVm = HotSpotJVMCIRuntime.runtime().getCompilerToVM();
+        return Options.LogFile.getStream(compilerToVm);
+    }
+}