src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.common/src/jdk/vm/ci/common/InitTimer.java
--- 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.