mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:57:36 +00:00
Kernel: Avoid unnecessary allocations in NetworkAdapter::for_each
This avoids allocations for initializing the Function<T> for the NetworkAdapter::for_each callback argument. Applying this patch decreases CPU utilization for NetworkTask from 40% to 28% when receiving TCP packets at a rate of 100Mbit/s.
This commit is contained in:
parent
76deda802d
commit
1bb20a255f
2 changed files with 11 additions and 9 deletions
|
@ -21,18 +21,11 @@ namespace Kernel {
|
||||||
|
|
||||||
static AK::Singleton<Lockable<HashTable<NetworkAdapter*>>> s_table;
|
static AK::Singleton<Lockable<HashTable<NetworkAdapter*>>> s_table;
|
||||||
|
|
||||||
static Lockable<HashTable<NetworkAdapter*>>& all_adapters()
|
Lockable<HashTable<NetworkAdapter*>>& NetworkAdapter::all_adapters()
|
||||||
{
|
{
|
||||||
return *s_table;
|
return *s_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkAdapter::for_each(Function<void(NetworkAdapter&)> callback)
|
|
||||||
{
|
|
||||||
Locker locker(all_adapters().lock());
|
|
||||||
for (auto& it : all_adapters().resource())
|
|
||||||
callback(*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
RefPtr<NetworkAdapter> NetworkAdapter::from_ipv4_address(const IPv4Address& address)
|
RefPtr<NetworkAdapter> NetworkAdapter::from_ipv4_address(const IPv4Address& address)
|
||||||
{
|
{
|
||||||
Locker locker(all_adapters().lock());
|
Locker locker(all_adapters().lock());
|
||||||
|
|
|
@ -25,7 +25,14 @@ class NetworkAdapter;
|
||||||
|
|
||||||
class NetworkAdapter : public RefCounted<NetworkAdapter> {
|
class NetworkAdapter : public RefCounted<NetworkAdapter> {
|
||||||
public:
|
public:
|
||||||
static void for_each(Function<void(NetworkAdapter&)>);
|
template<typename Callback>
|
||||||
|
static inline void for_each(Callback callback)
|
||||||
|
{
|
||||||
|
Locker locker(all_adapters().lock());
|
||||||
|
for (auto& it : all_adapters().resource())
|
||||||
|
callback(*it);
|
||||||
|
}
|
||||||
|
|
||||||
static RefPtr<NetworkAdapter> from_ipv4_address(const IPv4Address&);
|
static RefPtr<NetworkAdapter> from_ipv4_address(const IPv4Address&);
|
||||||
static RefPtr<NetworkAdapter> lookup_by_name(const StringView&);
|
static RefPtr<NetworkAdapter> lookup_by_name(const StringView&);
|
||||||
virtual ~NetworkAdapter();
|
virtual ~NetworkAdapter();
|
||||||
|
@ -70,6 +77,8 @@ protected:
|
||||||
void did_receive(ReadonlyBytes);
|
void did_receive(ReadonlyBytes);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static Lockable<HashTable<NetworkAdapter*>>& all_adapters();
|
||||||
|
|
||||||
MACAddress m_mac_address;
|
MACAddress m_mac_address;
|
||||||
IPv4Address m_ipv4_address;
|
IPv4Address m_ipv4_address;
|
||||||
IPv4Address m_ipv4_netmask;
|
IPv4Address m_ipv4_netmask;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue