Skip to content

Commit

Permalink
[GR-24929] Add Alias for ConcurrentHashMap.NCPU and similar.
Browse files Browse the repository at this point in the history
PullRequest: graal/19462
  • Loading branch information
wirthi authored and ansalond committed Dec 5, 2024
2 parents 15759c9 + 023114f commit 643e28d
Showing 1 changed file with 72 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import com.oracle.svm.core.SubstrateUtil;
import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.Inject;
import com.oracle.svm.core.annotate.InjectAccessors;
import com.oracle.svm.core.annotate.RecomputeFieldValue;
import com.oracle.svm.core.annotate.RecomputeFieldValue.Kind;
import com.oracle.svm.core.annotate.Substitute;
Expand Down Expand Up @@ -150,6 +151,46 @@ final class Target_java_util_concurrent_ConcurrentHashMap {
@Alias @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)//
Target_java_util_concurrent_ConcurrentHashMap_EntrySetView entrySet;

@Alias @InjectAccessors(NCPUAccessor.class) //
private static int NCPU;
}

final class NCPUAccessor {
private static int cachedNCPU = -1;

static int get() {
if (cachedNCPU != -1) {
return cachedNCPU;
}
return initializeNCPU();
}

private static synchronized int initializeNCPU() {
if (cachedNCPU != -1) {
return cachedNCPU;
}

cachedNCPU = Runtime.getRuntime().availableProcessors();
return cachedNCPU;
}

static synchronized void set(int value) {
cachedNCPU = value;
}
}

@TargetClass(java.util.concurrent.Phaser.class)
final class Target_java_util_concurrent_Phaser {

@Alias @InjectAccessors(NCPUAccessor.class) //
private static int NCPU;
}

@TargetClass(className = "java.util.concurrent.atomic.Striped64")
final class Target_java_util_concurrent_atomic_Striped64 {

@Alias @InjectAccessors(NCPUAccessor.class) //
private static int NCPU;
}

@TargetClass(value = java.util.concurrent.ConcurrentHashMap.class, innerClass = "KeySetView")
Expand Down Expand Up @@ -289,6 +330,37 @@ public boolean getAsBoolean() {
}
}

@TargetClass(className = "java.util.concurrent.LinkedTransferQueue", innerClass = "DualNode")
final class Target_java_util_concurrent_LinkedTransferQueue_DualNode {

@Alias @InjectAccessors(LinkedTransferQueueDualNodeIsUniprocessorAccessor.class) //
private static boolean isUniprocessor;
}

final class LinkedTransferQueueDualNodeIsUniprocessorAccessor {
private static Boolean cachedIsUniprocessor = null;

static boolean get() {
if (cachedIsUniprocessor != null) {
return cachedIsUniprocessor;
}
return initializeIsUniprocessor();
}

static void set(boolean value) {
cachedIsUniprocessor = value;
}

private static synchronized boolean initializeIsUniprocessor() {
if (cachedIsUniprocessor != null) {
return cachedIsUniprocessor;
}

cachedIsUniprocessor = Runtime.getRuntime().availableProcessors() == 1;
return cachedIsUniprocessor;
}
}

/** Dummy class to have a class with the file's name. */
public final class JavaUtilSubstitutions {
}

0 comments on commit 643e28d

Please sign in to comment.