/* * Copyright 2010, Intel Corporation * * This file is part of PowerTOP * * This program file is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License * along with this program in a file named COPYING; if not, write to the * Free Software Foundation, Inc, * 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * or just google for it. * * Authors: * Arjan van de Ven */ #include "processdevice.h" #include "../parameters/parameters.h" #include vector all_proc_devices; device_consumer::device_consumer(class device *dev) : power_consumer() { device = dev; power = device->power_usage(&all_results, &all_parameters); prio = dev->grouping_prio(); } const char * device_consumer::description(void) { sprintf(str, "%s", device->human_name()); return str; } double device_consumer::Witts(void) { return power; } static void add_device(class device *device) { class device_consumer *dev; unsigned int i; /* first check if we want to be shown at all */ if (device->show_in_list() == 0) return; /* then check if a device with the same underlying object is already registered */ for (i = 0; i < all_proc_devices.size(); i++) { class device_consumer *cdev; cdev = all_proc_devices[i]; if (device->real_path[0] != 0 && strcmp(cdev->device->real_path, device->real_path) == 0) { /* we have a device with the same underlying object */ /* aggregate the power */ cdev->power += device->power_usage(&all_results, &all_parameters); if (cdev->prio < device->grouping_prio()) { cdev->device = device; cdev->prio = device->grouping_prio(); } return; } } dev = new class device_consumer(device); all_power.push_back(dev); all_proc_devices.push_back(dev); } void all_devices_to_all_power(void) { unsigned int i; for (i = 0; i < all_devices.size(); i++) add_device(all_devices[i]); } void clear_proc_devices(void) { std::vector::iterator it = all_proc_devices.begin(); while (it != all_proc_devices.end()) { delete *it; it = all_proc_devices.erase(it); } }