Fixed a issue with resource exhaustion for directx.
This commit is contained in:
@@ -394,6 +394,7 @@ def play_locked(
|
|||||||
if recommended_comparison is not None:
|
if recommended_comparison is not None:
|
||||||
runtime_issues["recommended_one_variable_comparison"] = recommended_comparison
|
runtime_issues["recommended_one_variable_comparison"] = recommended_comparison
|
||||||
clean_exit = outcome.returncode == 0 and current_game_crash is None
|
clean_exit = outcome.returncode == 0 and current_game_crash is None
|
||||||
|
session_issue = game_log_issue_reason(current_game_log)
|
||||||
launch_evidence = game_readiness_signal
|
launch_evidence = game_readiness_signal
|
||||||
if launch_evidence is None and current_game_log is not None:
|
if launch_evidence is None and current_game_log is not None:
|
||||||
launch_evidence = "game_log"
|
launch_evidence = "game_log"
|
||||||
@@ -402,6 +403,8 @@ def play_locked(
|
|||||||
launch_succeeded = launch_evidence is not None
|
launch_succeeded = launch_evidence is not None
|
||||||
report = {
|
report = {
|
||||||
"ok": clean_exit,
|
"ok": clean_exit,
|
||||||
|
"degraded": session_issue is not None,
|
||||||
|
"session_issue": session_issue,
|
||||||
"launch_succeeded": launch_succeeded,
|
"launch_succeeded": launch_succeeded,
|
||||||
"dry_run": dry_run,
|
"dry_run": dry_run,
|
||||||
"runtime": asdict(selection),
|
"runtime": asdict(selection),
|
||||||
@@ -430,6 +433,7 @@ def play_locked(
|
|||||||
**window_launch_metadata,
|
**window_launch_metadata,
|
||||||
"runtime_seconds": round(game_runtime_seconds),
|
"runtime_seconds": round(game_runtime_seconds),
|
||||||
"clean_exit": clean_exit,
|
"clean_exit": clean_exit,
|
||||||
|
"degraded": session_issue is not None,
|
||||||
"timed_out": outcome.timed_out,
|
"timed_out": outcome.timed_out,
|
||||||
"launch_succeeded": launch_succeeded,
|
"launch_succeeded": launch_succeeded,
|
||||||
"game_window_ready": game_window_ready,
|
"game_window_ready": game_window_ready,
|
||||||
@@ -440,7 +444,7 @@ def play_locked(
|
|||||||
"realm": start_option.name,
|
"realm": start_option.name,
|
||||||
**api._game_exit_metadata(outcome.returncode, selection.kind),
|
**api._game_exit_metadata(outcome.returncode, selection.kind),
|
||||||
}
|
}
|
||||||
if not clean_exit:
|
if not clean_exit or session_issue is not None:
|
||||||
common_game_metadata["failure_reason"] = game_failure_reason(
|
common_game_metadata["failure_reason"] = game_failure_reason(
|
||||||
outcome,
|
outcome,
|
||||||
current_game_log,
|
current_game_log,
|
||||||
@@ -516,6 +520,10 @@ def play_locked(
|
|||||||
exit_message = game_crash_message(current_game_log)
|
exit_message = game_crash_message(current_game_log)
|
||||||
elif outcome.timed_out:
|
elif outcome.timed_out:
|
||||||
exit_message = "Game session timed out"
|
exit_message = "Game session timed out"
|
||||||
|
elif session_issue == "direct3d_resource_exhaustion":
|
||||||
|
exit_message = (
|
||||||
|
"Game client exited after logging Direct3D resource exhaustion"
|
||||||
|
)
|
||||||
elif common_game_metadata.get("signal_inferred") is True:
|
elif common_game_metadata.get("signal_inferred") is True:
|
||||||
signal_wrapper = (
|
signal_wrapper = (
|
||||||
"Proton" if selection.kind == "proton7" else "UMU"
|
"Proton" if selection.kind == "proton7" else "UMU"
|
||||||
@@ -537,12 +545,14 @@ def play_locked(
|
|||||||
severity=(
|
severity=(
|
||||||
"error"
|
"error"
|
||||||
if current_game_crash is not None
|
if current_game_crash is not None
|
||||||
else "info" if clean_exit else "warning"
|
else "warning"
|
||||||
|
if not clean_exit or session_issue is not None
|
||||||
|
else "info"
|
||||||
),
|
),
|
||||||
message=exit_message,
|
message=exit_message,
|
||||||
metadata=(
|
metadata=(
|
||||||
common_game_metadata
|
common_game_metadata
|
||||||
if clean_exit
|
if clean_exit and session_issue is None
|
||||||
else {
|
else {
|
||||||
**common_game_metadata,
|
**common_game_metadata,
|
||||||
**failure_evidence,
|
**failure_evidence,
|
||||||
@@ -646,7 +656,7 @@ def game_failure_reason(
|
|||||||
current_game_crash: dict[str, object] | None,
|
current_game_crash: dict[str, object] | None,
|
||||||
exit_metadata: dict[str, object],
|
exit_metadata: dict[str, object],
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Classify the strongest evidence recorded for a failed game session."""
|
"""Classify the strongest evidence recorded for a failed or degraded session."""
|
||||||
|
|
||||||
if current_game_log and current_game_log.get("runtime_out_of_memory") is True:
|
if current_game_log and current_game_log.get("runtime_out_of_memory") is True:
|
||||||
return "direct3d_resource_exhaustion"
|
return "direct3d_resource_exhaustion"
|
||||||
@@ -659,6 +669,16 @@ def game_failure_reason(
|
|||||||
return "nonzero_exit"
|
return "nonzero_exit"
|
||||||
|
|
||||||
|
|
||||||
|
def game_log_issue_reason(
|
||||||
|
current_game_log: dict[str, object] | None,
|
||||||
|
) -> str | None:
|
||||||
|
"""Classify native-log evidence that degraded an otherwise clean process exit."""
|
||||||
|
|
||||||
|
if current_game_log and current_game_log.get("runtime_out_of_memory") is True:
|
||||||
|
return "direct3d_resource_exhaustion"
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def game_crash_message(current_game_log: dict[str, object] | None) -> str:
|
def game_crash_message(current_game_log: dict[str, object] | None) -> str:
|
||||||
if (
|
if (
|
||||||
current_game_log is not None
|
current_game_log is not None
|
||||||
@@ -971,6 +991,16 @@ def print_game_outcome(
|
|||||||
)
|
)
|
||||||
elif outcome.timed_out:
|
elif outcome.timed_out:
|
||||||
print("Game client timed out and was stopped.", file=sys.stderr)
|
print("Game client timed out and was stopped.", file=sys.stderr)
|
||||||
|
elif (
|
||||||
|
outcome.returncode == 0
|
||||||
|
and game_log_issue_reason(current_game_log)
|
||||||
|
== "direct3d_resource_exhaustion"
|
||||||
|
):
|
||||||
|
print(
|
||||||
|
"Game client exited with status 0 after logging Direct3D resource "
|
||||||
|
"exhaustion.",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
elif outcome.returncode == 0:
|
elif outcome.returncode == 0:
|
||||||
print("Game client exited normally.")
|
print("Game client exited normally.")
|
||||||
elif outcome.returncode is None:
|
elif outcome.returncode is None:
|
||||||
@@ -1039,8 +1069,8 @@ def print_interrupted_game_log(report: dict[str, object]) -> None:
|
|||||||
print(
|
print(
|
||||||
"Detected Direct3D resource exhaustion in the 32-bit game process"
|
"Detected Direct3D resource exhaustion in the 32-bit game process"
|
||||||
+ effect_text
|
+ effect_text
|
||||||
+ ". Restarting the client can recover temporarily; depot repair will not "
|
+ ". Restarting clears the process address space, but this condition can "
|
||||||
"fix this failure.",
|
"recur; depot repair will not fix it.",
|
||||||
file=sys.stderr,
|
file=sys.stderr,
|
||||||
)
|
)
|
||||||
elif report["managed_asset_integrity_failed"]:
|
elif report["managed_asset_integrity_failed"]:
|
||||||
|
|||||||
@@ -3,15 +3,15 @@
|
|||||||
"archive": {
|
"archive": {
|
||||||
"layout": "flat",
|
"layout": "flat",
|
||||||
"name": "PristonTale-EU-1.0.5.tar.gz",
|
"name": "PristonTale-EU-1.0.5.tar.gz",
|
||||||
"sha256": "31414eefc52325a532ded83166d083c4d8d4a6699bfa92d619197b879e6d6578",
|
"sha256": "39c9960025f412ff40452fdde0655cb7b6d8c92643add7093d44f8f5bebb8d97",
|
||||||
"size": 1544157,
|
"size": 1544294,
|
||||||
"url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v1.0.5/PristonTale-EU-1.0.5.tar.gz?sha256=31414eefc52325a532ded83166d083c4d8d4a6699bfa92d619197b879e6d6578"
|
"url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v1.0.5/PristonTale-EU-1.0.5.tar.gz?sha256=39c9960025f412ff40452fdde0655cb7b6d8c92643add7093d44f8f5bebb8d97"
|
||||||
},
|
},
|
||||||
"archive_sha256": "31414eefc52325a532ded83166d083c4d8d4a6699bfa92d619197b879e6d6578",
|
"archive_sha256": "39c9960025f412ff40452fdde0655cb7b6d8c92643add7093d44f8f5bebb8d97",
|
||||||
"archive_size": 1544157,
|
"archive_size": 1544294,
|
||||||
"archive_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v1.0.5/PristonTale-EU-1.0.5.tar.gz?sha256=31414eefc52325a532ded83166d083c4d8d4a6699bfa92d619197b879e6d6578",
|
"archive_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v1.0.5/PristonTale-EU-1.0.5.tar.gz?sha256=39c9960025f412ff40452fdde0655cb7b6d8c92643add7093d44f8f5bebb8d97",
|
||||||
"channel": "stable",
|
"channel": "stable",
|
||||||
"commit": "67d89b40d54f1bf6d1886cd2cdbd35b0fa8b4324",
|
"commit": "06469a0ad3befa84af0303a3afa100f4b9a7b182",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"config_schema": 1,
|
"config_schema": 1,
|
||||||
"manifest_schema": 1,
|
"manifest_schema": 1,
|
||||||
@@ -71,8 +71,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "ptlinux/application/commands/play.py",
|
"path": "ptlinux/application/commands/play.py",
|
||||||
"sha256": "7591103e801972398c2d1bd683518b9149c0903b3f6bd3de79c185f66c0b42f6",
|
"sha256": "83ec468e7748c9e02106323bf235bef14503b08a31be3566b3b1a1eccd1cdb4b",
|
||||||
"size": 34941
|
"size": 35941
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "ptlinux/application/commands/settings.py",
|
"path": "ptlinux/application/commands/settings.py",
|
||||||
@@ -696,17 +696,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "release.json",
|
"path": "release.json",
|
||||||
"sha256": "3cf9be35e4a0db075d79956b11f8d21c9ae4c8be5169690300bae335df6e7d01",
|
"sha256": "c579ddbd86892713e30b04fb962895488a78cdad9744c880507b058328c27579",
|
||||||
"size": 218
|
"size": 218
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"minimum_updater_version": "0.9.9",
|
"minimum_updater_version": "0.9.9",
|
||||||
"notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v1.0.5",
|
"notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v1.0.5",
|
||||||
"published_at": "2026-09-15T19:15:39Z",
|
"published_at": "2026-09-15T19:29:05Z",
|
||||||
"release": {
|
"release": {
|
||||||
"notes_markdown": "# PristonTale EU Launcher 1.0.5\n\nAdds opt-in, bounded game crash-dump attachments for telemetry, improves game-exit diagnostics and Proton 7 crash classification, and packages the current launcher, runtime compatibility, and native helper updates.\n\n## Changes\n\n- Updated telemetry to support game dumps. (`67d89b4`)\n- Released version 1.0.2 (`c278efa`)\n- Reworked some game window and gamescope methods for Cinnamon. (`f3059c3`)\n- Added more folders and restructured classes inside them. (`2cbb931`)\n- Reworked the project structure. (`be7a478`)\n- Delete RELEASE_PIPELINE_WORKPLAN.md (`15741f5`)\n- Add channel-aware release tooling and updater recovery (`0a89323`)\n- Publish signed launcher release history (`cc48bf4`)\n- Upload files to \"updates\" (`84f8de5`)\n- Delete updates/stable.json.sig (`1329485`)\n- Delete updates/stable.json (`8f1655b`)\n- Fix v0.9.11 archive download cache (`be71d31`)\n- Upload files to \"updates\" (`46e11ae`)\n- Delete updates/stable.json.sig (`eeb993e`)\n- Delete updates/stable.json (`a90bd19`)\n\n---\n\nVersion: `1.0.5` \nChannel: `stable` \nTag: `v1.0.5` \nSource commit: `67d89b40d54f1bf6d1886cd2cdbd35b0fa8b4324`\n",
|
"notes_markdown": "# PristonTale EU Launcher 1.0.5\n\nAdds opt-in, bounded game crash-dump attachments for telemetry, correctly reports clean process exits with Direct3D resource exhaustion as degraded sessions, and packages the current launcher, runtime compatibility, and native helper updates.\n\n## Changes\n\n- Updated to version: 1.0.5 (`06469a0`)\n- Added crash dumps class. (`f7ceba2`)\n- Updated telemetry to support game dumps. (`67d89b4`)\n- Released version 1.0.2 (`c278efa`)\n- Reworked some game window and gamescope methods for Cinnamon. (`f3059c3`)\n- Added more folders and restructured classes inside them. (`2cbb931`)\n- Reworked the project structure. (`be7a478`)\n- Delete RELEASE_PIPELINE_WORKPLAN.md (`15741f5`)\n- Add channel-aware release tooling and updater recovery (`0a89323`)\n- Publish signed launcher release history (`cc48bf4`)\n- Upload files to \"updates\" (`84f8de5`)\n- Delete updates/stable.json.sig (`1329485`)\n- Delete updates/stable.json (`8f1655b`)\n- Fix v0.9.11 archive download cache (`be71d31`)\n- Upload files to \"updates\" (`46e11ae`)\n- Delete updates/stable.json.sig (`eeb993e`)\n- Delete updates/stable.json (`a90bd19`)\n\n---\n\nVersion: `1.0.5` \nChannel: `stable` \nTag: `v1.0.5` \nSource commit: `06469a0ad3befa84af0303a3afa100f4b9a7b182`\n",
|
||||||
"release_notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v1.0.5",
|
"release_notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v1.0.5",
|
||||||
"summary": "Adds opt-in, bounded game crash-dump attachments for telemetry, improves game-exit diagnostics and Proton 7 crash classification, and packages the current launcher, runtime compatibility, and native helper updates.",
|
"summary": "Adds opt-in, bounded game crash-dump attachments for telemetry, correctly reports clean process exits with Direct3D resource exhaustion as degraded sessions, and packages the current launcher, runtime compatibility, and native helper updates.",
|
||||||
"title": "PristonTale EU Launcher 1.0.5"
|
"title": "PristonTale EU Launcher 1.0.5"
|
||||||
},
|
},
|
||||||
"schema": 1,
|
"schema": 1,
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user