From aa194488759d71f9abf248e0c07a719b01e9f70b Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Mon, 30 Apr 2012 21:56:30 -0400 Subject: [PATCH] Make memory menu items 64-bit safe. Redo the precision levels of various calculations in the memory bar items so they don't overflow on systems with > 4GB of RAM. Previously one could see fun results like the kernel using negative amounts of memory on such systems. --- .../KernelMemoryBarMenuItem.cpp | 14 +++--- .../KernelMemoryBarMenuItem.h | 36 +++++++-------- .../processcontroller/MemoryBarMenuItem.cpp | 10 ++--- .../processcontroller/MemoryBarMenuItem.h | 44 +++++++++---------- 4 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/apps/processcontroller/KernelMemoryBarMenuItem.cpp b/src/apps/processcontroller/KernelMemoryBarMenuItem.cpp index 4a8cdbae26..ebe364b785 100644 --- a/src/apps/processcontroller/KernelMemoryBarMenuItem.cpp +++ b/src/apps/processcontroller/KernelMemoryBarMenuItem.cpp @@ -39,9 +39,9 @@ KernelMemoryBarMenuItem::KernelMemoryBarMenuItem(system_info& systemInfo) fLastSum = -1; fGrenze1 = -1; fGrenze2 = -1; - fPhysicalMemory = float(int(systemInfo.max_pages * B_PAGE_SIZE / 1024)); - fCommittedMemory = float(int(systemInfo.used_pages * B_PAGE_SIZE / 1024)); - fCachedMemory = float(int(systemInfo.cached_pages * B_PAGE_SIZE / 1024)); + fPhysicalMemory = systemInfo.max_pages * B_PAGE_SIZE / 1024LL; + fCommittedMemory = systemInfo.used_pages * B_PAGE_SIZE / 1024LL; + fCachedMemory = systemInfo.cached_pages * B_PAGE_SIZE / 1024LL; } @@ -55,8 +55,8 @@ KernelMemoryBarMenuItem::DrawContent() void -KernelMemoryBarMenuItem::UpdateSituation(float committedMemory, - float cachedMemory) +KernelMemoryBarMenuItem::UpdateSituation(int64 committedMemory, + int64 cachedMemory) { fCommittedMemory = committedMemory; fCachedMemory = cachedMemory; @@ -87,9 +87,9 @@ KernelMemoryBarMenuItem::DrawBar(bool force) cadre.InsetBy(1, 1); BRect r = cadre; - float grenze1 = cadre.left + (cadre.right - cadre.left) + double grenze1 = cadre.left + (cadre.right - cadre.left) * fCachedMemory / fPhysicalMemory; - float grenze2 = cadre.left + (cadre.right - cadre.left) + double grenze2 = cadre.left + (cadre.right - cadre.left) * fCommittedMemory / fPhysicalMemory; if (grenze1 > cadre.right) grenze1 = cadre.right; diff --git a/src/apps/processcontroller/KernelMemoryBarMenuItem.h b/src/apps/processcontroller/KernelMemoryBarMenuItem.h index a6705a1a3c..f518f8ccf5 100644 --- a/src/apps/processcontroller/KernelMemoryBarMenuItem.h +++ b/src/apps/processcontroller/KernelMemoryBarMenuItem.h @@ -1,20 +1,20 @@ /* ProcessController @ 2000, Georges-Edouard Berenger, All Rights Reserved. - Copyright (C) 2004 beunited.org + Copyright (C) 2004 beunited.org - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _KERNEL_MEMORY_BAR_MENU_ITEM_H_ #define _KERNEL_MEMORY_BAR_MENU_ITEM_H_ @@ -30,15 +30,15 @@ class KernelMemoryBarMenuItem : public BMenuItem { virtual void GetContentSize(float* _width, float* _height); void DrawBar(bool force); - void UpdateSituation(float committedMemory, float fCachedMemory); + void UpdateSituation(int64 committedMemory, int64 fCachedMemory); private: - float fCachedMemory; - float fPhysicalMemory; - float fCommittedMemory; + int64 fCachedMemory; + int64 fPhysicalMemory; + int64 fCommittedMemory; double fLastSum; - float fGrenze1; - float fGrenze2; + double fGrenze1; + double fGrenze2; }; #endif // _KERNEL_MEMORY_BAR_MENU_ITEM_H_ diff --git a/src/apps/processcontroller/MemoryBarMenuItem.cpp b/src/apps/processcontroller/MemoryBarMenuItem.cpp index 7c0af03b0e..c51cd750be 100644 --- a/src/apps/processcontroller/MemoryBarMenuItem.cpp +++ b/src/apps/processcontroller/MemoryBarMenuItem.cpp @@ -135,8 +135,8 @@ MemoryBarMenuItem::DrawBar(bool force) rect.InsetBy(1, 1); BRect r = rect; - float grenze1 = rect.left + (rect.right - rect.left) * float(fWriteMemory) / fCommitedMemory; - float grenze2 = rect.left + (rect.right - rect.left) * float(fAllMemory) / fCommitedMemory; + double grenze1 = rect.left + (rect.right - rect.left) * float(fWriteMemory) / fCommitedMemory; + double grenze2 = rect.left + (rect.right - rect.left) * float(fAllMemory) / fCommitedMemory; if (grenze1 > rect.right) grenze1 = rect.right; if (grenze2 > rect.right) @@ -234,7 +234,7 @@ MemoryBarMenuItem::GetContentSize(float* _width, float* _height) int -MemoryBarMenuItem::UpdateSituation(int commitedMemory) +MemoryBarMenuItem::UpdateSituation(int64 commitedMemory) { fCommitedMemory = commitedMemory; BarUpdate(); @@ -247,8 +247,8 @@ MemoryBarMenuItem::BarUpdate() { area_info areaInfo; int32 cookie = 0; - size_t lram_size = 0; - size_t lwram_size = 0; + int64 lram_size = 0; + int64 lwram_size = 0; bool exists = false; while (get_next_area_info(fTeamID, &cookie, &areaInfo) == B_OK) { diff --git a/src/apps/processcontroller/MemoryBarMenuItem.h b/src/apps/processcontroller/MemoryBarMenuItem.h index af8c6b3dfc..e254b1fc50 100644 --- a/src/apps/processcontroller/MemoryBarMenuItem.h +++ b/src/apps/processcontroller/MemoryBarMenuItem.h @@ -1,20 +1,20 @@ /* ProcessController © 2000, Georges-Edouard Berenger, All Rights Reserved. - Copyright (C) 2004 beunited.org + Copyright (C) 2004 beunited.org - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _MEMORY_BAR_MENU_ITEM_H_ #define _MEMORY_BAR_MENU_ITEM_H_ @@ -36,23 +36,23 @@ class MemoryBarMenuItem : public BMenuItem { void DrawIcon(); void DrawBar(bool force); - int UpdateSituation(int commitedMemory); + int UpdateSituation(int64 commitedMemory); void BarUpdate(); void Init(); void Reset(char* name, team_id team, BBitmap* icon, bool deleteIcon); private: - int fPhysicalMemory; - int fCommitedMemory; - int fWriteMemory; - int fAllMemory; - int fLastCommited; - int fLastWrite; - int fLastAll; + int64 fPhysicalMemory; + int64 fCommitedMemory; + int64 fWriteMemory; + int64 fAllMemory; + int64 fLastCommited; + int64 fLastWrite; + int64 fLastAll; team_id fTeamID; BBitmap* fIcon; - float fGrenze1; - float fGrenze2; + double fGrenze1; + double fGrenze2; bool fDeleteIcon; };