--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.common/src/jdk/vm/ci/common/InitTimer.java 2019-03-28 11:23:36.000000000 -0700 +++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.common/src/jdk/vm/ci/common/InitTimer.java 2019-03-28 11:23:35.000000000 -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; + } + + /** + * Cache for value of {@code jvmci.InitTimer} system property. + */ + @NativeImageReinitialize private static Boolean enabledPropertyValue; - public static final AtomicInteger nesting = ENABLED ? new AtomicInteger() : null; - public static final String SPACES = " "; + private static AtomicInteger nesting; + private static final String SPACES = " "; /** * Used to assert the invariant that all related initialization happens on the same thread.