]> git.cworth.org Git - apitrace/blob - gui/apitracefilter.cpp
Use skiplist-based FastCallSet within trace::CallSet
[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     Q_ASSERT(event);
23     if (!event)
24         return false;
25
26     //we don't filter frames
27     if (event->type() == ApiTraceEvent::Frame) {
28         return true;
29     }
30
31     ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
32     QString function = call->name();
33
34     if (!m_regexp.isEmpty() && m_regexp.isValid()) {
35         return function.contains(m_regexp);
36     }
37
38     if (m_filters & ResolutionsFilter) {
39         if (function.contains(QLatin1String("glXGetProcAddress")))
40             return false;
41         if (function.contains(QLatin1String("wglGetProcAddress")))
42             return false;
43     }
44
45     if (m_filters & ErrorsQueryFilter) {
46         if (function.contains(QLatin1String("glGetError")))
47             return false;
48     }
49
50     if (m_filters & ExtraStateFilter) {
51         if (function.contains(QLatin1String("glXGetCurrentDisplay")))
52             return false;
53         if (function.contains(QLatin1String("wglDescribePixelFormat")))
54             return false;
55     }
56
57     if (m_filters & ExtensionsFilter) {
58         if (function.contains(QLatin1String("glXGetClientString")))
59             return false;
60         if (function.contains(QLatin1String("glXQueryExtensionsString")))
61             return false;
62         if (function.contains(QLatin1String("glGetString")))
63             return false;
64     }
65
66     if (m_filters & CustomFilter) {
67         return !function.contains(m_customRegexp);
68     }
69
70
71     return true;
72 }
73
74
75 void ApiTraceFilter::setFilterRegexp(const QRegExp &regexp)
76 {
77     if (regexp != m_regexp) {
78         m_regexp = regexp;
79         invalidate();
80     }
81 }
82
83 ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const
84 {
85     return m_filters;
86 }
87
88 void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts)
89 {
90     if (opts != m_filters) {
91         m_filters = opts;
92         invalidate();
93     }
94 }
95
96
97 QModelIndex ApiTraceFilter::indexForCall(ApiTraceCall *call) const
98 {
99     ApiTraceModel *model = static_cast<ApiTraceModel *>(sourceModel());
100     QModelIndex index = model->indexForCall(call);
101     return mapFromSource(index);
102 }
103
104 QRegExp ApiTraceFilter::filterRegexp() const
105 {
106     return m_regexp;
107 }
108
109 void ApiTraceFilter::setCustomFilterRegexp(const QString &str)
110 {
111     m_customRegexp = QRegExp(str);
112 }
113
114 QString ApiTraceFilter::customFilterRegexp() const
115 {
116     return m_customRegexp.pattern();
117 }
118
119 #include "apitracefilter.moc"