/* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.function.*; public class Main { public static final boolean IS_ART = System.getProperty("java.vm.name").equals("Dalvik"); public static final class Names { public final String native_name; public final String java_name; public Names(String ntv, String java) { this.native_name = ntv; this.java_name = java; } public boolean equals(Object o) { if (o instanceof Names) { Names on = (Names) o; return on.native_name.equals(native_name) && on.java_name.equals(java_name); } else { return false; } } public String toString() { return "Names{native: \"" + native_name + "\", java: \"" + java_name + "\"}"; } } public static void checkDefaultNames(Names res) { if (IS_ART) { if (!res.native_name.matches("Thread-[0-9]+")) { throw new Error("Bad thread name! " + res); } } else { if (!res.native_name.equals("native-thread")) { throw new Error("Bad thread name! " + res); } } if (!res.java_name.matches("Thread-[0-9]+")) { throw new Error("Bad thread name! " + res); } } public static void checkNames(Names res, Names art_exp, Names ri_exp) { if (IS_ART) { if (!res.equals(art_exp)) { throw new Error("Not equal " + res + " != " + art_exp); } } else { if (!res.equals(ri_exp)) { throw new Error("Not equal " + res + " != " + ri_exp); } } } public static void main(String[] args) throws Exception { System.loadLibrary(args[0]); Names[] name = new Names[1]; BiConsumer thdResult = (String native_name, Thread jthread) -> { name[0] = new Names(native_name, jthread.getName()); }; runThreadTest(thdResult); checkDefaultNames(name[0]); runThreadTestWithName(thdResult); checkNames( name[0], new Names("java-native-thr", "java-native-thread"), new Names("native-thread", "java-native-thread")); runThreadTestSetJava(thdResult); checkNames( name[0], new Names("native-thread-s", "native-thread-set-java"), new Names("native-thread", "native-thread-set-java")); } public static native void runThreadTest(BiConsumer results); public static native void runThreadTestWithName(BiConsumer results); public static native void runThreadTestSetJava(BiConsumer results); }