Skip to content

Commit b61b6fc

Browse files
committed
[REFACTOR] Move some utils to another module, improve startup perfomance
1 parent 5f0bfcf commit b61b6fc

45 files changed

Lines changed: 143 additions & 89 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

components/launcher-client/src/main/java/pro/gravit/launcher/client/ClientLauncherEntryPoint.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
import pro.gravit.launcher.base.api.KeyService;
1010
import pro.gravit.launcher.base.request.*;
1111
import pro.gravit.launcher.client.events.*;
12-
import pro.gravit.launcher.core.api.LauncherAPI;
1312
import pro.gravit.launcher.core.api.LauncherAPIHolder;
14-
import pro.gravit.launcher.core.api.features.*;
1513
import pro.gravit.launcher.core.hasher.FileNameMatcher;
1614
import pro.gravit.launcher.core.hasher.HashedDir;
1715
import pro.gravit.launcher.core.hasher.HashedEntry;
@@ -21,7 +19,6 @@
2119
import pro.gravit.launcher.base.profiles.optional.actions.OptionalAction;
2220
import pro.gravit.launcher.base.profiles.optional.actions.OptionalActionClassPath;
2321
import pro.gravit.launcher.base.profiles.optional.actions.OptionalActionClientArgs;
24-
import pro.gravit.launcher.base.request.websockets.StdWebSocketService;
2522
import pro.gravit.launcher.core.serialize.HInput;
2623
import pro.gravit.launcher.client.utils.DirWatcher;
2724
import pro.gravit.utils.helper.*;
@@ -153,7 +150,7 @@ private static void realMain(String[] args) throws Throwable {
153150
modulesManager.invokeEvent(new ClientProcessClassLoaderEvent(launch, classLoaderControl, profile));
154151
ClientService.baseURLs = classLoaderControl.getURLs();
155152
} else if (classLoaderConfig == ClientProfile.ClassLoaderConfig.SYSTEM_ARGS) {
156-
launch = new BasicLaunch();
153+
launch = new pro.gravit.utils.launch.BasicLaunch();
157154
System.setProperty("java.class.path", classpath.stream().map(Path::toString).collect(Collectors.joining(File.pathSeparator)));
158155
classLoaderControl = launch.init(classpath, params.nativesDir, options);
159156
ClientService.baseURLs = classpathURLs.toArray(new URL[0]);

components/launcher-core/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ repositories {
99
}
1010

1111
dependencies {
12+
api(project(":components:launcher-utils"))
1213
api(libs.gson)
1314
compileOnly(libs.jline.terminal)
1415
compileOnly(libs.jline.reader)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package pro.gravit.launcher.core.api;
2+
3+
import pro.gravit.launcher.core.api.features.HardwareVerificationFeatureAPI;
4+
import pro.gravit.utils.helper.JVMHelper;
5+
6+
public class LauncherAPIHelper {
7+
8+
public static HardwareVerificationFeatureAPI.Os toHardwareFeatureOs(JVMHelper.OS os) {
9+
return switch (os) {
10+
case MUSTDIE -> HardwareVerificationFeatureAPI.Os.WINDOWS;
11+
case LINUX -> HardwareVerificationFeatureAPI.Os.LINUX;
12+
case MACOSX -> HardwareVerificationFeatureAPI.Os.MACOS;
13+
};
14+
}
15+
16+
public static HardwareVerificationFeatureAPI.Arch toHardwareFeatureArch(JVMHelper.ARCH arch) {
17+
return switch (arch) {
18+
case X86 -> HardwareVerificationFeatureAPI.Arch.X86;
19+
case X86_64 -> HardwareVerificationFeatureAPI.Arch.X86_64;
20+
case ARM64 -> HardwareVerificationFeatureAPI.Arch.ARM64;
21+
case ARM32 -> HardwareVerificationFeatureAPI.Arch.ARM32;
22+
};
23+
}
24+
}

components/launcher-core/src/main/java/pro/gravit/utils/helper/CommonHelper.java

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -38,55 +38,6 @@ public static List<String> replace(Map<String, String> replaceMap, List<String>
3838
return updatedList;
3939
}
4040

41-
public static String[] parseCommand(CharSequence line) throws CommandException {
42-
boolean quoted = false;
43-
boolean wasQuoted = false;
44-
45-
// Read line char by char
46-
Collection<String> result = new LinkedList<>();
47-
StringBuilder builder = new StringBuilder(100);
48-
for (int i = 0; i <= line.length(); i++) {
49-
boolean end = i >= line.length();
50-
char ch = end ? '\0' : line.charAt(i);
51-
52-
// Maybe we should read next argument?
53-
if (end || !quoted && Character.isWhitespace(ch)) {
54-
if (end && quoted)
55-
throw new CommandException("Quotes wasn't closed");
56-
57-
// Empty args are ignored (except if was quoted)
58-
if (wasQuoted || !builder.isEmpty())
59-
result.add(builder.toString());
60-
61-
// Reset file builder
62-
wasQuoted = false;
63-
builder.setLength(0);
64-
continue;
65-
}
66-
67-
// Append next char
68-
switch (ch) {
69-
case '"': // "abc"de, "abc""de" also allowed
70-
quoted = !quoted;
71-
wasQuoted = true;
72-
break;
73-
case '\\': // All escapes, including spaces etc
74-
if (i + 1 >= line.length())
75-
throw new CommandException("Escape character is not specified");
76-
char next = line.charAt(i + 1);
77-
builder.append(next);
78-
i++;
79-
break;
80-
default: // Default char, simply append
81-
builder.append(ch);
82-
break;
83-
}
84-
}
85-
86-
// Return result as array
87-
return result.toArray(new String[0]);
88-
}
89-
9041

9142
public static GsonBuilder newBuilder() {
9243
return new GsonBuilder().registerTypeHierarchyAdapter(byte[].class,

components/launcher-runtime/src/main/java/pro/gravit/launcher/runtime/LauncherEngineWrapper.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import pro.gravit.launcher.base.Launcher;
44
import pro.gravit.launcher.base.LauncherConfig;
5+
import pro.gravit.launcher.core.LauncherInject;
56
import pro.gravit.launcher.core.LauncherNetworkAPI;
67
import pro.gravit.launcher.start.ClientLauncherWrapper;
78
import pro.gravit.utils.helper.IOHelper;
9+
import pro.gravit.utils.launch.ClassLoaderControl;
810
import pro.gravit.utils.launch.LaunchOptions;
911
import pro.gravit.utils.launch.ModuleLaunch;
1012

@@ -18,6 +20,8 @@
1820
@LauncherNetworkAPI
1921
public class LauncherEngineWrapper {
2022
private static final List<String> modules = new ArrayList<>();
23+
@LauncherInject("launcher.alwaysUseRelauncher")
24+
public static boolean alwaysUseRelauncher;
2125

2226

2327

@@ -62,9 +66,10 @@ public static Map<String, String> applyLoggerSettings(String[] arguments) {
6266
modules.add("javafx.controls");
6367
modules.add("javafx.media");
6468
modules.add("javafx.web");
69+
modules.add("jdk.jsobject"); // https://bugs.openjdk.org/browse/JDK-8338249
6570
}
6671
public static void main(String[] args) throws Throwable {
67-
if (!Boolean.getBoolean(ClientLauncherWrapper.WRAPPED_LAUNCH_PROPERTY)) {
72+
if (alwaysUseRelauncher && !Boolean.getBoolean(ClientLauncherWrapper.WRAPPED_LAUNCH_PROPERTY)) {
6873
System.setProperty(ClientLauncherWrapper.BRIDGED_FROM_ENGINE_PROPERTY, "true");
6974
ClientLauncherWrapper.main(args);
7075
return;
@@ -77,14 +82,38 @@ public static void main(String[] args) throws Throwable {
7782
List<Path> classpath = new ArrayList<>();
7883
classpath.add(IOHelper.getCodeSource(LauncherEngine.class));
7984
var libDirectory = Path.of(System.getProperty("java.home")).resolve("lib");
85+
int failedModules = 0;
8086
for(var moduleName : modules) {
8187
var path = libDirectory.resolve(moduleName.concat(".jar"));
8288
if(Files.exists(path)) {
8389
options.moduleConf.modules.add(moduleName);
8490
options.moduleConf.modulePath.add(path.toAbsolutePath().toString());
91+
} else {
92+
failedModules++;
93+
}
94+
}
95+
ClassLoaderControl control;
96+
try {
97+
control = launch.init(classpath, null, options);
98+
ModuleLayer.Controller controller = (ModuleLayer.Controller) control.getJava9ModuleController();
99+
var javafxModule = controller.layer().findModule("javafx.base");
100+
if(javafxModule.isEmpty()) {
101+
// We probably failed to resolve javafx modules, try re-launch
102+
if(!Boolean.getBoolean(ClientLauncherWrapper.WRAPPED_LAUNCH_PROPERTY)) {
103+
System.setProperty(ClientLauncherWrapper.BRIDGED_FROM_ENGINE_PROPERTY, "true");
104+
ClientLauncherWrapper.main(args);
105+
return;
106+
}
107+
}
108+
} catch (Throwable e) {
109+
// We probably failed to resolve javafx modules, try re-launch
110+
if(!Boolean.getBoolean(ClientLauncherWrapper.WRAPPED_LAUNCH_PROPERTY)) {
111+
System.setProperty(ClientLauncherWrapper.BRIDGED_FROM_ENGINE_PROPERTY, "true");
112+
ClientLauncherWrapper.main(args);
113+
return;
85114
}
115+
throw e;
86116
}
87-
var control = launch.init(classpath, null, options);
88117
launch.launch(LauncherEngine.class.getName(), null, List.of(args));
89118
}
90119
}

components/launcher-runtime/src/main/java/pro/gravit/launcher/runtime/debug/ClientRuntimeProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void run(String[] args) {
8484
Launch launch;
8585
switch (launchMode) {
8686
case "basic": {
87-
launch = new BasicLaunch();
87+
launch = new pro.gravit.utils.launch.BasicLaunch();
8888
break;
8989
}
9090
case "legacy": {

components/launcher-runtime/src/main/java/pro/gravit/launcher/runtime/utils/HWIDProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import oshi.hardware.*;
55
import oshi.software.os.OperatingSystem;
66
import pro.gravit.launcher.base.request.secure.HardwareReportRequest;
7+
import pro.gravit.launcher.core.api.LauncherAPIHelper;
78
import pro.gravit.launcher.core.api.features.HardwareVerificationFeatureAPI;
89
import pro.gravit.utils.helper.JVMHelper;
910

@@ -108,8 +109,8 @@ public String getBaseboardSerialNumber() {
108109

109110
public HardwareVerificationFeatureAPI.HardwareStatisticData getStatisticData() {
110111
return new HardwareVerificationFeatureAPI.HardwareStatisticData(
111-
JVMHelper.ARCH.toHardwareFeatureArch(JVMHelper.ARCH_TYPE),
112-
JVMHelper.OS.toHardwareFeatureOs(JVMHelper.OS_TYPE),
112+
LauncherAPIHelper.toHardwareFeatureArch(JVMHelper.ARCH_TYPE),
113+
LauncherAPIHelper.toHardwareFeatureOs(JVMHelper.OS_TYPE),
113114
getTotalMemory(),
114115
getProcessorLogicalCount(),
115116
getProcessorPhysicalCount(),
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
java {
3+
sourceCompatibility = JavaVersion.VERSION_21
4+
targetCompatibility = JavaVersion.VERSION_21
5+
}
6+
7+
repositories {
8+
mavenCentral()
9+
}
10+
11+
dependencies {
12+
api(libs.gson)
13+
compileOnly(libs.jline.terminal)
14+
compileOnly(libs.jline.reader)
15+
compileOnly(libs.jansi)
16+
api(libs.slf4j)
17+
testRuntimeOnly(libs.jline.reader)
18+
testRuntimeOnly(libs.jline.terminal)
19+
}

components/launcher-core/src/main/java/pro/gravit/utils/BiHookSet.java renamed to components/launcher-utils/src/main/java/pro/gravit/utils/BiHookSet.java

File renamed without changes.

components/launcher-core/src/main/java/pro/gravit/utils/HookException.java renamed to components/launcher-utils/src/main/java/pro/gravit/utils/HookException.java

File renamed without changes.

0 commit comments

Comments
 (0)