118d3e65eSAxel Dörfler /* 2*b250dfdfSAxel Dörfler * Copyright 2008-2010, Axel Dörfler, axeld@pinc-software.de. 318d3e65eSAxel Dörfler * Distributed under the terms of the MIT License. 418d3e65eSAxel Dörfler */ 518d3e65eSAxel Dörfler 618d3e65eSAxel Dörfler 718d3e65eSAxel Dörfler #include "SystemInfo.h" 818d3e65eSAxel Dörfler 9*b250dfdfSAxel Dörfler #include <NetworkInterface.h> 10*b250dfdfSAxel Dörfler #include <NetworkRoster.h> 11*b250dfdfSAxel Dörfler 12*b250dfdfSAxel Dörfler #include "SystemInfoHandler.h" 133a4a2141SAxel Dörfler 1418d3e65eSAxel Dörfler 1574158bb4SFrançois Revol SystemInfo::SystemInfo(SystemInfoHandler* handler) 1618d3e65eSAxel Dörfler : 173a4a2141SAxel Dörfler fTime(system_time()), 1874158bb4SFrançois Revol fRetrievedNetwork(false), 19e034d18fSFrançois Revol fRunningApps(0), 20e034d18fSFrançois Revol fClipboardSize(0), 21dc1ffc79SFrançois Revol fClipboardTextSize(0), 22dc1ffc79SFrançois Revol fMediaNodes(0), 23dc1ffc79SFrançois Revol fMediaConnections(0), 24dc1ffc79SFrançois Revol fMediaBuffers(0) 2518d3e65eSAxel Dörfler { 2618d3e65eSAxel Dörfler get_system_info(&fSystemInfo); 27dc79961eSAxel Dörfler get_system_info_etc(B_MEMORY_INFO, &fMemoryInfo, 28dc79961eSAxel Dörfler sizeof(system_memory_info)); 2974158bb4SFrançois Revol 306f6ba875SAxel Dörfler if (handler != NULL) { 3174158bb4SFrançois Revol fRunningApps = handler->RunningApps(); 32e034d18fSFrançois Revol fClipboardSize = handler->ClipboardSize(); 33e034d18fSFrançois Revol fClipboardTextSize = handler->ClipboardTextSize(); 34dc1ffc79SFrançois Revol fMediaNodes = handler->MediaNodes(); 35dc1ffc79SFrançois Revol fMediaConnections = handler->MediaConnections(); 36dc1ffc79SFrançois Revol fMediaBuffers = handler->MediaBuffers(); 3774158bb4SFrançois Revol } 3818d3e65eSAxel Dörfler } 3918d3e65eSAxel Dörfler 4018d3e65eSAxel Dörfler 4118d3e65eSAxel Dörfler SystemInfo::~SystemInfo() 4218d3e65eSAxel Dörfler { 4318d3e65eSAxel Dörfler } 4418d3e65eSAxel Dörfler 4518d3e65eSAxel Dörfler 4618d3e65eSAxel Dörfler uint64 4718d3e65eSAxel Dörfler SystemInfo::CachedMemory() const 4818d3e65eSAxel Dörfler { 49cbd4bc95SFrançois Revol #ifdef __HAIKU__ 50706b0852SAxel Dörfler return (uint64)fSystemInfo.cached_pages * B_PAGE_SIZE; 51cbd4bc95SFrançois Revol #else 52cbd4bc95SFrançois Revol return 0LL; 53cbd4bc95SFrançois Revol #endif 5418d3e65eSAxel Dörfler } 5518d3e65eSAxel Dörfler 5618d3e65eSAxel Dörfler 5718d3e65eSAxel Dörfler uint64 5818d3e65eSAxel Dörfler SystemInfo::UsedMemory() const 5918d3e65eSAxel Dörfler { 60706b0852SAxel Dörfler return (uint64)fSystemInfo.used_pages * B_PAGE_SIZE; 6118d3e65eSAxel Dörfler } 6218d3e65eSAxel Dörfler 6318d3e65eSAxel Dörfler 6418d3e65eSAxel Dörfler uint64 6518d3e65eSAxel Dörfler SystemInfo::MaxMemory() const 6618d3e65eSAxel Dörfler { 67706b0852SAxel Dörfler return (uint64)fSystemInfo.max_pages * B_PAGE_SIZE; 6818d3e65eSAxel Dörfler } 6918d3e65eSAxel Dörfler 7018d3e65eSAxel Dörfler 7118d3e65eSAxel Dörfler uint32 72dc79961eSAxel Dörfler SystemInfo::PageFaults() const 73dc79961eSAxel Dörfler { 74dc79961eSAxel Dörfler return fMemoryInfo.page_faults; 75dc79961eSAxel Dörfler } 76dc79961eSAxel Dörfler 77dc79961eSAxel Dörfler 78dc79961eSAxel Dörfler uint64 79dc79961eSAxel Dörfler SystemInfo::UsedSwapSpace() const 80dc79961eSAxel Dörfler { 81dc79961eSAxel Dörfler return fMemoryInfo.max_swap_space - fMemoryInfo.free_swap_space; 82dc79961eSAxel Dörfler } 83dc79961eSAxel Dörfler 84dc79961eSAxel Dörfler 85dc79961eSAxel Dörfler uint64 86dc79961eSAxel Dörfler SystemInfo::MaxSwapSpace() const 87dc79961eSAxel Dörfler { 88dc79961eSAxel Dörfler return fMemoryInfo.max_swap_space; 89dc79961eSAxel Dörfler } 90dc79961eSAxel Dörfler 91dc79961eSAxel Dörfler 92dc79961eSAxel Dörfler uint32 9303aaa278SFrançois Revol SystemInfo::UsedSemaphores() const 9403aaa278SFrançois Revol { 9503aaa278SFrançois Revol return fSystemInfo.used_sems; 9603aaa278SFrançois Revol } 9703aaa278SFrançois Revol 9803aaa278SFrançois Revol 9903aaa278SFrançois Revol uint32 10003aaa278SFrançois Revol SystemInfo::MaxSemaphores() const 10103aaa278SFrançois Revol { 10203aaa278SFrançois Revol return fSystemInfo.max_sems; 10303aaa278SFrançois Revol } 10403aaa278SFrançois Revol 10503aaa278SFrançois Revol 10603aaa278SFrançois Revol uint32 10703aaa278SFrançois Revol SystemInfo::UsedPorts() const 10803aaa278SFrançois Revol { 10903aaa278SFrançois Revol return fSystemInfo.used_ports; 11003aaa278SFrançois Revol } 11103aaa278SFrançois Revol 11203aaa278SFrançois Revol 11303aaa278SFrançois Revol uint32 11403aaa278SFrançois Revol SystemInfo::MaxPorts() const 11503aaa278SFrançois Revol { 11603aaa278SFrançois Revol return fSystemInfo.max_ports; 11703aaa278SFrançois Revol } 11803aaa278SFrançois Revol 11903aaa278SFrançois Revol 12003aaa278SFrançois Revol uint32 12118d3e65eSAxel Dörfler SystemInfo::UsedThreads() const 12218d3e65eSAxel Dörfler { 12318d3e65eSAxel Dörfler return fSystemInfo.used_threads; 12418d3e65eSAxel Dörfler } 12518d3e65eSAxel Dörfler 12618d3e65eSAxel Dörfler 12718d3e65eSAxel Dörfler uint32 12818d3e65eSAxel Dörfler SystemInfo::MaxThreads() const 12918d3e65eSAxel Dörfler { 13018d3e65eSAxel Dörfler return fSystemInfo.max_threads; 13118d3e65eSAxel Dörfler } 13218d3e65eSAxel Dörfler 13318d3e65eSAxel Dörfler 13418d3e65eSAxel Dörfler uint32 13518d3e65eSAxel Dörfler SystemInfo::UsedTeams() const 13618d3e65eSAxel Dörfler { 13718d3e65eSAxel Dörfler return fSystemInfo.used_teams; 13818d3e65eSAxel Dörfler } 13918d3e65eSAxel Dörfler 14018d3e65eSAxel Dörfler 14118d3e65eSAxel Dörfler uint32 14218d3e65eSAxel Dörfler SystemInfo::MaxTeams() const 14318d3e65eSAxel Dörfler { 14418d3e65eSAxel Dörfler return fSystemInfo.max_teams; 14518d3e65eSAxel Dörfler } 1463a4a2141SAxel Dörfler 1473a4a2141SAxel Dörfler 1483a4a2141SAxel Dörfler void 1493a4a2141SAxel Dörfler SystemInfo::_RetrieveNetwork() 1503a4a2141SAxel Dörfler { 1513a4a2141SAxel Dörfler if (fRetrievedNetwork) 1523a4a2141SAxel Dörfler return; 1533a4a2141SAxel Dörfler 1543a4a2141SAxel Dörfler fBytesReceived = 0; 1553a4a2141SAxel Dörfler fBytesSent = 0; 1563a4a2141SAxel Dörfler fRetrievedNetwork = true; 1573a4a2141SAxel Dörfler 158*b250dfdfSAxel Dörfler BNetworkRoster& roster = BNetworkRoster::Default(); 1593a4a2141SAxel Dörfler 160*b250dfdfSAxel Dörfler BNetworkInterface interface; 161*b250dfdfSAxel Dörfler uint32 cookie = 0; 162*b250dfdfSAxel Dörfler while (roster.GetNextInterface(&cookie, interface) == B_OK) { 163*b250dfdfSAxel Dörfler ifreq_stats stats; 164*b250dfdfSAxel Dörfler if (interface.GetStats(stats) == B_OK) { 165*b250dfdfSAxel Dörfler fBytesReceived += stats.receive.bytes; 166*b250dfdfSAxel Dörfler fBytesSent += stats.send.bytes; 1673a4a2141SAxel Dörfler } 1683a4a2141SAxel Dörfler } 1693a4a2141SAxel Dörfler } 1703a4a2141SAxel Dörfler 1713a4a2141SAxel Dörfler 1723a4a2141SAxel Dörfler uint64 1733a4a2141SAxel Dörfler SystemInfo::NetworkReceived() 1743a4a2141SAxel Dörfler { 1753a4a2141SAxel Dörfler _RetrieveNetwork(); 1763a4a2141SAxel Dörfler return fBytesReceived; 1773a4a2141SAxel Dörfler } 1783a4a2141SAxel Dörfler 1793a4a2141SAxel Dörfler 1803a4a2141SAxel Dörfler uint64 1813a4a2141SAxel Dörfler SystemInfo::NetworkSent() 1823a4a2141SAxel Dörfler { 1833a4a2141SAxel Dörfler _RetrieveNetwork(); 1843a4a2141SAxel Dörfler return fBytesSent; 1853a4a2141SAxel Dörfler } 186e034d18fSFrançois Revol 187e034d18fSFrançois Revol 188e034d18fSFrançois Revol uint32 189e034d18fSFrançois Revol SystemInfo::UsedRunningApps() const 190e034d18fSFrançois Revol { 191e034d18fSFrançois Revol return fRunningApps; 192e034d18fSFrançois Revol } 193e034d18fSFrançois Revol 194e034d18fSFrançois Revol 195e034d18fSFrançois Revol uint32 196e034d18fSFrançois Revol SystemInfo::MaxRunningApps() const 197e034d18fSFrançois Revol { 198e034d18fSFrançois Revol return fSystemInfo.max_teams; 199e034d18fSFrançois Revol } 200e034d18fSFrançois Revol 201e034d18fSFrançois Revol 202e034d18fSFrançois Revol uint32 203e034d18fSFrançois Revol SystemInfo::ClipboardSize() const 204e034d18fSFrançois Revol { 205e034d18fSFrançois Revol return fClipboardSize; 206e034d18fSFrançois Revol } 207e034d18fSFrançois Revol 208e034d18fSFrançois Revol 209e034d18fSFrançois Revol uint32 210e034d18fSFrançois Revol SystemInfo::ClipboardTextSize() const 211e034d18fSFrançois Revol { 212e034d18fSFrançois Revol return fClipboardTextSize; 213e034d18fSFrançois Revol } 214e034d18fSFrançois Revol 215e034d18fSFrançois Revol 216dc1ffc79SFrançois Revol uint32 217dc1ffc79SFrançois Revol SystemInfo::MediaNodes() const 218dc1ffc79SFrançois Revol { 219dc1ffc79SFrançois Revol return fMediaNodes; 220dc1ffc79SFrançois Revol } 221dc1ffc79SFrançois Revol 222dc1ffc79SFrançois Revol 223dc1ffc79SFrançois Revol uint32 224dc1ffc79SFrançois Revol SystemInfo::MediaConnections() const 225dc1ffc79SFrançois Revol { 226dc1ffc79SFrançois Revol return fMediaConnections; 227dc1ffc79SFrançois Revol } 228dc1ffc79SFrançois Revol 229dc1ffc79SFrançois Revol 230dc1ffc79SFrançois Revol uint32 231dc1ffc79SFrançois Revol SystemInfo::MediaBuffers() const 232dc1ffc79SFrançois Revol { 233dc1ffc79SFrançois Revol return fMediaBuffers; 234dc1ffc79SFrançois Revol } 235dc1ffc79SFrançois Revol 236dc1ffc79SFrançois Revol 237