加快门禁:删除测试窗口、释放桩线程并并行运行三个阶段

关闭后未删除的测试窗口让每次主题切换重排全部残留控件,ui_check 每次关窗还要等桩线程 5 秒。Linux 上结论不变,test_ui_smoke 75→64 s、ui_check 52→16 s;Windows 门禁结果见 .scratch/gate-speed/。
This commit is contained in:
ykcheungab
2026-10-19 09:34:29 +08:00
parent d89535236b
commit a0c13c1dc6
6 changed files with 160 additions and 44 deletions
+10
View File
@@ -97,6 +97,8 @@ def make_window(qt_app, tmp_path, monkeypatch):
yield _make
from PySide6.QtCore import QCoreApplication, QEvent
for window in created:
try:
window.close()
@@ -104,6 +106,14 @@ def make_window(qt_app, tmp_path, monkeypatch):
# Reported rather than swallowed: a window that cannot close is a Qt lifetime
# problem worth seeing, but it must not turn a green test red.
logging.getLogger(__name__).debug("could not close a test window", exc_info=True)
# ``close()`` only hides a window: something in the window keeps it referenced,
# so it stayed alive for the rest of the session. Every leaked window's ~600
# widgets are then re-polished by each later ``app.setStyleSheet`` — measured on
# Linux, one theme switch takes 0.07 s with one window and 0.85 s after ten closed
# ones, and three theme tests took 76 s of a 231 s Windows suite. Delete it.
window.deleteLater()
created.clear()
QCoreApplication.sendPostedEvents(None, QEvent.Type.DeferredDelete)
@pytest.fixture
+3 -1
View File
@@ -1048,7 +1048,9 @@ def test_the_domain_boundary_is_latched_for_the_session(make_window):
"the previous session's island survived into a new run"
)
window._run_timer.stop()
window._stop_run(reason="user_stop")
# Release the stand-in worker as well: the second run re-armed its hang, and a
# window closed on a hanging worker waits out its 5 s join in teardown.
_finish(window, stuck)
# ------------------------------------------------------------- experiment record