From 8e4bff4cab0ddac6060645b0715210484d02ff40 Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Wed, 30 Aug 2017 08:25:59 +0000 Subject: Initial file dump from open source release --- tools/gator/daemon/CPUFreqDriver.cpp | 58 ++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 tools/gator/daemon/CPUFreqDriver.cpp (limited to 'tools/gator/daemon/CPUFreqDriver.cpp') diff --git a/tools/gator/daemon/CPUFreqDriver.cpp b/tools/gator/daemon/CPUFreqDriver.cpp new file mode 100644 index 00000000..41f9d6f2 --- /dev/null +++ b/tools/gator/daemon/CPUFreqDriver.cpp @@ -0,0 +1,58 @@ +/** + * Copyright (C) ARM Limited 2013-2014. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "CPUFreqDriver.h" + +#include "Buffer.h" +#include "DriverSource.h" +#include "Logging.h" +#include "SessionData.h" + +CPUFreqDriver::CPUFreqDriver() : mPrev() { +} + +CPUFreqDriver::~CPUFreqDriver() { +} + +void CPUFreqDriver::readEvents(mxml_node_t *const) { + // Only for use with perf + if (!gSessionData->perf.isSetup()) { + return; + } + + setCounters(new DriverCounter(getCounters(), strdup("Linux_power_cpu_freq"))); +} + +void CPUFreqDriver::read(Buffer *const buffer) { + char buf[64]; + const DriverCounter *const counter = getCounters(); + if ((counter == NULL) || !counter->isEnabled()) { + return; + } + + const int key = getCounters()->getKey(); + bool resetCores = false; + for (int i = 0; i < gSessionData->mCores; ++i) { + snprintf(buf, sizeof(buf), "/sys/devices/system/cpu/cpu%i/cpufreq/cpuinfo_cur_freq", i); + int64_t freq; + if (DriverSource::readInt64Driver(buf, &freq) != 0) { + freq = 0; + } + if (mPrev[i] != freq) { + mPrev[i] = freq; + // Change cores + buffer->event64(2, i); + resetCores = true; + buffer->event64(key, 1000*freq); + } + } + if (resetCores) { + // Revert cores, UserSpaceSource is all on core 0 + buffer->event64(2, 0); + } +} -- cgit v1.3.1