2 * Copyright (C) ARM Limited 2013-2014. All rights reserved.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
12 #include "SessionData.h"
14 DriverCounter::DriverCounter(DriverCounter *const next, const char *const name) : mNext(next), mName(name), mKey(getEventKey()), mEnabled(false) {
17 DriverCounter::~DriverCounter() {
21 Driver *Driver::head = NULL;
23 Driver::Driver() : next(head) {
27 SimpleDriver::~SimpleDriver() {
28 DriverCounter *counters = mCounters;
29 while (counters != NULL) {
30 DriverCounter *counter = counters;
31 counters = counter->getNext();
36 DriverCounter *SimpleDriver::findCounter(const Counter &counter) const {
37 for (DriverCounter *driverCounter = mCounters; driverCounter != NULL; driverCounter = driverCounter->getNext()) {
38 if (strcmp(driverCounter->getName(), counter.getType()) == 0) {
46 bool SimpleDriver::claimCounter(const Counter &counter) const {
47 return findCounter(counter) != NULL;
50 bool SimpleDriver::countersEnabled() const {
51 for (DriverCounter *counter = mCounters; counter != NULL; counter = counter->getNext()) {
52 if (counter->isEnabled()) {
59 void SimpleDriver::resetCounters() {
60 for (DriverCounter *counter = mCounters; counter != NULL; counter = counter->getNext()) {
61 counter->setEnabled(false);
65 void SimpleDriver::setupCounter(Counter &counter) {
66 DriverCounter *const driverCounter = findCounter(counter);
67 if (driverCounter == NULL) {
68 counter.setEnabled(false);
71 driverCounter->setEnabled(true);
72 counter.setKey(driverCounter->getKey());
75 int SimpleDriver::writeCounters(mxml_node_t *root) const {
77 for (DriverCounter *counter = mCounters; counter != NULL; counter = counter->getNext()) {
78 mxml_node_t *node = mxmlNewElement(root, "counter");
79 mxmlElementSetAttr(node, "name", counter->getName());
86 PolledDriver::~PolledDriver() {
89 void PolledDriver::read(Buffer *const buffer) {
90 for (DriverCounter *counter = getCounters(); counter != NULL; counter = counter->getNext()) {
91 if (!counter->isEnabled()) {
94 buffer->event64(counter->getKey(), counter->read());