- Replaced pass-by-value std::string parameters with const std::string& or std::string_view to prevent SSO overallocations. - Refactored static mapping functions in UPower to return std::string_view instead of constructing std::string literals, enabling perfect cache locality. - Optimized string concatenation in hot loops (network IPs, inhibitor lists, sway window marks) by using std::string::append() and pre-reserving capacity instead of overloaded operator+ which produces temporary heap instances. These optimizations reduce high-frequency memory churn and overall heap fragmentation within the main rendering loops. Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
49 lines
1.5 KiB
C++
49 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <dbus-status-notifier-watcher.h>
|
|
#include <giomm.h>
|
|
#include <glibmm/refptr.h>
|
|
#include <json/json.h>
|
|
|
|
#include <tuple>
|
|
|
|
#include "bar.hpp"
|
|
#include "modules/sni/item.hpp"
|
|
|
|
namespace waybar::modules::SNI {
|
|
|
|
class Host {
|
|
public:
|
|
Host(const std::size_t id, const Json::Value&, const Bar&,
|
|
const std::function<void(std::unique_ptr<Item>&)>&,
|
|
const std::function<void(std::unique_ptr<Item>&)>&);
|
|
~Host();
|
|
|
|
private:
|
|
void busAcquired(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring);
|
|
void nameAppeared(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring,
|
|
const Glib::ustring&);
|
|
void nameVanished(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring);
|
|
static void proxyReady(GObject*, GAsyncResult*, gpointer);
|
|
static void registerHost(GObject*, GAsyncResult*, gpointer);
|
|
static void itemRegistered(SnWatcher*, const gchar*, gpointer);
|
|
static void itemUnregistered(SnWatcher*, const gchar*, gpointer);
|
|
|
|
std::tuple<std::string, std::string> getBusNameAndObjectPath(const std::string);
|
|
void addRegisteredItem(const std::string& service);
|
|
|
|
std::vector<std::unique_ptr<Item>> items_;
|
|
const std::string bus_name_;
|
|
const std::string object_path_;
|
|
std::size_t bus_name_id_;
|
|
std::size_t watcher_id_;
|
|
GCancellable* cancellable_ = nullptr;
|
|
SnWatcher* watcher_ = nullptr;
|
|
const Json::Value& config_;
|
|
const Bar& bar_;
|
|
const std::function<void(std::unique_ptr<Item>&)> on_add_;
|
|
const std::function<void(std::unique_ptr<Item>&)> on_remove_;
|
|
};
|
|
|
|
} // namespace waybar::modules::SNI
|