xref: /haiku/src/apps/activitymonitor/SystemInfo.cpp (revision d0f2d8282f3f59a1af7fe2d340d2af0cb36a9b20)
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