]> git.cworth.org Git - apitrace/blobdiff - gui/apitracefilter.cpp
gui: Prevent assertion failure on debug builds.
[apitrace] / gui / apitracefilter.cpp
index 3aa5ef83cfb1fdc72d614ba1ec8d681138877f9e..3dec70a4cf8a2be427dcb8ee7689990bfe436da5 100644 (file)
@@ -1,9 +1,14 @@
 #include "apitracefilter.h"
 
 #include "apitracecall.h"
+#include "apitracemodel.h"
 
-ApiTraceFilter::ApiTraceFilter(QObject *parent )
-    : QSortFilterProxyModel()
+#include <QDebug>
+
+ApiTraceFilter::ApiTraceFilter(QObject *parent)
+    : QSortFilterProxyModel(),
+      m_filters(ExtensionsFilter | ResolutionsFilter |
+                ErrorsQueryFilter | ExtraStateFilter)
 {
 }
 
@@ -11,23 +16,103 @@ bool ApiTraceFilter::filterAcceptsRow(int sourceRow,
                                       const QModelIndex &sourceParent) const
 {
     QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
-    QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
-    QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent);
-    QString function = sourceModel()->data(index0).toString();
-    QString arguments = sourceModel()->data(index1).toString();
+    QVariant varientData = sourceModel()->data(index0, ApiTraceModel::EventRole);
+    ApiTraceEvent *event = varientData.value<ApiTraceEvent*>();
 
-    //XXX make it configurable
-    if (function.contains(QLatin1String("glXGetProcAddress")))
-        return false;
-    if (function.contains(QLatin1String("wglGetProcAddress")))
+    if (!event)
         return false;
 
-    if (function.contains(QLatin1String("glGetString")) &&
-        arguments.contains(QLatin1String("GL_EXTENSIONS")))
-        return false;
+    //we don't filter frames
+    if (event->type() == ApiTraceEvent::Frame) {
+        return true;
+    }
+
+    ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
+    QString function = call->name();
+
+    if (!m_regexp.isEmpty() && m_regexp.isValid()) {
+        return function.contains(m_regexp);
+    }
+
+    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);
+    }
+
 
     return true;
 }
 
 
+void ApiTraceFilter::setFilterRegexp(const QRegExp &regexp)
+{
+    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<ApiTraceModel *>(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"