/* XMRig * Copyright 2010 Jeff Garzik * Copyright 2012-2014 pooler * Copyright 2014 Lucas Jones * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2017-2018 XMR-Stak , * Copyright 2018-2019 SChernykh * Copyright 2016-2019 XMRig , * * This program 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, either version 3 of the License, or * (at your option) any later version. * * 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. If not, see . */ #include #include "backend/cpu/Cpu.h" #include "rapidjson/document.h" #if defined(XMRIG_FEATURE_HWLOC) # include "backend/cpu/platform/HwlocCpuInfo.h" #elif defined(XMRIG_FEATURE_LIBCPUID) # include "backend/cpu/platform/AdvancedCpuInfo.h" #else # include "backend/cpu/platform/BasicCpuInfo.h" #endif static xmrig::ICpuInfo *cpuInfo = nullptr; xmrig::ICpuInfo *xmrig::Cpu::info() { assert(cpuInfo != nullptr); return cpuInfo; } rapidjson::Value xmrig::Cpu::toJSON(rapidjson::Document &doc) { using namespace rapidjson; auto &allocator = doc.GetAllocator(); ICpuInfo *i = info(); Value cpu(kObjectType); Assembly assembly(i->assembly()); cpu.AddMember("brand", StringRef(i->brand()), allocator); cpu.AddMember("aes", i->hasAES(), allocator); cpu.AddMember("avx2", i->hasAVX2(), allocator); cpu.AddMember("x64", i->isX64(), allocator); cpu.AddMember("l2", static_cast(i->L2()), allocator); cpu.AddMember("l3", static_cast(i->L3()), allocator); cpu.AddMember("cores", static_cast(i->cores()), allocator); cpu.AddMember("threads", static_cast(i->threads()), allocator); cpu.AddMember("packages", static_cast(i->packages()), allocator); cpu.AddMember("nodes", static_cast(i->nodes()), allocator); cpu.AddMember("backend", StringRef(i->backend()), allocator); # ifdef XMRIG_FEATURE_ASM cpu.AddMember("assembly", StringRef(assembly.toString()), allocator); # else cpu.AddMember("assembly", "none", allocator); # endif return cpu; } void xmrig::Cpu::init() { assert(cpuInfo == nullptr); # if defined(XMRIG_FEATURE_HWLOC) cpuInfo = new HwlocCpuInfo(); # elif defined(XMRIG_FEATURE_LIBCPUID) cpuInfo = new AdvancedCpuInfo(); # else cpuInfo = new BasicCpuInfo(); # endif } void xmrig::Cpu::release() { assert(cpuInfo != nullptr); delete cpuInfo; cpuInfo = nullptr; }