优化 Runtime 安装进度体验
- 状态栏与窗口强制刷新,进度更新无需移动鼠标即可实时显示 - 安装过程拆分为 12 个阶段,每段进度从 0 到 100% - 安装阶段解析 uv 下载事件推进进度,模型下载阶段实时反映字节进度
This commit is contained in:
@@ -510,6 +510,46 @@ class AddonTest(unittest.TestCase):
|
||||
self.assertNotIn("DA3 image depth", starting_source)
|
||||
self.assertNotIn("DA3 depth plane", finish_source)
|
||||
|
||||
def test_update_status_formats_stage_progress(self):
|
||||
operator = self.addon.RunJob()
|
||||
|
||||
self.assertEqual(
|
||||
operator._format_status(
|
||||
{
|
||||
"progress": 0.5,
|
||||
"message": "Downloaded 3 packages",
|
||||
"stage": 3,
|
||||
"stages": 12,
|
||||
"stage_label": "Install PyTorch",
|
||||
},
|
||||
"fallback",
|
||||
),
|
||||
"Step 3/12 Install PyTorch: Downloaded 3 packages",
|
||||
)
|
||||
self.assertEqual(
|
||||
operator._format_status(
|
||||
{
|
||||
"progress": 0.0,
|
||||
"message": "",
|
||||
"stage": 10,
|
||||
"stages": 12,
|
||||
"stage_label": "Download DA3 Small",
|
||||
},
|
||||
"fallback",
|
||||
),
|
||||
"Step 10/12 Download DA3 Small",
|
||||
)
|
||||
self.assertEqual(
|
||||
operator._format_status(
|
||||
{
|
||||
"progress": 0.5,
|
||||
"message": "Estimating depth",
|
||||
},
|
||||
"fallback",
|
||||
),
|
||||
"Estimating depth",
|
||||
)
|
||||
|
||||
def test_depth_background_is_loaded_without_changing_source_empty(self):
|
||||
source = inspect.getsource(self.addon.RunJob._build_depth_plane)
|
||||
|
||||
@@ -1486,7 +1526,56 @@ class AddonTest(unittest.TestCase):
|
||||
],
|
||||
)
|
||||
|
||||
def test_force_flag_does_not_trigger_window_draw_and_swap(self):
|
||||
def test_force_flag_triggers_window_draw_and_swap(self):
|
||||
redrawn = []
|
||||
context = SimpleNamespace(
|
||||
window_manager=SimpleNamespace(
|
||||
windows=(
|
||||
SimpleNamespace(
|
||||
screen=SimpleNamespace(
|
||||
areas=(
|
||||
SimpleNamespace(
|
||||
type="STATUSBAR",
|
||||
tag_redraw=lambda: redrawn.append(
|
||||
"status"
|
||||
),
|
||||
regions=(),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
workspace=SimpleNamespace(
|
||||
status_text_set_internal=lambda _value: redrawn.append(
|
||||
"status-text"
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
with patch.object(
|
||||
self.addon.status_bar.bpy,
|
||||
"ops",
|
||||
SimpleNamespace(
|
||||
wm=SimpleNamespace(
|
||||
redraw_timer=lambda **options: redrawn.append(
|
||||
("swap", options)
|
||||
),
|
||||
),
|
||||
),
|
||||
):
|
||||
self.addon.status_bar.redraw_ui(context, force=True)
|
||||
|
||||
self.assertEqual(
|
||||
redrawn,
|
||||
[
|
||||
"status",
|
||||
("swap", {"type": "DRAW_WIN_SWAP", "iterations": 1}),
|
||||
"status-text",
|
||||
],
|
||||
)
|
||||
|
||||
def test_force_flag_ignores_missing_redraw_helpers(self):
|
||||
redrawn = []
|
||||
context = SimpleNamespace(
|
||||
window_manager=SimpleNamespace(
|
||||
@@ -1511,6 +1600,3 @@ class AddonTest(unittest.TestCase):
|
||||
self.addon.status_bar.redraw_ui(context, force=True)
|
||||
|
||||
self.assertEqual(redrawn, ["status"])
|
||||
source = inspect.getsource(self.addon.status_bar)
|
||||
self.assertNotIn("redraw_timer", source)
|
||||
self.assertNotIn("DRAW_WIN_SWAP", source)
|
||||
|
||||
Reference in New Issue
Block a user