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