95adc273f2
Replaces the buggy custom _t = time.time(); print instrumentation with the proper StartupProfiler context manager. Phases added to App.__init__: - app_init_AppController - app_init_history_perfmon Phases added to App.run() (else branch = native GUI): - theme_load_from_config - imgui_bundle_import (the C++ extension import chokepoint) - RunnerParams_init Note: a leftover print(f'[startup] RunnerParams() init: ...') line in App.run() still references a stale _t variable. Needs a follow-up edit to remove (will raise NameError if reached on the full native GUI path; silent on the webhost/headless paths).
76 lines
3.0 KiB
Python
76 lines
3.0 KiB
Python
import argparse
|
|
import sys
|
|
import os
|
|
import time
|
|
|
|
# Cold-start anchor: capture wall-clock as the very first executable
|
|
# statement in the entry point. The AppController's startup_timeline()
|
|
# reads this from a module-global so the gap between "Python started"
|
|
# and "AppController init began" is visible (this is typically the
|
|
# largest startup phase: module imports).
|
|
_SLOPPY_COLD_START_TS: float = time.time()
|
|
|
|
project_root = os.path.dirname(os.path.abspath(__file__))
|
|
if project_root not in sys.path:
|
|
sys.path.insert(0, project_root)
|
|
|
|
thirdparty = os.path.join(project_root, "thirdparty")
|
|
if thirdparty not in sys.path:
|
|
sys.path.insert(0, thirdparty)
|
|
|
|
os.environ["HF_HUB_DISABLE_SYMLINKS_WARNING"] = "1"
|
|
os.environ["HF_HUB_DISABLE_PROGRESS_BARS"] = "1"
|
|
os.environ["TOKENIZERS_PARALLELISM"] = "false"
|
|
|
|
from src.startup_profiler import startup_profiler
|
|
|
|
with startup_profiler.phase("defer_sugar"):
|
|
from defer.sugar import install as _install_defer
|
|
_install_defer()
|
|
|
|
parser = argparse.ArgumentParser(description="Manual Slop entry point")
|
|
parser.add_argument("--headless", action="store_true", help="Run in headless mode without GUI")
|
|
parser.add_argument("--web-host", default=None, help="Enable web mode and bind to this host (e.g., 0.0.0.0)")
|
|
parser.add_argument("--web-port", type=int, default=8080, help="Web mode port (default: 8080)")
|
|
parser.add_argument("--enable-test-hooks", action="store_true", help="Enable the HookServer on :8999 for external automation")
|
|
# Defer parse_args() so `import sloppy` (for _SLOPPY_COLD_START_TS) doesn't
|
|
# require CLI args. parse_args() runs at the start of __main__ only.
|
|
args: argparse.Namespace = argparse.Namespace() # type: ignore[assignment]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
args = parser.parse_args()
|
|
if args.web_host is not None:
|
|
with startup_profiler.phase("web_host_imports"):
|
|
from imgui_bundle import hello_imgui
|
|
from src.api_hooks import HookServer
|
|
with startup_profiler.phase("gui_2_import_webhost"):
|
|
from src.gui_2 import App
|
|
with startup_profiler.phase("app_construct"):
|
|
app = App()
|
|
|
|
if args.enable_test_hooks:
|
|
hook_server = HookServer(app)
|
|
hook_server.start()
|
|
|
|
runner_params = hello_imgui.RunnerParams()
|
|
runner_params.app_window_params.window_title = "Manual Slop (Web)"
|
|
runner_params.app_window_params.borderless = True
|
|
runner_params.imgui_window_params.default_imgui_window_type = hello_imgui.DefaultImGuiWindowType.provide_full_screen_dock_space
|
|
runner_params.app_window_params.restore_previous_window_size = True
|
|
|
|
with startup_profiler.phase("hello_imgui_run"):
|
|
hello_imgui.run(runner_params, lambda: app.render_frame())
|
|
elif args.headless:
|
|
with startup_profiler.phase("headless_imports"):
|
|
from src.app_controller import AppController
|
|
with startup_profiler.phase("appcontroller_construct_headless"):
|
|
controller = AppController(headless=True)
|
|
with startup_profiler.phase("appcontroller_run"):
|
|
controller.run()
|
|
else:
|
|
with startup_profiler.phase("gui_2_main_import"):
|
|
from src.gui_2 import main
|
|
with startup_profiler.phase("main_call"):
|
|
main()
|