]> git.cworth.org Git - apitrace/blob - gui/apitracefilter.cpp
gui: Prevent assertion failure on debug builds.
[apitrace] / gui / apitracefilter.cpp
1 #include "apitracefilter.h"
2
3 #include "apitracecall.h"
4 #include "apitracemodel.h"
5
6 #include <QDebug>
7
8 ApiTraceFilter::ApiTraceFilter(QObject *parent)
9     : QSortFilterProxyModel(),
10       m_filters(ExtensionsFilter | ResolutionsFilter |
11                 ErrorsQueryFilter | ExtraStateFilter)
12 {
13 }
14
15 bool ApiTraceFilter::filterAcceptsRow(int sourceRow,
16                                       const QModelIndex &sourceParent) const
17 {
18     QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
19     QVariant varientData = sourceModel()->data(index0, ApiTraceModel::EventRole);
20     ApiTraceEvent *event = varientData.value<ApiTraceEvent*>();
21
22     if (!event)
23         return false;
24
25     //we don't filter frames
26     if (event->type() == ApiTraceEvent::Frame) {
27         return true;
28     }
29
30     ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
31     QString function = call->name();
32
33     if (!m_regexp.isEmpty() && m_regexp.isValid()) {
34         return function.contains(m_regexp);
35     }
36
37     if (m_filters & ResolutionsFilter) {
38         if (function.contains(QLatin1String("glXGetProcAddress")))
39             return false;
40         if (function.contains(QLatin1String("wglGetProcAddress")))
41             return false;
42     }
43
44     if (m_filters & ErrorsQueryFilter) {
45         if (function.contains(QLatin1String("glGetError")))
46             return false;
47     }
48
49     if (m_filters & ExtraStateFilter) {
50         if (function.contains(QLatin1String("glXGetCurrentDisplay")))
51             return false;
52         if (function.contains(QLatin1String("wglDescribePixelFormat")))
53             return false;
54     }
55
56     if (m_filters & ExtensionsFilter) {
57         if (function.contains(QLatin1String("glXGetClientString")))
58             return false;
59         if (function.contains(QLatin1String("glXQueryExtensionsString")))
60             return false;
61         if (function.contains(QLatin1String("glGetString")))
62             return false;
63     }
64
65     if (m_filters & CustomFilter) {
66         return !function.contains(m_customRegexp);
67     }
68
69
70     return true;
71 }
72
73
74 void ApiTraceFilter::setFilterRegexp(const QRegExp &regexp)
75 {
76     if (regexp != m_regexp) {
77         m_regexp = regexp;
78         invalidate();
79     }
80 }
81
82 ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const
83 {
84     return m_filters;
85 }
86
87 void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts)
88 {
89     if (opts != m_filters) {
90         m_filters = opts;
91         invalidate();
92     }
93 }
94
95
96 QModelIndex ApiTraceFilter::indexForCall(ApiTraceCall *call) const
97 {
98     ApiTraceModel *model = static_cast<ApiTraceModel *>(sourceModel());
99     QModelIndex index = model->indexForCall(call);
100     return mapFromSource(index);
101 }
102
103 QRegExp ApiTraceFilter::filterRegexp() const
104 {
105     return m_regexp;
106 }
107
108 void ApiTraceFilter::setCustomFilterRegexp(const QString &str)
109 {
110     m_customRegexp = QRegExp(str);
111 }
112
113 QString ApiTraceFilter::customFilterRegexp() const
114 {
115     return m_customRegexp.pattern();
116 }
117
118 #include "apitracefilter.moc"