Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ if(NOT HAS_CXX_RANGES)
endif()
check_cxx_symbol_exists("__cpp_lib_ranges_to_container" "version" HAS_CXX_RANGES_TO_CONTAINER)
if(NOT HAS_CXX_RANGES_TO_CONTAINER)
message(FATAL_ERROR "The compiler doesn't support std::ranges::to")
message(WARNING "std::ranges::to not available, using fallback for GCC 13 compatibility")
endif()
check_cxx_symbol_exists("__cpp_lib_string_contains" "version" HAS_CXX_STRING_CONTAINS)
if(NOT HAS_CXX_STRING_CONTAINS)
Expand Down
6 changes: 4 additions & 2 deletions src/btop_tools.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,8 +276,10 @@ namespace Tools {

//* Split <string> at all occurrences of <delim> and return as vector of strings
constexpr auto ssplit(std::string_view str, char delim = ' ') {
return str | std::views::split(delim) | std::views::filter([](auto&& range) { return !std::ranges::empty(range); }) |
std::ranges::to<std::vector<std::string>>();
auto _r = str | std::views::split(delim) | std::views::filter([](auto&& range) { return !std::ranges::empty(range); });
std::vector<std::string> _v;
for (auto&& _p : _r) _v.emplace_back(_p.begin(), _p.end());
return _v;
}

//* Put current thread to sleep for <ms> milliseconds
Expand Down
27 changes: 21 additions & 6 deletions src/linux/btop_collect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1027,10 +1027,10 @@ namespace Cpu {
auto buf = std::string { std::istreambuf_iterator<char> { stream }, {} };

if (buf.empty()) {
return std::views::iota(0, Shared::coreCount) | std::ranges::to<std::vector<std::int32_t>>();
std::vector<std::int32_t> _v; for(int _i=0; _i<(int)Shared::coreCount; ++_i) _v.push_back(_i); return _v;
}

return buf | std::views::split(',') | std::views::transform([](auto&& range) -> auto {
auto _rv = buf | std::views::split(',') | std::views::transform([](auto&& range) -> auto {
auto view = std::string_view { range };
auto dash = view.find('-');

Expand All @@ -1043,8 +1043,7 @@ namespace Cpu {
auto start = to_int(view.substr(0, dash));
auto end = to_int(view.substr(dash + 1));
return std::views::iota(start, end + 1);
}) |
std::views::join | std::ranges::to<std::vector<std::int32_t>>();
}) | std::views::join; std::vector<std::int32_t> _v; for(auto _i : _rv) _v.push_back(_i); return _v;
}

auto collect(bool no_update) -> cpu_info& {
Expand Down Expand Up @@ -1442,11 +1441,27 @@ namespace Gpu {
if constexpr(is_init) gpus_slice[i].supported_functions.mem_total = false;
if constexpr(is_init) gpus_slice[i].supported_functions.mem_used = false;
} else {
gpus_slice[i].mem_total = memory.total;
// Detect coherent UMA (e.g. GB10 Grace Blackwell):
// nvmlDeviceGetMemoryInfo returns NVML_SUCCESS with total == system MemTotal (~121GB).
// If total >= 90% of system RAM, treat as UMA and use MemAvailable instead.
unsigned long long sys_mem_total = 0, sys_mem_available = 0;
{
std::ifstream mf("/proc/meminfo");
std::string lbl; unsigned long long val;
while (mf >> lbl >> val) {
if (lbl == "MemTotal:") sys_mem_total = val * 1024;
else if (lbl == "MemAvailable:") sys_mem_available = val * 1024;
if (sys_mem_total > 0 && sys_mem_available > 0) break;
}
}
if (sys_mem_total > 0 && memory.total >= sys_mem_total * 9 / 10)
gpus_slice[i].mem_total = sys_mem_available;
else
gpus_slice[i].mem_total = memory.total;
gpus_slice[i].mem_used = memory.used;
//gpu.mem_free = memory.free;

auto used_percent = (long long)round((double)memory.used * 100.0 / (double)memory.total);
auto used_percent = (long long)round((double)gpus_slice[i].mem_used * 100.0 / (double)gpus_slice[i].mem_total);
gpus_slice[i].gpu_percent.at("gpu-vram-totals").push_back(used_percent);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
#include <vector>

auto main(int argc, const char* argv[]) -> int {
return btop_main(std::views::counted(std::next(argv), argc - 1) | std::ranges::to<std::vector<std::string_view>>());
auto _args = std::views::counted(std::next(argv), argc - 1); return btop_main(std::vector<std::string_view>(_args.begin(), _args.end()));
}
Loading