3232#include < QStandardItemModel>
3333#include < QVBoxLayout>
3434#include < filesystem>
35+ #include < optional>
3536#include < qapplication.h>
37+ #include < qtemporarydir.h>
3638#include < string>
3739
3840#include " absl/status/status.h"
@@ -58,7 +60,11 @@ void AttemptDeletingTemporaryLocalFile(const std::filesystem::path &file_path)
5860// =================================================================================================
5961// AnalyzeDialog
6062// =================================================================================================
61- AnalyzeDialog::AnalyzeDialog (QWidget *parent)
63+ AnalyzeDialog::AnalyzeDialog (
64+ std::optional<std::reference_wrapper<const Dive::AvailableMetrics>> available_metrics,
65+ QWidget *parent) :
66+ QDialog(parent),
67+ m_available_metrics(available_metrics)
6268{
6369 qDebug () << " AnalyzeDialog created." ;
6470
@@ -249,59 +255,41 @@ void AnalyzeDialog::ShowErrorMessage(const std::string &err_msg)
249255// --------------------------------------------------------------------------------------------------
250256void AnalyzeDialog::PopulateMetrics ()
251257{
252- QFile file (" :/resources/available_metrics.csv" );
253- if (!file.open (QIODevice::ReadOnly | QIODevice::Text))
258+ if (m_available_metrics.has_value ())
254259 {
255- std::cout << " Could not open file:" << file.errorString ().toStdString () << std::endl;
256- qDebug () << " Could not open file:" << file.errorString ();
257- return ;
258- }
259-
260- QTextStream in (&file);
261-
262- // Read and discard the first line (headers)
263- if (!in.atEnd ())
264- {
265- in.readLine ();
266- }
260+ // Get the list of all available metrics
261+ std::vector<std::string> all_keys = m_available_metrics->get ().GetAllMetricKeys ();
267262
268- while (!in.atEnd ())
269- {
270- QString line = in.readLine ();
271- QStringList fields = line.split (' ,' );
263+ for (const auto &key : all_keys)
264+ {
265+ const Dive::MetricInfo *info = m_available_metrics->get ().GetMetricInfo (key);
266+ if (info)
267+ {
268+ CsvItem item;
269+ item.id = info->m_metric_id ;
270+ item.type = info->m_metric_type ;
271+ item.key = QString::fromStdString (key);
272+ item.name = QString::fromStdString (info->m_name );
273+ item.description = QString::fromStdString (info->m_description );
274+ m_csv_items->append (item);
275+ }
276+ }
272277
273- if (fields.size () == 5 )
278+ // Populate the metrics list
279+ for (const auto &item : *m_csv_items)
274280 {
275- CsvItem item;
276- item.id = fields[0 ].replace (' "' , " " );
277- ;
278- item.type = fields[1 ].replace (' "' , " " );
279- ;
280- item.key = fields[2 ].replace (' "' , " " );
281- ;
282- item.name = fields[3 ].replace (' "' , " " );
283- ;
284- item.description = fields[4 ].replace (' "' , " " );
285- ;
286- m_csv_items->append (item);
281+ QListWidgetItem *csv_item = new QListWidgetItem (item.name );
282+ csv_item->setData (kDataRole , item.key );
283+ csv_item->setFlags (csv_item->flags () | Qt::ItemIsUserCheckable);
284+ csv_item->setCheckState (Qt::Unchecked);
285+ m_metrics_list->addItem (csv_item);
287286 }
288- }
289- file.close ();
290287
291- // Populate the metrics list
292- for (const auto &item : *m_csv_items)
293- {
294- QListWidgetItem *csv_item = new QListWidgetItem (item.name );
295- csv_item->setData (kDataRole , item.key );
296- csv_item->setFlags (csv_item->flags () | Qt::ItemIsUserCheckable);
297- csv_item->setCheckState (Qt::Unchecked);
298- m_metrics_list->addItem (csv_item);
288+ // Add spacer so that all metrics are visible at the end of the list.
289+ QListWidgetItem *spacer = new QListWidgetItem ();
290+ spacer->setFlags (spacer->flags () & ~Qt::ItemIsSelectable);
291+ m_metrics_list->addItem (spacer);
299292 }
300-
301- // Add spacer so that all metrics are visible at the end of the list.
302- QListWidgetItem *spacer = new QListWidgetItem ();
303- spacer->setFlags (spacer->flags () & ~Qt::ItemIsSelectable);
304- m_metrics_list->addItem (spacer);
305293}
306294
307295// --------------------------------------------------------------------------------------------------
@@ -757,12 +745,13 @@ void AnalyzeDialog::OnReplay()
757745 }
758746 WaitForReplay (*device);
759747 qDebug () << " Loading perf counter data: " << perf_counter_csv.string ().c_str ();
760- emit OnDisplayPerfCounterResults (QString::fromStdString (perf_counter_csv.string ()));
748+
749+ emit OnDisplayPerfCounterResults (perf_counter_csv.string (), m_available_metrics);
761750 }
762751 else
763752 {
764753 qDebug () << " Cleared perf counter data" ;
765- emit OnDisplayPerfCounterResults (" " );
754+ emit OnDisplayPerfCounterResults (" " , std:: nullopt );
766755 }
767756
768757 // Run the gpu_time replay
0 commit comments