[XAM] Extend UI delay on close. Added delay to headless after notification sent.
Created thread to do async notification broadcast on close for headless. This fixes game freeze in 534407FC
This commit is contained in:
committed by
Radosław Gliński
parent
c2650c6e58
commit
44e1a64f35
@@ -34,6 +34,8 @@ DEFINE_bool(storage_selection_dialog, false,
|
|||||||
|
|
||||||
DECLARE_int32(license_mask);
|
DECLARE_int32(license_mask);
|
||||||
|
|
||||||
|
constexpr std::chrono::milliseconds kUIDelayMillis(200);
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace kernel {
|
namespace kernel {
|
||||||
namespace xam {
|
namespace xam {
|
||||||
@@ -81,8 +83,11 @@ X_RESULT xeXamDispatchDialog(T* dialog,
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
auto post = []() {
|
auto post = []() {
|
||||||
xe::threading::Sleep(std::chrono::milliseconds(100));
|
std::jthread t([] {
|
||||||
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
xe::threading::Sleep(kUIDelayMillis);
|
||||||
|
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
||||||
|
});
|
||||||
|
t.detach();
|
||||||
};
|
};
|
||||||
if (!overlapped) {
|
if (!overlapped) {
|
||||||
pre();
|
pre();
|
||||||
@@ -123,7 +128,7 @@ X_RESULT xeXamDispatchDialogEx(
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
auto post = []() {
|
auto post = []() {
|
||||||
xe::threading::Sleep(std::chrono::milliseconds(100));
|
xe::threading::Sleep(kUIDelayMillis);
|
||||||
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
||||||
};
|
};
|
||||||
if (!overlapped) {
|
if (!overlapped) {
|
||||||
@@ -143,10 +148,15 @@ X_RESULT xeXamDispatchHeadless(std::function<X_RESULT()> run_callback,
|
|||||||
uint32_t overlapped) {
|
uint32_t overlapped) {
|
||||||
auto pre = []() {
|
auto pre = []() {
|
||||||
kernel_state()->BroadcastNotification(kXNotificationSystemUI, true);
|
kernel_state()->BroadcastNotification(kXNotificationSystemUI, true);
|
||||||
|
xe::threading::Sleep(std::chrono::milliseconds(25));
|
||||||
};
|
};
|
||||||
auto post = []() {
|
auto post = []() {
|
||||||
xe::threading::Sleep(std::chrono::milliseconds(100));
|
std::jthread t([]() {
|
||||||
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
xe::threading::Sleep(kUIDelayMillis);
|
||||||
|
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
||||||
|
});
|
||||||
|
|
||||||
|
t.detach();
|
||||||
};
|
};
|
||||||
if (!overlapped) {
|
if (!overlapped) {
|
||||||
pre();
|
pre();
|
||||||
@@ -167,7 +177,7 @@ X_RESULT xeXamDispatchHeadlessEx(
|
|||||||
kernel_state()->BroadcastNotification(kXNotificationSystemUI, true);
|
kernel_state()->BroadcastNotification(kXNotificationSystemUI, true);
|
||||||
};
|
};
|
||||||
auto post = []() {
|
auto post = []() {
|
||||||
xe::threading::Sleep(std::chrono::milliseconds(100));
|
xe::threading::Sleep(kUIDelayMillis);
|
||||||
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
||||||
};
|
};
|
||||||
if (!overlapped) {
|
if (!overlapped) {
|
||||||
@@ -198,7 +208,7 @@ X_RESULT xeXamDispatchDialogAsync(T* dialog,
|
|||||||
kernel_state()->xam_state()->xam_dialogs_shown_--;
|
kernel_state()->xam_state()->xam_dialogs_shown_--;
|
||||||
|
|
||||||
auto run = []() -> void {
|
auto run = []() -> void {
|
||||||
xe::threading::Sleep(std::chrono::milliseconds(100));
|
xe::threading::Sleep(kUIDelayMillis);
|
||||||
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -220,7 +230,7 @@ X_RESULT xeXamDispatchHeadlessAsync(std::function<void()> run_callback) {
|
|||||||
kernel_state()->xam_state()->xam_dialogs_shown_--;
|
kernel_state()->xam_state()->xam_dialogs_shown_--;
|
||||||
|
|
||||||
auto run = []() -> void {
|
auto run = []() -> void {
|
||||||
xe::threading::Sleep(std::chrono::milliseconds(100));
|
xe::threading::Sleep(kUIDelayMillis);
|
||||||
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
kernel_state()->BroadcastNotification(kXNotificationSystemUI, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user