src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.common/src/jdk/vm/ci/common/InitTimer.java
changeset 54669 ad45b3802d4e
parent 50858 2d3e99a72541
--- a/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.common/src/jdk/vm/ci/common/InitTimer.java	Wed May 01 12:41:26 2019 -0400
+++ b/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.common/src/jdk/vm/ci/common/InitTimer.java	Wed May 01 12:31:29 2019 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -24,6 +24,8 @@
 
 import java.util.concurrent.atomic.AtomicInteger;
 
+import jdk.vm.ci.services.Services;
+
 /**
  * A facility for timing a step in the runtime initialization sequence. This is independent from all
  * other JVMCI code so as to not perturb the initialization sequence. It is enabled by setting the
@@ -58,21 +60,32 @@
     }
 
     public static InitTimer timer(String name) {
-        return ENABLED ? new InitTimer(name) : null;
+        return isEnabled() ? new InitTimer(name) : null;
     }
 
     public static InitTimer timer(String name, Object suffix) {
-        return ENABLED ? new InitTimer(name + suffix) : null;
+        return isEnabled() ? new InitTimer(name + suffix) : null;
     }
 
     /**
-     * Specifies if initialization timing is enabled. Note: This property cannot use
+     * Determines if initialization timing is enabled. Note: This property cannot use
      * {@code HotSpotJVMCIRuntime.Option} since that class is not visible from this package.
      */
-    private static final boolean ENABLED = Boolean.getBoolean("jvmci.InitTimer");
+    private static boolean isEnabled() {
+        if (enabledPropertyValue == null) {
+            enabledPropertyValue = Boolean.parseBoolean(Services.getSavedProperty("jvmci.InitTimer"));
+            nesting = new AtomicInteger();
+        }
+        return enabledPropertyValue;
+    }
 
-    public static final AtomicInteger nesting = ENABLED ? new AtomicInteger() : null;
-    public static final String SPACES = "                                            ";
+    /**
+     * Cache for value of {@code jvmci.InitTimer} system property.
+     */
+    @NativeImageReinitialize private static Boolean enabledPropertyValue;
+
+    private static AtomicInteger nesting;
+    private static final String SPACES = "                                            ";
 
     /**
      * Used to assert the invariant that all related initialization happens on the same thread.