diff --git a/Natives/JavaLauncher.m b/Natives/JavaLauncher.m index 2e187dd0..c12069d2 100644 --- a/Natives/JavaLauncher.m +++ b/Natives/JavaLauncher.m @@ -28,7 +28,6 @@ static int margc = -1; static char* margv[1000]; const char *javaHome; -const char *allocmem; const char *multidir; char *homeDir; @@ -169,19 +168,23 @@ int launchJVM(NSString *username, id launchTarget, int width, int height, int mi } setenv("POJAV_RENDERER", renderer.UTF8String, 1); - allocmem_pre = [getPreference(@"allocated_memory") stringValue]; - allocmem = [allocmem_pre cStringUsingEncoding:NSUTF8StringEncoding]; + int allocmem; + if ([getPreference(@"auto_ram") boolValue]) { + CGFloat autoRatio = getEntitlementValue(@"com.apple.private.memorystatus") ? 0.4 : 0.25; + allocmem = roundf(([[NSProcessInfo processInfo] physicalMemory] / 1048576) * autoRatio); + } else { + allocmem = [getPreference(@"allocated_memory") intValue]; + } // "/Applications/PojavLauncher.app/libs/launcher.jar:/Applications/PojavLauncher.app/libs/ExagearApacheCommons.jar:/Applications/PojavLauncher.app/libs/gson-2.8.6.jar:/Applications/PojavLauncher.app/libs/jsr305.jar:/Applications/PojavLauncher.app/libs/lwjgl3-minecraft.jar"; // Check if JVM restarts - char *frameworkPath, *javaPath, *jnaLibPath, *userDir, *userHome, *memMin, *memMax, *arcDNS; + char *frameworkPath, *javaPath, *jnaLibPath, *userDir, *userHome, *arcDNS; asprintf(&frameworkPath, "-Djava.library.path=%1$s/Frameworks:%1$s/Frameworks/libOSMesaOverride.dylib.framework:%1$s/Frameworks/libMoltenVK.dylib.framework", getenv("BUNDLE_PATH")); asprintf(&javaPath, "%s/bin/java", javaHome); asprintf(&jnaLibPath, "-Djna.boot.library.path=%s/Frameworks/libjnidispatch.dylib.framework", getenv("BUNDLE_PATH")); asprintf(&userDir, "-Duser.dir=%s", getenv("POJAV_GAME_DIR")); asprintf(&userHome, "-Duser.home=%s", getenv("POJAV_HOME")); - asprintf(&memMax, "-Xmx%sM", allocmem); asprintf(&arcDNS, "-javaagent:%s/arc_dns_injector.jar=23.95.137.176", java_libs_path); NSLog(@"[JavaLauncher] Java executable path: %s", javaPath); setenv("JAVA_EXT_EXECNAME", javaPath, 1); @@ -190,7 +193,7 @@ int launchJVM(NSString *username, id launchTarget, int width, int height, int mi margv[++margc] = "-XstartOnFirstThread"; margv[++margc] = "-Djava.system.class.loader=net.kdt.pojavlaunch.PojavClassLoader"; margv[++margc] = "-Xms128M"; - margv[++margc] = memMax; + margv[++margc] = (char *)[NSString stringWithFormat:@"-Xmx%dM", allocmem].UTF8String; margv[++margc] = frameworkPath; margv[++margc] = jnaLibPath; margv[++margc] = userDir; diff --git a/Natives/LauncherPreferences.m b/Natives/LauncherPreferences.m index 29e942f3..b0f218db 100644 --- a/Natives/LauncherPreferences.m +++ b/Natives/LauncherPreferences.m @@ -123,7 +123,7 @@ void loadPreferences(BOOL reset) { setDefaultValueForPref(prefDict, @"slideable_hotbar", @NO); setDefaultValueForPref(prefDict, @"virtmouse_enable", @NO); setDefaultValueForPref(prefDict, @"check_sha", @YES); - setDefaultValueForPref(prefDict, @"auto_ram", @(getenv("POJAV_DETECTEDJB") == NULL)); + setDefaultValueForPref(prefDict, @"auto_ram", @(!getEntitlementValue(@"com.apple.private.memorystatus"))); setDefaultValueForPref(prefDict, @"unsupported_warn_counter", @(0)); if (0 != [fileManager fileExistsAtPath:@"/var/mobile/Documents/.pojavlauncher"]) { diff --git a/Natives/LauncherPreferencesViewController2.m b/Natives/LauncherPreferencesViewController2.m index 55448829..3240cd98 100644 --- a/Natives/LauncherPreferencesViewController2.m +++ b/Natives/LauncherPreferencesViewController2.m @@ -188,11 +188,9 @@ typedef void(^CreateView)(UITableViewCell *, NSString *, NSDictionary *); @"hasDetail": @YES, @"icon": @"slider.horizontal.3", @"type": self.typeSwitch, - @"enableCondition": ^BOOL(){ - return getenv("POJAV_DETECTEDJB") == NULL && whenNotInGame(); - }, + @"enableCondition": whenNotInGame, @"warnCondition": ^BOOL(){ - return getenv("POJAV_DETECTEDJB") == NULL && whenNotInGame(); + return getenv("POJAV_DETECTEDJB") == NULL; }, @"warnKey": @"auto_ram_warn", @"requestReload": @YES