PerfDriver::~PerfDriver() { while (mCounters != NULL) { PerfCounter *counter = mCounters; mCounters = counter->getNext(); delete counter; } }
PerfCounter *PerfDriver::findCounter(const Counter &counter) const { for (PerfCounter * perfCounter = mCounters; perfCounter != NULL; perfCounter = perfCounter->getNext()) { if (strcmp(perfCounter->getName(), counter.getType()) == 0) { return perfCounter; } } return NULL; }
int PerfDriver::writeCounters(mxml_node_t *root) const { int count = 0; for (PerfCounter * counter = mCounters; counter != NULL; counter = counter->getNext()) { mxml_node_t *node = mxmlNewElement(root, "counter"); mxmlElementSetAttr(node, "name", counter->getName()); ++count; } return count; }
bool PerfDriver::enable(PerfGroup *const group, Buffer *const buffer) const { for (PerfCounter * counter = mCounters; counter != NULL; counter = counter->getNext()) { if (counter->isEnabled() && (counter->getType() != TYPE_DERIVED)) { if (!group->add(buffer, counter->getKey(), counter->getType(), counter->getConfig(), counter->getCount(), counter->getCount() > 0 ? PERF_SAMPLE_TID | PERF_SAMPLE_IP : 0, counter->isPerCpu() ? PERF_GROUP_PER_CPU : 0)) { logg->logMessage("%s(%s:%i): PerfGroup::add failed", __FUNCTION__, __FILE__, __LINE__); return false; } } } return true; }
void PerfDriver::resetCounters() { for (PerfCounter * counter = mCounters; counter != NULL; counter = counter->getNext()) { counter->setEnabled(false); } }