]> git.cworth.org Git - apitrace/blob - gui/apitracefilter.cpp
Merge branch 'on-demand-loading'
[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
67     return true;
68 }
69
70
71 void ApiTraceFilter::setFilterRegexp(const QRegExp &regexp)
72 {
73     if (regexp != m_regexp) {
74         m_regexp = regexp;
75         invalidate();
76     }
77 }
78
79 ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const
80 {
81     return m_filters;
82 }
83
84 void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts)
85 {
86     if (opts != m_filters) {
87         m_filters = opts;
88         invalidate();
89     }
90 }
91
92
93 QModelIndex ApiTraceFilter::indexForCall(ApiTraceCall *call) const
94 {
95     ApiTraceModel *model = static_cast<ApiTraceModel *>(sourceModel());
96     QModelIndex index = model->indexForCall(call);
97     return mapFromSource(index);
98 }
99
100 QRegExp ApiTraceFilter::filterRegexp() const
101 {
102     return m_regexp;
103 }
104
105 #include "apitracefilter.moc"