浏览代码

warn if bindings take to much time on the main thread

Rodja Trappe 2 年之前
父节点
当前提交
7f4fe49589
共有 1 个文件被更改,包括 8 次插入0 次删除
  1. 8 0
      nicegui/binding.py

+ 8 - 0
nicegui/binding.py

@@ -1,5 +1,7 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
 import asyncio
 import asyncio
+import logging
+import time
 from collections import defaultdict
 from collections import defaultdict
 from typing import Any, Callable, Optional, Set, Tuple
 from typing import Any, Callable, Optional, Set, Tuple
 
 
@@ -17,13 +19,19 @@ async def loop():
     while True:
     while True:
         visited: Set[Tuple[int, str]] = set()
         visited: Set[Tuple[int, str]] = set()
         visited_views: Set[HTMLBaseComponent] = set()
         visited_views: Set[HTMLBaseComponent] = set()
+        t = time.time()
         for link in active_links:
         for link in active_links:
             (source_obj, source_name, target_obj, target_name, transform) = link
             (source_obj, source_name, target_obj, target_name, transform) = link
             value = transform(getattr(source_obj, source_name))
             value = transform(getattr(source_obj, source_name))
             if getattr(target_obj, target_name) != value:
             if getattr(target_obj, target_name) != value:
                 setattr(target_obj, target_name, value)
                 setattr(target_obj, target_name, value)
                 propagate(target_obj, target_name, visited, visited_views)
                 propagate(target_obj, target_name, visited, visited_views)
+        if time.time() - t > 0.01:
+            logging.warning(f'binding propagation for {len(active_links)} active links took {time.time() - t:.3f}')
+        t = time.time()
         update_views(visited_views)
         update_views(visited_views)
+        if time.time() - t > 0.01:
+            logging.warning(f'binding update for {len(visited_views)} visited views took {time.time() - t:.3f}')
         await asyncio.sleep(config.binding_refresh_interval)
         await asyncio.sleep(config.binding_refresh_interval)