]> git.cworth.org Git - apitrace/blob - gui/apitracefilter.cpp
Merge branch 'trace-editing'
[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         QString fullText = call->filterText();
63         if (function.contains(QLatin1String("glGetString")) &&
64             fullText.contains(QLatin1String("GL_EXTENSIONS")))
65             return false;
66     }
67
68
69     return true;
70 }
71
72
73 void ApiTraceFilter::setFilterRegexp(const QRegExp &regexp)
74 {
75     if (regexp != m_regexp) {
76         m_regexp = regexp;
77         invalidate();
78     }
79 }
80
81 ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const
82 {
83     return m_filters;
84 }
85
86 void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts)
87 {
88     if (opts != m_filters) {
89         m_filters = opts;
90         invalidate();
91     }
92 }
93
94 QModelIndex ApiTraceFilter::callIndex(int callIdx) const
95 {
96     ApiTraceModel *model = static_cast<ApiTraceModel *>(sourceModel());
97     QModelIndex index = model->callIndex(callIdx);
98     return mapFromSource(index);
99 }
100
101 QModelIndex ApiTraceFilter::indexForCall(ApiTraceCall *call) const
102 {
103     ApiTraceModel *model = static_cast<ApiTraceModel *>(sourceModel());
104     QModelIndex index = model->indexForCall(call);
105     return mapFromSource(index);
106 }
107
108 QRegExp ApiTraceFilter::filterRegexp() const
109 {
110     return m_regexp;
111 }
112
113 #include "apitracefilter.moc"