diff --git a/.efrocachemap b/.efrocachemap index d8abe996..20386dd3 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -2024,10 +2024,10 @@ "build/assets/ba_data/textures/powerupCurse.ktx": "https://files.ballistica.net/cache/ba1/1a/ff/b566a1541cd6b8a205c9f9ce0e0d", "build/assets/ba_data/textures/powerupCurse.pvr": "https://files.ballistica.net/cache/ba1/0f/cf/b698996ed2f3d229a749b6a7c69e", "build/assets/ba_data/textures/powerupCurse_preview.png": "https://files.ballistica.net/cache/ba1/02/28/6c025525cd062b4628d86c3bc339", - "build/assets/ba_data/textures/powerupHealth.dds": "https://files.ballistica.net/cache/ba1/6c/bb/41de1ad1769a83daaf9cfa002aaa", - "build/assets/ba_data/textures/powerupHealth.ktx": "https://files.ballistica.net/cache/ba1/be/3e/20cf450dfdf91ec942e670a90e7c", - "build/assets/ba_data/textures/powerupHealth.pvr": "https://files.ballistica.net/cache/ba1/96/46/fac09bce61bfc23cc6e4e911925d", - "build/assets/ba_data/textures/powerupHealth_preview.png": "https://files.ballistica.net/cache/ba1/78/25/665d072b231467c4afb9e522f294", + "build/assets/ba_data/textures/powerupHealth.dds": "https://files.ballistica.net/cache/ba1/87/34/f39c75cdee5596e0e778df1df99e", + "build/assets/ba_data/textures/powerupHealth.ktx": "https://files.ballistica.net/cache/ba1/63/83/c4a1b9c69522b8bd10a30087953d", + "build/assets/ba_data/textures/powerupHealth.pvr": "https://files.ballistica.net/cache/ba1/4a/d6/05bba6256986a257c6c2a19ca641", + "build/assets/ba_data/textures/powerupHealth_preview.png": "https://files.ballistica.net/cache/ba1/ab/f8/dcc44e2e3f066fe3829e710f23e1", "build/assets/ba_data/textures/powerupIceBombs.dds": "https://files.ballistica.net/cache/ba1/fe/b7/9bef011126f00c3c09336cf7bb5e", "build/assets/ba_data/textures/powerupIceBombs.ktx": "https://files.ballistica.net/cache/ba1/a8/95/ba95b76380c6c155ec941e39afe2", "build/assets/ba_data/textures/powerupIceBombs.pvr": "https://files.ballistica.net/cache/ba1/14/54/cac99049f66bf3347182aa6e555e", @@ -4068,26 +4068,26 @@ "build/assets/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/2d/ef/5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/b0/8a/55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/86/5b/2af4d1e26a1a8073c89acb06e599", - "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/cc/c6/e6492f9eeb1c6904ad745abe6eee", - "build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/08/19/389fd56c41b7ecaa5a8ce0030038", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/2e/36/d7de8b609ed2ac99d1e0d5de0ec3", - "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/68/0d/768d03448e5a5d4531dd1a11ebd9", - "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/ba/6f/5c4982d5026eb61c97cdd2029b69", - "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/5f/b0/3fce5a36c251f4090efa8d5c17f6", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/41/76/508f80aa2cad4248be0f644ac577", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/e2/8c/71a04c5829575d085aef4e36a77f", - "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/7b/54/9ce0ec8bba97ea1f75cd052b1297", - "build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/ab/c8/e638cf97e0f18c247c87c453d017", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/99/45/15b0d8dbbbb3e52cc276648f53d8", - "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/60/ff/8ad1713b4fbd20d43b3a791095b3", - "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/96/aa/42b3c8920db0dbded8d76d2d6fd8", - "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/c2/ed/95e885a5bc785a1e595c74ff76dc", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/6b/fd/47f2cc5db0f479a4889f5548c8af", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/6d/ab/bb8b72e8764292d17803fbecfcb0", - "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/d3/16/32b28e3f953a28d532cbda4fa0e7", - "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/3c/81/bb7118b850cc521415a287021c2e", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/31/406d6a632a0d4f227de9679f04b8", - "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/12/c3/99d9b24b558789690fabaa197a82", + "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/d3/9c/74d2e9a1b887acd46f621272efa3", + "build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/7d/41/d4590a21449f3b210a706ceb381a", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/11/f3/83f0fba3740203bae12c710ad8ff", + "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/47/d5/0a6181c67777beef34a67fb36ba6", + "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/50/be/3b2dc25c0768e711a482d132a3ba", + "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/91/c2/9d5d5278575f0bd6d3a056fb8160", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/34/6a/5cd3c0ab5a433ea77b7c9a047ae4", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/5f/da/617750d459fe6218dc3f7f860cff", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/95/48/47d550a802e5712719b7c5cda899", + "build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/39/a3/c0c54265ea7c9debb317efc782a4", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/bc/1d/a15d7691a7c52b37b8ac3cebd4be", + "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/58/22/9552473e93773ba12a8ba0e33ac8", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/47/62/078ec6167c01d3b767a2babb0b73", + "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/e0/eb/dabceff6aed25203fd9e973b29b7", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/98/ac/f5b5872699c4e04a6d6a97077d53", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/3c/ef/49bb8c6f2f1bf9114ab0c42e700c", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/25/7e/795d70e09b4fa86df5a9e0c55c1f", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/cf/97/df4d783c76f152c2ea2153a2b36c", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/d3/8a/8188e90299eec825be4ad76c6a9a", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/93/16/bd9d50566e7f666a07f42ca9ea9a", "build/prefab/lib/linux_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/be/19/b5458933dfc7371d91ecfcd2e06f", "build/prefab/lib/linux_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/4e/48/123b806cbe6ddb3d9a8368bbb4f8", "build/prefab/lib/linux_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/be/19/b5458933dfc7371d91ecfcd2e06f", @@ -4104,14 +4104,14 @@ "build/prefab/lib/mac_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/7e/fa/291fd7e935502ced7e99b8c8f7f0", "build/prefab/lib/mac_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/e1/cb/7e8440699e59e8646da25aa5782b", "build/prefab/lib/mac_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/7e/fa/291fd7e935502ced7e99b8c8f7f0", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/91/4c/b20cd911b2433714a20ba59cad48", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/af/f0/4c40cb48cca4dea5260eab386c06", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/14/21/faad84cb65e511ae7bc37d251550", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/c8/08/9eccb255c73f2741eec30b7f9fe3", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/57/fa/b7a7684cb6c6acfe6fb2b83baf44", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/5e/19/bf51579c19796fe240183763a7d8", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/21/c8/f3e146692272201d04c292298727", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/66/e3/1759502456fee8c367b316c97c0c", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/1f/12/f5811bdd6c1b81af2c79d14aac0f", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/70/05/940d32b8f297caac70e5edd23247", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/7d/3e/5022438c01db4b47cc8f2c5d8cfd", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/f0/c4/d6ea86c3dba824a5e03b4cbd7d43", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/4c/06/8a43c496f1e0e8c44b85e581fa55", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/af/06/51d246eb5b5c4a677155edd00cce", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/05/c1/ca3bce6340742a8bdb526b440df5", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/5f/91/6c36a3587d3e2682287bc36b4e1f", "src/assets/ba_data/python/babase/_mgen/__init__.py": "https://files.ballistica.net/cache/ba1/f8/85/fed7f2ed98ff2ba271f9dbe3391c", "src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/48/4b/e6974f0a4d14be8213dc00d971c3", "src/ballistica/base/mgen/pyembed/binding_base.inc": "https://files.ballistica.net/cache/ba1/3e/7a/203e2a5d2b5bb42cfe3fd2fe16c2", diff --git a/CHANGELOG.md b/CHANGELOG.md index 65cf739f..ff2ab847 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,10 @@ -### 1.7.22 (build 21154, api 8, 2023-06-28) +### 1.7.22 (build 21156, api 8, 2023-07-08) - Fixed a very rare race condition when launching threads or sending synchronous cross-thread messages. This was manifesting as one out of several thousand server launches hanging. +- Changed health box from a red cross to a green cross (turns out games aren't + supposed to use red crosses for health for legal reasons). ### 1.7.21 (build 21152, api 8, 2023-06-27) diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py index b3059284..168f3af6 100644 --- a/src/assets/ba_data/python/baenv.py +++ b/src/assets/ba_data/python/baenv.py @@ -28,7 +28,7 @@ if TYPE_CHECKING: # Build number and version of the ballistica binary we expect to be # using. -TARGET_BALLISTICA_BUILD = 21154 +TARGET_BALLISTICA_BUILD = 21156 TARGET_BALLISTICA_VERSION = '1.7.22' _g_env_config: EnvConfig | None = None diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 08f9cbe0..1a917447 100644 --- a/src/ballistica/shared/ballistica.cc +++ b/src/ballistica/shared/ballistica.cc @@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int { namespace ballistica { // These are set automatically via script; don't modify them here. -const int kEngineBuildNumber = 21154; +const int kEngineBuildNumber = 21156; const char* kEngineVersion = "1.7.22"; auto MonolithicMain(const core::CoreConfig& core_config) -> int { diff --git a/tests/test_efro/test_message.py b/tests/test_efro/test_message.py index f52c24db..f29c5fd8 100644 --- a/tests/test_efro/test_message.py +++ b/tests/test_efro/test_message.py @@ -8,12 +8,10 @@ from __future__ import annotations import os import logging import asyncio -from typing import TYPE_CHECKING, overload +from typing import TYPE_CHECKING, overload, assert_type from dataclasses import dataclass -from typing_extensions import assert_type import pytest - from efro.error import CleanError, RemoteError, CommunicationError from efro.dataclassio import ioprepped from efro.message import ( diff --git a/tools/efro/log.py b/tools/efro/log.py index 30eed928..341fe54e 100644 --- a/tools/efro/log.py +++ b/tools/efro/log.py @@ -11,7 +11,7 @@ import datetime import itertools from enum import Enum from collections import deque -from dataclasses import dataclass +from dataclasses import dataclass, field from typing import TYPE_CHECKING, Annotated from threading import Thread, current_thread, Lock @@ -92,6 +92,14 @@ class LogEntry: level: Annotated[LogLevel, IOAttrs('l')] time: Annotated[datetime.datetime, IOAttrs('t')] + # We support arbitrary string labels per log entry which can be + # incorporated into custom log processing. To populate this, our + # LogHandler class looks for a 'labels' dict passed in the optional + # 'extra' dict arg to standard Python log calls. + labels: Annotated[ + dict[str, str], IOAttrs('la', store_default=False) + ] = field(default_factory=dict) + @ioprepped @dataclass @@ -300,6 +308,7 @@ class LogHandler(logging.Handler): return False def emit(self, record: logging.LogRecord) -> None: + # pylint: disable=too-many-branches if __debug__: starttime = time.monotonic() @@ -324,6 +333,12 @@ class LogHandler(logging.Handler): record.args ) + # Note: just assuming types are correct here, but they'll be + # checked properly when the resulting LogEntry gets exported. + labels: dict[str, str] | None = getattr(record, 'labels', None) + if labels is None: + labels = {} + if fast_path: if __debug__: formattime = echotime = time.monotonic() @@ -334,6 +349,7 @@ class LogHandler(logging.Handler): record.levelno, record.created, record, + labels, ) ) else: @@ -366,6 +382,7 @@ class LogHandler(logging.Handler): record.levelno, record.created, msg, + labels, ) ) @@ -408,6 +425,7 @@ class LogHandler(logging.Handler): levelno: int, created: float, message: str | logging.LogRecord, + labels: dict[str, str], ) -> None: try: # If they passed a raw record here, bake it down to a string. @@ -422,6 +440,7 @@ class LogHandler(logging.Handler): time=datetime.datetime.fromtimestamp( created, datetime.timezone.utc ), + labels=labels, ) ) except Exception: diff --git a/tools/efrotools/code.py b/tools/efrotools/code.py index d68c797b..afd263ad 100644 --- a/tools/efrotools/code.py +++ b/tools/efrotools/code.py @@ -239,7 +239,7 @@ def get_code_filenames(projroot: Path, include_generated: bool) -> list[str]: out = sorted(codefilenames) # Watch for breakage. - if not out: + if places and not out: print( 'WARNING: get_code_filename returning no results;' ' is something broken?', @@ -358,7 +358,7 @@ def get_script_filenames(projroot: Path) -> list[str]: out = sorted(list(f for f in filenames if 'flycheck_' not in f)) # Watch for breakage. - if not out: + if places and not out: print( 'WARNING: get_script_filename returning no results;' ' is something broken?',