From 5d6ab2699cfda84a77134475930652e1fc649d33 Mon Sep 17 00:00:00 2001 From: igarri Date: Wed, 16 Jun 2021 11:48:59 +0100 Subject: [PATCH] First Performance pass Signed-off-by: igarri --- .../AssetBrowser/AssetBrowserFilterModel.cpp | 3 +- .../AssetBrowser/AssetBrowserModel.cpp | 3 +- .../AssetBrowser/AssetBrowserTableModel.cpp | 56 +++++++++++++++---- .../AssetBrowser/AssetBrowserTableModel.h | 2 + .../Views/AssetBrowserTableView.cpp | 18 +++--- .../Views/AssetBrowserTableView.h | 2 - .../AzAssetBrowser/AzAssetBrowserWindow.cpp | 2 + .../Editor/EditorPreferencesPageFiles.cpp | 21 ++++++- .../Editor/EditorPreferencesPageFiles.h | 7 +++ Code/Sandbox/Editor/Settings.cpp | 2 + Code/Sandbox/Editor/Settings.h | 7 +++ 11 files changed, 96 insertions(+), 27 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp index 9bbdbc8442..3191c9ee8f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp @@ -185,6 +185,7 @@ namespace AzToolsFramework } } invalidateFilter(); + Q_EMIT filterChanged(); } @@ -204,6 +205,6 @@ namespace AzToolsFramework } } // namespace AssetBrowser -} // namespace AzToolsFramework// namespace AssetBrowser +} // namespace AzToolsFramework #include "AssetBrowser/moc_AssetBrowserFilterModel.cpp" diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserModel.cpp index 069ac6de84..5d215f1b97 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserModel.cpp @@ -133,7 +133,8 @@ namespace AzToolsFramework { return 0; } - + + //If the column of the parent is one of those we don't want any more rows as children if (parent.isValid()) { if ((parent.column() != aznumeric_cast(AssetBrowserEntry::Column::DisplayName)) && diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp index e03b1116c3..dcd8bb1cf6 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp @@ -14,6 +14,7 @@ namespace AzToolsFramework { AssetBrowserTableModel::AssetBrowserTableModel(QObject* parent /* = nullptr */) : QSortFilterProxyModel(parent) + , m_numberOfItemsDisplayed(200) { setDynamicSortFilter(false); } @@ -88,25 +89,40 @@ namespace AzToolsFramework int AssetBrowserTableModel::BuildTableModelMap( const QAbstractItemModel* model, const QModelIndex& parent /*= QModelIndex()*/, int row /*= 0*/) { + static int cont = 0; int rows = model ? model->rowCount(parent) : 0; + + if (parent == QModelIndex()) + { + cont = 0; + } + for (int i = 0; i < rows; ++i) { - QModelIndex index = model->index(i, 0, parent); - AssetBrowserEntry* entry = GetAssetEntry(m_filterModel->mapToSource(index)); - //We only wanna see the source assets. - if (entry->GetEntryType() == AssetBrowserEntry::AssetEntryType::Source) + if (cont < m_numberOfItemsDisplayed) { - beginInsertRows(parent, row, row); - m_indexMap[row] = index; - endInsertRows(); + QModelIndex index = model->index(i, 0, parent); + AssetBrowserEntry* entry = GetAssetEntry(m_filterModel->mapToSource(index)); + // We only wanna see the source assets. + if (entry->GetEntryType() == AssetBrowserEntry::AssetEntryType::Source) + { + beginInsertRows(parent, row, row); + m_indexMap[row] = index; + endInsertRows(); - Q_EMIT dataChanged(index, index); - ++row; + Q_EMIT dataChanged(index, index); + ++row; + ++cont; + } + + if (model->hasChildren(index) && cont < 10) + { + row = BuildTableModelMap(model, index, row); + } } - - if (model->hasChildren(index)) + else { - row = BuildTableModelMap(model, index, row); + break; } } return row; @@ -134,6 +150,22 @@ namespace AzToolsFramework m_indexMap.clear(); endRemoveRows(); } + + AzToolsFramework::EditorSettingsAPIRequests::SettingOutcome outcome; + AzToolsFramework::EditorSettingsAPIBus::BroadcastResult(outcome, &AzToolsFramework::EditorSettingsAPIBus::Handler::GetValue, + "Settings|MaxDisplayedItemsNumInSearch"); + //AzToolsFramework::EditorSettingsAPIBus::BroadcastResult( + // outcome, &AzToolsFramework::EditorSettingsAPIBus::Handler::GetValue, + // "Settings\ExperimentalFeatures|TotalIlluminationEnabled"); + + AZStd::any* outcomeValue = &outcome.GetValue(); + //bool trr = false; + if (outcomeValue->is() == true) + { + m_numberOfItemsDisplayed = AZStd::any_cast(*outcomeValue); + //trr = AZStd::any_cast(outcomeValue); + } + BuildTableModelMap(sourceModel()); emit layoutChanged(); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h index 3ce6543f6f..5395512dae 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h @@ -11,6 +11,7 @@ #include #include #endif +#include namespace AzToolsFramework { @@ -49,6 +50,7 @@ namespace AzToolsFramework int BuildTableModelMap(const QAbstractItemModel* model, const QModelIndex& parent = QModelIndex(), int row = 0); private: + int m_numberOfItemsDisplayed; QPointer m_filterModel; QMap m_indexMap; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp index 20e3d307ea..924d73433d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp @@ -5,18 +5,18 @@ * */ -#include +//#include -#include +//#include -#include +//#include #include #include #include -#include -#include -#include +//#include +//#include +//#include #include #include @@ -27,9 +27,9 @@ AZ_PUSH_DISABLE_WARNING( #include #include #include -#include -#include -#include +//#include +//#include +//#include #include AZ_POP_DISABLE_WARNING namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h index 7e1c8c9ab4..4df87e6e3f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h @@ -8,7 +8,6 @@ #if !defined(Q_MOC_RUN) #include #include -#include #include #include @@ -54,7 +53,6 @@ namespace AzToolsFramework void OnAssetBrowserComponentReady() override; ////////////////////////////////////////////////////////////////////////// - Q_SIGNALS: void selectionChangedSignal(const QItemSelection& selected, const QItemSelection& deselected); void ClearStringFilter(); diff --git a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp index 2a5f853e9b..52721a6162 100644 --- a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp +++ b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp @@ -78,6 +78,8 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) m_ui->m_viewSwitcherCheckBox->setVisible(false); m_ui->m_assetBrowserTableViewWidget->setVisible(false); + m_ui->m_searchWidget->SetFilterInputInterval(AZStd::chrono::milliseconds(350)); + if (ed_useNewAssetBrowserTableView) { m_ui->m_viewSwitcherCheckBox->setVisible(true); diff --git a/Code/Sandbox/Editor/EditorPreferencesPageFiles.cpp b/Code/Sandbox/Editor/EditorPreferencesPageFiles.cpp index c09c3441df..cba3888bd1 100644 --- a/Code/Sandbox/Editor/EditorPreferencesPageFiles.cpp +++ b/Code/Sandbox/Editor/EditorPreferencesPageFiles.cpp @@ -42,11 +42,17 @@ void CEditorPreferencesPage_Files::Reflect(AZ::SerializeContext& serialize) ->Field("MaxCount", &AutoBackup::m_maxCount) ->Field("RemindTime", &AutoBackup::m_remindTime); + serialize + .Class() + ->Version(1) + ->Field("Max number of items displayed", &AssetBrowserSearch::m_numOfItemsShown); + serialize.Class() ->Version(1) ->Field("Files", &CEditorPreferencesPage_Files::m_files) ->Field("Editors", &CEditorPreferencesPage_Files::m_editors) - ->Field("AutoBackup", &CEditorPreferencesPage_Files::m_autoBackup); + ->Field("AutoBackup", &CEditorPreferencesPage_Files::m_autoBackup) + ->Field("Asset Browser Search", &CEditorPreferencesPage_Files::m_assetBrowserSearch); AZ::EditContext* editContext = serialize.GetEditContext(); @@ -79,12 +85,19 @@ void CEditorPreferencesPage_Files::Reflect(AZ::SerializeContext& serialize) ->Attribute(AZ::Edit::Attributes::Max, 100) ->DataElement(AZ::Edit::UIHandlers::SpinBox, &AutoBackup::m_remindTime, "Remind Time", "Auto Remind Every (Minutes)"); + editContext->Class("Asset Browser Search View", "Asset Browser Search View") + ->DataElement(AZ::Edit::UIHandlers::SpinBox, &AssetBrowserSearch::m_numOfItemsShown, "Maximum number of displayed items", + "Maximum number of displayed items displayed in the Search View") + ->Attribute(AZ::Edit::Attributes::Min, 200) + ->Attribute(AZ::Edit::Attributes::Max, 1000); + editContext->Class("File Preferences", "Class for handling File Preferences") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") ->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20)) ->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_files, "Files", "File Preferences") ->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_editors, "External Editors", "External Editors") - ->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_autoBackup, "Auto Backup", "Auto Backup"); + ->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_autoBackup, "Auto Backup", "Auto Backup") + ->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_Files::m_assetBrowserSearch, "Asset Browser Search", "Asset Browser Search"); } } @@ -123,6 +136,8 @@ void CEditorPreferencesPage_Files::OnApply() gSettings.autoBackupTime = m_autoBackup.m_timeInterval; gSettings.autoBackupMaxCount = m_autoBackup.m_maxCount; gSettings.autoRemindTime = m_autoBackup.m_remindTime; + + gSettings.numberOfItemsShownInSearch = m_assetBrowserSearch.m_numOfItemsShown; } void CEditorPreferencesPage_Files::InitializeSettings() @@ -147,4 +162,6 @@ void CEditorPreferencesPage_Files::InitializeSettings() m_autoBackup.m_timeInterval = gSettings.autoBackupTime; m_autoBackup.m_maxCount = gSettings.autoBackupMaxCount; m_autoBackup.m_remindTime = gSettings.autoRemindTime; + + m_assetBrowserSearch.m_numOfItemsShown = gSettings.numberOfItemsShownInSearch; } diff --git a/Code/Sandbox/Editor/EditorPreferencesPageFiles.h b/Code/Sandbox/Editor/EditorPreferencesPageFiles.h index 44bcb3ba8d..2e27cd3c3e 100644 --- a/Code/Sandbox/Editor/EditorPreferencesPageFiles.h +++ b/Code/Sandbox/Editor/EditorPreferencesPageFiles.h @@ -68,10 +68,17 @@ private: int m_remindTime; }; + struct AssetBrowserSearch + { + AZ_TYPE_INFO(AssetBrowserSearch, "{9FBFCD24-9452-49DF-99F4-2711443CEAAE}") + + int m_numOfItemsShown; + }; Files m_files; ExternalEditors m_editors; AutoBackup m_autoBackup; + AssetBrowserSearch m_assetBrowserSearch; QIcon m_icon; }; diff --git a/Code/Sandbox/Editor/Settings.cpp b/Code/Sandbox/Editor/Settings.cpp index bf699c842c..c1929119fb 100644 --- a/Code/Sandbox/Editor/Settings.cpp +++ b/Code/Sandbox/Editor/Settings.cpp @@ -498,6 +498,7 @@ void SEditorSettings::Save() SaveValue("Settings", "AutoBackupTime", autoBackupTime); SaveValue("Settings", "AutoBackupMaxCount", autoBackupMaxCount); SaveValue("Settings", "AutoRemindTime", autoRemindTime); + SaveValue("Settings", "MaxDisplayedItemsNumInSearch", numberOfItemsShownInSearch); SaveValue("Settings", "CameraMoveSpeed", cameraMoveSpeed); SaveValue("Settings", "CameraRotateSpeed", cameraRotateSpeed); SaveValue("Settings", "StylusMode", stylusMode); @@ -710,6 +711,7 @@ void SEditorSettings::Load() LoadValue("Settings", "AutoBackupTime", autoBackupTime); LoadValue("Settings", "AutoBackupMaxCount", autoBackupMaxCount); LoadValue("Settings", "AutoRemindTime", autoRemindTime); + LoadValue("Settings", "MaxDisplayedItemsNumInSearch", numberOfItemsShownInSearch); LoadValue("Settings", "CameraMoveSpeed", cameraMoveSpeed); LoadValue("Settings", "CameraRotateSpeed", cameraRotateSpeed); LoadValue("Settings", "StylusMode", stylusMode); diff --git a/Code/Sandbox/Editor/Settings.h b/Code/Sandbox/Editor/Settings.h index 7618a11485..9591695248 100644 --- a/Code/Sandbox/Editor/Settings.h +++ b/Code/Sandbox/Editor/Settings.h @@ -377,6 +377,13 @@ AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING int autoRemindTime; ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + // Asset Browser Search View. + ////////////////////////////////////////////////////////////////////////// + //! Current maximum number of items that can be displayed in the AssetBrowser Search View. + int numberOfItemsShownInSearch; + ////////////////////////////////////////////////////////////////////////// + //! If true preview windows is displayed when browsing geometries. bool bPreviewGeometryWindow;