44import os
55import tkinter as tk
66from tkinter import ttk
7+ from time import time
8+ from threading import Thread
79
810from mmg_toolbox .utils .env_functions import get_dls_visits , MMG_BEAMLINES
911from mmg_toolbox .utils .file_functions import folder_summary_line
1618
1719class TitleWindow :
1820 def __init__ (self , root : tk .Misc , config : dict | None = None ):
21+ t0 = time ()
1922 self .root = root
2023 self .config = config or get_config ()
2124
@@ -66,11 +69,15 @@ def __init__(self, root: tk.Misc, config: dict | None = None):
6669 ttk .Button (frm , text = 'Log Viewer' , command = self .open_log_viewer , width = 20 ).pack (side = tk .LEFT )
6770 ttk .Button (frm , text = 'Notebook Browser' , command = self .open_notebook_browser , width = 20 ).pack (side = tk .LEFT )
6871 ttk .Button (frm , text = 'Processing' , command = self .open_script_runner , width = 20 ).pack (side = tk .LEFT )
69-
70- self .choose_beamline (self .config .get (C .beamline , 'i16' ))
72+ t1 = time ()
73+ logger .info (f"init time: { t1 - t0 } s" )
74+ # run file-system functions in a thread to speed up the start time
75+ th = Thread (target = lambda : self .choose_beamline (self .config .get (C .beamline , 'i16' )))
76+ th .start ()
7177
7278 def choose_beamline (self , beamline : str ):
7379 from ..misc .config import BEAMLINE_CONFIG
80+ t0 = time ()
7481 bl_config = BEAMLINE_CONFIG [beamline ].copy ()
7582 self .config .update (bl_config )
7683 self .beamline .set ('MMG Toolbox: ' + beamline )
@@ -79,6 +86,8 @@ def choose_beamline(self, beamline: str):
7986 current_visit = next (iter (self .visits .keys ()))
8087 self .visit_menu .set_menu (current_visit , * self .visits )
8188 self .visit .set (current_visit )
89+ t1 = time ()
90+ logger .info (f"choose_beamline time: { t1 - t0 } s" )
8291 self .dls_directories (self .visits [current_visit ])
8392
8493 def menu_items (self ):
@@ -95,6 +104,7 @@ def menu_items(self):
95104 return menu
96105
97106 def dls_directories (self , data_dir : str ):
107+ t0 = time ()
98108 if not os .access (data_dir , os .R_OK ):
99109 show_error (f"Warning path is not readable: '{ data_dir } '" , self .root , raise_exception = False )
100110 self .summary .set (folder_summary_line (data_dir ))
@@ -105,6 +115,8 @@ def dls_directories(self, data_dir: str):
105115 self .proc_dir .set (proc_dir )
106116 if os .path .isdir (notebook_dir ) and os .access (notebook_dir , os .R_OK ):
107117 self .notebook_dir .set (notebook_dir )
118+ t1 = time ()
119+ logger .info (f"dls_directories time: { t1 - t0 } s" )
108120
109121 def update_config (self ):
110122 save_config (self .config )
0 commit comments