能效核心屏蔽功能应用到 RSI启动器,以让开发板使用此功能。

This commit is contained in:
xkeyC 2023-11-28 20:04:15 +08:00
parent 06c581cd80
commit 4f6623a4cd
8 changed files with 45 additions and 33 deletions

View File

@ -130,14 +130,21 @@ class SystemHelper {
// check running and kill // check running and kill
await killRSILauncher(); await killRSILauncher();
// launch // launch
final r = await Process.run(powershellPath, [ final processorAffinity = await SystemHelper.getCpuAffinity();
'Start-Process', if (processorAffinity == null) {
"'$path'", Process.run(path, []);
'-Verb RunAs', } else {
]); Process.run("cmd.exe", [
'/C',
'Start',
'""',
'/High',
'/Affinity',
processorAffinity,
path,
]);
}
dPrint(path); dPrint(path);
dPrint(r.stdout);
dPrint(r.stderr);
} }
static Future<int> getSystemMemorySizeGB() async { static Future<int> getSystemMemorySizeGB() async {
@ -218,7 +225,11 @@ foreach ($adapter in $adapterMemory) {
return int.tryParse(cpuNumberResult.stdout.toString().trim()) ?? 0; return int.tryParse(cpuNumberResult.stdout.toString().trim()) ?? 0;
} }
static Future<String?> getCpuAffinity(int eCoreCount) async { static Future<String?> getCpuAffinity() async {
final confBox = await Hive.openBox("app_conf");
final eCoreCount = int.tryParse(
confBox.get("gameLaunch_eCore_count", defaultValue: "0")) ??
0;
final cpuNumber = await getNumberOfLogicalProcessors(); final cpuNumber = await getNumberOfLogicalProcessors();
if (cpuNumber == 0 || eCoreCount == 0 || eCoreCount > cpuNumber) { if (cpuNumber == 0 || eCoreCount == 0 || eCoreCount > cpuNumber) {
return null; return null;

View File

@ -31,14 +31,19 @@ class AppUI extends BaseUI {
restorationScopeId: "Doctor", restorationScopeId: "Doctor",
themeMode: ThemeMode.dark, themeMode: ThemeMode.dark,
theme: FluentThemeData( theme: FluentThemeData(
brightness: Brightness.dark, brightness: Brightness.dark,
fontFamily: "SourceHanSansCN-Regular", fontFamily: "SourceHanSansCN-Regular",
navigationPaneTheme: NavigationPaneThemeData( navigationPaneTheme: NavigationPaneThemeData(
backgroundColor: AppConf.colorBackground, backgroundColor: AppConf.colorBackground,
), ),
menuColor: AppConf.colorMenu, menuColor: AppConf.colorMenu,
micaBackgroundColor: AppConf.colorMica, micaBackgroundColor: AppConf.colorMica,
), buttonTheme: ButtonThemeData(
defaultButtonStyle: ButtonStyle(
shape: ButtonState.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
side: BorderSide(color: Colors.white.withOpacity(.01)))),
))),
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
home: BaseUIContainer( home: BaseUIContainer(
uiCreate: () => IndexUI(), modelCreate: () => IndexUIModel()), uiCreate: () => IndexUI(), modelCreate: () => IndexUIModel()),

View File

@ -537,7 +537,7 @@ class HomeUIModel extends BaseUIModel {
dPrint('stdout: ${result.stdout}'); dPrint('stdout: ${result.stdout}');
dPrint('stderr: ${result.stderr}'); dPrint('stderr: ${result.stderr}');
} else { } else {
dPrint("set Affinity === $processorAffinity "); dPrint("set Affinity === $processorAffinity launchExe === $launchExe");
ProcessResult result = await Process.run("cmd.exe", [ ProcessResult result = await Process.run("cmd.exe", [
'/C', '/C',
'Start', 'Start',

View File

@ -220,14 +220,9 @@ class LoginDialogModel extends BaseUIModel {
await Future.delayed(const Duration(seconds: 1)); await Future.delayed(const Duration(seconds: 1));
await Future.delayed(const Duration(seconds: 3)); await Future.delayed(const Duration(seconds: 3));
final confBox = await Hive.openBox("app_conf");
final inputGameLaunchECore = int.tryParse(
confBox.get("gameLaunch_eCore_count", defaultValue: "0")) ??
0;
final processorAffinity = final processorAffinity =
await SystemHelper.getCpuAffinity(inputGameLaunchECore); await SystemHelper.getCpuAffinity();
// TODO
homeUIModel.doLaunchGame( homeUIModel.doLaunchGame(
'$installPath\\$executable', '$installPath\\$executable',
["-no_login_dialog", ...launchOptions.toString().split(" ")], ["-no_login_dialog", ...launchOptions.toString().split(" ")],

View File

@ -17,14 +17,14 @@ class SettingUI extends BaseUI<SettingUIModel> {
subTitle: subTitle:
"启用:${model.isEnableAutoLogin ? "已启用" : "已禁用"} 设备支持:${model.isDeviceSupportWinHello ? "支持" : "不支持"} 邮箱:${model.autoLoginEmail} 密码:${model.isEnableAutoLoginPwd ? "已加密保存" : "未保存"}", "启用:${model.isEnableAutoLogin ? "已启用" : "已禁用"} 设备支持:${model.isDeviceSupportWinHello ? "支持" : "不支持"} 邮箱:${model.autoLoginEmail} 密码:${model.isEnableAutoLoginPwd ? "已加密保存" : "未保存"}",
onTap: model.onResetAutoLogin), onTap: model.onResetAutoLogin),
const SizedBox(height: 12),
makeSettingsItem(const Icon(FontAwesomeIcons.microchip),
"启动游戏时忽略能效核心( 适用于Intel 12th+ 处理器 [实验性功能,请随时反馈]",
subTitle:
"已设置的核心数量:${model.inputGameLaunchECore} 设置需要忽略的处理器的能效心数量盒子将在使用启动游戏功能时为您修改游戏所运行的CPU参数当为 0 时不启用此功能 ",
onTap: model.setGameLaunchECore),
const SizedBox(height: 12),
], ],
const SizedBox(height: 12),
makeSettingsItem(const Icon(FontAwesomeIcons.microchip),
"启动游戏时忽略能效核心( 适用于Intel 12th+ 处理器 [实验性功能,请随时反馈]",
subTitle:
"已设置的核心数量:${model.inputGameLaunchECore} (此功能适用于首页的盒子一键启动 或 工具中的RSI启动器管理员模式当为 0 时不启用此功能 ",
onTap: model.setGameLaunchECore),
const SizedBox(height: 12),
makeSettingsItem( makeSettingsItem(
const Icon(FluentIcons.folder_open), "设置启动器文件RSI Launcher.exe", const Icon(FluentIcons.folder_open), "设置启动器文件RSI Launcher.exe",
subTitle: model.customLauncherPath != null subTitle: model.customLauncherPath != null

View File

@ -56,7 +56,8 @@ class SettingUIModel extends BaseUIModel {
userBox.get("gameLaunch_eCore_count", defaultValue: "0"); userBox.get("gameLaunch_eCore_count", defaultValue: "0");
final input = await showInputDialogs(context!, final input = await showInputDialogs(context!,
title: "请输入要忽略的 CPU 核心数", title: "请输入要忽略的 CPU 核心数",
content: "tip您的设备拥有几个能效核心就输入几非大小核设备请保持0", content:
"Tip您的设备拥有几个能效核心就输入几非大小核设备请保持 0\n\n此功能适用于首页的盒子一键启动 或 工具中的 RSI启动器管理员模式当为 0 时不启用此功能。",
initialValue: defaultInput, initialValue: defaultInput,
inputFormatters: [FilteringTextInputFormatter.digitsOnly]); inputFormatters: [FilteringTextInputFormatter.digitsOnly]);
if (input == null) return; if (input == null) return;

View File

@ -68,7 +68,7 @@ class ToolsUIModel extends BaseUIModel {
_ToolsItemData( _ToolsItemData(
"rsilauncher_admin_mode", "rsilauncher_admin_mode",
"RSI Launcher 管理员模式", "RSI Launcher 管理员模式",
"在某些情况下 RSI启动器 无法正确获得管理员权限,您可尝试使用该功能以管理员模式运行启动器", "以管理员身份运行RSI启动器可能会解决一些问题。\n\n若设置了能效核心屏蔽参数,也会在此应用",
const Icon(FluentIcons.admin, size: 28), const Icon(FluentIcons.admin, size: 28),
onTap: _adminRSILauncher, onTap: _adminRSILauncher,
) )

View File

@ -32,7 +32,7 @@ dependencies:
sdk: flutter sdk: flutter
flutter_riverpod: ^2.3.6 flutter_riverpod: ^2.3.6
window_manager: ^0.3.2 window_manager: ^0.3.2
fluent_ui: ^4.7.4 fluent_ui: ^4.8.1
flutter_staggered_grid_view: ^0.7.0 flutter_staggered_grid_view: ^0.7.0
flutter_acrylic: ^1.1.0 flutter_acrylic: ^1.1.0
url_launcher: ^6.1.10 url_launcher: ^6.1.10