|
38 | 38 | import com.oracle.svm.core.c.CGlobalDataFactory;
|
39 | 39 | import com.oracle.svm.core.c.function.CEntryPointErrors;
|
40 | 40 | import com.oracle.svm.core.os.CommittedMemoryProvider;
|
| 41 | +import com.oracle.svm.core.util.TimeUtils; |
41 | 42 | import com.oracle.svm.core.util.VMError;
|
42 | 43 |
|
43 | 44 | import jdk.graal.compiler.nodes.NamedLocationIdentity;
|
@@ -74,8 +75,8 @@ public class Isolates {
|
74 | 75 | /* Only used if SpawnIsolates is disabled. */
|
75 | 76 | private static final CGlobalData<Pointer> SINGLE_ISOLATE_ALREADY_CREATED = CGlobalDataFactory.createWord();
|
76 | 77 |
|
77 |
| - private static long startTimeMillis; |
78 |
| - private static long startNanoTime; |
| 78 | + private static long startTimeNanos; |
| 79 | + private static long initDoneTimeMillis; |
79 | 80 | private static long isolateId = -1;
|
80 | 81 |
|
81 | 82 | /**
|
@@ -107,29 +108,30 @@ public static void assignIsolateId(boolean isFirstIsolate) {
|
107 | 108 | }
|
108 | 109 | }
|
109 | 110 |
|
110 |
| - public static void assignCurrentStartTime() { |
111 |
| - assert startTimeMillis == 0 : startTimeMillis; |
112 |
| - assert startNanoTime == 0 : startNanoTime; |
113 |
| - startTimeMillis = System.currentTimeMillis(); |
114 |
| - startNanoTime = System.nanoTime(); |
| 111 | + public static void assignStartTime() { |
| 112 | + assert startTimeNanos == 0 : startTimeNanos; |
| 113 | + assert initDoneTimeMillis == 0 : initDoneTimeMillis; |
| 114 | + startTimeNanos = System.nanoTime(); |
| 115 | + initDoneTimeMillis = TimeUtils.currentTimeMillis(); |
115 | 116 | }
|
116 | 117 |
|
117 |
| - @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) |
118 |
| - public static long getCurrentStartTimeMillis() { |
119 |
| - assert startTimeMillis != 0; |
120 |
| - return startTimeMillis; |
| 118 | + /** Epoch-based timestamp. If possible, {@link #getStartTimeNanos()} should be used instead. */ |
| 119 | + @Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true) |
| 120 | + public static long getInitDoneTimeMillis() { |
| 121 | + assert initDoneTimeMillis != 0; |
| 122 | + return initDoneTimeMillis; |
121 | 123 | }
|
122 | 124 |
|
123 |
| - @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) |
124 |
| - public static long getCurrentUptimeMillis() { |
125 |
| - assert startTimeMillis != 0; |
126 |
| - return System.currentTimeMillis() - startTimeMillis; |
| 125 | + @Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true) |
| 126 | + public static long getUptimeMillis() { |
| 127 | + assert startTimeNanos != 0; |
| 128 | + return TimeUtils.millisSinceNanos(startTimeNanos); |
127 | 129 | }
|
128 | 130 |
|
129 |
| - @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) |
130 |
| - public static long getCurrentStartNanoTime() { |
131 |
| - assert startNanoTime != 0; |
132 |
| - return startNanoTime; |
| 131 | + @Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true) |
| 132 | + public static long getStartTimeNanos() { |
| 133 | + assert startTimeNanos != 0; |
| 134 | + return startTimeNanos; |
133 | 135 | }
|
134 | 136 |
|
135 | 137 | @Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
|
@@ -169,7 +171,7 @@ public static int create(WordPointer isolatePointer, IsolateArguments arguments)
|
169 | 171 | return CEntryPointErrors.NO_ERROR;
|
170 | 172 | }
|
171 | 173 |
|
172 |
| - @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) |
| 174 | + @Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true) |
173 | 175 | public static PointerBase getHeapBase(Isolate isolate) {
|
174 | 176 | return isolate;
|
175 | 177 | }
|
|
0 commit comments