From 101c49423726ec6700b9a28cdcefc559400b5aee Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Sat, 24 Sep 2011 17:06:38 -0400 Subject: [PATCH] Add a custom filter to the event view. Allows one to filter out any custom call. Very useful on large traces that have e.g. millions of redundant GetCurrentContext and MakeCurrentContext calls. --- gui/apitracefilter.cpp | 14 ++++++ gui/apitracefilter.h | 7 ++- gui/settingsdialog.cpp | 36 ++++++++++++-- gui/ui/settings.ui | 109 +++++++++++++++++++++++++++++------------ 4 files changed, 129 insertions(+), 37 deletions(-) diff --git a/gui/apitracefilter.cpp b/gui/apitracefilter.cpp index cfa930d..a908325 100644 --- a/gui/apitracefilter.cpp +++ b/gui/apitracefilter.cpp @@ -63,6 +63,10 @@ bool ApiTraceFilter::filterAcceptsRow(int sourceRow, return false; } + if (m_filters & CustomFilter) { + return !function.contains(m_customRegexp); + } + return true; } @@ -102,4 +106,14 @@ QRegExp ApiTraceFilter::filterRegexp() const return m_regexp; } +void ApiTraceFilter::setCustomFilterRegexp(const QString &str) +{ + m_customRegexp = QRegExp(str); +} + +QString ApiTraceFilter::customFilterRegexp() const +{ + return m_customRegexp.pattern(); +} + #include "apitracefilter.moc" diff --git a/gui/apitracefilter.h b/gui/apitracefilter.h index 30c92a1..35f627d 100644 --- a/gui/apitracefilter.h +++ b/gui/apitracefilter.h @@ -11,11 +11,12 @@ class ApiTraceFilter : public QSortFilterProxyModel Q_OBJECT public: enum FilterOption { - NullFilter = 0, + NullFilter = 0, ExtensionsFilter = 1 << 0, ResolutionsFilter = 1 << 1, ErrorsQueryFilter = 1 << 2, ExtraStateFilter = 1 << 3, + CustomFilter = 1 << 4, }; Q_DECLARE_FLAGS(FilterOptions, FilterOption) public: @@ -27,6 +28,9 @@ public: void setFilterRegexp(const QRegExp ®exp); QRegExp filterRegexp() const; + void setCustomFilterRegexp(const QString &str); + QString customFilterRegexp() const; + QModelIndex indexForCall(ApiTraceCall *call) const; protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; @@ -34,6 +38,7 @@ protected: private: QRegExp m_regexp; FilterOptions m_filters; + QRegExp m_customRegexp; }; #endif diff --git a/gui/settingsdialog.cpp b/gui/settingsdialog.cpp index e3d7864..c44b107 100644 --- a/gui/settingsdialog.cpp +++ b/gui/settingsdialog.cpp @@ -38,6 +38,15 @@ void SettingsDialog::filtersFromModel(const ApiTraceFilter *model) functionsBox->setChecked(opts & ApiTraceFilter::ResolutionsFilter); errorsBox->setChecked(opts & ApiTraceFilter::ErrorsQueryFilter); statesBox->setChecked(opts & ApiTraceFilter::ExtraStateFilter); + customBox->setChecked(opts & ApiTraceFilter::CustomFilter); + QString customFilter = model->customFilterRegexp(); + if (!customFilter.isEmpty()) { + customEdit->setText(customFilter); + } else { + //Add a common default + QLatin1String str("glXMakeContextCurrent"); + customEdit->setText(str); + } QRegExp regexp = model->filterRegexp(); if (regexp.isEmpty()) { @@ -63,14 +72,22 @@ void SettingsDialog::filtersFromModel(const ApiTraceFilter *model) void SettingsDialog::filtersToModel(ApiTraceFilter *model) { ApiTraceFilter::FilterOptions opts = ApiTraceFilter::NullFilter; - if (extensionsBox->isChecked()) + if (extensionsBox->isChecked()) { opts |= ApiTraceFilter::ExtensionsFilter; - if (functionsBox->isChecked()) + } + if (functionsBox->isChecked()) { opts |= ApiTraceFilter::ResolutionsFilter; - if (errorsBox->isChecked()) + } + if (errorsBox->isChecked()) { opts |= ApiTraceFilter::ErrorsQueryFilter; - if (statesBox->isChecked()) + } + if (statesBox->isChecked()) { opts |= ApiTraceFilter::ExtraStateFilter; + } + if (customBox->isChecked()) { + opts |= ApiTraceFilter::CustomFilter; + m_filter->setCustomFilterRegexp(customEdit->text()); + } m_filter->setFilterOptions(opts); if (showFilterBox->isChecked()) { m_filter->setFilterRegexp(QRegExp(showFilterEdit->text())); @@ -92,6 +109,17 @@ void SettingsDialog::accept() return; } } + if (customBox->isChecked()) { + QRegExp regexp(customEdit->text()); + if (!regexp.isValid()) { + QMessageBox::warning( + this, + tr("Invalid Regexp"), + tr("The currently set regular expression " + "for custom events is invalid.")); + return; + } + } filtersToModel(m_filter); QDialog::accept(); } diff --git a/gui/ui/settings.ui b/gui/ui/settings.ui index 748f4d5..1d2da3e 100644 --- a/gui/ui/settings.ui +++ b/gui/ui/settings.ui @@ -2,12 +2,15 @@ Settings + + true + 0 0 - 438 - 333 + 571 + 334 @@ -25,34 +28,60 @@ Hidden Events - - - - - Extension queries - - - - - - - Function resolution - - + + + + + + + Extension queries + + + + + + + Function resolution + + + + - - - - Error queries - - + + + + + + Error queries + + + + + + + Extra state queries + + + + - - - - Extra state queries - - + + + + + + Custom + + + + + + + false + + + + @@ -109,8 +138,8 @@ accept() - 248 - 254 + 252 + 329 157 @@ -125,8 +154,8 @@ reject() - 316 - 260 + 320 + 329 286 @@ -134,5 +163,21 @@ + + customBox + toggled(bool) + customEdit + setEnabled(bool) + + + 63 + 151 + + + 107 + 151 + + + -- 2.43.0