From: <ni...@us...> - 2006-08-30 19:35:04
|
Revision: 5451 http://svn.sourceforge.net/jmol/?rev=5451&view=rev Author: nicove Date: 2006-08-30 12:34:55 -0700 (Wed, 30 Aug 2006) Log Message: ----------- Reapplying r5098, r5099: popup now shows memory statistics & cpu count Modified Paths: -------------- branches/v10_9/Jmol/src/org/jmol/popup/JmolPopup.java branches/v10_9/Jmol/src/org/jmol/popup/JmolPopupAwt.java branches/v10_9/Jmol/src/org/jmol/popup/JmolPopupSwing.java Modified: branches/v10_9/Jmol/src/org/jmol/popup/JmolPopup.java =================================================================== --- branches/v10_9/Jmol/src/org/jmol/popup/JmolPopup.java 2006-08-30 18:24:01 UTC (rev 5450) +++ branches/v10_9/Jmol/src/org/jmol/popup/JmolPopup.java 2006-08-30 19:34:55 UTC (rev 5451) @@ -42,6 +42,7 @@ Object elementsComputedMenu; Object aaresiduesComputedMenu; Object aboutMenu; + int aboutMenuBaseCount; Object consoleMenu; Object modelSetInfoMenu; String nullModelSetName; @@ -62,7 +63,6 @@ void build(Object popupMenu) { addMenuItems("popupMenu", popupMenu, new PopupResourceBundle()); - addVersionAndDate(popupMenu); if (! viewer.isJvm12orGreater() && (consoleMenu != null)) enableMenu(consoleMenu, false); } @@ -129,17 +129,44 @@ } } - private void addVersionAndDate(Object popupMenu) { - if (aboutMenu != null) { - addMenuSeparator(aboutMenu); - addMenuItem(aboutMenu, "Jmol " + JmolConstants.version); - addMenuItem(aboutMenu, JmolConstants.date); - addMenuItem(aboutMenu, viewer.getOperatingSystemName()); - addMenuItem(aboutMenu, viewer.getJavaVendor()); - addMenuItem(aboutMenu, viewer.getJavaVersion()); - } + private void updateAboutSubmenu() { + if (aboutMenu == null) + return; + for (int i = getMenuItemCount(aboutMenu); --i >= aboutMenuBaseCount; ) + removeMenuItem(aboutMenu, i); + addMenuSeparator(aboutMenu); + addMenuItem(aboutMenu, "Jmol " + JmolConstants.version); + addMenuItem(aboutMenu, JmolConstants.date); + addMenuItem(aboutMenu, viewer.getOperatingSystemName()); + addMenuItem(aboutMenu, viewer.getJavaVendor()); + addMenuItem(aboutMenu, viewer.getJavaVersion()); + addMenuSeparator(aboutMenu); + addMenuItem(aboutMenu, "Java memory usage"); + Runtime runtime = Runtime.getRuntime(); + runtime.gc(); + long mbTotal = convertToMegabytes(runtime.totalMemory()); + long mbFree = convertToMegabytes(runtime.freeMemory()); + long mbMax = convertToMegabytes(maxMemoryForNewerJvm()); + addMenuItem(aboutMenu, "" + mbTotal + " Mb total"); + addMenuItem(aboutMenu, "" + mbFree + " Mb free"); + if (mbMax > 0) + addMenuItem(aboutMenu, "" + mbMax + " Mb maximum"); + else + addMenuItem(aboutMenu, "unknown maximum"); + int availableProcessors = availableProcessorsForNewerJvm(); + if (availableProcessors > 0) + addMenuItem(aboutMenu, "" + availableProcessors + + (availableProcessors == 1 ? " processor" : " processors")); + else + addMenuItem(aboutMenu, "unknown processor count"); } + private long convertToMegabytes(long num) { + if (num <= Long.MAX_VALUE - 512*1024) + num += 512*1024; + return num / (1024*1024); + } + private void addMenuItems(String key, Object menu, PopupResourceBundle popupResourceBundle) { String value = popupResourceBundle.getStructure(key); @@ -171,6 +198,8 @@ enableMenu(modelSetInfoMenu, false); } addMenuSubMenu(menu, subMenu); + if (subMenu == aboutMenu) + aboutMenuBaseCount = getMenuItemCount(aboutMenu); } else if ("-".equals(item)) { addMenuSeparator(menu); } else if (item.endsWith("Checkbox")) { @@ -206,9 +235,14 @@ return addMenuItem(menuItem, entry, null); } + public void show(int x, int y) { + updateAboutSubmenu(); + showPopup(x, y); + } + //////////////////////////////////////////////////////////////// - abstract public void show(int x, int y); + abstract void showPopup(int x, int y); abstract void addMenuSeparator(Object menu); @@ -228,5 +262,20 @@ abstract void removeAll(Object menu); + abstract int getMenuItemCount(Object menu); + + abstract void removeMenuItem(Object menu, int index); + + long maxMemoryForNewerJvm() { + // this method is overridden in JmolPopupSwing for newer Javas + // JmolPopupAwt does not implement this + return 0; + } + + int availableProcessorsForNewerJvm() { + // this method is overridden in JmolPopupSwing for newer Javas + // JmolPopupAwt does not implement this + return 0; + } } Modified: branches/v10_9/Jmol/src/org/jmol/popup/JmolPopupAwt.java =================================================================== --- branches/v10_9/Jmol/src/org/jmol/popup/JmolPopupAwt.java 2006-08-30 18:24:01 UTC (rev 5450) +++ branches/v10_9/Jmol/src/org/jmol/popup/JmolPopupAwt.java 2006-08-30 19:34:55 UTC (rev 5451) @@ -52,7 +52,7 @@ build(awtPopup); } - public void show(int x, int y) { + void showPopup(int x, int y) { for (Enumeration keys = htCheckbox.keys(); keys.hasMoreElements(); ) { String key = (String)keys.nextElement(); CheckboxMenuItem cbmi = (CheckboxMenuItem)htCheckbox.get(key); @@ -172,6 +172,14 @@ return new Menu("unrecognized ComputedMenu:" + key); } + int getMenuItemCount(Object menu) { + return ((Menu)menu).getItemCount(); + } + + void removeMenuItem(Object menu, int index) { + ((Menu)menu).remove(index); + } + void removeAll(Object menu) { ((Menu)menu).removeAll(); } Modified: branches/v10_9/Jmol/src/org/jmol/popup/JmolPopupSwing.java =================================================================== --- branches/v10_9/Jmol/src/org/jmol/popup/JmolPopupSwing.java 2006-08-30 18:24:01 UTC (rev 5450) +++ branches/v10_9/Jmol/src/org/jmol/popup/JmolPopupSwing.java 2006-08-30 19:34:55 UTC (rev 5451) @@ -47,7 +47,7 @@ build(swingPopup); } - public void show(int x, int y) { + void showPopup(int x, int y) { for (Enumeration keys = htCheckbox.keys(); keys.hasMoreElements(); ) { String key = (String)keys.nextElement(); JCheckBoxMenuItem jcbmi = (JCheckBoxMenuItem)htCheckbox.get(key); @@ -129,6 +129,14 @@ return new JMenu("unrecognized ComputedMenu:" + key); } + int getMenuItemCount(Object menu) { + return ((JMenu)menu).getItemCount(); + } + + void removeMenuItem(Object menu, int index) { + ((JMenu)menu).remove(index); + } + void removeAll(Object menu) { ((JMenu)menu).removeAll(); } @@ -137,5 +145,11 @@ ((JMenu)menu).setEnabled(enable); } + long maxMemoryForNewerJvm() { + return Runtime.getRuntime().maxMemory(); + } + int availableProcessorsForNewerJvm() { + return Runtime.getRuntime().availableProcessors(); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |