Exemple #1
0
QColor GlobalConfig::functionColor(ProfileContext::Type gt,
                                    TraceFunction* f)
{
  ProfileCostArray* group = f;
  QString n;

  switch(gt) {
  case ProfileContext::Object: group = f->object(); break;
  case ProfileContext::Class:  group = f->cls(); break;
  case ProfileContext::File:   group = f->file(); break;
  default:
    break;
  }

  if (group != f) {
    // first look for manual color of a function in a group
    n = ProfileContext::typeName(group->type()) +
        '-' + group->name() +
        '-' + f->name();

    ConfigColorSetting* cs = colorSetting(n, false);
    if (cs) return cs->color();
  }
  return groupColor(group);
}
Exemple #2
0
void SourceItem::updateCost()
{
  _pure = SubCost(0);
  _pure2 = SubCost(0);

  if (!_line) return;
  if (_lineJump) return;

  ProfileCostArray* lineCost = _lineCall ? (ProfileCostArray*)_lineCall : (ProfileCostArray*)_line;

  // do not show any cost inside of cycles
  if (_lineCall &&
      ((_lineCall->call()->inCycle()>0) ||
       (_lineCall->call()->isRecursion()))) {
    QString str;
    QPixmap p;

    QString icon = "edit-undo";
#if 0 // TODO
    KIconLoader* loader = KIconLoader::global();
    p= loader->loadIcon(icon, KIconLoader::Small, 0,
                        KIconLoader::DefaultState, QStringList(), 0, true);
#endif
    if (p.isNull())
      str = QObject::tr("(cycle)");

    setText(1, str);
    setIcon(1, p);
    setText(2, str);
    setIcon(2, p);
    return;
  }

  ProfileCostArray* totalCost;
  if (GlobalConfig::showExpanded())
    totalCost = _line->functionSource()->function()->inclusive();
  else
    totalCost = _line->functionSource()->function()->data();

  EventType* ct = _view->eventType();
  _pure = ct ? lineCost->subCost(ct) : SubCost(0);
  if (_pure == 0) {
    setText(1, QString());
    setIcon(1, QPixmap());
  }
  else {
    double total = totalCost->subCost(ct);
    double pure  = 100.0 * _pure / total;

    if (GlobalConfig::showPercentage())
      setText(1, QString("%1")
	      .arg(pure, 0, 'f', GlobalConfig::percentPrecision()));
    else
      setText(1, _pure.pretty());

    setIcon(1, costPixmap(ct, lineCost, total, false));
  }

  EventType* ct2 = _view->eventType2();
  _pure2 = ct2 ? lineCost->subCost(ct2) : SubCost(0);
  if (_pure2 == 0) {
    setText(2, QString());
    setIcon(2, QPixmap());
  }
  else {
    double total = totalCost->subCost(ct2);
    double pure2  = 100.0 * _pure2 / total;

    if (GlobalConfig::showPercentage())
      setText(2, QString("%1")
	      .arg(pure2, 0, 'f', GlobalConfig::percentPrecision()));
    else
      setText(2, _pure2.pretty());

    setIcon(2, costPixmap(ct2, lineCost, total, false));
  }
}
Exemple #3
0
void EventTypeItem::update()
{
    TraceData* d = _costItem ? _costItem->data() : 0;
    double total = d ? ((double)d->subCost(_eventType)) : 0.0;

    if (total == 0.0) {
        setText(1, "-");
        setIcon(1, QIcon());
        setText(2, "-");
        setIcon(2, QIcon());
        return;
    }

    TraceFunction* f = (_costItem && _costItem->type()==ProfileContext::Function) ?
                       (TraceFunction*)_costItem : 0;

    ProfileCostArray* selfTotalCost = f ? f->data() : d;
    if (f && GlobalConfig::showExpanded()) {
        ProfileCostArray* parent = 0;
        switch(_groupType) {
        case ProfileContext::Object:
            parent = f->object();
            break;
        case ProfileContext::Class:
            parent = f->cls();
            break;
        case ProfileContext::File:
            parent = f->file();
            break;
        case ProfileContext::FunctionCycle:
            parent = f->cycle();
            break;
        default:
            break;
        }
        if (parent) selfTotalCost = parent;
    }
    if (_costItem && _costItem->type()==ProfileContext::FunctionCycle) {
        f = (TraceFunction*)_costItem;
        selfTotalCost = f->data();
    }

    double selfTotal = selfTotalCost->subCost(_eventType);

    // for all cost items there is a self cost
    _pure = _costItem ? _costItem->subCost(_eventType) : SubCost(0);
    double pure  = 100.0 * _pure / selfTotal;
    if (GlobalConfig::showPercentage()) {
        setText(2, QString("%1")
                .arg(pure, 0, 'f', GlobalConfig::percentPrecision()));
    }
    else if (_costItem)
        setText(2, _costItem->prettySubCost(_eventType));

    setIcon(2, QIcon(costPixmap(_eventType, _costItem, selfTotal, false)));

    if (!f) {
        setText(1, "-");
        setIcon(1, QIcon());
        return;
    }

    _sum = f->inclusive()->subCost(_eventType);
    double sum  = 100.0 * _sum / total;
    if (GlobalConfig::showPercentage()) {
        setText(1, QString("%1")
                .arg(sum, 0, 'f', GlobalConfig::percentPrecision()));
    }
    else
        setText(1, _sum.pretty());

    setIcon(1, QIcon(costPixmap(_eventType, f->inclusive(), total, false)));
}
Exemple #4
0
void InstrItem::updateCost()
{
    _pure = SubCost(0);
    _pure2 = SubCost(0);

    if (!_instr) return;
    if (_instrJump) return;

    ProfileCostArray* instrCost = _instrCall ?
                                      (ProfileCostArray*)_instrCall : (ProfileCostArray*)_instr;

    // do not show any cost inside of cycles
    if (_instrCall &&
        ((_instrCall->call()->inCycle()>0) ||
         (_instrCall->call()->isRecursion()))) {
        QString str;
        QPixmap p;

        QFontMetrics fm(font(1));
        p = QIcon::fromTheme(QStringLiteral("edit-undo")).pixmap(fm.height());
        if (p.isNull())
            str = QObject::tr("(cycle)");

        setText(1, str);
        setIcon(1, p);
        setText(2, str);
        setIcon(2, p);
        return;
    }

    ProfileCostArray* totalCost;
    if (GlobalConfig::showExpanded())
        totalCost = _instr->function()->inclusive();
    else
        totalCost = _instr->function()->data();

    EventType *et = _view->eventType();
    _pure = et ? instrCost->subCost(et) : SubCost(0);
    if (_pure == 0) {
        setText(1, QString());
        setIcon(1, QPixmap());
    }
    else {
        double total = totalCost->subCost(et);
        double pure  = 100.0 * _pure / total;

        if (GlobalConfig::showPercentage())
            setText(1, QStringLiteral("%1")
                    .arg(pure, 0, 'f', GlobalConfig::percentPrecision()));
        else
            setText(1, _pure.pretty());

        setIcon(1, costPixmap(et, instrCost, total, false));
    }

    EventType *ct2 = _view->eventType2();
    _pure2 = ct2 ? instrCost->subCost(ct2) : SubCost(0);
    if (_pure2 == 0) {
        setText(2, QString());
        setIcon(2, QPixmap());
    }
    else {
        double total = totalCost->subCost(ct2);
        double pure  = 100.0 * _pure2 / total;

        if (GlobalConfig::showPercentage())
            setText(2, QStringLiteral("%1")
                    .arg(pure, 0, 'f', GlobalConfig::percentPrecision()));
        else
            setText(2, _pure2.pretty());

        setIcon(2, costPixmap(ct2, instrCost, total, false));
    }
}
Exemple #5
0
void CallItem::updateCost()
{
    bool sameCycle = _shown->cycle() && (_active->cycle() == _shown->cycle());
    bool shownIsCycle = (_shown == _shown->cycle());
    bool selectedIsCycle = (_active == _active->cycle());
    if (_call->isRecursion()) sameCycle=true;

    QString cStr;
    if ((selectedIsCycle || shownIsCycle) && sameCycle)
	cStr = "-";
    else {
	_cc  = _call->callCount();
	if (_cc == 0)
	    cStr = QObject::tr("(active)");
	else
	    cStr = _call->prettyCallCount();
    }
    setText(2, cStr);

    ProfileCostArray* totalCost;
    if (GlobalConfig::showExpanded()) {
      if (_active->cycle())
        totalCost = _active->cycle()->inclusive();
      else
	totalCost = _active->inclusive();
    }
    else
	totalCost = _active->data();

    EventType* ct = _view->eventType();
    _sum = _call->subCost(ct);
    double total = totalCost->subCost(ct);

    if (total == 0.0) {
	QString str = "-";

	setText(0, str);
        setIcon(0, QPixmap());
    }
    else {
	double sum  = 100.0 * _sum / total;

	if (GlobalConfig::showPercentage())
	    setText(0, QString("%1")
		    .arg(sum, 0, 'f', GlobalConfig::percentPrecision()));
	else
	    setText(0, _call->prettySubCost(ct));

        setIcon(0, costPixmap(ct, _call, total, false));
    }

    // Cost Type 2
    EventType* ct2 = _view->eventType2();
    if (ct2) {
      _sum2 = _call->subCost(ct2);
      double total = totalCost->subCost(ct2);

      if (total == 0.0) {
	QString str = "-";

	setText(1, str);
        setIcon(1, QPixmap());
      }
      else {
	double sum  = 100.0 * _sum2 / total;
	
	if (GlobalConfig::showPercentage())
	  setText(1, QString("%1")
		  .arg(sum, 0, 'f', GlobalConfig::percentPrecision()));
	else
	  setText(1, _call->prettySubCost(ct2));

        setIcon(1, costPixmap(ct2, _call, total, false));
      }
    }

    QPixmap p;
    if (sameCycle && !selectedIsCycle && !shownIsCycle) {

	QString icon = "edit-undo";
#if 0 // TODO
	KIconLoader* loader = KIconLoader::global();
	p= loader->loadIcon(icon, KIconLoader::Small, 0,
			    KIconLoader::DefaultState, QStringList(), 0, true);
#endif
    }
    setIcon(2, p);
}