118d3e65eSAxel Dörfler /*
2b250dfdfSAxel 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
9b250dfdfSAxel Dörfler #include <NetworkInterface.h>
10b250dfdfSAxel Dörfler #include <NetworkRoster.h>
11b250dfdfSAxel Dörfler
12b250dfdfSAxel Dörfler #include "SystemInfoHandler.h"
133a4a2141SAxel Dörfler
1418d3e65eSAxel Dörfler
SystemInfo(SystemInfoHandler * handler)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);
271bc7045fSPawel Dziepak fCPUInfos = new cpu_info[fSystemInfo.cpu_count];
281bc7045fSPawel Dziepak get_cpu_info(0, fSystemInfo.cpu_count, fCPUInfos);
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
~SystemInfo()4118d3e65eSAxel Dörfler SystemInfo::~SystemInfo()
4218d3e65eSAxel Dörfler {
431bc7045fSPawel Dziepak delete[] fCPUInfos;
4418d3e65eSAxel Dörfler }
4518d3e65eSAxel Dörfler
4618d3e65eSAxel Dörfler
4718d3e65eSAxel Dörfler uint64
CachedMemory() const4818d3e65eSAxel Dörfler SystemInfo::CachedMemory() const
4918d3e65eSAxel Dörfler {
50cbd4bc95SFrançois Revol #ifdef __HAIKU__
51*d02aaee1SPawel Dziepak return fSystemInfo.cached_pages * B_PAGE_SIZE;
52cbd4bc95SFrançois Revol #else
53cbd4bc95SFrançois Revol return 0LL;
54cbd4bc95SFrançois Revol #endif
5518d3e65eSAxel Dörfler }
5618d3e65eSAxel Dörfler
5718d3e65eSAxel Dörfler
5818d3e65eSAxel Dörfler uint64
BlockCacheMemory() const59*d02aaee1SPawel Dziepak SystemInfo::BlockCacheMemory() const
60*d02aaee1SPawel Dziepak {
61*d02aaee1SPawel Dziepak return fSystemInfo.block_cache_pages * B_PAGE_SIZE;
62*d02aaee1SPawel Dziepak }
63*d02aaee1SPawel Dziepak
64*d02aaee1SPawel Dziepak
65*d02aaee1SPawel Dziepak uint64
UsedMemory() const6618d3e65eSAxel Dörfler SystemInfo::UsedMemory() const
6718d3e65eSAxel Dörfler {
68*d02aaee1SPawel Dziepak return fSystemInfo.used_pages * B_PAGE_SIZE;
6918d3e65eSAxel Dörfler }
7018d3e65eSAxel Dörfler
7118d3e65eSAxel Dörfler
7218d3e65eSAxel Dörfler uint64
MaxMemory() const7318d3e65eSAxel Dörfler SystemInfo::MaxMemory() const
7418d3e65eSAxel Dörfler {
75*d02aaee1SPawel Dziepak return fSystemInfo.max_pages * B_PAGE_SIZE;
7618d3e65eSAxel Dörfler }
7718d3e65eSAxel Dörfler
7818d3e65eSAxel Dörfler
7918d3e65eSAxel Dörfler uint32
PageFaults() const80dc79961eSAxel Dörfler SystemInfo::PageFaults() const
81dc79961eSAxel Dörfler {
82*d02aaee1SPawel Dziepak return fSystemInfo.page_faults;
83dc79961eSAxel Dörfler }
84dc79961eSAxel Dörfler
85dc79961eSAxel Dörfler
86dc79961eSAxel Dörfler uint64
UsedSwapSpace() const87dc79961eSAxel Dörfler SystemInfo::UsedSwapSpace() const
88dc79961eSAxel Dörfler {
89*d02aaee1SPawel Dziepak return (fSystemInfo.max_swap_pages - fSystemInfo.free_swap_pages)
90*d02aaee1SPawel Dziepak * B_PAGE_SIZE;
91dc79961eSAxel Dörfler }
92dc79961eSAxel Dörfler
93dc79961eSAxel Dörfler
94dc79961eSAxel Dörfler uint64
MaxSwapSpace() const95dc79961eSAxel Dörfler SystemInfo::MaxSwapSpace() const
96dc79961eSAxel Dörfler {
97*d02aaee1SPawel Dziepak return fSystemInfo.max_swap_pages * B_PAGE_SIZE;
98dc79961eSAxel Dörfler }
99dc79961eSAxel Dörfler
100dc79961eSAxel Dörfler
101dc79961eSAxel Dörfler uint32
UsedSemaphores() const10203aaa278SFrançois Revol SystemInfo::UsedSemaphores() const
10303aaa278SFrançois Revol {
10403aaa278SFrançois Revol return fSystemInfo.used_sems;
10503aaa278SFrançois Revol }
10603aaa278SFrançois Revol
10703aaa278SFrançois Revol
10803aaa278SFrançois Revol uint32
MaxSemaphores() const10903aaa278SFrançois Revol SystemInfo::MaxSemaphores() const
11003aaa278SFrançois Revol {
11103aaa278SFrançois Revol return fSystemInfo.max_sems;
11203aaa278SFrançois Revol }
11303aaa278SFrançois Revol
11403aaa278SFrançois Revol
11503aaa278SFrançois Revol uint32
UsedPorts() const11603aaa278SFrançois Revol SystemInfo::UsedPorts() const
11703aaa278SFrançois Revol {
11803aaa278SFrançois Revol return fSystemInfo.used_ports;
11903aaa278SFrançois Revol }
12003aaa278SFrançois Revol
12103aaa278SFrançois Revol
12203aaa278SFrançois Revol uint32
MaxPorts() const12303aaa278SFrançois Revol SystemInfo::MaxPorts() const
12403aaa278SFrançois Revol {
12503aaa278SFrançois Revol return fSystemInfo.max_ports;
12603aaa278SFrançois Revol }
12703aaa278SFrançois Revol
12803aaa278SFrançois Revol
12903aaa278SFrançois Revol uint32
UsedThreads() const13018d3e65eSAxel Dörfler SystemInfo::UsedThreads() const
13118d3e65eSAxel Dörfler {
13218d3e65eSAxel Dörfler return fSystemInfo.used_threads;
13318d3e65eSAxel Dörfler }
13418d3e65eSAxel Dörfler
13518d3e65eSAxel Dörfler
13618d3e65eSAxel Dörfler uint32
MaxThreads() const13718d3e65eSAxel Dörfler SystemInfo::MaxThreads() const
13818d3e65eSAxel Dörfler {
13918d3e65eSAxel Dörfler return fSystemInfo.max_threads;
14018d3e65eSAxel Dörfler }
14118d3e65eSAxel Dörfler
14218d3e65eSAxel Dörfler
14318d3e65eSAxel Dörfler uint32
UsedTeams() const14418d3e65eSAxel Dörfler SystemInfo::UsedTeams() const
14518d3e65eSAxel Dörfler {
14618d3e65eSAxel Dörfler return fSystemInfo.used_teams;
14718d3e65eSAxel Dörfler }
14818d3e65eSAxel Dörfler
14918d3e65eSAxel Dörfler
15018d3e65eSAxel Dörfler uint32
MaxTeams() const15118d3e65eSAxel Dörfler SystemInfo::MaxTeams() const
15218d3e65eSAxel Dörfler {
15318d3e65eSAxel Dörfler return fSystemInfo.max_teams;
15418d3e65eSAxel Dörfler }
1553a4a2141SAxel Dörfler
1563a4a2141SAxel Dörfler
1573a4a2141SAxel Dörfler void
_RetrieveNetwork()1583a4a2141SAxel Dörfler SystemInfo::_RetrieveNetwork()
1593a4a2141SAxel Dörfler {
1603a4a2141SAxel Dörfler if (fRetrievedNetwork)
1613a4a2141SAxel Dörfler return;
1623a4a2141SAxel Dörfler
1633a4a2141SAxel Dörfler fBytesReceived = 0;
1643a4a2141SAxel Dörfler fBytesSent = 0;
1653a4a2141SAxel Dörfler fRetrievedNetwork = true;
1663a4a2141SAxel Dörfler
167b250dfdfSAxel Dörfler BNetworkRoster& roster = BNetworkRoster::Default();
1683a4a2141SAxel Dörfler
169b250dfdfSAxel Dörfler BNetworkInterface interface;
170b250dfdfSAxel Dörfler uint32 cookie = 0;
171b250dfdfSAxel Dörfler while (roster.GetNextInterface(&cookie, interface) == B_OK) {
172b250dfdfSAxel Dörfler ifreq_stats stats;
173b250dfdfSAxel Dörfler if (interface.GetStats(stats) == B_OK) {
174b250dfdfSAxel Dörfler fBytesReceived += stats.receive.bytes;
175b250dfdfSAxel Dörfler fBytesSent += stats.send.bytes;
1763a4a2141SAxel Dörfler }
1773a4a2141SAxel Dörfler }
1783a4a2141SAxel Dörfler }
1793a4a2141SAxel Dörfler
1803a4a2141SAxel Dörfler
1813a4a2141SAxel Dörfler uint64
NetworkReceived()1823a4a2141SAxel Dörfler SystemInfo::NetworkReceived()
1833a4a2141SAxel Dörfler {
1843a4a2141SAxel Dörfler _RetrieveNetwork();
1853a4a2141SAxel Dörfler return fBytesReceived;
1863a4a2141SAxel Dörfler }
1873a4a2141SAxel Dörfler
1883a4a2141SAxel Dörfler
1893a4a2141SAxel Dörfler uint64
NetworkSent()1903a4a2141SAxel Dörfler SystemInfo::NetworkSent()
1913a4a2141SAxel Dörfler {
1923a4a2141SAxel Dörfler _RetrieveNetwork();
1933a4a2141SAxel Dörfler return fBytesSent;
1943a4a2141SAxel Dörfler }
195e034d18fSFrançois Revol
196e034d18fSFrançois Revol
197e034d18fSFrançois Revol uint32
UsedRunningApps() const198e034d18fSFrançois Revol SystemInfo::UsedRunningApps() const
199e034d18fSFrançois Revol {
200e034d18fSFrançois Revol return fRunningApps;
201e034d18fSFrançois Revol }
202e034d18fSFrançois Revol
203e034d18fSFrançois Revol
204e034d18fSFrançois Revol uint32
MaxRunningApps() const205e034d18fSFrançois Revol SystemInfo::MaxRunningApps() const
206e034d18fSFrançois Revol {
207e034d18fSFrançois Revol return fSystemInfo.max_teams;
208e034d18fSFrançois Revol }
209e034d18fSFrançois Revol
210e034d18fSFrançois Revol
211e034d18fSFrançois Revol uint32
ClipboardSize() const212e034d18fSFrançois Revol SystemInfo::ClipboardSize() const
213e034d18fSFrançois Revol {
214e034d18fSFrançois Revol return fClipboardSize;
215e034d18fSFrançois Revol }
216e034d18fSFrançois Revol
217e034d18fSFrançois Revol
218e034d18fSFrançois Revol uint32
ClipboardTextSize() const219e034d18fSFrançois Revol SystemInfo::ClipboardTextSize() const
220e034d18fSFrançois Revol {
221e034d18fSFrançois Revol return fClipboardTextSize;
222e034d18fSFrançois Revol }
223e034d18fSFrançois Revol
224e034d18fSFrançois Revol
225dc1ffc79SFrançois Revol uint32
MediaNodes() const226dc1ffc79SFrançois Revol SystemInfo::MediaNodes() const
227dc1ffc79SFrançois Revol {
228dc1ffc79SFrançois Revol return fMediaNodes;
229dc1ffc79SFrançois Revol }
230dc1ffc79SFrançois Revol
231dc1ffc79SFrançois Revol
232dc1ffc79SFrançois Revol uint32
MediaConnections() const233dc1ffc79SFrançois Revol SystemInfo::MediaConnections() const
234dc1ffc79SFrançois Revol {
235dc1ffc79SFrançois Revol return fMediaConnections;
236dc1ffc79SFrançois Revol }
237dc1ffc79SFrançois Revol
238dc1ffc79SFrançois Revol
239dc1ffc79SFrançois Revol uint32
MediaBuffers() const240dc1ffc79SFrançois Revol SystemInfo::MediaBuffers() const
241dc1ffc79SFrançois Revol {
242dc1ffc79SFrançois Revol return fMediaBuffers;
243dc1ffc79SFrançois Revol }
244dc1ffc79SFrançois Revol
245dc1ffc79SFrançois Revol
246