38 lines
1.2 KiB
C++
38 lines
1.2 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "PowerCounters.h"
|
|
|
|
#include <mach/mach.h>
|
|
|
|
class ProcessPower final : public BaseProfilerCount {
|
|
public:
|
|
ProcessPower()
|
|
: BaseProfilerCount("Process Power", "power", "Power utilization") {}
|
|
|
|
CountSample Sample() override {
|
|
CountSample result;
|
|
result.count = GetTaskEnergy();
|
|
result.number = 0;
|
|
result.isSampleNew = true;
|
|
return result;
|
|
}
|
|
|
|
private:
|
|
int64_t GetTaskEnergy() {
|
|
task_power_info_v2_data_t task_power_info;
|
|
mach_msg_type_number_t count = TASK_POWER_INFO_V2_COUNT;
|
|
kern_return_t kr = task_info(mach_task_self(), TASK_POWER_INFO_V2,
|
|
(task_info_t)&task_power_info, &count);
|
|
if (kr != KERN_SUCCESS) {
|
|
return 0;
|
|
}
|
|
|
|
// task_energy is in nanojoules. To be consistent with the Windows EMI
|
|
// API, return values in picowatt-hour.
|
|
return task_power_info.task_energy / 3.6;
|
|
}
|
|
};
|
|
|
|
PowerCounters::PowerCounters() { (void)mCounters.append(new ProcessPower()); }
|