diff --git a/src/apps/activitymonitor/DataSource.cpp b/src/apps/activitymonitor/DataSource.cpp index b167984270..1e1804350d 100644 --- a/src/apps/activitymonitor/DataSource.cpp +++ b/src/apps/activitymonitor/DataSource.cpp @@ -18,15 +18,17 @@ const DataSource* kSources[] = { new UsedMemoryDataSource(), new CachedMemoryDataSource(), + new SwapSpaceDataSource(), + new PageFaultsDataSource(), + new CPUUsageDataSource(), + new CPUCombinedUsageDataSource(), + new NetworkUsageDataSource(true), + new NetworkUsageDataSource(false), new SemaphoresDataSource(), new PortsDataSource(), new ThreadsDataSource(), new TeamsDataSource(), new RunningAppsDataSource(), - new CPUUsageDataSource(), - new CPUCombinedUsageDataSource(), - new NetworkUsageDataSource(true), - new NetworkUsageDataSource(false), new ClipboardSizeDataSource(false), new ClipboardSizeDataSource(true), new MediaNodesDataSource() @@ -375,6 +377,51 @@ CachedMemoryDataSource::Primary() const // #pragma mark - +SwapSpaceDataSource::SwapSpaceDataSource() +{ + SystemInfo info; + + fColor = (rgb_color){0, 120, 0}; + fMaximum = info.MaxSwapSpace(); +} + + +SwapSpaceDataSource::~SwapSpaceDataSource() +{ +} + + +DataSource* +SwapSpaceDataSource::Copy() const +{ + return new SwapSpaceDataSource(*this); +} + + +int64 +SwapSpaceDataSource::NextValue(SystemInfo& info) +{ + return info.UsedSwapSpace(); +} + + +const char* +SwapSpaceDataSource::Label() const +{ + return "Swap Space"; +} + + +bool +SwapSpaceDataSource::Primary() const +{ + return true; +} + + +// #pragma mark - + + SemaphoresDataSource::SemaphoresDataSource() { SystemInfo info; @@ -844,6 +891,97 @@ CPUCombinedUsageDataSource::Primary() const // #pragma mark - +PageFaultsDataSource::PageFaultsDataSource() + : + fPreviousFaults(0), + fPreviousTime(0) +{ + SystemInfo info; + NextValue(info); + + fMinimum = 0; + fMaximum = 1000000000LL; + + fColor = (rgb_color){200, 0, 150, 0}; +} + + +PageFaultsDataSource::PageFaultsDataSource(const PageFaultsDataSource& other) + : DataSource(other) +{ + fPreviousFaults = other.fPreviousFaults; + fPreviousTime = other.fPreviousTime; +} + + +PageFaultsDataSource::~PageFaultsDataSource() +{ +} + + +DataSource* +PageFaultsDataSource::Copy() const +{ + return new PageFaultsDataSource(*this); +} + + +void +PageFaultsDataSource::Print(BString& text, int64 value) const +{ + char buffer[32]; + snprintf(buffer, sizeof(buffer), "%.1f faults/s", value / 1024.0); + + text = buffer; +} + + +int64 +PageFaultsDataSource::NextValue(SystemInfo& info) +{ + uint64 faults = info.PageFaults(); + + int64 faultsPerSecond = uint64(1024 * double(faults - fPreviousFaults) + / (info.Time() - fPreviousTime) * 1000000.0); + + fPreviousFaults = faults; + fPreviousTime = info.Time(); + + return faultsPerSecond; +} + + +const char* +PageFaultsDataSource::Label() const +{ + return "Page Faults"; +} + + +const char* +PageFaultsDataSource::Name() const +{ + return "Page Faults"; +} + + +bool +PageFaultsDataSource::AdaptiveScale() const +{ + return true; +} + + +bool +PageFaultsDataSource::Primary() const +{ + return false; +} + + +// #pragma mark - + + NetworkUsageDataSource::NetworkUsageDataSource(bool in) : fIn(in), diff --git a/src/apps/activitymonitor/DataSource.h b/src/apps/activitymonitor/DataSource.h index 777032f131..bdef9b4dc7 100644 --- a/src/apps/activitymonitor/DataSource.h +++ b/src/apps/activitymonitor/DataSource.h @@ -98,6 +98,19 @@ public: }; +class SwapSpaceDataSource : public MemoryDataSource { +public: + SwapSpaceDataSource(); + virtual ~SwapSpaceDataSource(); + + virtual DataSource* Copy() const; + + virtual int64 NextValue(SystemInfo& info); + virtual const char* Label() const; + virtual bool Primary() const; +}; + + class SemaphoresDataSource : public DataSource { public: SemaphoresDataSource(); @@ -216,6 +229,29 @@ private: }; +class PageFaultsDataSource : public DataSource { +public: + PageFaultsDataSource(); + PageFaultsDataSource( + const PageFaultsDataSource& other); + virtual ~PageFaultsDataSource(); + + virtual DataSource* Copy() const; + + virtual void Print(BString& text, int64 value) const; + virtual int64 NextValue(SystemInfo& info); + + virtual const char* Name() const; + virtual const char* Label() const; + virtual bool AdaptiveScale() const; + virtual bool Primary() const; + +private: + uint32 fPreviousFaults; + bigtime_t fPreviousTime; +}; + + class NetworkUsageDataSource : public DataSource { public: NetworkUsageDataSource(bool in); diff --git a/src/apps/activitymonitor/Jamfile b/src/apps/activitymonitor/Jamfile index 46dc8a56a4..8ba7fd498a 100644 --- a/src/apps/activitymonitor/Jamfile +++ b/src/apps/activitymonitor/Jamfile @@ -3,7 +3,7 @@ SubDir HAIKU_TOP src apps activitymonitor ; # XXX: Temporary only SetSubDirSupportedPlatformsBeOSCompatible ; -UsePrivateHeaders shared ; +UsePrivateHeaders shared system ; Application ActivityMonitor : ActivityMonitor.cpp diff --git a/src/apps/activitymonitor/SystemInfo.cpp b/src/apps/activitymonitor/SystemInfo.cpp index 4ded447052..0f32ac3b6b 100644 --- a/src/apps/activitymonitor/SystemInfo.cpp +++ b/src/apps/activitymonitor/SystemInfo.cpp @@ -27,6 +27,8 @@ SystemInfo::SystemInfo(SystemInfoHandler* handler) fMediaBuffers(0) { get_system_info(&fSystemInfo); + get_system_info_etc(B_MEMORY_INFO, &fMemoryInfo, + sizeof(system_memory_info)); if (handler != NULL) { fRunningApps = handler->RunningApps(); @@ -69,6 +71,27 @@ SystemInfo::MaxMemory() const } +uint32 +SystemInfo::PageFaults() const +{ + return fMemoryInfo.page_faults; +} + + +uint64 +SystemInfo::UsedSwapSpace() const +{ + return fMemoryInfo.max_swap_space - fMemoryInfo.free_swap_space; +} + + +uint64 +SystemInfo::MaxSwapSpace() const +{ + return fMemoryInfo.max_swap_space; +} + + uint32 SystemInfo::UsedSemaphores() const { diff --git a/src/apps/activitymonitor/SystemInfo.h b/src/apps/activitymonitor/SystemInfo.h index 2496ebc83b..2bee16c708 100644 --- a/src/apps/activitymonitor/SystemInfo.h +++ b/src/apps/activitymonitor/SystemInfo.h @@ -8,6 +8,9 @@ #include +#include + + class SystemInfoHandler; @@ -20,6 +23,11 @@ public: uint64 UsedMemory() const; uint64 MaxMemory() const; + uint32 PageFaults() const; + + uint64 MaxSwapSpace() const; + uint64 UsedSwapSpace() const; + uint32 UsedSemaphores() const; uint32 MaxSemaphores() const; @@ -53,6 +61,7 @@ private: void _RetrieveNetwork(); system_info fSystemInfo; + system_memory_info fMemoryInfo; bigtime_t fTime; bool fRetrievedNetwork; uint64 fBytesReceived;