Răsfoiți Sursa

citra-qt/command list: Do not recreate a widget after each selection

Recreating / replacing a widget is slow since it triggers a layout pass.
Lectem 11 ani în urmă
părinte
comite
b335cce22e
1 a modificat fișierele cu 10 adăugiri și 10 ștergeri
  1. 10 10
      src/citra_qt/debugger/graphics_cmdlists.cpp

+ 10 - 10
src/citra_qt/debugger/graphics_cmdlists.cpp

@@ -262,7 +262,7 @@ void GPUCommandListWidget::OnCommandDoubleClicked(const QModelIndex& index) {
 }
 
 void GPUCommandListWidget::SetCommandInfo(const QModelIndex& index) {
-    QWidget* new_info_widget;
+    QWidget* new_info_widget = nullptr;
 
     const unsigned int command_id = list_widget->model()->data(index, GPUCommandListModel::CommandIdRole).toUInt();
     if (COMMAND_IN_RANGE(command_id, texture0) ||
@@ -283,14 +283,15 @@ void GPUCommandListWidget::SetCommandInfo(const QModelIndex& index) {
         auto info = Pica::DebugUtils::TextureInfo::FromPicaRegister(config, format);
         u8* src = Memory::GetPhysicalPointer(config.GetPhysicalAddress());
         new_info_widget = new TextureInfoWidget(src, info);
-    } else {
-        new_info_widget = new QWidget;
     }
-
-    widget()->layout()->removeWidget(command_info_widget);
-    delete command_info_widget;
-    widget()->layout()->addWidget(new_info_widget);
-    command_info_widget = new_info_widget;
+    if (command_info_widget) {
+        delete command_info_widget;
+        command_info_widget = nullptr;
+    }
+    if (new_info_widget) {
+        widget()->layout()->addWidget(new_info_widget);
+        command_info_widget = new_info_widget;
+    }
 }
 #undef COMMAND_IN_RANGE
 
@@ -328,7 +329,7 @@ GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pi
 
     connect(copy_all, SIGNAL(clicked()), this, SLOT(CopyAllToClipboard()));
 
-    command_info_widget = new QWidget;
+    command_info_widget = nullptr;
 
     QVBoxLayout* main_layout = new QVBoxLayout;
     main_layout->addWidget(list_widget);
@@ -338,7 +339,6 @@ GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pi
         sub_layout->addWidget(copy_all);
         main_layout->addLayout(sub_layout);
     }
-    main_layout->addWidget(command_info_widget);
     main_widget->setLayout(main_layout);
 
     setWidget(main_widget);