diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py index c56980f..da25a9e 100644 --- a/src/ui/MainWindow.py +++ b/src/ui/MainWindow.py @@ -546,6 +546,10 @@ class MainWindow(QMainWindow): # Progressbar für Transformationen in Statusbar self.transformation_progress_bar = None + # Gespeicherte Worker-Pool-Metriken (werden vor Shutdown gecacht) + self.last_saxon_metrics = None + self.last_fop_metrics = None + # Mapping: xml_file_path_str → QTreeWidgetItem (für Progress Bar und Icon Updates) self.xml_item_map = {} @@ -4371,11 +4375,19 @@ class MainWindow(QMainWindow): # Erfasse RAM-Verbrauch nach Transformation import transform + from copy import deepcopy if transform._saxon_worker_pool: transform._saxon_worker_pool.capture_ram_after_transform() + # Speichere Metriken vor Shutdown (für späteren Zugriff im Dialog) + self.last_saxon_metrics = deepcopy(transform._saxon_worker_pool.metrics) + logger.debug("Saxon Worker-Pool Metriken gespeichert") + if transform._fop_worker_pool: transform._fop_worker_pool.capture_ram_after_transform() + # Speichere Metriken vor Shutdown (für späteren Zugriff im Dialog) + self.last_fop_metrics = deepcopy(transform._fop_worker_pool.metrics) + logger.debug("FOP Worker-Pool Metriken gespeichert") # Beende Worker-Pools (RAM-Optimierung - Pools werden bei nächster Transformation neu gestartet) self._shutdown_saxon_worker_pool() diff --git a/src/ui/WorkerPoolMetricsDialog.py b/src/ui/WorkerPoolMetricsDialog.py index fd8ae98..c80bff5 100644 --- a/src/ui/WorkerPoolMetricsDialog.py +++ b/src/ui/WorkerPoolMetricsDialog.py @@ -141,19 +141,26 @@ class WorkerPoolMetricsDialog(QDialog): def _load_metrics(self): """Lädt und zeigt die Metriken an.""" - import transform + # Hole MainWindow-Instanz (parent) + main_window = self.parent() - # Saxon Worker Pool - if transform._saxon_worker_pool: - self._update_metrics_tab(self.saxon_tab, transform._saxon_worker_pool, "Saxon Worker Pool") + # Saxon Worker Pool - verwende gespeicherte Metriken + if hasattr(main_window, "last_saxon_metrics") and main_window.last_saxon_metrics: + self._update_metrics_tab_from_metrics( + self.saxon_tab, main_window.last_saxon_metrics, "Saxon Worker Pool" + ) else: - self._set_tab_status(self.saxon_tab, "Nicht aktiviert") + self._set_tab_status( + self.saxon_tab, "Keine Metriken verfügbar - bitte erst eine Transformation durchführen" + ) - # FOP Worker Pool - if transform._fop_worker_pool: - self._update_metrics_tab(self.fop_tab, transform._fop_worker_pool, "FOP Worker Pool") + # FOP Worker Pool - verwende gespeicherte Metriken + if hasattr(main_window, "last_fop_metrics") and main_window.last_fop_metrics: + self._update_metrics_tab_from_metrics(self.fop_tab, main_window.last_fop_metrics, "FOP Worker Pool") else: - self._set_tab_status(self.fop_tab, "Nicht aktiviert") + self._set_tab_status( + self.fop_tab, "Keine Metriken verfügbar - bitte erst eine Transformation durchführen" + ) def _set_tab_status(self, tab: QWidget, status: str): """ @@ -167,19 +174,18 @@ class WorkerPoolMetricsDialog(QDialog): if status_label: status_label.setText(f"Status: {status}") - def _update_metrics_tab(self, tab: QWidget, pool, pool_name: str): + def _update_metrics_tab_from_metrics(self, tab: QWidget, metrics, pool_name: str): """ - Aktualisiert die Metriken in einem Tab. + Aktualisiert die Metriken in einem Tab (direkt aus Metriken-Objekt). Args: tab: Das Tab-Widget - pool: Der Worker-Pool (Saxon oder FOP) + metrics: Das WorkerPoolMetrics-Objekt pool_name: Name des Pools """ - metrics = pool.metrics - - # Status - self._set_tab_status(tab, f"Aktiviert ({pool.num_workers} Worker)") + # Status - berechne Worker-Anzahl aus Metriken + num_workers = len(metrics.worker_start_times) if metrics.worker_start_times else 0 + self._set_tab_status(tab, f"Letzte Transformation ({num_workers} Worker)") # Kompilierung compile_time_label = tab.findChild(QLabel, "compile_time_label")