mirror of https://github.com/aristocratos/btop.git
Added btop_platform.cpp, moved btop_linux.cpp to btop_linux.hpp and updated robin_hood.h
This commit is contained in:
parent
b2e0707c32
commit
03f64c22de
17
Makefile
17
Makefile
|
@ -1,6 +1,6 @@
|
|||
#* Btop++ makefile v1.0
|
||||
|
||||
BANNER = \n \033[38;5;196m██████\033[38;5;240m╗ \033[38;5;196m████████\033[38;5;240m╗ \033[38;5;196m██████\033[38;5;240m╗ \033[38;5;196m██████\033[38;5;240m╗\n \033[38;5;160m██\033[38;5;239m╔══\033[38;5;160m██\033[38;5;239m╗╚══\033[38;5;160m██\033[38;5;239m╔══╝\033[38;5;160m██\033[38;5;239m╔═══\033[38;5;160m██\033[38;5;239m╗\033[38;5;160m██\033[38;5;239m╔══\033[38;5;160m██\033[38;5;239m╗ \033[38;5;160m██\033[38;5;239m╗ \033[38;5;160m██\033[38;5;239m╗\n \033[38;5;124m██████\033[38;5;238m╔╝ \033[38;5;124m██\033[38;5;238m║ \033[38;5;124m██\033[38;5;238m║ \033[38;5;124m██\033[38;5;238m║\033[38;5;124m██████\033[38;5;238m╔╝ \033[38;5;124m██████\033[38;5;238m╗\033[38;5;124m██████\033[38;5;238m╗\n \033[38;5;88m██\033[38;5;237m╔══\033[38;5;88m██\033[38;5;237m╗ \033[38;5;88m██\033[38;5;237m║ \033[38;5;88m██\033[38;5;237m║ \033[38;5;88m██\033[38;5;237m║\033[38;5;88m██\033[38;5;237m╔═══╝ ╚═\033[38;5;88m██\033[38;5;237m╔═╝╚═\033[38;5;88m██\033[38;5;237m╔═╝\n \033[38;5;52m██████\033[38;5;236m╔╝ \033[38;5;52m██\033[38;5;236m║ ╚\033[38;5;52m██████\033[38;5;236m╔╝\033[38;5;52m██\033[38;5;236m║ ╚═╝ ╚═╝\n \033[38;5;235m╚═════╝ ╚═╝ ╚═════╝ ╚═╝
|
||||
BANNER = \n \033[38;5;196m██████\033[38;5;240m╗ \033[38;5;196m████████\033[38;5;240m╗ \033[38;5;196m██████\033[38;5;240m╗ \033[38;5;196m██████\033[38;5;240m╗\n \033[38;5;160m██\033[38;5;239m╔══\033[38;5;160m██\033[38;5;239m╗╚══\033[38;5;160m██\033[38;5;239m╔══╝\033[38;5;160m██\033[38;5;239m╔═══\033[38;5;160m██\033[38;5;239m╗\033[38;5;160m██\033[38;5;239m╔══\033[38;5;160m██\033[38;5;239m╗ \033[38;5;160m██\033[38;5;239m╗ \033[38;5;160m██\033[38;5;239m╗\n \033[38;5;124m██████\033[38;5;238m╔╝ \033[38;5;124m██\033[38;5;238m║ \033[38;5;124m██\033[38;5;238m║ \033[38;5;124m██\033[38;5;238m║\033[38;5;124m██████\033[38;5;238m╔╝ \033[38;5;124m██████\033[38;5;238m╗\033[38;5;124m██████\033[38;5;238m╗\n \033[38;5;88m██\033[38;5;237m╔══\033[38;5;88m██\033[38;5;237m╗ \033[38;5;88m██\033[38;5;237m║ \033[38;5;88m██\033[38;5;237m║ \033[38;5;88m██\033[38;5;237m║\033[38;5;88m██\033[38;5;237m╔═══╝ ╚═\033[38;5;88m██\033[38;5;237m╔═╝╚═\033[38;5;88m██\033[38;5;237m╔═╝\n \033[38;5;52m██████\033[38;5;236m╔╝ \033[38;5;52m██\033[38;5;236m║ ╚\033[38;5;52m██████\033[38;5;236m╔╝\033[38;5;52m██\033[38;5;236m║ ╚═╝ ╚═╝\n \033[38;5;235m╚═════╝ ╚═╝ ╚═════╝ ╚═╝ \033[1;3;38;5;240mMakefile v1.0\033[0m
|
||||
|
||||
BTOP_VERSION = $(shell head -n100 src/btop.cpp 2>/dev/null | grep "Version =" | cut -f2 -d"\"" || echo " unknown")
|
||||
TIMESTAMP = $(shell date +%s 2>/dev/null || echo "0")
|
||||
|
@ -22,16 +22,16 @@ ifneq ($(CXX),g++-10)
|
|||
endif
|
||||
|
||||
#? Only enable fcf-protection if on x86_64
|
||||
ARCH = $(shell uname -p ||true)
|
||||
ARCH = $(shell uname -p || echo unknown)
|
||||
ifeq ($(ARCH),x86_64)
|
||||
ADDFLAGS = -fcf-protection
|
||||
endif
|
||||
ifeq ($(ARCH),unknown)
|
||||
ARCH = $(shell uname -m ||true)
|
||||
ARCH = $(shell uname -m || echo unknown)
|
||||
endif
|
||||
PLATFORM = $(shell uname -s ||true)
|
||||
PLATFORM = $(shell uname -s || echo unknown)
|
||||
|
||||
#? Use all CPU cores (will only be set if using Make >=4.3)
|
||||
#? Use all CPU cores (will only be set if using Make 4.3+)
|
||||
MAKEFLAGS := --jobs=$(shell getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1)
|
||||
|
||||
#? The Directories, Source, Includes, Objects and Binary
|
||||
|
@ -62,13 +62,12 @@ all: msg directories btop
|
|||
|
||||
msg:
|
||||
@printf " $(BANNER)\n"
|
||||
@printf "\033[1;97mCompiler : \033[0m$(CXX) ($(CXX_VERSION))\n"
|
||||
@printf "\033[1;97mCXX : \033[0m$(CXX) ($(CXX_VERSION))\n"
|
||||
@printf "\033[1;97mREQFLAGS : \033[0m$(REQFLAGS)\n"
|
||||
@printf "\033[1;97mWARNFLAGS : \033[0m$(WARNFLAGS)\n"
|
||||
@printf "\033[1;97mOPTFLAGS : \033[0m$(OPTFLAGS)\n"
|
||||
@printf "\033[1;97mLDCXXFLAGS : \033[0m$(LDCXXFLAGS)\n"
|
||||
|
||||
@printf "\n\033[1;92mBuilding btop++ v$(BTOP_VERSION) for $(PLATFORM) ($(ARCH))\033[0m\n"
|
||||
@printf "\n\033[1;92mBuilding btop++ v$(BTOP_VERSION) on $(PLATFORM) ($(ARCH))\033[0m\n"
|
||||
|
||||
help:
|
||||
@printf "\033[1;97mbtop++ makefile\033[0m\n"
|
||||
|
@ -135,7 +134,7 @@ btop: $(OBJECTS)
|
|||
#? Compile
|
||||
$(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
|
||||
@sleep 0.1 2>/dev/null || true
|
||||
@printf "\033[1;97mCompiling $< \n"
|
||||
@printf "\033[1;97mCompiling $<\033[0m\n"
|
||||
@$(CXX) $(CXXFLAGS) $(INC) -c -o $@ $<
|
||||
@$(CXX) $(CXXFLAGS) $(INC) -MM $(SRCDIR)/$*.$(SRCEXT) > $(BUILDDIR)/$*.$(DEPEXT) >/dev/null
|
||||
@cp -f $(BUILDDIR)/$*.$(DEPEXT) $(BUILDDIR)/$*.$(DEPEXT).tmp
|
||||
|
|
|
@ -127,8 +127,8 @@ Options menu.
|
|||
|
||||
#### Manual compilation and installation
|
||||
|
||||
Needs GCC 10 or higher, (GCC 11 or above strongly recommended for better CPU efficiency in compiled binary).
|
||||
The makefile also needs GNU coreutils and sed installed.
|
||||
Needs GCC 10 or higher, (GCC 11 or above strongly recommended for better CPU efficiency in the compiled binary).
|
||||
The makefile also needs GNU coreutils and sed (should already be installed on any modern distribution).
|
||||
|
||||
>Install dependencies (example for Ubuntu 21.04 Hirsute)
|
||||
|
||||
|
@ -142,7 +142,7 @@ sudo apt install coreutils sed git build-essential gcc-11 g++-11
|
|||
``` bash
|
||||
git clone https://github.com/aristocratos/btop.git
|
||||
cd btop
|
||||
# use "make -j X" where X is threads, to manually set number of threads, the makefile will use all available cores by default
|
||||
# use "make -j X" where X is threads, to manually set number of threads, the makefile will use all available cores by default on Make 4.3+
|
||||
make
|
||||
```
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
// see https://semver.org/
|
||||
#define ROBIN_HOOD_VERSION_MAJOR 3 // for incompatible API changes
|
||||
#define ROBIN_HOOD_VERSION_MINOR 11 // for adding functionality in a backwards-compatible manner
|
||||
#define ROBIN_HOOD_VERSION_PATCH 2 // for backwards-compatible bug fixes
|
||||
#define ROBIN_HOOD_VERSION_PATCH 3 // for backwards-compatible bug fixes
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdlib>
|
||||
|
@ -2427,15 +2427,14 @@ private:
|
|||
<< (static_cast<double>(mNumElements) * 100.0 /
|
||||
(static_cast<double>(mMask) + 1)))
|
||||
|
||||
nextHashMultiplier();
|
||||
if (mNumElements * 2 < calcMaxNumElementsAllowed(mMask + 1)) {
|
||||
// we have to resize, even though there would still be plenty of space left!
|
||||
// Try to rehash instead. Delete freed memory so we don't steadyily increase mem in case
|
||||
// we have to rehash a few times
|
||||
nextHashMultiplier();
|
||||
rehashPowerOfTwo(mMask + 1, true);
|
||||
} else {
|
||||
// Each resize use a different hash so we don't so easily overflow.
|
||||
// Make sure we only have odd numbers, so that the multiplication is reversible!
|
||||
// we've reached the capacity of the map, so the hash seems to work nice. Keep using it.
|
||||
rehashPowerOfTwo((mMask + 1) * 2, false);
|
||||
}
|
||||
return true;
|
||||
|
|
39
src/btop.cpp
39
src/btop.cpp
|
@ -38,23 +38,6 @@ tab-size = 4
|
|||
#include <btop_draw.hpp>
|
||||
#include <btop_menu.hpp>
|
||||
|
||||
#if defined(__linux__)
|
||||
#define LINUX
|
||||
#elif defined(__unix__) or not defined(__APPLE__) and defined(__MACH__)
|
||||
#include <sys/param.h>
|
||||
#if defined(BSD)
|
||||
#error BSD support not yet implemented!
|
||||
#endif
|
||||
#elif defined(__APPLE__) and defined(__MACH__)
|
||||
#include <TargetConditionals.h>
|
||||
#if TARGET_OS_MAC == 1
|
||||
#define OSX
|
||||
#error OSX support not yet implemented!
|
||||
#endif
|
||||
#else
|
||||
#error Platform not supported!
|
||||
#endif
|
||||
|
||||
using std::string, std::string_view, std::vector, std::atomic, std::endl, std::cout, std::min, std::flush, std::endl;
|
||||
using std::string_literals::operator""s, std::to_string, std::future, std::async, std::bitset, std::future_status;
|
||||
namespace fs = std::filesystem;
|
||||
|
@ -331,7 +314,7 @@ bool update_clock() {
|
|||
out.clear();
|
||||
|
||||
if (new_clock.size() != clock_len) {
|
||||
out = Mv::to(y, x+(width / 2)-(clock_len / 2)) + Fx::ub + Theme::c("cpu_box") + Symbols::h_line * clock_len;
|
||||
if (not Global::resized) out = Mv::to(y, x+(width / 2)-(clock_len / 2)) + Fx::ub + Theme::c("cpu_box") + Symbols::h_line * clock_len;
|
||||
clock_len = new_clock.size();
|
||||
}
|
||||
|
||||
|
@ -647,7 +630,7 @@ namespace Runner {
|
|||
else if (box == "clock") {
|
||||
cout << Term::sync_start << Global::clock << Term::sync_end << flush;
|
||||
}
|
||||
else if (box.empty() and Config::current_boxes.empty()) {
|
||||
else if (Config::current_boxes.empty()) {
|
||||
cout << Term::sync_start << Term::clear + Mv::to(10, 10) << "No boxes shown!" << Term::sync_end << flush;
|
||||
}
|
||||
else {
|
||||
|
@ -726,15 +709,15 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
}
|
||||
//? Try to find global btop theme path relative to binary path
|
||||
#if defined(LINUX)
|
||||
#if defined(__linux__)
|
||||
{ std::error_code ec;
|
||||
Global::self_path = fs::read_symlink("/proc/self/exe", ec).remove_filename();
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
if (std::error_code ec; not Global::self_path.empty()) {
|
||||
Theme::theme_dir = fs::canonical(Global::self_path / "../share/btop/themes", ec);
|
||||
if (ec or not fs::is_directory(Theme::theme_dir) or access(Theme::theme_dir.c_str(), R_OK) == -1) Theme::theme_dir.clear();
|
||||
}
|
||||
Theme::theme_dir = fs::canonical(Global::self_path / "../share/btop/themes", ec);
|
||||
if (ec or not fs::is_directory(Theme::theme_dir) or access(Theme::theme_dir.c_str(), R_OK) == -1) Theme::theme_dir.clear();
|
||||
}
|
||||
//? If relative path failed, check two most common absolute paths
|
||||
if (Theme::theme_dir.empty()) {
|
||||
for (auto theme_path : {"/usr/local/share/btop/themes", "/usr/share/btop/themes"}) {
|
||||
|
@ -785,7 +768,7 @@ int main(int argc, char **argv) {
|
|||
if (not found and Global::utf_force)
|
||||
Logger::warning("No UTF-8 locale detected! Forcing start with --utf-force argument.");
|
||||
else if (not found) {
|
||||
Global::exit_error_msg = "No UTF-8 locale detected! Use --utf-force argument to start anyway.";
|
||||
Global::exit_error_msg = "No UTF-8 locale detected!\nUse --utf-force argument to force start if you're sure your terminal can handle it.";
|
||||
exit(1);
|
||||
}
|
||||
else
|
||||
|
@ -868,15 +851,15 @@ int main(int argc, char **argv) {
|
|||
|
||||
//? Trigger secondary thread to redraw if terminal has been resized
|
||||
if (Global::resized) {
|
||||
Global::resized = false;
|
||||
Draw::calcSizes();
|
||||
update_clock();
|
||||
Global::resized = false;
|
||||
Runner::run("all", true);
|
||||
atomic_wait(Runner::active);
|
||||
}
|
||||
|
||||
//? Update clock if needed
|
||||
if (update_clock()) {
|
||||
if (update_clock() and not Menu::active) {
|
||||
Runner::run("clock");
|
||||
}
|
||||
|
||||
|
@ -891,7 +874,7 @@ int main(int argc, char **argv) {
|
|||
for (auto current_time = time_ms(); current_time < future_time; current_time = time_ms()) {
|
||||
|
||||
//? Check for external clock changes and for changes to the update timer
|
||||
if (update_ms != (uint64_t)Config::getI("update_ms")) {
|
||||
if (std::cmp_not_equal(update_ms, Config::getI("update_ms"))) {
|
||||
update_ms = Config::getI("update_ms");
|
||||
future_time = time_ms() + update_ms;
|
||||
}
|
||||
|
|
|
@ -612,10 +612,11 @@ namespace Mem {
|
|||
disk_meters_free[name] = Draw::Meter{disk_meter, "free"};
|
||||
}
|
||||
}
|
||||
}
|
||||
out += Mv::to(y, x + width - 6) + Fx::ub + Theme::c("mem_box") + Symbols::title_left + (io_mode ? Fx::b : "") + Theme::c("hi_fg")
|
||||
out += Mv::to(y, x + width - 6) + Fx::ub + Theme::c("mem_box") + Symbols::title_left + (io_mode ? Fx::b : "") + Theme::c("hi_fg")
|
||||
+ 'i' + Theme::c("title") + 'o' + Fx::ub + Theme::c("mem_box") + Symbols::title_right;
|
||||
Input::mouse_mappings["i"] = {y, x + width - 5, 1, 2};
|
||||
Input::mouse_mappings["i"] = {y, x + width - 5, 1, 2};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//? Mem and swap
|
||||
|
|
|
@ -250,10 +250,14 @@ namespace Input {
|
|||
Config::set("proc_filter", ""s);
|
||||
|
||||
else if (key == "ö") {
|
||||
if (Global::overlay.empty())
|
||||
if (Global::overlay.empty()) {
|
||||
Global::overlay = Mv::to(Term::height / 2, Term::width / 2) + "\x1b[1;32mTESTING";
|
||||
else
|
||||
Menu::active = true;
|
||||
}
|
||||
else {
|
||||
Global::overlay.clear();
|
||||
Menu::active = false;
|
||||
}
|
||||
Runner::run("all", true, true);
|
||||
}
|
||||
else if (key.starts_with("mouse_")) {
|
||||
|
@ -387,6 +391,11 @@ namespace Input {
|
|||
if (key == "i") {
|
||||
Config::flip("io_mode");
|
||||
}
|
||||
if (key == "d") {
|
||||
Config::flip("show_disks");
|
||||
no_update = false;
|
||||
Draw::calcSizes();
|
||||
}
|
||||
else keep_going = true;
|
||||
|
||||
if (not keep_going) {
|
||||
|
|
|
@ -16,8 +16,6 @@ indent = tab
|
|||
tab-size = 4
|
||||
*/
|
||||
|
||||
#if defined(__linux__)
|
||||
|
||||
#include <fstream>
|
||||
#include <ranges>
|
||||
#include <cmath>
|
||||
|
@ -551,7 +549,7 @@ namespace Mem {
|
|||
mem_info current_mem {};
|
||||
|
||||
auto collect(const bool no_update) -> mem_info& {
|
||||
if (Runner::stopping or no_update) return current_mem;
|
||||
if (Runner::stopping or (no_update and not current_mem.percent.at("used").empty())) return current_mem;
|
||||
auto& show_swap = Config::getB("show_swap");
|
||||
auto& swap_disk = Config::getB("swap_disk");
|
||||
auto& show_disks = Config::getB("show_disks");
|
||||
|
@ -1466,6 +1464,4 @@ namespace Tools {
|
|||
pread.close();
|
||||
return stod(upstr);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/* Copyright 2021 Aristocratos (jakob@qvantnet.com)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
indent = tab
|
||||
tab-size = 4
|
||||
*/
|
||||
|
||||
|
||||
#if defined(__linux__)
|
||||
#include <btop_linux.hpp>
|
||||
#elif defined(__unix__) or not defined(__APPLE__) and defined(__MACH__)
|
||||
#include <sys/param.h>
|
||||
#if defined(__FreeBSD__)
|
||||
#error FreeBSD support not yet implemented!
|
||||
//#include <btop_freebsd.hpp>
|
||||
#endif
|
||||
#elif defined(__APPLE__) and defined(__MACH__)
|
||||
#include <TargetConditionals.h>
|
||||
#if TARGET_OS_MAC == 1
|
||||
#error OSX support not yet implemented!
|
||||
//#include <btop_osx.hpp>
|
||||
#endif
|
||||
#else
|
||||
#error Platform not supported!
|
||||
#endif
|
Loading…
Reference in New Issue