• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

kcachegrind

  • sources
  • kde-4.14
  • kdesdk
  • kcachegrind
  • libviews
coverageitem.cpp
Go to the documentation of this file.
1 /* This file is part of KCachegrind.
2  Copyright (C) 2003 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
3 
4  KCachegrind is free software; you can redistribute it and/or
5  modify it under the terms of the GNU General Public
6  License as published by the Free Software Foundation, version 2.
7 
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with this program; see the file COPYING. If not, write to
15  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16  Boston, MA 02110-1301, USA.
17 */
18 
19 /*
20  * Items of coverage view.
21  */
22 
23 #include "coverageitem.h"
24 
25 
26 #include "globalguiconfig.h"
27 #include "listutils.h"
28 #include "coverage.h"
29 
30 
31 // CallerCoverageItem
32 
33 
34 CallerCoverageItem::CallerCoverageItem(QTreeWidget* parent, Coverage* c,
35  TraceFunction* base,
36  EventType* ct,
37  ProfileContext::Type gt)
38  : QTreeWidgetItem(parent)
39 {
40  _skipped = 0;
41  _coverage = c;
42  _function = c->function();
43  _base = base;
44  _groupType = ProfileContext::InvalidType;
45 
46  setText(3, _function->prettyNameWithLocation());
47  setTextAlignment(0, Qt::AlignRight);
48  setTextAlignment(1, Qt::AlignRight);
49  setTextAlignment(2, Qt::AlignRight);
50  setCostType(ct);
51  setGroupType(gt);
52 }
53 
54 CallerCoverageItem::CallerCoverageItem(QTreeWidget* parent, int skipped, Coverage* c,
55  TraceFunction* base,
56  EventType* ct,
57  ProfileContext::Type gt)
58  : QTreeWidgetItem(parent)
59 {
60  _skipped = skipped;
61  _coverage = c;
62  _function = c->function();
63  _base = base;
64  _groupType = ProfileContext::InvalidType;
65 
66  setText(3, QObject::tr("(%n function(s) skipped)", "", _skipped));
67  setTextAlignment(0, Qt::AlignRight);
68  setTextAlignment(1, Qt::AlignRight);
69  setTextAlignment(2, Qt::AlignRight);
70  setCostType(ct);
71  setGroupType(gt);
72 }
73 
74 void CallerCoverageItem::setGroupType(ProfileContext::Type gt)
75 {
76  if (_skipped) return;
77  if (_groupType == gt) return;
78  _groupType = gt;
79 
80  QColor c = GlobalGUIConfig::functionColor(_groupType, _function);
81  setIcon(3, colorPixmap(10, 10, c));
82 }
83 
84 void CallerCoverageItem::setCostType(EventType* ct)
85 {
86  _costType = ct;
87  update();
88 }
89 
90 void CallerCoverageItem::update()
91 {
92  if (!_coverage) {
93  setText(0, QString());
94  setText(1, QString());
95  return;
96  }
97 
98  _pSum = 100.0 * _coverage->inclusive();
99  SubCost realSum = _base->inclusive()->subCost(_costType);
100  _sum = SubCost(realSum * _coverage->inclusive());
101  QString str;
102  if (GlobalConfig::showPercentage())
103  str = QString("%1").arg(_pSum, 0, 'f', GlobalConfig::percentPrecision());
104  else
105  str = _sum.pretty();
106 
107  if (_skipped) {
108  setText(0, QString("< %1").arg(str));
109  return;
110  }
111 
112  setText(0, str);
113  setIcon(0, partitionPixmap(25, 10, _coverage->inclusiveHistogram(), 0,
114  Coverage::maxHistogramDepth, false));
115 
116  // call count
117  _cc = SubCost(_coverage->callCount());
118  setText(2, _cc ? _cc.pretty() : QString("(0)"));
119 
120  // distance (min/max/median)
121  _distance = _coverage->inclusiveMedian();
122  QString distString;
123  if (_coverage->minDistance() == _coverage->maxDistance())
124  distString = QString::number(_distance);
125  else
126  distString = QString("%1-%2 (%3)")
127  .arg(_coverage->minDistance())
128  .arg(_coverage->maxDistance())
129  .arg(_distance);
130  setText(1, distString);
131 }
132 
133 
134 bool CallerCoverageItem::operator<( const QTreeWidgetItem & other ) const
135 {
136  const CallerCoverageItem* ci1 = this;
137  const CallerCoverageItem* ci2 = (CallerCoverageItem*) &other;
138  int col = treeWidget()->sortColumn();
139 
140  // a skip entry is always sorted last
141  if (ci1->_skipped) return true;
142  if (ci2->_skipped) return false;
143 
144  if (col==0) {
145  if (ci1->_pSum < ci2->_pSum) return true;
146  if (ci1->_pSum > ci2->_pSum) return false;
147 
148  // for same percentage (e.g. all 100%), use distance info
149  return ci1->_distance < ci2->_distance;
150  }
151 
152  if (col==1) {
153  return ci1->_distance < ci2->_distance;
154  }
155 
156  if (col==2) {
157  return ci1->_cc < ci2->_cc;
158  }
159 
160  return QTreeWidgetItem::operator <(other);
161 }
162 
163 
164 
165 // CalleeCoverageItem
166 
167 CalleeCoverageItem::CalleeCoverageItem(QTreeWidget* parent, Coverage* c,
168  TraceFunction* base,
169  EventType* ct,
170  ProfileContext::Type gt)
171  : QTreeWidgetItem(parent)
172 {
173  _skipped = 0;
174  _coverage = c;
175  _function = c ? c->function() : 0;
176  _base = base;
177  _groupType = ProfileContext::InvalidType;
178 
179  if ( _function )
180  setText(4, _function->prettyNameWithLocation());
181 
182  setTextAlignment(0, Qt::AlignRight);
183  setTextAlignment(1, Qt::AlignRight);
184  setTextAlignment(2, Qt::AlignRight);
185  setTextAlignment(3, Qt::AlignRight);
186 
187  setCostType(ct);
188  setGroupType(gt);
189 }
190 
191 CalleeCoverageItem::CalleeCoverageItem(QTreeWidget* parent, int skipped, Coverage* c,
192  TraceFunction* base,
193  EventType* ct,
194  ProfileContext::Type gt)
195  : QTreeWidgetItem(parent)
196 {
197  _skipped = skipped;
198  _coverage = c;
199  _function = c ? c->function() : 0;
200  _base = base;
201  _groupType = ProfileContext::InvalidType;
202 
203  setText(4, QObject::tr("(%n function(s) skipped)", "", _skipped));
204 
205  setTextAlignment(0, Qt::AlignRight);
206  setTextAlignment(1, Qt::AlignRight);
207  setTextAlignment(2, Qt::AlignRight);
208  setTextAlignment(3, Qt::AlignRight);
209 
210  setCostType(ct);
211  setGroupType(gt);
212 }
213 
214 void CalleeCoverageItem::setGroupType(ProfileContext::Type gt)
215 {
216  if (_skipped) return;
217  if (_groupType == gt) return;
218  _groupType = gt;
219 
220  QColor c = GlobalGUIConfig::functionColor(_groupType, _function);
221  setIcon(4, colorPixmap(10, 10, c));
222 }
223 
224 void CalleeCoverageItem::setCostType(EventType* ct)
225 {
226  _costType = ct;
227  update();
228 }
229 
230 void CalleeCoverageItem::update()
231 {
232  if (!_coverage) {
233  setText(0, QString());
234  setText(1, QString());
235  setText(2, QString());
236  return;
237  }
238 
239  _pSum = 100.0 * _coverage->inclusive();
240 
241  // pSum/pSelf are percentages of inclusive cost of base
242  SubCost realSum = _base->inclusive()->subCost(_costType);
243  _sum = SubCost(realSum * _coverage->inclusive());
244 
245 
246  QString str;
247  if (GlobalConfig::showPercentage())
248  str = QString("%1").arg(_pSum, 0, 'f', GlobalConfig::percentPrecision());
249  else
250  str = _sum.pretty();
251 
252  if (_skipped) {
253  str = QString("< %1").arg(str);
254  setText(0, str);
255  setText(1, str);
256  return;
257  }
258  setText(0, str);
259 
260  _pSelf = 100.0 * _coverage->self();
261  _self = SubCost(realSum * _coverage->self());
262 
263  if (GlobalConfig::showPercentage()) {
264  setText(1, QString("%1")
265  .arg(_pSelf, 0, 'f', GlobalConfig::percentPrecision()));
266  }
267  else {
268  setText(1, _self.pretty());
269  }
270 
271  setIcon(0, partitionPixmap(25, 10, _coverage->inclusiveHistogram(), 0,
272  Coverage::maxHistogramDepth, false));
273  setIcon(1, partitionPixmap(25, 10, _coverage->selfHistogram(), 0,
274  Coverage::maxHistogramDepth, false));
275 
276 
277  _cc = SubCost(_coverage->callCount());
278  setText(3, _cc ? _cc.pretty() : QString("(0)"));
279 
280  // for comparations
281  _distance = _coverage->inclusiveMedian();
282  QString distString;
283  if (_coverage->minDistance() == _coverage->maxDistance())
284  distString = QString::number(_distance);
285  else {
286  int sMed = _coverage->selfMedian();
287  QString med;
288  if (_distance == sMed)
289  med = QString::number(_distance);
290  else
291  med = QString("%1/%2").arg(_distance).arg(sMed);
292 
293  distString = QString("%1-%2 (%3)")
294  .arg(_coverage->minDistance())
295  .arg(_coverage->maxDistance())
296  .arg(med);
297  }
298  setText(2, distString);
299 }
300 
301 
302 bool CalleeCoverageItem::operator<( const QTreeWidgetItem & other ) const
303 {
304  CalleeCoverageItem* ci = (CalleeCoverageItem*) &other;
305  int col = treeWidget()->sortColumn();
306  // a skip entry is always sorted last
307  if (_skipped) return true;
308  if (ci->_skipped) return false;
309 
310  if (col==0) {
311  if (_pSum < ci->_pSum) return true;
312  if (_pSum > ci->_pSum) return false;
313 
314  // for same percentage (e.g. all 100%), use distance info
315  return _distance < ci->_distance;
316 
317  }
318 
319  if (col==1) {
320  if (_pSelf < ci->_pSelf) return true;
321  if (_pSelf > ci->_pSelf) return false;
322 
323  // for same percentage (e.g. all 100%), use distance info
324  return _distance < ci->_distance;
325  }
326 
327  if (col==2) {
328  // we want to sort the distance in contra direction to costs
329  return _distance < ci->_distance;
330  }
331 
332  if (col==3) {
333  return _cc < ci->_cc;
334  }
335  return QTreeWidgetItem::operator <(other);
336 }
337 
338 
Coverage::inclusive
double inclusive()
Definition: coverage.h:55
Coverage::minDistance
int minDistance()
Definition: coverage.h:58
Coverage::inclusiveMedian
int inclusiveMedian()
Definition: coverage.cpp:55
Coverage::function
TraceFunction * function()
Definition: coverage.h:53
GlobalConfig::showPercentage
static bool showPercentage()
Definition: globalconfig.cpp:328
ProfileCostArray::subCost
SubCost subCost(EventType *)
Returns a sub cost.
Definition: costitem.cpp:591
QTreeWidget::sortColumn
int sortColumn() const
coverageitem.h
GlobalGUIConfig::functionColor
static QColor functionColor(ProfileContext::Type gt, TraceFunction *)
Definition: globalguiconfig.cpp:205
TraceFunction
A traced function.
Definition: tracedata.h:1122
QTreeWidgetItem::setIcon
void setIcon(int column, const QIcon &icon)
Coverage::callCount
double & callCount()
Definition: coverage.h:57
Coverage::maxHistogramDepth
static const int maxHistogramDepth
Definition: coverage.h:44
CalleeCoverageItem::setCostType
void setCostType(EventType *ct)
Definition: coverageitem.cpp:224
CallerCoverageItem::operator<
bool operator<(const QTreeWidgetItem &other) const
Definition: coverageitem.cpp:134
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
EventType
A cost type, e.g.
Definition: eventtype.h:43
CalleeCoverageItem::operator<
bool operator<(const QTreeWidgetItem &other) const
Definition: coverageitem.cpp:302
QTreeWidget
QTreeWidgetItem::operator<
virtual bool operator<(const QTreeWidgetItem &other) const
QString::number
QString number(int n, int base)
Coverage
Coverage of a function.
Definition: coverage.h:36
Coverage::selfHistogram
double * selfHistogram()
Definition: coverage.h:62
CalleeCoverageItem::CalleeCoverageItem
CalleeCoverageItem(QTreeWidget *parent, Coverage *c, TraceFunction *base, EventType *ct, ProfileContext::Type gt)
Definition: coverageitem.cpp:167
partitionPixmap
QPixmap partitionPixmap(int w, int h, double *hist, EventTypeSet *set, int maxIndex, bool framed)
Definition: listutils.cpp:125
TraceFunction::prettyNameWithLocation
QString prettyNameWithLocation(int maxFiles=1) const
Definition: tracedata.cpp:2063
Coverage::selfMedian
int selfMedian()
Definition: coverage.cpp:68
CallerCoverageItem::update
void update()
Definition: coverageitem.cpp:90
listutils.h
coverage.h
QString
QColor
globalguiconfig.h
QTreeWidgetItem::treeWidget
QTreeWidget * treeWidget() const
Coverage::self
double self()
Definition: coverage.h:54
Coverage::maxDistance
int maxDistance()
Definition: coverage.h:59
QTreeWidgetItem
GlobalConfig::percentPrecision
static int percentPrecision()
Definition: globalconfig.cpp:385
ProfileContext::Type
Type
Definition: context.h:36
SubCost
Cost event counter, simple wrapper around a 64bit entity.
Definition: subcost.h:32
CallerCoverageItem::setCostType
void setCostType(EventType *ct)
Definition: coverageitem.cpp:84
QTreeWidgetItem::setText
void setText(int column, const QString &text)
CallerCoverageItem::setGroupType
void setGroupType(ProfileContext::Type)
Definition: coverageitem.cpp:74
SubCost::pretty
QString pretty(char sep= ' ') const
Convert SubCost value into a QString, spaced every 3 digits.
Definition: subcost.cpp:46
CallerCoverageItem::CallerCoverageItem
CallerCoverageItem(QTreeWidget *parent, Coverage *c, TraceFunction *base, EventType *ct, ProfileContext::Type gt)
Definition: coverageitem.cpp:34
QTreeWidgetItem::setTextAlignment
void setTextAlignment(int column, int alignment)
CalleeCoverageItem
Definition: coverageitem.h:59
CalleeCoverageItem::update
void update()
Definition: coverageitem.cpp:230
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
colorPixmap
QPixmap colorPixmap(int w, int h, QColor c)
Definition: listutils.cpp:32
TraceInclusiveCost::inclusive
ProfileCostArray * inclusive()
Definition: tracedata.cpp:163
Coverage::inclusiveHistogram
double * inclusiveHistogram()
Definition: coverage.h:63
CalleeCoverageItem::setGroupType
void setGroupType(ProfileContext::Type)
Definition: coverageitem.cpp:214
ProfileContext::InvalidType
Definition: context.h:37
CallerCoverageItem
Definition: coverageitem.h:31
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:39:50 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kcachegrind

Skip menu "kcachegrind"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal