X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitracefilter.cpp;h=3dec70a4cf8a2be427dcb8ee7689990bfe436da5;hb=607717cc7398889ac409b233fc6abbb5ebde3672;hp=7f7da1978eca574fd53357939f513ab6efb5b73c;hpb=ea2954577e018f7151f88276c8a061ad64ed7c5f;p=apitrace diff --git a/gui/apitracefilter.cpp b/gui/apitracefilter.cpp index 7f7da19..3dec70a 100644 --- a/gui/apitracefilter.cpp +++ b/gui/apitracefilter.cpp @@ -1,11 +1,14 @@ #include "apitracefilter.h" #include "apitracecall.h" +#include "apitracemodel.h" #include -ApiTraceFilter::ApiTraceFilter(QObject *parent ) - : QSortFilterProxyModel() +ApiTraceFilter::ApiTraceFilter(QObject *parent) + : QSortFilterProxyModel(), + m_filters(ExtensionsFilter | ResolutionsFilter | + ErrorsQueryFilter | ExtraStateFilter) { } @@ -13,39 +16,103 @@ bool ApiTraceFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); - QVariant varientData = sourceModel()->data(index0); - ApiTraceCall *call = varientData.value(); + QVariant varientData = sourceModel()->data(index0, ApiTraceModel::EventRole); + ApiTraceEvent *event = varientData.value(); - if (!call) + if (!event) return false; - QString function = call->name; + //we don't filter frames + if (event->type() == ApiTraceEvent::Frame) { + return true; + } + + ApiTraceCall *call = static_cast(event); + QString function = call->name(); - if (!m_text.isEmpty()) { - return function.contains(m_text); + if (!m_regexp.isEmpty() && m_regexp.isValid()) { + return function.contains(m_regexp); } - //XXX make it configurable - if (function.contains(QLatin1String("glXGetProcAddress"))) - return false; - if (function.contains(QLatin1String("wglGetProcAddress"))) - return false; + if (m_filters & ResolutionsFilter) { + if (function.contains(QLatin1String("glXGetProcAddress"))) + return false; + if (function.contains(QLatin1String("wglGetProcAddress"))) + return false; + } + + if (m_filters & ErrorsQueryFilter) { + if (function.contains(QLatin1String("glGetError"))) + return false; + } + + if (m_filters & ExtraStateFilter) { + if (function.contains(QLatin1String("glXGetCurrentDisplay"))) + return false; + if (function.contains(QLatin1String("wglDescribePixelFormat"))) + return false; + } + + if (m_filters & ExtensionsFilter) { + if (function.contains(QLatin1String("glXGetClientString"))) + return false; + if (function.contains(QLatin1String("glXQueryExtensionsString"))) + return false; + if (function.contains(QLatin1String("glGetString"))) + return false; + } + + if (m_filters & CustomFilter) { + return !function.contains(m_customRegexp); + } - QString fullText = call->richText(); - if (function.contains(QLatin1String("glGetString")) && - fullText.contains(QLatin1String("GL_EXTENSIONS"))) - return false; return true; } -void ApiTraceFilter::setFilterString(const QString &text) +void ApiTraceFilter::setFilterRegexp(const QRegExp ®exp) { - if (text != m_text) { - m_text = text; + if (regexp != m_regexp) { + m_regexp = regexp; invalidate(); } } +ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const +{ + return m_filters; +} + +void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts) +{ + if (opts != m_filters) { + m_filters = opts; + invalidate(); + } +} + + +QModelIndex ApiTraceFilter::indexForCall(ApiTraceCall *call) const +{ + ApiTraceModel *model = static_cast(sourceModel()); + QModelIndex index = model->indexForCall(call); + return mapFromSource(index); +} + +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"